<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wangling</title>
	<atom:link href="http://wangling.me/feed/" rel="self" type="application/rss+xml" />
	<link>http://wangling.me</link>
	<description>I&#039;m Wang Ling. I&#039;m wangling you.</description>
	<lastBuildDate>Sat, 28 Jan 2012 13:48:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>韩有假，方有错</title>
		<link>http://wangling.me/2012/01/cold-square/</link>
		<comments>http://wangling.me/2012/01/cold-square/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 13:35:45 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[中文]]></category>

		<guid isPermaLink="false">http://wangling.me/?p=800</guid>
		<description><![CDATA[面对方舟子文的合理质疑，韩寒答非所问，其支持者更是不知所谓，用无理和无礼把明眼看客一波波赶往对方阵营。不知这无理和无礼之下，是否是回天无力？我秉持人性本善的无罪推论原则，给韩寒献策。]]></description>
			<content:encoded><![CDATA[<p>正如<a href="http://weibo.com/1182419921/y2QEY3DV6">路金波所言</a>：“只要有天空的地方，就有道理可讲。一个真正光明磊落的孩子，不畏惧任何。”</p>
<p>韩寒阵营倒是出个把“讲理”的啊！再怎么“光明磊落的孩子”，也经不住你们这样答非所问、不切重点、倒行逆施的“辩护”啊。韩寒一介文人（+车夫），不善用逻辑理据来辩论，又不幸摊上“猪”（借路金波的自称）一样的队友，面对方舟子文思不乱的进攻只会信誓旦旦的背书、舍理保义的袒护、毫无风度的谩骂，硬是生生的把不少理性看客逼到对方阵营。如果韩寒真有团队，建议尽快引进些理工科人才。</p>
<p>说回韩寒自己。事发后的一系列文章大失水准，全无章法，答非所问，无济于事。我现在深信他当年真的是文理偏科十分严重的孩子，以至于到现在都还没能找补回来。刚出炉的<a href="http://blog.sina.com.cn/s/blog_4701280b0102e0fm.html">《看着手稿真欢乐——附16岁写孔庆东文章一篇》</a>又是一篇偏离阵地的文章，唯一亮点是这段新材料：</p>
<blockquote><p>对方有一点质疑的很对，如果语文考40分，那么写文章一定不好。这点其实我比较认同。的确，我语文有一次考了四十分，但那一次纯粹是为了发泄情绪，胡乱答题，评价考题，甚至还批判试卷。如果100分满分，平时我的语文成绩一般都在85分到90分左右（早期是100分满分，后来是120分满分，作文每个人都要被扣掉几分），然后理科都是不及格。如果你果真阅读了不少课外书，语文考试除了默写和填空有难度以外，其他还是不难高分通过的。</p>
</blockquote>
<p>这料本身是有价值的。它说明韩寒语文一直都是好的，若真，可推翻方舟子的<a href="http://blog.sina.com.cn/s/blog_474068790102dx1q.html">部分论据</a>：</p>
<blockquote><p>为什么一个文学天才的语文成绩、作文成绩如此糟糕？写作才能在考试时一点也没有表现出来？</p>
<p>在没有外人监督、有可能代笔或作弊的情况下（例如投稿），韩寒的作品就能表现出高于一般人的文学水平，会被认为出自成年人之手；而在课堂上，在和别人一起参加考试时，他的写作才能神秘地消失了，作文甚至拖了他的分数。</p>
</blockquote>
<p>但同时，这也与其父韩仁均所著《儿子韩寒》中的描述“韩寒的语文成绩经常不及格”形成了矛盾，再次落人口实。别说是方舟子了，我都很好奇到底韩寒的语文是好还是不好？不好，现在却来说好，那就明显在给伪证了。好，为何原先宣称不好？刻意塑造“不学有术”的天才形象？那也是骗人，甚至是用扭曲的价值观在害人！那就该好好批批，不得还嘴！但这是另一个批判点，不是方舟子现在抓的这个。你们这样前后矛盾，自觉出具以往语文考试成绩吧，别等方舟子来提醒了。</p>
<p>此文再次体现了韩寒在这场辩论中的不得要领。对方质疑《书店》、《求医》不是少年的你所写，你说十六岁的你写了《眼中孔庆东》有什么用？何况《眼》和前两篇也不是一个路数的文章。你要弄清楚对方质疑的点是什么。</p>
<p><a href="http://blog.sina.com.cn/s/blog_474068790102dx2o.html">《书店》最大的疑点</a>不在于成熟老练的文风笔法，而在于一个中年人的视角和“恶趣味”不可思议的出现在一个十四五六岁的少年身上。文风笔法可以刻意模仿，但挑战生理规律这种事还是需要解释一下。可行的解释：1）这不是韩寒自己的经历，但是由韩寒书写出来的。当然，这也可被批为“假”，但写作文瞎编这种事，谁真拿来说事就真是“恶趣味”了。2）韩寒就是这么过度早熟。</p>
<p><span id="contradiction"><a href="http://blog.sina.com.cn/s/blog_474068790102dx40.html">《求医》最大的疑点</a>在于其中对外国长篇名著的熟练引用，与之前韩寒自称“唯中外名著不读”“直到现在，我还没读全过一本外国名著”互相矛盾。</span>可行的解释：韩寒以前的不读书论是骗人的，是装逼、装帅、装神童、装天才。如此，韩寒当挨批，不得还嘴，还应澄清、检讨于天下。这套不读书论、天才说毒害多少青少年啊！对此，<a href="http://blog.sina.com.cn/s/blog_4701280b0102e0eu.html">韩仁均的文章</a>已隐约有所透露：</p>
<blockquote><p>大家之所以觉得他能做很多的事情，精力很旺盛，是因为他把别人可能用来应酬和娱乐的时间都用在工作上。你们可能不知道吧，如果没有比赛和游戏，他几乎每天晚上的八点开始写作或者看书，一直到早上六点，连续十个小时都在书房里。所以他的博客大多都是凌晨发的。<em>虽然他口头上不承认，一直说他在玩，但这个就好像一个考试很好的学生喜欢说他在家里从来不复习一样。</em>没有想到，他的努力反而成为了他的过错。</p>
</blockquote>
<p>所以，韩寒必然有假。</p>
<p>同样，方舟子有错。</p>
<p>方舟子的错很好说明，他也应该很好承认，因为这是推理的错误，想必死硬理性派科学斗士不会抵赖。具体错误发生在<a href="http://blog.sina.com.cn/s/blog_474068790102dx40.html">《“天才”韩寒作品《求医》分析》</a>：</p>
<blockquote><p>《父与子》和《烟》都是屠格涅夫的长篇小说，俄国文学曾在韩仁均这一代知青中流行，却不是“80后”喜欢的。而且韩寒在回忆中小学生活的小传《第三个人》中明确说自己不读中外名著，特别是这类翻译过来的长篇小说：“我无书不看，只是有一个怪癖，唯中外名著不读。那时我就觉得好些特被人推崇的长篇小说文笔拖沓，太强调思想性，而且有的翻译得半生不熟，读了几本后就觉得是浪费时间。直到现在，我还没读全过一本外国名著。”但是在《求医》中却引用了屠格涅夫两部长篇小说中相关的细节，信手拈来，不仅读过这两部长篇小说，而且十分熟悉，<em>显然不可能是韩寒写的</em>。</p>
</blockquote>
<p>方舟子发现了韩寒的自相矛盾，但得出的结论有失偏颇。<a href="#contradiction">如前所述</a>，A（韩寒能够对屠格涅夫长篇小说进行熟练引用），与B（韩寒“唯中外名著不读”“直到现在，我还没读全过一本外国名著”）形成的矛盾，并不一定得出A为假—即韩寒没有能力对屠格涅夫长篇小说进行熟练引用—进而推出《求医》非韩寒所作，也可以得出B为假—即韩寒所谓的“唯中外名著不读”“直到现在，我还没读全过一本外国名著”是骗人的。方舟子完全不考虑B的可能性，急忙得出“显然不可能是韩寒写的”这样的结论，反映了他的心之所向。这样不严谨的推理，发生在身经百战、老谋深算的方舟子身上，是不应该的。可见，方舟子还是先入为主了，不够纯理性啊。</p>
<p>除此之外，我不记得方舟子有明显的纰漏。他不出口伤人，摆事实，讲道理，步步为营，可敬！</p>
<p>顺便提醒韩寒方面军，要反驳方舟子，最好反驳他的推理。反驳他的论据，当然也行，只是别忘了这些论据大多来自韩寒、韩寒他爸、韩寒的朋友们。</p>
<p>“泼粪”不好，夸大美化也不好。若真被泼了粪了，在清洗时，顺便把那虚华的彩妆也洗去，挺好。</p>
<div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2012%2F01%2Fcold-square%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2012%2F01%2Fcold-square%2F" data-text="韩有假，方有错: 面对方舟子文的合理质疑，韩寒答非所问，其支持者更是不知所谓，用无理和无礼把明眼看客一波波赶往对方阵营。不知这无理和无礼之下，是否是回天无力？我秉持人性本善的无罪推论原则，给韩寒献策。" data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2012%2F01%2Fcold-square%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'韩有假，方有错: 面对方舟子文的合理质疑，韩寒答非所问，其支持者更是不知所谓，用无理和无礼把明眼看客一波波赶往对方阵营。不知这无理和无礼之下，是否是回天无力？我秉持人性本善的无罪推论原则，给韩寒献策。', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2012/01/cold-square/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>欺诈 app 追杀记 — 迟到的战果</title>
		<link>http://wangling.me/2012/01/tracker-killer/</link>
		<comments>http://wangling.me/2012/01/tracker-killer/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 08:43:00 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[中文]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[App Store]]></category>

		<guid isPermaLink="false">http://wangling.me/?p=778</guid>
		<description><![CDATA[历时半载，龙抬头时，终斩获小妖一二，回顾一路艰辛，附 App Store 生存指南。作拜年礼，赠与各种有求、有爱、有魔之人。有求之人用以防身，有爱之人用以传播，有魔之人用以救赎。]]></description>
			<content:encoded><![CDATA[<p>不计之前在 Twitter 上的声讨，亦不计在 App Store 里的报告，仅从第一篇《<a href="http://wangling.me/2011/08/swindle-app-killer/">欺诈 app 追杀记</a>》算起，至今已过 5 个月。</p>
<p>年关，龙抬头时，祭出大杀器，终于斩获小妖一二：</p>
<ol>
<li>“<a href="http://itunes.apple.com/app/id438625047?mt=8">超级手机号码追踪器</a>”已经从 App Store 下架。</li>
<li>顺藤摸瓜出来的四个开发商中的一个 — <a href="http://itunes.apple.com/artist/goodcode/id331859333">GoodCode</a> — 已经从 App Store 消失。</li>
</ol>
<p>战果虽小，这一路追杀之艰辛还是值得回顾一下，也算年终对自己有个交代：</p>
<ol>
<li>很久很久以前，第一次在中国 App Store 首页十大榜单上注意到“超级手机号码追踪器”，当即识破其骗局，在 Twitter 上唾骂之。</li>
<li>很久以前，再次看到“超级手机号码追踪器”出现在十大榜单中，意识到 Apple 监管不力，骗子尝尽甜头用尽花招，受骗人数在不断增多，于是在 App Store “报告问题”，对部分引人注目的虚假好评“Report a Concern”（有谁知道在中国 App Store “Report a Concern” 有中文版的说法吗？）并再次在 Twitter 上声讨之，希望能让更多人知道、警惕。</li>
<li>2011年8月19日，“超级手机号码追踪器”又上十大了，我怒！决心铲除祸患，替天行道。于是撰文《<a href="http://wangling.me/2011/08/swindle-app-killer/">欺诈 app 追杀记</a>》详细揭露其骗局，揪出整个欺诈团伙，为受害者和有心一起除害的义士们提供几种维权途径，呼吁更多人加入，并厚着脸皮请 Twitter 上几个国产“果粉”大号帮忙扩散。</li>
<li>2011年8月20日，在 <a href="https://twitter.com/#!/apple4us">@apple4us</a> 的建议下给 appstorenotices@apple.com 写<a href="http://wangling.me/2011/08/mail-from-swindle-app-killer-to-app-store/">投诉信</a>反映这一情况。</li>
<li>几日后，不见回复，追加了一封，还是石沉大海。同时，还经由 <a href="https://twitter.com/#!/zuola">@zuola</a>、<a href="https://twitter.com/#!/POPOEVER">@POPOEVER</a> 帮忙把问题反映给 Apple 中国市场部，亦无反应。</li>
<li>2011年9月15日，“超级手机号码追踪器”又一次闪亮登陆十大榜单。同日，我还发现了<a href="http://wangling.me/2011/09/another-swindle-app-seller/">另一个欺诈 app 及其背后的团伙</a>。出离愤怒，又深感无力。再次撰文点评，并痛心疾首的批评了 Apple 的渎职：「你放任这些骗子在 App Store 上卖狗皮膏药，眼看惠顾你的用户上当受骗，难道你愿看到他们伤了心，对你失了信，离你而去？何况，那些不义之财你是抽了三成的，你真的希望大家说你“分赃”？”」此文传播到 Twitter 和新浪微博上得到一定的扩散和共鸣，但是没人真的动手跟进，上阵助力，于是很快又不了了之。</li>
<li>2011年12月5日，<a href="http://developer.apple.com/techtalk/">iOS 5 Tech Talk World Tour</a> 北京站，我刚回国，赶上参加。网上状告无门，那就当面反映。于是我牺牲了个把 session 的时间，跟 iTunes Connect Team 和 App Review Team 人员聊了这个事情。他们承认这些欺诈 app 和虚假好评违规，但说这事不属于他们管辖，告诉了我一个用 iTunes Connect 投诉的途径：iTunes Connect &ndash;> Contact Us &ndash;> App Store Questions &ndash;> Customer Reviews &ndash;> Specific Removal Request。我当场用此途径进行投诉。这是我此次 Tech Talk 之行的最大收获，无关 Tech。但是心里还是没底，毕竟又从“当面反映”转回到“网上告状”，参考前情，确无把握。</li>
<li>
<p>2012年1月7日，终于等来了首次回信：</p>
<div class="thumbnail"><a href="https://skitch.com/an00na/g43jm/itunesconnectfollowup"><img src="https://img.skitch.com/20120122-xgrpasmqg3nfrguimarr5cxusi.preview.jpg" alt="iTunesConnectFollowUp" /></a></div>
</p>
<p>&ldquo;submit <em>each</em> fraudulent report in a <em>separate</em> email. Be sure to include <em>screenshots</em> of the reviews.&rdquo; 要我一封 email 只报一个案，也就是说我要写好多封；还要我附上那些虚假好评的 screenshots。</p>
</li>
<li>2012年1月11日，收到 follow-up，说此案已转给相关 Apple teams：
<div class="thumbnail"><a href="https://skitch.com/an00na/g43ke/itunesconnectfollowup2"><img src="https://img.skitch.com/20120122-efmngm3mkuc7te3tqq3b6tbraa.preview.jpg" alt="iTunesConnectFollowUp2" /></a></div>
</li>
<li>2012年1月20日左右，我尝试打开“<a href="http://itunes.apple.com/app/id438625047?mt=8">超级手机号码追踪器</a>”页面时发现已经下架。</li>
</ol>
<p>这一路，真切体会了状告无门的无力感、邪恶盛行而不得抑制时的嚣张、正义不得伸张时的愤懑；也清楚认识到，“如果等着别人相助，此事大概会不了了之，届时只徒留一篇愤概文章。”</p>
<p>不过，这只是整个追杀战役中首场小小的胜利，路漫漫啊。十几个欺诈 app 只下架了一个，9 个开发商只关了一家。而且，几乎一模一样的骗局在不断继续上演 — 杀死了“超级手机号码追踪器”，还有“<a href="http://itunes.apple.com/cn/app//id435060395?mt=8">手机追踪器</a>”，“<a href="http://itunes.apple.com/cn/app/super-mobile-tracker/id446994503?l=en&amp;mt=8">超级手机追踪器</a>”，“<a href="http://itunes.apple.com/cn/app//id415236321?mt=8">手机追踪 电话追踪 定位器</a>”，“<a href="http://itunes.apple.com/cn/app//id434698951?mt=8">2011 中国移动手机追踪器</a>”，“<a href="http://itunes.apple.com/cn/app//id437815078?mt=8">A+ 手机追踪 手机定位 GPS</a>”……</p>
<p>追追追，丧尽天良的开发者，别追着钱跑了，回头去拾起早已掉落的良心吧。<br/><br />
追追追，好奇心过剩或有偷窥欲的小白用户，别瞎追了，这些都是骗子利用你的好奇心或偷窥欲骗你的。要定位自己的 iOS 设备，请用“<a href="http://itunes.apple.com/cn/app//id376101648?mt=8">查找我的 iPhone</a>”；要定位朋友的 iOS 设备，请“<a href="http://itunes.apple.com/cn/app//id466122094?mt=8">查找我的朋友</a>”。这两个都是 Apple 官方出品的免费 app，其功能不是普通第三方 app 能够实现的。<br/><br />
追追追，坏人这么多，我一个人追杀的过来吗？</p>
<hr />
<p>附《App Store 生存指南》：<br/><br />
欲购买不知名、非熟悉 app，请在电脑上用 iTunes 操作。因为你需要用多种方式看评论，在 iPhone 或 iPad 上无法完成。确实比较麻烦，但谁让咱们国家骗子多呢。</p>
<ol>
<li>“排序方法”选“最差评价”。</li>
<li>如果“当前版本”都是好评，点开“所有版本”看看。</li>
<li>如果还是好评居多，把“排序方法”切换到“最有帮助”，点开前两页那些有很多“顾客认为此评价有用”的好评的“评论人”，查看其“撰写的所以评价”。如果其中有人的好评是集中在几个开发商的 app 上，或有部分人的好评对象雷同，那这些好评就基本是造假的。</li>
</ol>
<div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2012%2F01%2Ftracker-killer%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2012%2F01%2Ftracker-killer%2F" data-text="欺诈 app 追杀记 — 迟到的战果: 历时半载，龙抬头时，终斩获小妖一二，回顾一路艰辛，附 App Store 生存指南。作拜年礼，赠与各种有求、有爱、有魔之人。有求之人用以防身，有爱之人用以传播，有魔之人用以救赎。" data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2012%2F01%2Ftracker-killer%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'欺诈 app 追杀记 — 迟到的战果: 历时半载，龙抬头时，终斩获小妖一二，回顾一路艰辛，附 App Store 生存指南。作拜年礼，赠与各种有求、有爱、有魔之人。有求之人用以防身，有爱之人用以传播，有魔之人用以救赎。', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2012/01/tracker-killer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>国产 Tapbots，零号呼叫壹号</title>
		<link>http://wangling.me/2011/11/0-calls-for-1/</link>
		<comments>http://wangling.me/2011/11/0-calls-for-1/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 08:21:38 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[中文]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[微博]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Voodo]]></category>

		<guid isPermaLink="false">http://wangling.me/?p=756</guid>
		<description><![CDATA[如果你爱 ，爱 graphics，追求 pixel perfect，想做顶级 app，听到呼叫请回答。从此以后，好用看我的，好看看你的。对 Tweetbot 有爱的也请入，有惊喜。]]></description>
			<content:encoded><![CDATA[<p><script src="http://wangling.me/safari/WeiboApp/scripts/prototype.js" language="JavaScript" type="text/javascript"></script><br />
<script src="http://wangling.me/safari/WeiboApp/scripts/qtp_poster.js" language="JavaScript" type="text/javascript"></script></p>
<link href="http://wangling.me/safari/WeiboApp/stylesheets/qtp_poster.css" rel="StyleSheet" type="text/css" />
<p><a href="http://tapbots.com/">Tapbots</a> 是这个星球上最酷的 iOS 开发组合。他们的 apps 极具风格，功能完善，细致入微，质感十足，有趣如玩具，优雅如艺术，强劲如 bot。</p>
<p>他们证明：一个 Top Developer (Paul) + 一个 Top Designer (Mark) + 将事情做到极致的态度 = 近乎完美的 apps</p>
<p>对于这样一个组合，我向往已久。</p>
<p>作为一个完美主义者，将事情做到极致的态度是与生俱来的。</p>
<p>经过近两年在 iOS 平台上的积累，渐入佳境，任何想法，只要平台支持，都能实现。由于不能展示代码，最好的途径是展示作品。</p>
<p><a href="http://iwonderphone.com/">Voodo</a> 是我的第一款产品，已在 App Store 贩卖近两年，获得过一些<a href="http://blog.iwonderphone.com/2011/07/11/new-and-noteworthy-in-japan/">成绩</a>，用户评价很高。</p>
<p>我善于立足于功能进行产品设计：贴心的交互方式、合理的功能布局、最优的操作流程。用，你会发现它们如此顺手；看，它们的确不算养眼。正因如此，我这个零号 Developer 才呼叫你这个壹号 Designer。从此以后，好用看我的，好看看你的。</p>
<p>XXX<sup><a href="http://wangling.me/2011/11/0-calls-for-1/#footnote_0_756" id="identifier_0_756" class="footnote-link footnote-identifier-link" title="待命名">1</a></sup> 是一款顶级微博客户端 app，正在开发中，功能基本完成。这将是你入伙后立马参与的产品。</p>
<p><a href="http://wangling.me/safari/WeiboApp/WeiboApp.mov" rel="qtposter"><br />
	<img src="http://wangling.me/safari/WeiboApp/WeiboApp.jpg" width="640" height="496" alt="WeiboApp"/><br />
</a></p>
<p>(如果你的浏览器无法播放上面视频的话，请在<a href="http://v.youku.com/v_show/id_XMzI0MDE0NjMy.html">优酷</a>观看。)</p>
<p>之所以开发这款产品，是因为：</p>
<ol>
<li>我们有各种各样的国产 Twitter，有一两个还很火，却没有一款很好的客户端 app。作为一个用户，我无法接受；作为一个习惯了精良 Twitter 客户端 app 的用户，我心生向往；作为一个开发者，我明白自力更生最行之有效；作为一个创业者，我认准这个市场大有可为。</li>
<li>自我验证。Tweetbot 不光是最优秀的 Twitter 客户端 app，而且是整个 App Store 里数一数二的，堪称艺术品。我想试试能不能做出一款同样品质的 app。事实证明，我可以。</li>
<li>展示才能。想要一个如此优秀的你，自然得先让你看到一个配得上你的我。</li>
</ol>
<p>在此，必须特别申明：我从 Tweetbot 上学习了很多，但我的目的不是抄袭它。最终产品会借鉴它的优秀之处，但不会使用它的 graphic 元素。事实上，我有自己的美好设想，只等你来一起实现。</p>
<p>如果，你喜爱 Apple 的产品，热爱 graphics，追求 pixel perfect，能够画出如 Tweetbot 这般细腻有质感的 UI，并且也有做顶级 app 的梦想，听到呼叫请回答。</p>
<p>联系方式：</p>
<ul>
<li>Email: <a href="&#x6d;&#x61;&#x69;&#108;&#116;&#111;&#58;&#97;&#x6e;&#x30;&#48;&#x6e;&#97;&#64;&#x67;&#x6d;&#x61;&#x69;&#108;&#46;&#x63;&#x6f;&#x6d;">&#x61;&#110;&#x30;&#x30;&#110;&#97;&#x40;&#x67;&#109;&#97;&#x69;&#108;&#x2e;&#x63;&#x6f;&#x6d;</a></li>
<li>Twitter: <a href="http://twitter.com/an0">an0</a></li>
<li>新浪微博：<a href="http://weibo.com/an00na">an00na</a></li>
</ul>
<hr />
<p>To Tapbots or anyone concerned:<br/><br />
I didn&#8217;t intend to rip off Tweetbot and I won&#8217;t. I see Tapbots as a role model and I studied and learned from their products. The development of this Weibo app is a self challenge to see whether I can make such beautiful things. My app as of now is just a demo to demonstrate what I can do as a developer. I used Tweetbot&#8217;s graphics because I couldn&#8217;t resist its beauty and also because I needed to see my app form gradually in a realistic way as a self motivataion. I won&#8217;t use any of graphics from Tweetbot in my final product. Actually, I have my own ideas about this app, and I&#8217;m here calling for my partner, my own designer, to make it true together with me. Thank you very much, Tapbot, for inspiring me!</p>
<div class="footnotes"><ol ><li id="footnote_0_756" class="footnote">待命名</li></ol></div><div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2011%2F11%2F0-calls-for-1%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2011%2F11%2F0-calls-for-1%2F" data-text="国产 Tapbots，零号呼叫壹号: 如果你爱 ，爱 graphics，追求 pixel perfect，想做顶级 app，听到呼叫请回答。从此以后，好用看我的，好看看你的。对 Tweetbot 有爱的也请入，有惊喜。" data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2011%2F11%2F0-calls-for-1%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'国产 Tapbots，零号呼叫壹号: 如果你爱 ，爱 graphics，追求 pixel perfect，想做顶级 app，听到呼叫请回答。从此以后，好用看我的，好看看你的。对 Tweetbot 有爱的也请入，有惊喜。', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2011/11/0-calls-for-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
<enclosure url="http://wangling.me/safari/WeiboApp/WeiboApp.mov" length="381" type="video/quicktime" />
		</item>
		<item>
		<title>如何用 iPhone、iPad 键盘输入书名号、中文引号</title>
		<link>http://wangling.me/2011/11/input-chinese-punctuations-with-ios-keyboard/</link>
		<comments>http://wangling.me/2011/11/input-chinese-punctuations-with-ios-keyboard/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 20:04:33 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[中文]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://wangling.me/2011/11/%e5%a6%82%e4%bd%95%e7%94%a8-iphone%e3%80%81ipad-%e9%94%ae%e7%9b%98%e8%be%93%e5%85%a5%e4%b9%a6%e5%90%8d%e5%8f%b7%e3%80%81%e4%b8%ad%e6%96%87%e5%bc%95%e5%8f%b7/</guid>
		<description><![CDATA[iOS 中文键盘可以输入中文特有标点符号。键盘上找不到的话，尝试长按形似标点符号键。还是找不到？那可能你遇上了 bug，我有解决办法。]]></description>
			<content:encoded><![CDATA[<p>首先，iOS 中文键盘是可以输入书名号、中文引号等中文特有标点符号的。</p>
<p>如果翻遍了字母键盘、数字键盘、标点符号键盘都没找到你要的标点符号，尝试长按形似的标点符号键，大多能在弹出的扩展键中找到。比如说，你要输入&#8217;【&#8217;，长按&#8217;[&#8216;就能看到。同理，要输入书名号&#8217;《&#8217;就长按&#8217;＜&#8217;。</p>
<div class="thumbnail"><a href="https://skitch.com/an00na/g8mwx/skitched-20111109-142253"><img src="https://img.skitch.com/20111109-nf57y6q1y6qur82qb7eh5m7a5j.preview.jpg" alt="" /></a></div>
<p>长按键弹出扩展键可能很多人都知道，但是下面这个可能知道的人不多—我自己是刚试验出来的。</p>
<p>大陆用户大多只开启简体中文键盘，那么你翻遍所有子键盘也找不到中文引号&#8217;「&#8217;，并且长按&#8217;＜&#8217;也不会有扩展键出现。不确定这是 Apple 有意设计的，还是 iOS 的 bug。解决办法：在系统「设置」「通用」「键盘」「国际键盘」中添加繁体中文或日文键盘。然后你就会在简体中文键盘的数字键盘上看到中文引号&#8217;「&#8217;了，长按&#8217;＜&#8217;也能出现&#8217;《&#8217;了。此时，即便你把繁体中文或日文键盘删除，这些标点符号也不会消失了。</p>
<div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2011%2F11%2Finput-chinese-punctuations-with-ios-keyboard%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2011%2F11%2Finput-chinese-punctuations-with-ios-keyboard%2F" data-text="如何用 iPhone、iPad 键盘输入书名号、中文引号: iOS 中文键盘可以输入中文特有标点符号。键盘上找不到的话，尝试长按形似标点符号键。还是找不到？那可能你遇上了 bug，我有解决办法。" data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2011%2F11%2Finput-chinese-punctuations-with-ios-keyboard%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'如何用 iPhone、iPad 键盘输入书名号、中文引号: iOS 中文键盘可以输入中文特有标点符号。键盘上找不到的话，尝试长按形似标点符号键。还是找不到？那可能你遇上了 bug，我有解决办法。', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2011/11/input-chinese-punctuations-with-ios-keyboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Steve Jobs, 1955–…</title>
		<link>http://wangling.me/2011/10/steve-jobs-i-miss/</link>
		<comments>http://wangling.me/2011/10/steve-jobs-i-miss/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 04:37:14 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Steve Jobs]]></category>

		<guid isPermaLink="false">http://wangling.me/?p=740</guid>
		<description><![CDATA[As an iCoder, I see him in every line of my code.]]></description>
			<content:encoded><![CDATA[<p>iSad</p>
<p>iMiss</p>
<p>iCode</p>
<p>I see him in every line of my code.</p>
<div class="thumbnail"><a href="https://skitch.com/an00na/f6weg/time-machine-bring-him-back"><img src="https://img.skitch.com/20111006-krfue4ngqjb23721i9wgfukw6f.preview.jpg" alt="Time Machine, bring him back" /></a></div>
<div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2011%2F10%2Fsteve-jobs-i-miss%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2011%2F10%2Fsteve-jobs-i-miss%2F" data-text="Steve Jobs, 1955–…: As an iCoder, I see him in every line of my code." data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2011%2F10%2Fsteve-jobs-i-miss%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'Steve Jobs, 1955–…: As an iCoder, I see him in every line of my code.', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2011/10/steve-jobs-i-miss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What I&#8217;m going to do with the rest of my life</title>
		<link>http://wangling.me/2011/10/what-im-going-to-do-with-the-rest-of-my-life/</link>
		<comments>http://wangling.me/2011/10/what-im-going-to-do-with-the-rest-of-my-life/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 15:04:01 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wangling.me/2011/10/what-im-going-to-do-with-the-rest-of-my-life/</guid>
		<description><![CDATA[Make something people love and help them find what they really love. 做人们喜爱的东西，借之帮助他们找到所爱的东西。 Tweet]]></description>
			<content:encoded><![CDATA[<p>Make something people love and help them find what they really love. </p>
<p>做人们喜爱的东西，借之帮助他们找到所爱的东西。</p>
<div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2011%2F10%2Fwhat-im-going-to-do-with-the-rest-of-my-life%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2011%2F10%2Fwhat-im-going-to-do-with-the-rest-of-my-life%2F" data-text="What I&#8217;m going to do with the rest of my life" data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2011%2F10%2Fwhat-im-going-to-do-with-the-rest-of-my-life%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'What I&#8217;m going to do with the rest of my life', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2011/10/what-im-going-to-do-with-the-rest-of-my-life/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zenburn Theme for Xcode 4</title>
		<link>http://wangling.me/2011/09/zenburn-theme-for-xcode-4/</link>
		<comments>http://wangling.me/2011/09/zenburn-theme-for-xcode-4/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 14:22:36 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[中文]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://wangling.me/?p=730</guid>
		<description><![CDATA[如果默认主题让你眼睛疲倦的话，试试 Zenburn。暗色系，低对比度，适合长时间编码。]]></description>
			<content:encoded><![CDATA[<p>长久对着 Xcode 写代码，默认 Theme 的白亮和高对比度让我的眼睛很疲倦。自带的 Midnight Theme 太艳俗，而且对比度依然很高。我在 Emacs 里用 <a href="http://slinky.imukuppi.org/zenburnpage/">Zenburn</a>，感觉不错，于是就自己动手 port 到 Xcode 里，并针对性的做了微调。</p>
<div class="thumbnail"><a href="https://skitch.com/an00na/f5c3e/zenburn-for-xcode"><img src="https://img.skitch.com/20110923-tudq2cm22x6bmmahqhtuh6f6qq.preview.jpg" alt="Zenburn for Xcode" /></a></div>
<p>喜欢的话，可从 <a href="https://github.com/an0/Zenburn-for-Xcode">GitHub</a> 上获取。</p>
<div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2011%2F09%2Fzenburn-theme-for-xcode-4%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2011%2F09%2Fzenburn-theme-for-xcode-4%2F" data-text="Zenburn Theme for Xcode 4: 如果默认主题让你眼睛疲倦的话，试试 Zenburn。暗色系，低对比度，适合长时间编码。" data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2011%2F09%2Fzenburn-theme-for-xcode-4%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'Zenburn Theme for Xcode 4: 如果默认主题让你眼睛疲倦的话，试试 Zenburn。暗色系，低对比度，适合长时间编码。', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2011/09/zenburn-theme-for-xcode-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>又一个欺诈 app 团伙</title>
		<link>http://wangling.me/2011/09/another-swindle-app-seller/</link>
		<comments>http://wangling.me/2011/09/another-swindle-app-seller/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 03:21:15 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[中文]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[App Store]]></category>

		<guid isPermaLink="false">http://wangling.me/?p=696</guid>
		<description><![CDATA[中国 App Store 已全然是无主之地！我对  甚是失望。任骗子卖狗皮膏药，眼看用户上当受骗，难道你愿看他们伤了心，对你失了信，离你而去？何况，不义之财你抽三成，真希望大家说你“分赃”？]]></description>
			<content:encoded><![CDATA[<p>这次是顺着<a href="http://itunes.apple.com/cn/app/id445565693">这个 app</a> 发现的。</p>
<p>团伙名单：<br />
<a href="http://itunes.apple.com/cn/artist/entertainment-ltd./id434038026">Entertainment Ltd.</a><br />
<a href="http://itunes.apple.com/cn/artist/hdapps/id448079479">HDApps</a><br />
<a href="http://itunes.apple.com/cn/artist/hdgames-ltd/id423819078">HDgames Ltd</a><br />
<a href="http://itunes.apple.com/cn/artist/beijing-hub-information-co./id443370296?l=en">Beijing Hub Information Co., Ltd.</a><br />
<a href="http://itunes.apple.com/cn/artist/softcity-ltd./id397730022?l=en">softcity Ltd.</a></p>
<p>特点：</p>
<ol>
<li>很多人顶的 5 星好评，点击其评价者，必然看到他的其他好评都给予这一团伙的 app。</li>
<li>“开发商网站”多是无效连接，“应用软件技术支持”多是空博客。</li>
<li>旗下的 app 有不少重复的，比如<a href="http://itunes.apple.com/cn/app/id445573864">这个</a>和<a href="http://itunes.apple.com/cn/app/id445565693">这个</a>，<a href="http://itunes.apple.com/cn/app/1946-strike-force/id443905798">这个</a>和<a href="http://itunes.apple.com/cn/app/id448079476">这个</a>。</li>
<li>不少 app 几乎没有 app 本身的截图，如<a href="http://itunes.apple.com/cn/app/ifitness-female/id440479506">这个</a>。</li>
</ol>
<p>亮点（疑点）：有几款 app 声称“完全正版、独家授权”，如<br />
<a href="http://itunes.apple.com/cn/app/id445565693">这个</a>：</p>
<div class="thumbnail"><a href="https://skitch.com/an00na/f3esc/itunes"><img src="https://img.skitch.com/20110915-naqxscicm9k6j3ccejqg6gtke.preview.jpg" alt="iTunes" /></a></div>
<div class="thumbnail"><a href="https://skitch.com/an00na/f3ear/skitched-20110915-113706"><img src="https://img.skitch.com/20110915-kiwxxsdpr828k6sm538qurccgp.preview.jpg" alt="" /></a></div>
<p>还有<a href="http://itunes.apple.com/cn/app/id443898248">这个</a>：</p>
<div class="thumbnail"><a href="https://skitch.com/an00na/f3e2b/itunes"><img src="https://img.skitch.com/20110915-tccknpy8aq55i8jwb4pjym9ktd.preview.jpg" alt="iTunes" /></a></div>
<div class="thumbnail"><a href="https://skitch.com/an00na/f3e2m/skitched-20110915-114035"><img src="https://img.skitch.com/20110915-x7awsgjbpid53inyy3r6n8jckn.preview.jpg" alt="" /></a></div>
<p></p>
<p>如果这些所谓的授权是假的话，其行为更恶劣，后果更严重。希望有人能联系到授权中提及的各位老师，确认授权是否属实，即便属实也请告知当前开发商之低格，建议考虑另寻他人重新授权。</p>
<p>今天除了发现了这一团伙，还看到上次<a href="http://wangling.me/2011/08/swindle-app-killer/">追杀</a>的<a href="http://itunes.apple.com/cn/app/id438625047">那个</a>又上了中国 App Store 首页十大榜单，无力感油然而生。中国 App Store 已全然是无主之地！我对 Apple 甚是失望。在 <a href="https://twitter.com/#!/apple4us">@apple4us</a> 的建议下，我已经给 <a href="mailto:appstorenotices@apple.com">appstorenotices@apple.com</a> 发过两封邮件，石沉大海；<a href="https://twitter.com/#!/zuola">@zuola</a>、<a href="https://twitter.com/#!/POPOEVER">@POPOEVER</a> 帮忙把问题反映给 Apple 中国市场部，亦无反应。</p>
<p>你放任这些骗子在 App Store 上卖狗皮膏药，眼看惠顾你的用户上当受骗，难道你愿看到他们伤了心，对你失了信，离你而去？何况，那些不义之财你是抽了三成的，你真的希望大家说你“分赃”？</p>
<p>但是，失望不代表放弃，我会继续揪出这些渣滓，追杀之；同时呼吁更多人加入，大家一起给 Apple 写邮件反映中国 App Store 的混乱；更希望有专业媒体人能够把这一问题曝光在有影响力的媒体上，一来尽量提醒更多消费者谨防上当，二来可以给 Apple 更大的压力或动力。勿以恶小而姑息放任之！</p>
<p>如我在<a href="http://wangling.me/2011/08/swindle-app-killer/">首篇追杀记</a>的评论中所述：</p>
<blockquote><p>如果说开发者自购提升排名算是钻了空子，自己批量产生虚假好评绝对是违反 App Store 规则的，而且这种行为已经违反《中华人民共和国消费者权益保护法》，构成对消费者的欺诈行为：<br />
第三条 经营者在向消费者提供商品中，有下列情形之一的，属于欺诈消费者行为：<br />
（五）以虚假的商品说明、商品标准、实物样品等方式销售商品的；<br />
（七）采取雇佣他人等方式进行欺骗性的销售诱导的；<br />
（八）作虚假的现场演示和说明的；</p>
<p>这不是“营销问题”，这是道德问题，这是违法，这甚至可能是犯罪。
</p></blockquote>
<p>我认为这种行为已经触犯中国法律，热心的法律人士有无可能走法律途径要求 Apple 有所作为？</p>
<p>最后，但愿你明白，我爱 Apple。爱之深，所以责之切。</p>
<div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2011%2F09%2Fanother-swindle-app-seller%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2011%2F09%2Fanother-swindle-app-seller%2F" data-text="又一个欺诈 app 团伙: 中国 App Store 已全然是无主之地！我对  甚是失望。任骗子卖狗皮膏药，眼看用户上当受骗，难道你愿看他们伤了心，对你失了信，离你而去？何况，不义之财你抽三成，真希望大家说你“分赃”？" data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2011%2F09%2Fanother-swindle-app-seller%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'又一个欺诈 app 团伙: 中国 App Store 已全然是无主之地！我对  甚是失望。任骗子卖狗皮膏药，眼看用户上当受骗，难道你愿看他们伤了心，对你失了信，离你而去？何况，不义之财你抽三成，真希望大家说你“分赃”？', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2011/09/another-swindle-app-seller/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bugs of NSFetchedResultsControllerDelegate Template Code</title>
		<link>http://wangling.me/2011/09/bugs-of-nsfetchedresultscontrollerdelegate-template-code/</link>
		<comments>http://wangling.me/2011/09/bugs-of-nsfetchedresultscontrollerdelegate-template-code/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 15:22:09 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[NSFetchedResultsController]]></category>
		<category><![CDATA[UITableView]]></category>
		<category><![CDATA[UITableViewCell]]></category>

		<guid isPermaLink="false">http://wangling.me/?p=682</guid>
		<description><![CDATA[This is the template code of controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: given by Apple: - &#40;void&#41;controller:&#40;NSFetchedResultsController *&#41;controller didChangeObject:&#40;id&#41;anObject atIndexPath:&#40;NSIndexPath *&#41;indexPath forChangeType:&#40;NSFetchedResultsChangeType&#41;type newIndexPath:&#40;NSIndexPath *&#41;newIndexPath &#123; &#160; &#160; UITableView *tableView = self.tableView; &#160; &#160; &#160; &#160; &#160; &#160; switch&#40;type&#41; &#123;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; case NSFetchedResultsChangeInsert: &#160; &#160; &#160; &#160; &#160; &#160; &#91;tableView insertRowsAtIndexPaths:&#91;NSArray arrayWithObject:newIndexPath&#93; [...]]]></description>
			<content:encoded><![CDATA[<p>This is the template code of <em>controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:</em> given by Apple:<br />
<span class="code"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>controller<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>NSFetchedResultsController <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>controller didChangeObject<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>anObject<br />
atIndexPath<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSIndexPath</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>indexPath forChangeType<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>NSFetchedResultsChangeType<span style="color: #002200;">&#41;</span>type<br />
newIndexPath<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSIndexPath</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>newIndexPath <span style="color: #002200;">&#123;</span><br />
<br />
&nbsp; &nbsp; UITableView <span style="color: #002200;">*</span>tableView <span style="color: #002200;">=</span> self.tableView;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">switch</span><span style="color: #002200;">&#40;</span>type<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">case</span> NSFetchedResultsChangeInsert<span style="color: #002200;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span>tableView insertRowsAtIndexPaths<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSArray</span> arrayWithObject<span style="color: #002200;">:</span>newIndexPath<span style="color: #002200;">&#93;</span> withRowAnimation<span style="color: #002200;">:</span>UITableViewRowAnimationFade<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">case</span> NSFetchedResultsChangeDelete<span style="color: #002200;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span>tableView deleteRowsAtIndexPaths<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSArray</span> arrayWithObject<span style="color: #002200;">:</span>indexPath<span style="color: #002200;">&#93;</span> withRowAnimation<span style="color: #002200;">:</span>UITableViewRowAnimationFade<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">case</span> NSFetchedResultsChangeUpdate<span style="color: #002200;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span>self configureCell<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>tableView cellForRowAtIndexPath<span style="color: #002200;">:</span>indexPath<span style="color: #002200;">&#93;</span> atIndexPath<span style="color: #002200;">:</span>indexPath<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">case</span> NSFetchedResultsChangeMove<span style="color: #002200;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span>tableView deleteRowsAtIndexPaths<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSArray</span> arrayWithObject<span style="color: #002200;">:</span>indexPath<span style="color: #002200;">&#93;</span> withRowAnimation<span style="color: #002200;">:</span>UITableViewRowAnimationFade<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span>tableView insertRowsAtIndexPaths<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSArray</span> arrayWithObject<span style="color: #002200;">:</span>newIndexPath<span style="color: #002200;">&#93;</span> withRowAnimation<span style="color: #002200;">:</span>UITableViewRowAnimationFade<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">break</span>;<br />
<span style="color: #002200;">&#125;</span></span></p>
<p>There are two bugs in the <em>NSFetchedResultsChangeUpdate</em> case:</p>
<ol>
<li><em>newIndexPath</em> may be non-nil and different from <em>indexPath</em>, for example, when some rows are  deleted or inserted while some other rows are updated in the same session. In these cases, one should use the old <em>indexPath</em> to locate the table cell but use the <em>newIndexPath</em> to fetch the object from the <em>NSFetchedResultsController</em> because <em>controller:didChange…</em> and table view is being updated. So the correct code should be:<br />
<span class="code"><span style="color: #002200;">&#91;</span>self configureCell<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>tableView cellForRowAtIndexPath<span style="color: #002200;">:</span>indexPath<span style="color: #002200;">&#93;</span> atIndexPath<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>newIndexPath ? newIndexPath <span style="color: #002200;">:</span> indexPath<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;</span>
</li>
<li>
With the code above, you have correctly updated the table cell. However, the cell on screen is still displayed as before. That&#8217;s because even though you&#8217;ve re-configured the cell with updated data, you&#8217;ve not refreshed it. To force a refresh, you need to call the table cell&#8217;s <em>setNeedsLayout</em> or/and <em>setNeedsDisplay</em> depending on your cell&#8217;s implementation. Refer to <a href="http://stackoverflow.com/questions/1326408/is-nsfetchedresultscontrollerdelegate-changeupdate-behavior-broken">Stack Overflow</a> for the discussion. You can also resort to <em>reloadRowsAtIndexPaths:withRowAnimation:</em> of course, albeit it seems a bit overkill to me.
</li>
</ol>
<div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2011%2F09%2Fbugs-of-nsfetchedresultscontrollerdelegate-template-code%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2011%2F09%2Fbugs-of-nsfetchedresultscontrollerdelegate-template-code%2F" data-text="Bugs of NSFetchedResultsControllerDelegate Template Code" data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2011%2F09%2Fbugs-of-nsfetchedresultscontrollerdelegate-template-code%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'Bugs of NSFetchedResultsControllerDelegate Template Code', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2011/09/bugs-of-nsfetchedresultscontrollerdelegate-template-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Great Jobs, Apple!</title>
		<link>http://wangling.me/2011/08/great-jobs-apple/</link>
		<comments>http://wangling.me/2011/08/great-jobs-apple/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 00:54:23 +0000</pubDate>
		<dc:creator>an0</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Steve Jobs]]></category>

		<guid isPermaLink="false">http://wangling.me/?p=675</guid>
		<description><![CDATA[To Steve Jobs: One  a day, keep the doctor away.
To : Do great jobs, with or without Jobs.]]></description>
			<content:encoded><![CDATA[<p>To Steve Jobs: One  a day, keep the doctor away.<br />
To : Do great jobs, with or without Jobs.</p>
<p style="text-align:right">—— On the day Steve Jobs resigned as Apple CEO</p>
<div class="social">			<a href="https://twitter.com/share?url=http%3A%2F%2Fwangling.me%2F2011%2F08%2Fgreat-jobs-apple%2F" class="twitter-share-button" data-url="http%3A%2F%2Fwangling.me%2F2011%2F08%2Fgreat-jobs-apple%2F" data-text="Great Jobs, Apple!: To Steve Jobs: One  a day, keep the doctor away.
To : Do great jobs, with or without Jobs." data-via="an0" data-count="none">Tweet</a>
			<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>			<script type="text/javascript" charset="utf-8">
(function(){
  var _w = 86 , _h = 18;
  var param = {
    url:"http%3A%2F%2Fwangling.me%2F2011%2F08%2Fgreat-jobs-apple%2F",
    type:'6',
    count:'', /**是否显示分享数，1显示(可选)*/
    appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
    title:'Great Jobs, Apple!: To Steve Jobs: One  a day, keep the doctor away.
To : Do great jobs, with or without Jobs.', /**分享的文字内容(可选，默认为所在页面的title)*/
    pic:'', /**分享图片的路径(可选)*/
    ralateUid:'1676354212', /**关联用户的UID，分享微博会@该用户(可选)*/
    rnd:new Date().valueOf()
  }
  var temp = [];
  for( var p in param ){
    temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )
  }
  document.write('<iframe allowTransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '" width="'+ _w+'" height="'+_h+'" style="margin-left:5px;"></iframe>')
})()
</script></div>]]></content:encoded>
			<wfw:commentRss>http://wangling.me/2011/08/great-jobs-apple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

