Tinyfool的Blog

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

一段时间以来,开发者的圈子里面,有很多对苹果公司,以及iPhone OS平台(包括iPhone、iPod touch、iPad)批评的声音,主要是批评这个平台不开放。有些批评是很诚恳的,直击要害的,而有些完全是空穴来风,以讹传讹。

首先,开放不是一个简单的概念。

在智能手机出现之前,手机上的操作系统往往是制造厂商私有的,上面的软件往往是内置的,只有制造厂商才能开发上面的程序,而且大部分机器根本不支持安装新软件。这才是真正的封闭。

有了智能手机后,虽然有大量的平台和语言我们可以选用,但是实际上并没有形成蓬勃发展的应用程序市场。

J2ME曾经幻想给手机应用市场带来繁荣。但实际上,一方面,为了保证兼容性,J2ME放弃了很多功能,性能和应用场景也大大受限,很难开发出让用户使用方便而且功能强大的程序。

而在另外一个方面,它没有比较完善的界面和操作方面的标准,支持了各种形形色色的手机之后,实际上的兼容性又完全无法得到保证,很少有程序可以真的完美支持多款手机,尤其是游戏类应用,真正地做到兼容多款手机的凤毛麟角。

Nokia坚持了S40和S60的两条战线,在标准化和产品多样性上做到了比较好的平衡。曾经被认为是手机应用市场的救星,然而这10年来,Nokia的手机虽然外观日新月异,但是软件和操作系统方面的改进乏善可陈。而且Symbian系统开发难度一直过高,Nokia也没有在Symbian平台发展势头最好的时候推出类似AppStore这样的商业模式出来。所以,在iPhone出现以后,大量有志于移动开发的开发者,开始放弃Nokia和Symbian平台。

现在不管是从各平台手机应用的数量、质量,以及开发者的收益来看,我们都可以说是苹果推出iPhone是手机应用市场真正繁荣的开始。

当然毋庸置疑,苹果在某些方面确实很封闭。但是,我并不认为这完全是坏事儿。

软件行业未来的图景,不应该只有开源软件,只有商业软件,或者只有AppStore下的软件。这三种不同的模式,互相之间形成了非常良好的补充。

在iPhone/iPod touch和iPad这样的特定领域里,AppStore模式的威力惊人。去看看苹果财报你就会知道这开辟了多大的一个第三方软件市场。智能手机这个概念出现快10年了,从来没有一个平台上,聚集了这么多的第三方开发者,这么多的免费和付费的优秀应用。以前,第三方开发者当然也在赚钱,但是以这样规模和形式聚集在一个平台下,是前所未见的。

假设iPhone OS平台一切都不变,只是去掉AppStore,我们会发现,很多现在已经发财了的第三方开发者,他们还仅仅是在梦想发财而已。所以,一定程度上的封闭也不见得是万恶之源。

正是因为在应用发行的时候,严格的需要苹果公司签署的开发者证书,最大程度地防止了盗版,使得各种付费应用的销量得到了保证。也正是因为有了被很多人诟病的,甚至可以说过于严格的质量审核,才保证了AppStore内的程序都有一定的质量水平,这样就会让消费者喜欢在AppStore里面寻找和购买更多的程序。

更何况,苹果公司在未来的图景上,只是绚烂的一块,不是全部。开源/商业/AppStore三种模式,我认为在未来各有所长,也会各得其所。

我多次强调,喜欢开放的人,心态更要开放。要允许这世界有人不想开源,不想开放,这才是开放的心态。你热爱CopyLeft,你大可以把你的代码都开源了。但是CopyLeft的精神绝不包括强迫别人开源(受授权限制则令当别论)。

我也认同源代码开放的精神,自己也在维护开源项目,但是做这些开源项目,和我做iPhone这样的相对封闭平台上面的项目,完全没有产生任何的冲突。

我乐见在未来开源/商业/AppStore三种模式,各显神通,都蓬勃发展。事实上,开源兴起,并没有杀死商业,反而扩大了我们整个软件行业的视野和疆域。App Store也具有类似的作用,我期待它给我带来更多的惊喜。

本文曾发表于《程序员》杂志10年06期。

首先,应该感谢炳叔。那年TechWeb搞年会,炳叔做主持人,抽奖环节的时候,二等奖是iPod Touch,他从抽奖箱拿起一个名片,扔掉说不符合条件,拿起一个名片说不符合条件,最后不知道怎么我的名片被抽到了,我得到了一个崭新的iPod Touch。那东西当时的市价是2000多,我多次徘徊在某苹果专卖店(那时候还没有三里屯 apple store)的柜台前,想先买后奏,哪怕被老婆打一顿呢。谁知道就这么白白得到了。

然后要感谢xuyou,iPhone SDK放出以后,用中国信用卡购买非常麻烦,根本不得其门而入,他帮我用他的美国信用卡买了一个帐号,我才有机会用真机调试。

Tiny4Money是我用iPhone SDK开发的第一个程序,从开始学到做出来,只用了两个星期,其中为了实现日历功能(SDK不包含日历控件),我还开发了一个开源项目iphonecal(iPhone日历控件)。做好了以后,我就把它安装在我的iPod Touch上,天天用它记帐。但是还有很多想做的功能,还有很多完善想做,所以就没有发布到app store。没想到就这样拖了两年多,中间,我自己的公司的事情忙了起来;给有道做了有道词典iPhone版第一版;还接了一些小的iPhone外包项目;自己还做了几个其他的iPhone小程序。再后来,很多很多事情,再后来,几个月前,我搬到了上海,加入了盛大创新院。

所以,这个小东西Tiny4Money,居然做好了两年多(也许更长,我的记忆力有点问题),从来没有上过app store。我自己的任何一个小东西也没上去过,虽然其间,我帮别人做了不少东西,他们都上了app store,有的销量还不错。

这就是我个人失败史的一个缩影,在金远见,做好了一个自觉值得骄傲的电子词典联机软件,公司却整个易手,退化成了一个品牌壳公司;在某公司干了两年,参与了一个注定没希望的项目,我离开没多久,那个公司就放弃了整个项目;跟huoju等人一起做了365kit,做好没多久,出资人撤了;自己创业的ginkgotek,自觉不错,但是找A期的时候,赶上次贷危机,之后就是视频网站牌照事件、国进民退、各地拔线事件,把我们的客户弄得焦头烂额,甚至濒临破产,我们的生意也每况愈下。

奋斗了那么多年,有人称我为牛人,然而,你让我拿出牛的凭证?都不见了。

最近在公司里面做iPhone/iPad开发的讲座,几乎每一讲都会提到一点Tiny4Money的细节,因为很多经验教训我就是从那里学到的。每次我都要告诉大家,这些经验来自于一个革命两年多,最终没有结果的产品,多么悲伤。

所以上周末,我把所有未完成的部分砍掉,修改了下这个程序,改进了一些小细节,发布了。终于,这不再是一个未完成的事情,不再是我心中的一块石头。我一直觉得自我完善是我们应该执着一生的最主要的任务,从这个软件开始,坚持每件事情有始有终吧。

欢迎大家下载,免费,简单易用,也许还有些bug,但是绝对不会导致你的iPhone爆炸,谢谢,支持中英两种语言,根据你的iPhone的地区设置自动选择。

下载地址(app store):
中国市场:
http://itunes.apple.com/cn/app/tiny4money/id384666002?mt=8
美国市场:
http://itunes.apple.com/us/app/tiny4money/id384666002?mt=8
任何国家市场都可以用搜索Tiny4Money的方式找到。

关于税收

51 comments

上午看了我的工资单,然后我开始在Twitter上面骂政府。我的个税扣项是一个很大的数字,这令我很不爽。

来上海后,每次发工资我都会骂一下,之前的公司避税都避的比较好,政府捡不走太大的便宜去,现在是在一家上市公司,税是一点都不能避的。鉴于公司的规定(大多数公司现在都有类似的规定),我是不能透露我的薪资的,所以我也不能透露我的个税,总之,每个月的个税,比我给父母每个月的钱多多了;比我女儿最多的一个月的奶粉钱也多多了;够买我喜欢的很多IT产品;比我每个月的信用卡账单金额还大。

其实,我并不反对税收,但是我反对不义的税收。大家知道,英国人是怎么被美洲大陆的新移民赶走的么?其实,很大程度就是抗税。那么有抗税传统的美国人民的税是全世界最低的么?显然也不是。美国人民可以接受高税收,原因在于,交税以后,你有你的公民权利;是因为,税收是明白账,很难重复征收和乱征收。

而我们在中国呢?

我们是没有纳税人权利的,你敢在大街上大骂警察,然后说,你们就是给我们纳税人服务的,别浪费我们纳税人的钱么?你敢跟公仆们真的讲讲主仆礼仪么?

哪怕你想办个企业给政府多纳点税,去办各种手续的时候,没有一个部门会不刁难你的。

每个大城市都把本地人和外地人分得泾渭分明,规定出各种有户口的人士可以享受,而没有户口的人士不能享受的待遇。那么,请问,交税的时候,没有户口的兄弟们可以少交一点么?不行的,你知道的。

所以,不必开导我,我仍旧坚持,每次拿到工资单,看到个税扣项就骂政府的习惯。不是我觉得委屈,不是我缺那点钱,因为我觉得不骂对不起我的良心,一个中年老胖子的良心。

有一天,条件成熟了,我就去美国,我会心甘情愿的给美国交税,当然让我不爽的时候,我也会骂,也许骂的比在中国还多。但是,我选择只要有能力就去给美国交税,而不是给中国交税,各位,你们懂的……

第五讲的前半部分是讲如何自定义一个UIView的绘制,如果你以前做过Windows程序,或者其他平台程序的自定义绘制,你会发现很熟悉,主要的任务就是覆盖UIView的drawRect方法。后半部分主要是讲如何处理多点触摸事件,当然这一讲主要讲的是如何处理多点触摸中的一个手指触摸的情况,也就是单点触摸。

这一讲其实是在两周前讲的,讲的时候我正遭受严重感冒的折磨,痛苦的是现在我的感冒还没好利索,这个夏天太热,在家的时候不得不把空调开的很凉,出门又很热,可怜的胖子在夏天真是悲哀。

我准备了一个简单的DEMO程序,painter。代码里面创建了一个PaintView类,继承自UIView,基本原理是touchesBegan时,创建一个currentLine对象,类型是NSMutableArray,它用来保存一次触摸事件中手指经过的所有的位置的坐标,把它加入保存全部line的NSMutableArray对象lines。在touchesMoved时,把获取的每个手指坐标保存在currentLine对象对象中,然后要求PaintView重绘。重绘drawRect的时候,代码枚举lines获得每一条线,得到很多点,然后用绘图函数把这些线画出来。

这个程序的效果就是用手指可以在PaintView上随笔画。

本期的讲座Keynote地址为:
iPhone/iPad开发讲座 第五讲 定制视图和多点触摸

DEMO代码文件:
http://tiny4.org/down/5-demos.zip

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

Tiny4Cocoa(做最好的iPhone开发社区、iOS开发社区)