Thanks, Steve Jobs!

 

我用过的第一台电脑是Apple II,也有可能是Apple I,实在搞不清楚了。那是高一,不知什么原因,我们年级居然开了Basic普及课程,整个课程只有一次上机的机会。不过那个课上完,我们绝大多数,如果不是全部,什么也没学会,然后生活在高考的阴影下继续。虽然有这么点接触,我对计算机的真正了解却是是上大学之后,正赶上电脑普及的热潮,从IBM PC XT+286、MS DOS、PC TOOLS、WPS、五笔字型开始的,虽然Machintosh和Power Mac也偶尔见到,不过更象一个传说,整个真实世界都属于Dos/Wintel。

对于Apple世界的感情,直到2005年WWDC之后,Developer Transition Kits 里的Mac OS X Tiger 10.4.1 Developer preview泄漏,黑苹果成为可能之后才一点一滴建立起来。其实之前ppc模拟器就可以在x86机器上把OS X PPC跑得很好了,只是性能实在太差,折腾过很短一段之后就放弃了。那个时候我跟Holly一起做为离岸团队为华尔街的一间证券公司开发证券交易策略平台,我整理脚本语言并制作编译器,Holly定义字节码并实现虚拟机,承蒙老板William关照,在啃完几本主要的编译器书之余还有足够的时间关注和尝试新鲜玩艺。

初步使用之后,我决定把家里的PC换上OS X Tiger,运气还不错,除了那块Via Rhine芯片的网卡其它东西都能正常驱动,正好社区里有人号称正在做这个驱动,于是我整了一块RTL8139先用着。不过那台PC挂的硬件比较多,已经接近电源的上限,所以总觉得多插个网卡不爽,还是掂记着那个驱动。这个担心并非多余,后来那台机器因为供电不足,损坏了一块显卡,最后主板也烧了。话说约半年后,项目终止团队解散,我在家休息了几个月,看那帮老外半年也不出东西,闲着也是闲着,还是自己写一个得了。这是我的第一个Mac OS X程序,也是做为一个程序员被Apple震撼的开始。由于发给Via要datasheet的email石沉大海,我只能从Linux driver源码里分析资料,为此花了差不多一个月从PCI到Linux网络子系统整个看了一遍,然后开始着手写I/O Kit驱动。然后我发现,要理解I/O Kit实在太容易了!写这个驱动,只要实现一个IOEthernetController子类就行,整个底层原语libkern已经封装好了,数据队列现成的,一行搞定:

IOGatedOutputQueue::withTarget( this, getWorkLoop() );

(当然这个最简单的队列性能并不好,也有足够的基础类可以实现不同性能的数据收发,不过都要多处理不少细节)

原来写驱动也可以面向对象呀!原来底层结构也可以这么优美!在折腾过WDM、又刚跟Linux死磕了一阵子之后,那感觉大约只有翻身农奴把歌唱能形容了。好吧,OS X不仅是unix+优美的图形界面,更是一个充满思考、精心设计、优雅到骨子里的编程平台。

不过,Mac OS X平台开发的工作机会似乎不存在,后来还是找了个Java开发的工作上班去了。不过,没过太久,iPhone横空出世。之前的智能手机世界属于Symbian和Windows Mobile,当时WM上升势头很好,我确信它会象IE干掉Netscape一样成功,花了不少时间来学习,先后买了Dell的X5和X51v来玩,写了一些东西放在play3d.net (顺便要跟play3d的读者说声抱歉,后来搞不定域名备案网站停掉了,域名到期后也就没有续费,当初那些文件还在 http://www.pinxue.net/play3d/ 不过没来得及写的那些估计永远不会再写了)。当iPhone 1.02软解方案出来以后,在Holly同学的煽动下,找人从美国带回来两台iPhone (Thanks Karl Chen!)。这个手机从外观到功能,无一不酷。然后,我在办公室就当起了iPhone的义务推销员,见人就说:这才是我想要的智能手机,这才是我想要的手机上网,比我想的还要好、还要舒服。不久头头去美国出差回来,行礼是帮大家带的8个iPhone。

iPhone改变了我对手机的看法和用法,以前用Nokia时基本就只打电话,连短信都极少发,第一部没有中文输入法,第二部那个T9也实在消受不来,而在iPhone上可以用最习惯的五笔;更别说上网了,偶尔用它的浏览器去gmail看个邮件,恨不得能花10分钟。用PDA的时候也主要是看书和记事,因为那个电池表现实在是不堪。但是自从用了iPhone,我就喜欢上发短信了,在路上也有gtalk的感觉了,也习惯于用手机随时查东西了,因为不需要再忍受跟别人嚼过的甘蔗差不多的wap或完全乱套的互联网页面了。以前也很少拍照片,因为用的手机都没这功能,有这功能的智能手机印象里比一台电脑还贵,用iPhone以后极其喜欢随手拍,不久就把数码相机送给家里人玩了。近来有了iPhone4以后,连配件一起花了7K的DV也闲置了。

iPhone 1代对我来说是完美的,在用了一年G1和数月EVO之后,又拿到iPhone 1代来用,仍旧有一种舒服到感动的感觉。当然它也是有缺陷的,有一些还好克服,比如通信录不能按汉字拼音排序,电话号码显示的格式不适应国内的号码等;有一些就很难办,比如不支持彩信,不过我至今仍极少用彩信,戴着运营商的镣铐跳舞总是别扭,发email或直接上传到网上才符合互联网的习性。最要命的是没有中文输入法,很快也就有第三方的短信程序自带中文输入法了,不过别的应用还是没法输入;也有人搞定了替换系统日文词库来当中文输入法用,只是第一个字总是日文,着实碍眼。好在社区已经整理出toolchain,在Holly精湛技艺之下,不到一个月,我们就有能用的单字拼音输入法了,而且速度飞快。因为总在港汇二楼台阶上的Costa碰头,我们给这个输入法取名为iCosta。不过我习惯用五笔,于是不久我们加上了五笔支持。别小看了这个五笔输入支持,它彻底释放了我在手机上的表达能力,也改变了我不在手机上聊天的习惯。

简单点说,iPhone改变了我对智能手机和移动互联网的认识,并如此迅速的让我依赖上了移动互联网。但是它改变我的,并不仅于此。在折腾iCosta的时候,我开始学习ARM汇编,ARMEABI函数调用的效率令人惊叹;开始学习Objective-C,它在完全兼容C的前提下提供了令人惊叹的面象对象能力,并对两者的混用几乎没有任何人为限制,而面象对象语法的设计也充满了智慧,分明在无声的说,这门语言是为人设计的,不是为了机器或者形式语义设计的;分明在强调,程序是由人写的,也是给人看的。更令人震惊的是Objective-C生成的汇编代码极易看懂,完全不象X86平台上一般程序那样难搞,虽然系统很多部分并无源码,但对于想要理解iPhone OS内部机制的人来说,一切就平铺直叙的写在眼前,即使是C编译生成的代码也要好读得多。这可太舒服了!

后来,iPhone SDK终于出了。我的iPhone终于摔坏了,我决定追逐一下有硬键盘的G1的浪潮。对于少许Android玩家来说,因此而很快拥有了可用的五笔输入法,而对我来说,由此而领会了什么叫做可用性,什么叫做用户体验。这不是说Android不好,Android有非常好的地方,比如它提供IMF并且可以通过Android Market发行IME,你几乎可以修改系统任何一个方面,只要你愿意努力。这可能是整个iOS平台永远也无法满足的需求,我猜想Jobs和苹果公司认为:想做这些事情的话请加入苹果。

用惯iPhone之后,时不时会拿手指点电脑屏幕,然后才想起来不支持触摸。于是开始盼望触屏版的MacBook,不过至今还没有盼到.苹果推出的是iPad,而且便宜的出乎意料。很快我的iPad就被小Nemo独霸了,好在后来又第一时间买了iPad2,不过装上PPTV/PPS/奇艺等可以看电视剧的app之后,有被Nemo妈抢走的危险了。如果不写代码,我已经习惯用iPad替代电脑。

其间黑苹果也升到Leopard了。再后来,终于受不了折腾黑苹果费的时间了,买了MacBook Pro。(Thanks Mrs. and Mr. Wang for internal discount) 每天在这样一个平台下工作,我的心态也在一点点的变化,开始变得挑剔,从界面、交互方式到代码的观感,越来越不愿忍受,也越来越不想写需要忍受的代码。

一段时间之后,对于Think Different似乎有那么点感觉了,思考产品也慢慢不自觉的朝着除了解决实际问题还要用很酷的方式去改变转了。这很有效,时不时会发现一些挺有意思的方向,只可惜想法太多时间太少,能付诸实施的还很少很少。我现在有幸跟一个非常强悍的团队一起工作,大家都怀抱着用技术改变世界的梦想,梦想很大,团队还很小,还需要很多很多志道合的伙伴。

Thanks Steve Jobs! 感谢你创建了苹果,塑造了这么富有个性和创造力的团队!感谢你们创造的这些堪称艺术品的产品!我享受这些产品,眼界由此而提高,在这个过程中感受到你们对信念的真诚与执着,在创新与尊重用户给自己设立的高标准。我相信技术可以改变世界,而你们让我坚信我也可以用技术改变一些什么。

 

*听到Steve Jobs逝去的消息以来,心里一直有很复杂的感情在起伏。我并不真实了解这个人,也没有见过他,却深受他的影响和鼓舞,既惋惜业界失去了及富远见与激情的天才,又担心苹果由此而放缓了创新的步伐进而整个产业的发展都放缓,同时也觉得业内暂时再也没有能代言理想、创新、激情、完美的标识性人物,似乎是一个时代的终结。想想还有Google收购Motolora手机、HP CEO要砍webOS随即换帅等大事件集中在如此短的时间段里,不禁感慨错过了.com大潮还能有幸赶上这么一个大时代。是有此文。

帮Holly Bull晒一晒汇编

这是大牛某天折腾黑苹果时不爽,花了半天工夫自己炮制的,主要时间都花在挑选指令上了,字节数太多的指令不能用,也不能写太多指令。能看出来是啥吗?

;
; For extended disk access: 1int 13h ah = 42h
;
struc extended_disk_access_block

sizeof_block: resb 1
reserved: resb 1
number_of_sectors: resw 1
buffer_offset: resw 1
buffer_seg: resw 1
start_sector_number: resq 1

endstruc ; extended_disk_access_block

;
; Partition table entry format
;

struc partition_table_entry

boot_flag: resb 1
begin_cylin: resb 1
begin_head: resb 1
begin_sector: resb 1
partition_type: resb 1
end_cylin: resb 1
end_head: resb 1
end_sector: resb 1
lba_offset: resd 1
lba_number_of_sectors: resd 1

endstruc ; partition_table_entry

bits 16

org 7c00h

section .text

start_point:

; Move self to high memory; set ss:sp to 9000:7000

xor ax, ax
mov ds, ax

mov ax, 9000h
mov es, ax
mov ss, ax
mov sp, 7000h

mov di, start_point
mov si, start_point
mov cx, 200h
rep movsb

push es
pop ds

push es
mov ax, real_start
push ax
retf

real_start:

; Prompt for boot

prompt_for_boot:

lea si, [input_prompt]
call display_string

wait_for_select:

mov ah, 0
int 16h

mov [crlf], al
lea si, [crlf]
call display_string

;
; verify_select: 0 – 3 in AL, then save to [crlf]
;

mov al, [crlf]

sub al, ‘0’

cmp al, 0
jb prompt_for_boot

cmp al, 3
ja prompt_for_boot

mov [crlf], al

;
; Check partition table for select
;

mov al, 0
mov bx, 7dbeh

check_bootable:
cmp al, [crlf]
jnz set_not_boot

mov byte [bx], 80h
jmp next_partition_entry

set_not_boot:
mov byte [bx], 0

next_partition_entry:

add bx, partition_table_entry_size
inc al

cmp al, 4
jz write_mbr_back
jmp check_bootable

write_mbr_back:

mov ax, 0301h
mov bx, 7c00h
mov cx, 0001h
mov dx, 0080h
int 13h

jnc calculate_partition_sector_offset
jmp write_mbr_error

calculate_partition_sector_offset:

;
; use ax as an index to calculate the absolute sector offset
;

mov al, [crlf]

cbw

mov bx, 7dbeh ; partition table

mov word [block+number_of_sectors], 1
mov word [block+buffer_offset], 7c00h
mov word [block+buffer_seg], 0
mov dword [block+start_sector_number+4], 0

mov cx, partition_table_entry_size
mul cx
add bx, ax
mov ecx, dword [bx+lba_offset] ; bx + sizeof(partition_table_entry) * ax + lba_offset

mov [block+start_sector_number], ecx

;
; Read partition boot sector
;
mov ah, 42h
mov dl, 80h
lea si, [block]
int 13h
jc read_boot_sector_error

; Note I must keep [ds:si] to current partition entry, which is requireed by mac os x booter,
; while ds should be 0000

; clear everything and jump to boot sector

push 0
push 7c00h

; es -> 0000

xor ax, ax
mov es, ax

; move partition table from 9000:7dbe to 0000:7000

cld
mov si, 7dbeh
mov di, 7000h
mov cx, 4 * partition_table_entry_size
rep movsb

; si -> 7000
mov si, 7000h

mov al, [crlf]
cbw
mov cx, partition_table_entry_size
mul cx

add si, ax ; si -> current partition table entry

; ds -> 0000

push es
pop ds

; dl = 80H
mov dl, 80h

retf

write_mbr_error:
lea si, [write_mbr_error_msg]
jmp display_then_halt

read_boot_sector_error:
lea si, [read_boot_sector_error_msg]
jmp display_then_halt

display_then_halt:
call display_string

halt:
hlt
jmp halt

;
; Subroutine: display_string
;
; Entry: ds:si -> c string
;

display_string:

display_str_char:

lodsb
cmp al, 0
jz display_string_ret
call display_char

jmp display_str_char

display_string_ret:
retn

;
; Subroutine: Display char in AL
;
display_char:
mov bx, 1
mov ah, 0eh
int 10h
retn

; ————————————————————————-
; Data area
; ————————————————————————-

crlf db 20h, 0ah, 0dh, 0 ; A digit char, plus crlf

input_prompt db ‘Select boot partition(0-3):’, 0

; A block to contain extended_disk_access_block

block:
istruc extended_disk_access_block
at sizeof_block, db 10h
at reserved, db 0
iend

read_boot_sector_error_msg db ‘Read boot sector error’, 0
write_mbr_error_msg db ‘Write MBR failed’, 0

times 200h-2-$+start_point db 0

db 55h, 0aah

FaceTime会话建立过程的技术猜测

Jobs在WWDC10上提到,FaceTime将会是一个开放标准,也就是说,不仅iPhone4-iPhone4可以通话,任何支持这一标准的应用都加与之通话。因此,值得我们观注一下。

FaceTime最吸引人的地方在于,居然不用预先维护联系人,而各种即时通信工具都需要你这样做,也不需要你登录某个服务器,直接拨电话号码就可以,真正是零配置,这对于普通用户来说,体验真是好极了。

那么FaceTime是怎么做到这一点的呢?由于手头并没有iPhone4,连能跑iOS4的机器都没有,只能根据Jobs在发布会上提到一堆术语来猜测了,有条件的朋友不妨抓个包,看看是不是这么回事。

已知会话使用SIP协议完成,这就好办了。想来应该是这样一个过程:

  1. app启动或检测到wifi网络连接变化
  2. app从SIM卡里取得必要信息,用本机手机号@facetime.apple.com之类的URI注册到Apple家的SIP服务器上。
  3. 用户拨一个电话号码
  4. app按照SIP规范拼装100 invite包,发给apple的服务器,from为本机手机号,to为被叫手机号
  5. SIP服务器响应trying,并在内部查找
  6. SIP服务器根据URI找到对应用户的当前记录
  7. SIP服务器根据被叫方登记的地址和端口,将invite转给被叫手机
  8. 被叫手机上的app收到invite,开始振铃,并发180 ringing包给SIP服务器
  9. SIP服务器将ringing包转给主叫方
  10. 主叫方手机开始显示对方正在振铃
  11. 被叫用户接受通话
  12. 被叫方app发200 OK包
  13. SIP服务器将200 OK包转给主叫手机
  14. 现在双方都知道对方的地址和端口了,200 OK包的内容是一个SDP描述,用于协商如何建立数据流
  15. 主叫方发ACK包给被叫方,这个包就不再需要服务器中转了
  16. 双方app开始用RTP建立视音频流
  17. 双方app通过RTP接叫对方的h.264视频流,同时将本机摄像头的h.264码流封装成RTP包发出

如果成为开放标准,参与这会话过程的SIP服务器可以有多个,它们会接力转发invite/ringing/ok包,除了SIP协议包里会记录所有的中转步骤,对于主叫和被叫双方是透明的。

点对点直接通信都绕不开一个麻烦,就是NAT。通过NAT,多个内网ip可以用同一个公网ip向外发数据,如果要接收的数据使用同一个tcp链接,那么NAT网关都有办法处理,这就是为什么我们通过NAT上网并不会有什么不同。但是,如果外网用户要主动建立一个到内网用户的链接,麻烦就来了。由于WiFi用户一般都要经过NAT,这就更要妥善处理了。

为此,Apple引用了三个标准:

  • STUN (Session Traversal Utilities for NAT) IETF标准,定义会话如何跨越多个不同类型的NAT
  • TURN (Traversal Using Relay NAT) IETF标准,让NAT后面的客户端可以向公网服务器一样接收外部请求
  • ICE (Interactive Connectivity Establishment) IETF标准,简化穿透NAT防火墙建立连接

facetime_tech_terms_on_wwdc10

Apple iPhone4 告诉了我们什么?

iPhone4开始预订了,然后Appple Store和AT&T Store排起了队,两家摆在互联网上的地摊也快被挤挂了。现在AT&T正式宣布首发日的预售配额已经订满,不过6-24那天去排队的话还是可能买到的。首发日估计那个队伍要提前三天去排了。

注意,这仅仅是预订。Bloomberg消息说Barclays Capital的分析师认为水果可以在6-26结束的这个季度卖出8.1M台。

如果单纯比较技术指标,iPhone4也就不过如此,而主要的亮点,象10小时电池续航、高分率的Retina屏、5M象素的摄像头、视频通话、多任务,其实并不是太新鲜的玩艺。特别是后三者,现在的高端手机要是没有这功能才是怪事。Apple到底有什么魔法?

没有足够的数据可供参考,只能臆测一下,这些订购者大约可以分成四类:iPhone 1/3G/3GS用户升级,iPhone开发者,其他智能手机更换者,新智能机用户。

用过iPhone,不管是哪一代,再去用市面上主流的这些手机,感受大约可以总结成一个字:丑。而新特性正是iPhone的前三代用户心中或多或少的遗憾,对于这个人群,换个别的手机大概会用得很难受,现在这些遗憾都变成了闪亮的新优势,升级的动力何其强也。特别是一代用户,iOS4已经不再支持它了,而且机器的寿命也快到了,保护得不仔细的估计也摔差不多了,比如我家那两台就是,保护得好的电池也差不多了,升级换代的愿望已经压抑了很久了吧。考虑到前三代iPhone过千万的销量,这类用户数量极为惊人。这类用户的特点:品牌锁定。其中很多人都成了Apple的义务推销员,有些就此成为果粉。

iPhone开发者,大约是最想第一时间拿到这个机器的吧。AppStore已经有超过22万个应用了,一个新应用如何能杀出重围呢?iOS4的发布无疑是一个非常好的新机会,毕竟能赶上iOS4首批应用发布,几乎就是销量的保证。据说在中国就有7万iPhone开发者,而全球有多少人估计没人说得清楚。

对于其他智能机用户和全新用户来说,是否会选择iPhone4还是蛮有疑问的。普通用户缺少足够的能力和精力去体验和比较不同类型的手机。而iPhone可不便宜,竞争者的推销员也轻易就能在自家的机器上找到一堆看上去很是那么回事的优势,虽然实际上某个功能有跟好用之间可能差着十万八千里。

iPhone4有两大武器,一个是十小时电池,这对其他智能机的杀伤力巨大,特别是这不是简单的放块大点的电池就能搞定的,iPhone4的电池基本已经是最先进的了,靠着软硬件高度一体化的协作才有这么好的表现,其它人家恐怕一时难以追赶,其他智能机用户大概只有一个词可用了吧:Wow。另一个则是FaceTime了,看了Apple网站上那个FaceTime的广告,即使你从来没有用过智能手机,恐怕也会有给全家老小人手配一个的冲动吧?至少我有。

手机视频通话新鲜吗?这个好象是3G手机的基本功能。那为什么FaceTime就能打动人呢?因为效果好。效果怎么好呢,首先是所谓高清视频,之前的手机视频通话,特别是3G通话,受网络和终端双方面的限制,要么就是画面比较小,要么就是不够清晰,而FaceTime所演示的画质,已经足够好了。其次是可以切换前后摄像头,这个其他手机要实现倒也不难,说不定也有谁实现过,不过简单的说支持切换摄像头,跟说你可以让对方”See you or what you are seeing”就是天差地别了。

FaceTime出来的时机真是非常好,wifi已经非常普及了,几乎所有的建筑内都有了,有些地方甚至路上都有,没有的话3G无线技术也勉强称得上宽带了。而手机本身的运算能力也足够了,以合适的价格找到好用的芯片已经不是太难。而FaceTime在这样一个合适的时机,以高度关注用户需求的姿态横空出世,自然极具吸引力啦。目前FaceTime只支持WiFi,从技术上看支持3G网络很简单的,只是不知道这个决策是出于AT&T 的限制呢,还是3G的数据链路不足以保证足够的质量,估计前者的因素居多了。

iPhone的多任务是个更有意思的特性。iPhone OS其实从一开始就有完善的多任务支持,实际上iPod多媒体播放器、Safari浏览器都是可以常驻运行的,但是就是不对第三方应用开放。本质上,还是受了电力和内存容量的限制。现在,iPhone4的电力和内存都有条件,在不怎么损害用户体验的前提下,支持多个应用程序同时驻留内存运行了。那么iOS4怎么支持多任务呢?按Home钮回主屏幕,但程序并不退出,这个基本上是自然而然的设计了。可是我怎么切回这个程序呢?

可以有很多种办法,比如系统自带任务管理器应用、把状态栏变成下拉卷帘里面放任务清单、在Settings里加一个任务管理等等。目前iPhone的实现是双击Home钮,屏幕底部会出现一个正在运行app的清单,点击切换,杀任务则跟删除应用的操作是一样的。实现并不重要,重要的是理念,Jobs说过如果我们支持多任务而用户还需要理解进程之类的概念那真是糟糕透顶(非原话)。

顺便说说,我感觉现在iOS4的多任务管理设计还是有一些问题,首先是缺少视觉指引,应该在有应用驻留时在Dock或者那排小点点旁边加个指示,在初次切换时提示一下双击Home钮进行任务界面,虽然这个操作倒不是很难猜出来,不过总有一些用户会因此而完全意识不到还有这样一个功能。iPhone在支持调整App图标位置以后,初次开机会提示长按图标激活这项功能,在任务界面里应该也提示一次。

总而言之,iPhone4就是又在合适的时机,推出了好的用户体验。Apple又一次告诉我们:关注时机,关注用户体验。

WWDC2010 预测

又一个WWDC2010 预测

教主说过:你们不会失望的。那么Apple得要折腾出些什么东西才能达到这样的效果了?我也有一个水晶球,它展示了一些模糊的未来。

Apple现在有两个问题,一个是Adobe,一个是Google。

Adobe死气白赖非要把Flash弄到iPhone OS上跑,Apple死活不让,这事闹了有一阵了。这Flash的核心包含两部分,一部分是矢量图形动画,另一块是视音频。视音频FLV在互联网界仍旧是事实标准,不过不用指望Apple会改变态度去支持它,就连在Flash平台支持方面非常积极的Google也整出了WebM要革FLV的命。那么矢量动画和富媒体UI呢?不用多说,Apple肯定是要在HTML5上做文章,看看http://apple.com/html5,效果还真是够炫了。

所以预测一:WWDC2010会有相当的HTML5宣传,包括Safari新版本、iWeb新版本。

Adobe在设计和印前出版领域那是极端强大滴,而iPad则是要取纸媒而代之。这给Adobe一个拓展业务的大好机会,事实上它抓住了,一个良好的而向iPad的富媒体设计出版平台已经借着Wired杂志iPad版的发行而闪亮凳场。而Apple也是一家以设计而著称的公司,没有任何理由为他人做嫁衣裳,何况这人还是Adobe。

因而预测二:Apple将推出一个iPad出版平台,iLife和iWorks都会加入电子出版物生成和导出功能。

遥想3年前,iPhone刚发布时,是没有什么劳什子的SDK的,只有Web App。这两年iPhone OS平台上的Web App有点半死不活的意思,倒是Google借着Google IO 2010又炒了一把冷饭,Google的Chrome WebApp Store要开张了,凭借Chrome OS,可以同时支持互联网PC和Google TV。Apple应该会感谢Google帮着推广Web App的概念吧,因为Apple的支付和发行渠道建设比Google非要绑checkout的平台要完善和实用多了。

故此预测三:Apple将再次强调Web App,AppStore的各项支付功能都会集成到Web App。

Google目前手上有三大武器,Chrome OS、Android、Google TV,老实说除了Chrome OS,那俩还嫩点。Android 2.2 (Froyo) 虽然加上了一堆酷东西,不过离iPhone的用户体验还差点。从TV专业市场的观点看Google TV唯一的亮点也就是那个开放的遥控器接口协议了,不过相对那个怎么都让人不相信是Apple产品的AppleTV,这回乐子大了。

显然有预测四:Apple将重新设计Apple TV,重点根本不在硬件上,那个Front Row需要彻底重做,同时保留那个极简主义的遥控也是可以预期的,iPhone/iPad将可以控制Apple TV。

以及预测五:iTunes Adaptive Bitrate Streaming将在云上向iPhone/iPad/Mac/TV提供实时内容。

还有预测六:3D Video现在很热,但是还成熟,估计Apple不会公布相关支持。

现在不支持视频通话的3G智能手机已经不多见了,想来iPhone始终不支持前置摄像头恐怕不外乎两个原因,一是没有找到大小和成像质量都合适的摄像头,一是还没有找到一个优雅的技术架构来支持多摄像头和双向视频通信。

这样就有了预测七:iPhone 4G会有前置摄像头,并且会有新的双向视频支持Framework。

最近关于Mac Mini的传言很多,除了上SSD、HDMI 1.4,大概只有display over wifi才算前卫了,不过这个目前没有合适的显示器支持,莫非还要配套发布支持无线连接的Cinema显示器?如果还能玩出啥新花样那真是创意无限了。这个机器就不预测了。

旧世界,新世界,未来水世界

这是一个新旧世界交接的时代。旧世界摇摇欲坠,新世界冉冉上升。

旧世界

曾经,给计算机编制程序是那么的高深、艰难、缓慢。终于有一天,编程语言和输入输出手段都进步到普通人也可以玩弄程序了。当爱好者们沉醉于折腾和互相显摆成果时,有一个天才儿童窥见了未来20年的大势,建立了一个颠覆性的模式,并用一篇商业软件宣言昭告天下:欲用软件,必先付钱,如若不付,则为盗贼。是啊,比尔盖茨话朴实而略带悲愤,

Who can afford to do professional work for nothing? What hobbyist can put 3-man years into programming, finding all bugs, documenting his product and distribute for free?

从Altair BASIC起家,Bill Gates建立起微软这样一个巨大的商业帝国,其核心就是这么两个三段论:

每个人都需要一台PC机,每台PC机都需要软件,所以会有巨大的软件需求。

写个好软件很费时费力,时间和精力是有价值的,所以软件要卖钱。

事实上,微软确实编制了好软件,并且用好价钱卖了很多份。不过,微软这个商业模式的时代已经过去了,如果不能认清这一点,它恐怕难逃焦油坑里那只巨兽的命运。

不难看出,今天的世界有点不一样了。信息系统已经不再是神秘莫测的尖端科学,而是经济和生活里再平常不过的基础设施。软件应用范围之广,系统规模之 大,已经没有那家可以自行搞定一切,行业分工格局早已形成。

在反复的斗争与协作之后,计算机硬件标准化的很好了,软件工业也积累了足够多的 基础设施,近些年的软件开源运动应运而生,业界的力量可以集中到少量几个互相竞争的项目上。这个大浪摧枯拉朽,势不可挡,其根本还在于软件行业已经发展到 这个历史阶段,它已经是会自主思考的生命,现在他想要大量高质量的可重用逐渐,让开发软件变得容易。

虽然在不少领域还没有被水淹到,但是没 有人可以否认:

Who can afford to do professional work for nothing? Many companies and individual developers do.

What hobbyist can put 3-man years into programming, finding all bugs, documenting his product and distribute for free? Many hobbyist put thousands of man years.

新世界

Google就是这个旧世界的终结者。Google 不靠卖软件或硬件过活,它卖广告。Google也窥见了天机:如何从信息流动中挣钱。

以互联网为代表的信息系统发展得太快,information早已at everyone’s fingertips,如何找到有用的信息却成了每个人都头痛的大问题。这显然也是一个需求巨大的市场,帮助人们高效找到需要的信息是可以买个好价钱的。不过,仅仅如此的话,Google不过是另一家IT公司罢了,如果竞争者有更好的技术,很容易打败他。

Google多走了一步,它帮助人们寻找信息,并且免费。有什么能打败好而且免费呢?我们都知道Google的收入95%来自广告,有必要重新审视一下什么是广告。广告就是一种信息,当你打算买东西时不免要寻找合适的品牌和价格。每个人都知道,在适当的时候展示给适当的观众是卖广告的关键,而Google已经掌握了某种分析方法,这是一种门槛很高的方法,需要有先进的技术和海量的数据,也是目前最有效的通用方法。

不过,Google对用户行为的理解和预测还很初级,它需要更多的可以观测并加以理解的信息流动。GMail不需要收钱,Docs不需要收钱,Android不需要收钱,Youtube不需要收钱,Google TV也不需要收钱,连宽带接入都可以白送,只要给Google一个机会观测你的行为就行。

今天的Google的新世界正在茁壮成长,旧世界余势未消,在云计算泛滥的推动下,过几年形势会更明显一些。

未来水世界

眼下Google代表的新世界势不可挡,不过,它就能“千秋万载,一统江湖”吗?显然不会。会有一天,这个行业发展到下一个阶段,今天难以获得的高效信息检索和分析已经是随手可得的,即便一个孩子也能调动巨头们同等级别的资源和算法,那么世界又该改变了。当你在沙漠里,水是多么宝贵,当你已经淹没在水里,游泳圈可能更有价值。