Tinyfool的Blog

这就是我,Tinyfool,郝培强!身高180,体重240,标准的中年老胖子。 有妻有女,无房无车,现居上海,程序员。

Browsing Posts published in June, 2010

最早听这个故事貌似是我爸讲给我的,后来似乎在《笑林广记》中看到过,不过出处今天不细论了。

话说:

曾经有个地主四体不勤,五谷不分,从来不去看自己的土地,反正有下面人管着也不需要他自己操心。

某天不知道怎么心血来潮,他来到了自己的一块地前,佃户正在给蔬菜浇粪。

他大为惊异,质问佃户,“你们,为什么要往菜上面浇粪,这以后怎么吃?”

佃户答道,“东家,只有这样蔬菜才能长得大,才能好吃。”

他不信,要求佃户给他种的菜一点屎尿都不准浇。

几个月后,特供他的菜终于成熟了,他让下人做好,兴奋的准备吃。谁知道,他吃了一口就吐了出来。那些菜又小,又涩很难吃。

他叫来佃户,问道,“菜怎么这么难吃?真的是因为没有浇粪么?”

佃户,“东家,真的啊,没有浇粪的菜就是难吃的。”

“哦,我明白了,去给我舀勺粪,放在碗里!”

另一个关于屎尿的故事,来自小时候看的《加里森敢死队》,

话说:

加里森敢死队的兄弟们,不知道怎么就缴获了一辆坦克,这当然是个宝贝,但是那是战区,弄不到柴油。

兄弟们想到了,酒精也可以用在柴油发动机里面,可是酒精也不好找。

好在他们有会酿酒的人,决定自己寻找土豆来酿酒。这可乐坏了其中一个哥们,他是大酒鬼,很久都没有喝到酒了,于是他很积极的帮助,建设蒸馏的设备(一大堆空油桶连在一起),收集土豆等等。

然而一切都做好了,酒却没有酿出来,原来缺少了酵母。于是会酿酒的兄弟说需要一些大便(里面有很多酵母)放进去,这样才能酿出来。

爱喝酒的哥们急了,说这样怎么能酿酒了,这样酿出来的东西我一定不喝。于是,后面的酿酒工作他也不参与了。

但是,最后酒还是如期酿好了,放到坦克油箱里面,发动机运转正常。大家喝了喝也觉得很好喝,但是爱喝酒的那个哥们就是不喝。大家也没有勉强他。

出发的日子,找不到那个哥们了,后来大家发现,他在放酒的地方睡着了,头天晚上他先是很小心的试了几口,然后是欲罢不能,喝的酩酊大醉。

好了,来点土的,这两个故事告诉我们什么呢?

我想说,一切事物都有它的规律,也许听起来不那么卫生,那么心旷神怡,但是违背规律是没有办法作出事情的。

一者:

前些日子,一个朋友想做一个基于地理信息的SNS,跟我们一班人谈了几次,大家都只是泼凉水。其实他讲的一切都说的圆,比如有了地理信息,我们拼车的时候就不用在一堆上海的信息里面狂找跟自己住的近的人,而是一开始就会看到本小区的想拼车的人的信息。比如有了地理信息,同一个小区的人可以一起去团购,一起去学车,一起去郊游等等。

这些愿景都很美妙,道理也讲得通。但是这些讲得通的道理都无法说明一个问题,一开始,当交流的氛围没有形成之时,人们为什么会来到这个SNS;来到了这里如果发现一片荒凉,大家会不会留住,会不会继续来等等。其实,不管是什么样的SNS,什么样的社区,什么样的论坛都有一个运营的核心问题,如何开始第一推。

这个问题,从某些网站的成功经验来看也许是很肮脏的,比如淘宝,现在淘宝成为了很多人喜欢的东西,但是在当年,为了让淘宝有足够多的知名度,马云投放广告的方式是非常肮脏的,什么媒体都投,什么样的投放方式都做。人家是强制弹出一个广告条,引诱你点,淘宝是直接弹出一个网站首页来。不仅肮脏而且超级费钱,据我当年得到的数字,淘宝一年的推广费用就可以占到中国互联网当时一年广告总投放量的相当比例。再如,现在很火的人人网,在还叫校内的时候,陈一舟老师是用鸡腿换注册得到了大量学生用户的当年,陈一舟老师还没买到校内时,5Q跟校内竞争时,曾经用鸡腿去吸引学生注册,不过据说有人去5Q注册了50个帐号,得到了50个鸡腿以后,跑到校内去炫耀。,等等等等。(注释:这里引了肮脏的例子,是用来说,第一推之难,成本之高,而不是鼓励这种行为,倡导这种行为。如果你看到了这段,说,“哦,做网站就是要流氓啊”,那你还是别回复告诉我,我会伤心的。且,我觉得你就很像第一个故事里面的地主了,首先,网站不流氓也有可能成功,其次,大多数顿悟了去做流氓的,做的都太拙劣,连流氓都做不好,费钱,费力,害人,最后还是什么都没成。)

当年我见某投资人最大的收获就是他给我们讲,携程发展到现在,就仅拿在地铁发传单来看,发展一个新会员需要的成本是多少钱。当时很惊诧,然而一点一点数字算下去,你才知道真的需要那么多钱。

所以,很多事情,在我们空想的时候,他可能是自然就可以圆的,道理都对,但是实际的推动力,那些肮脏的,也许不肮脏的,昂贵的,也许不昂贵的推广的成本,很容易就被想当然的忽略掉了。

再者:

我看到过很多项目的兴衰,有经验的项目管理者,也许大词概念未必懂,但是项目的每个要点:进度,质量,人力安排都把握的很紧。然后,可能会慢慢的在项目中引入各种新鲜的技术思想,实践检验,好的留住。没有经验的项目管理者,总是自以为是,按照自己的逻辑先胡乱安排一通,然而,遇到了危机,开始抓耳挠腮,最后决定找到几个银弹,要么也单元测试一把,要么也来个敏捷。幻想有一把剑,叫做尚方,抽出来以后,神鬼妖狐,魑魅魍魉,老板员工,Bug进度,一切都安分守己,听其调遣。

做技术的人也往往是这样,玩数据库的,索引优化不懂,负载缓存不精。天天看着世界一流领先的网站是怎么发展的,人家NOSQL了,我也要NOSQL。可是你知道人家是日均几千万流量以后才开始玩NOSQL的么?你这日均10万不到瞎掺活什么?我从来不反对Buzzword,我喜欢云计算,我喜欢NOSQL,但是大喊着喜欢这些概念的家伙们,你们了解你们所说需要的东西的边界了么?什么样级别的负载,什么样的逻辑适合云计算?什么样的负载什么样的逻辑适合NOSQL?你们想过没有?

Google牛屄么?牛屄。但是Google玩的东西,别人玩不了么?不见得。有了Google file system,map reduce的论文后,业界都明白了,哦,原来就是这么东西啊。Hadoop不是有了么?开源都有实现了,不难吧。实话说,要是不论真实负载能力,计算机专业刚毕业的学生,也应该有能力按照论文的思路实现出类似Hadoop这样的东西。

那么我是在说Google一点不牛屄么?那当然不是,人家先走到那个流量,那个负载,那个存储压力,所以先想到这个方案,这就叫牛屄。人家公开了Google file system,map reduce的思路,Ok,我们可以超越Google了么?不能,你搭出个环境放了200T的数据,沾沾自喜,看我也是T级车了,先别美。人家已经在构建 P级存储了,人家在玩咖啡因了。人家甚至不是为了牛屄,人家搞这么大存储就是为了解决现实存在的问题。就算你再有深度,再有领悟能力,你没有站在那块土地上,你怎么知道那块土地的重力加速度是多少啊!想在思想上超越Google,好,你现在流量和存储上超过去,我觉得你就有戏了。

再说苹果,到了今时今日,如果你还以为这家公司最近股票升到全美第二的市值,只是他们的工业设计水平高,找了个设计过高档马桶的设计师,那你洗洗睡吧,别玩互联网了,别玩IT了,这边热,找个凉快地方待会儿吧。

盛大创新院有很多同事都有iPhone或者iPad,我刚到公司也有别的项目组的软件需要iPhone或者iPad客户端,找我咨询。所以我就有了在公司搞个iPhone/iPad开发讲座的念头。前些日子太忙,公司内场次也没安排开,今天终于可以搞了。

不过也算是一波三折,前两天我眼睛得了麦粒肿,第一天疼痛难忍几乎什么都干不了,下午去医院开了药。第二天在家里静养敷药等等,睡了一天。项目耽误了很多进度,讲座的Keynote也没时间做。所以第一讲的Keynote实际上是今天白天几个小时里面做出来的,刚刚全都做好就去讲,未免有点仓卒,内容有点凌乱。

讲的效果还好,大家也很热情,结果本来一小时的讲座多讲了快40分钟才结束,虽然耽误了一个很重要饭局,但是跟另一班同事吃了顿烤肉,喝冰凉的啤酒,也非常的快乐,而且讲座整个过程我都很High,讲完大汗淋漓,估计也有减肥效果,快哉快哉。

点击浏览:iPhone/iPad开发讲座 第一讲 Ios开发简介

内容大量参考了苹果的开发文档,以及斯坦福的iPhone开发开放课程CS193P,建议英语好且有志于iPhone开发的同学下载学习之。

下期准备介绍苹果推荐的iPhone应用设计方法。

相关链接:
iPhone/iPad开发讲座 第一讲 IOS开发简介 Keynote放出
iPhone/iPad开发讲座 第二讲 iPhone用户界面设计 Keynote放出
iPhone/iPad开发讲座 第三讲 基础UI和基础编程 Keynote放出
iPhone/iPad开发讲座 第四讲 网络通讯和Xml处理 Keynote放出
iPhone/iPad开发讲座 第五讲 定制视图和多点触摸 Keynote放出

How to use Objective-C get all fontfamily name and fontname in an iPad or iPhone?

代码很简单,效果就是把全部字体家族和字体名都输出到调试窗口。

	NSArray* familys = [UIFont familyNames];
	
	for (int i = 0; i<[familys count]; i++) {
		
		NSString* family = [familys objectAtIndex:i];
		NSLog(@"\r\n\r\nFontfamily:%@\r\n=====",family);
	
		NSArray* fonts = [UIFont fontNamesForFamilyName:family];
	
		for (int j = 0; j<[fonts count]; j++) {
		
			NSLog(@"%@",[fonts objectAtIndex:j]);
		}
	}

WWDC 2010开幕那晚,我一夜无眠,但没有时间看任何直播,我正在赶一个项目的进度。一天后,我从podcast下了那夜的Keynote,然后隔了几天,项目不那么紧张了,我才有时间看。有很多数字让我很有感受,这些日子跟一些朋友、跟一些同事零星的聊了一下,现在也分享给大家,更重要的是给自己记录一下,免得忘了。

一、当然是在59天内卖出了200万台iPad,平均3秒钟卖出一台。这个数字非常惊人,要知道很多号称流行一时的手机总的出货量也就是百万左右。一个月前,当苹果公布28天卖出了100万台iPad的时候,有人称赞,有人怀疑,有人认为这一旺盛的势头会很快降低。现在数字再次证明了一切。说起来,我的《iPad革命:开发者的机遇和挑战》几乎是最早的正面表扬iPad的文章,可惜因为投稿的原因发布到我自己的Blog的时间比较晚。iPad发布以后最好玩的一个现象是,一开始没见到这个东西的真身时,各种猜测,各种批评满天飞,等到各大媒体的记者们、Blogger们拿到手了以后,每个人都是在表扬,呵呵。

二、短短的两个月的时间,App store里面已经有了8500个iPad程序,这些程序被下载了3500万次,按照200万iPad计算,平均一个iPad上安装了17个程序。说到这个数字的时候,Jobs老师连说了两遍“That is a great number.”

这组数字非常值得玩味,我手中没有iPhone的平均程序数。但我怀疑,这个数字可能并不高,甚至可能低于17或者仅仅是相当。因为我们知道很多人买了iPhone仅仅是为了打电话,也就是说,iPhone有一个杀手应用,打电话。而iPad不同,它没有任何的杀手应用,每个买了iPad的人都应该买点(也许花钱,也许免费)什么app,要不然这个iPad看起来就太傻了。

几个月前,huoju同学的那个号称是中国前10个iPad之一的iPad到达上海的时候,我们公司一群同事正在钱柜K歌,iPad到了,开封以后,大家先是很兴奋的围观,然后是讨论,最后是把它弃置一旁,原因很简单,没有任何应用和数据的iPad看起来好傻,毫无用处。

另外一个值得玩味的点在于,35,000,000/8500约等于4118,也就是说平均每个应用有4118次下载。这个平台简直就是狼少肉多的状态,不赶快杀过来太傻了。以上的分析我跟几个朋友讲过后,他们第一反应就是本来要先做iPhone版的决定先做iPad版;本来不想马上杀入苹果平台的,也准备先做个自己软件的iPad版本。

还有一点,就是从我得到的反馈来看,虽然iPad可以完美支持iPhone程序(如果你觉得不完美,我没话说),但是大家很少会喜欢在iPad上面安装iPhone程序。我不知道Jobs老师之前是否想到了这点。那天聊到这个问题的时候,我有朋友说,那未来苹果会不会直接关闭这个支持呢?我认为不会,虽然大家喜欢在iPad上面用iPad应用,但是遇到一些特殊场合,以及相应iPad版本确实还没有推出的时候,大家也会用iPhone版本的。例如,也许即使没有iPad版本的植物大战僵尸,你也不会在iPad上面去玩iPhone版本。但是网银程序呢?支付程序呢?这些东西也许你更在意的是方便,而不是体验。

这里多说一点,Jobs不是神,苹果也不是神。在苹果一个最牛的设计方法的Keynote里面,大大夸奖了某公司的生化危机类游戏,称里面的软操纵杆的设计很好,溢美之词铺天盖地,但是,从我得到的反馈来看,大家喜欢的游戏,往往都是有鲜明iPad/iPhone操作风格的游戏。简言之就是,看到什么点什么的游戏。我的女儿才1岁半,但是看到我们玩iPad版植物大战僵尸的时候,她会主动去点那些飘动的小太阳,原因就是那东西太直观了,完全不用教育,太好用了,完全不费脑子。这样的东西,在iPad/iPhone上最有生命力。

另外值得讨论的例子是FieldRunner游戏,此游戏很早就有iPhone版本,我玩过多次完全不感冒。但是现在有了iPad版本,什么都没有改变,操作方式没变,界面没变,甚至地图都没有变,分辨率提高以后,我爱不释手。而且在公司掀起了我们整个一个小组的游戏沉迷高潮,甚至有我们公司某大牛,业界著名的技术高手,每天中午吃饭的时候,都捧着iPad玩FieldRunner游戏,好吃的都被我们抢走了都不知道。

三、65天内,电子书下载了500万次,平均一个iPad上2.5本书,按照在iPad上面有书的美国前五大出版社的统计,iBookStore的市场份额已经达到了整个电子书市场份额的22%。

虽然统计方法也许不是最公允的,但是仅仅两个多月22%的市场份额显然是好的不得了的成绩。

我更关注的是这次iBooks里加入了PDF的支持。这家公司以前是不懂得怎么解析PDF么?显然不是。

其实iPad出现之前,我就考察过很多可以读PDF的iPhone电子书阅读器(很严肃的考察,很多都是我真金白银买的,有些是免费的),效果都完全不可接受。原因很简单,流行的PDF文件多半都是用打印方式生成,是基于排版格式的,不是流式文本。所以,内容很难重排,如果保持排版样式,显示全部则很难看清,显示局部则很难阅读全貌。基本上可以说,这类软件从技术上是可行的,从实践上是毫无意义的(当然那东西确实可以读,只是实在是一种折磨)。

而iPad的分辨率下,想得到完美的PDF显示效果那实在是太容易了。而熟悉Mac开发的同学们,应该知道Mac平台的PDF支持是相当的好,有现成的API可以解析生成等等,iPad的SDK(也就是IOS 3.2 SDK)里面也包含了支持PDF的各种API。那么苹果为什么不在iPad发布伊始就在iBooks里面支持PDF呢?

基于我对Jobs老师和这家公司的认识,我认为这是因为,他们在认为一个东西可以完美实现之前,是绝对不会拿出来的,比如复制粘贴,比如多任务(这个我未来会有专门的技术文讨论),比如这次的PDF。

他们在等的应该就是iPhone 4,在等iPhone 4的Retina屏幕,在这个分辨率下,屏幕虽小,但是PDF是可以完美显示的。

我认为,iBooks支持PDF,iBooks支持iPhone,iPhone推出Retina屏幕,这三件事情的时间点太过巧合,绝对是有紧密关联的。

Retina屏幕绝不是某些人想象的,刚好有了,就刚好被放到了iPhone里面,耍耍酷这么简单。这就跟iPhone的Cpu一样,iPhone 3G是无法支持新的多任务功能的,那个功能必须有Samsung S5PC100 ARM Cortex-A8(iPhone 3GS)或者苹果A4才能支持。所以,你可以想见,在3GS切换到A8的时候,也许刚刚被在IOS 4中发布的多任务功能就已经在策划或者实现中了。

四、每周有15000个程序被提交到AppStore,包含30种语言,95%的程序可以在7天内审核过。剩下的5%,有三种最大的可能性:

  1. 程序的功能和开发者描述的不一致,会被拒绝。
  2. 使用了私有的API,苹果不允许开发者使用私有API,因为升级系统的时候,私有API可能会失效,程序崩溃,用户会很不满意。(当然有时候开发者也是不得已为之,比如某功能苹果的程序可以实现,为什么我们就不能实现。有些问题上,最后苹果和开发者达成了妥协,私有API可以调用,未来可能会变成公开API,例如UIGetScreenImage();)
  3. 程序会崩溃,这当然会被拒绝。

这一段显然是Jobs老师在自吹自擂,当然从我个人的经历以及我收到的一些反馈来看,AppStore审核效率确实是有大幅的提高。但是遇到了一些事件的时候,还是会大幅下降,比如iPad发布那段时间,所有iPhone程序的审核貌似都放慢了。

这场keynote显然还有更耀眼的明星iPhone 4,就是这两天的消息,预售第一天就突破了60万订货量,看来一个新的销售神话要诞生了,:)。