Richard's profile完美生活PhotosBlogLists Tools Help

Blog


    9/23/2007

    旅途拾贝

    长夜漫漫,无心睡眠,痛苦倒时差中......

    (一)

    在美国遇到一位学长,改革开放后第一代大学生。他谈起他们当年在学校的娱乐,当时没有流行歌曲和卡拉OK,更没有互联网,就是听古典音乐,读文学名著。古典音乐我也听的,现在我的iPhone里就存着贝多芬的九部交响乐和Mussorgsky的Pictures at an Exhibition。但他们的听法有不同,是把以百千计数的知名音乐家的所有作品一部一部地听下去。他们几个人当时在清华还发起了一个音乐走廊,现在已经推出了历史舞台。至于文学名著,我自认为同龄人中也算读过不少的,毕竟现在生活节奏如此之快,总不能指望我把《静静的顿河》这样的大部头也读完吧。但他们那一代人就读完了,连同无数我连名字都说不上来的名著,无语啊。只好安慰自己说,每个时代都有其自己的风尚,有其自己的任务。

    学长谈及当年他们宿舍一个男孩去相亲,吃了一顿饭。末了女孩对他说,等你把《约翰·克利斯朵夫》读完再来找我吧。——你能想象今天的女孩说出这样的话来吗?

    (二)

    和一个女孩聊天。她问我,关于女孩,如果要你在美丽与智慧之间选择一样的话,你会怎么选?

    我想了想,回答说,美丽。其实现实中这不会是一个二选一的问题,我会综合考虑。从清华放出来以后我本来以为我会无条件的选择美女,末了却发现我的偏好已经深深的打上了清华的烙印,在和那么多才女同窗多年之后,缺乏智慧的美女对于我来说已是不可接受了。

    我反问她,关于男孩,你会怎么选?

    她说,我都不选。

    我愣住了。

    她说,我选择阳光。

    我无语。
    9/15/2007

    iPhone notes

    You may stop here if you don't have an iPhone.

    Updated on Sept 14, 2007.

    ==============================================================================


    Versions:
    - Mac OS X 10.4.10
    - iTunes 7.4.1
    - Firmware 1.0.2
    - Installer.app 3.1 (2.63?) http://iphone.nullriver.com/beta/

    Steps:
    - Change SIM card
    - Restore & upgrade firmware using iTunes
    - Installer.app
    - Activation: youtubescript
    - Install OpenSSH and change root password (default: dottie)

    Must-haves:
    - Summer Board
    - iPhone Apper: turn URLs into standalone apps

    Development:
    - Heavenly (OS image)
      - Copy from iPhone?
      - Or decrypt:
        - Use vfdecrypt
        - Fnd decryption key with the ramdisk dmg:
              strings 009-7662-6.dmg | grep "^[0-9a-fA-F]*$"
          Look at the strings that come out. One of them is very long.
    - Toolchain
      Makefile header:
    CC=/usr/local/arm-apple-darwin/bin/gcc
    CXX=/usr/local/arm-apple-darwin/bin/g++
    CFLAGS=-fsigned-char
    LDFLAGS=-Wl,-syslibroot,/usr/local/arm-apple-darwin/heavenly -lobjc -ObjC -framework CoreFoundation -framework Foundation -framework UIKit -framework LayerKit -framework CoreGraphics -framework GraphicsServices -framework Celestial -framework MusicLibrary
    LD=$(CC)

    Tricks:
    - icon order: DisplayOrder.plist
    9/7/2007

    跨平台图形界面开发

    选择多多是好事还是坏事?这个问题并不容易回答。用户自可以选择他们喜欢的操作系统,但是对于开发者来说,要让一个图形界面的软件运行在不同的操作系统之上,着实是一项艰巨的任务。事实上,即使是将目标客户局限在Unix一族,跨平台开发也非易事,何况还要扯上Windows、Mac乃至于各种嵌入式操作系统呢。

    --------------------------------------------------------------------------

    如何面对这一挑战?Java的回答是虚拟机,一次编译,到处运行。乍看上去这倒是一颗解决跨平台开发问题的银弹。然而,正如C++之父一针见血地指出的那样,"Java不是平台无关的,Java本身便是平台"——而且是一个缓慢、丑陋的平台。这后半句是我说的。在我念书那会儿,一个软件是不是用Java语言写的一眼就能够看出来:但凡用Java开发的图形界面程序,总免不了蜗牛般的启动速度,闪烁的硬盘灯,特别是标志性的简陋界面。几年过去,今天的Java无论在速度上还是在Look & Feel上都大有改观,但毕竟长江后浪推前浪,它在跨平台图形界面软件开发领域的机会恐怕已经过去了。

    当我还在为我的硕士学位课题搜寻适当的开发工具时,我非常讨厌Java。速度问题尚在其次,主要是它的图形界面实在是太难看了,当时也就是凑合着能用的程度。Java程序在所有的操作系统上看起来都一个样,这种思路不能说错,但你应该向Mac看齐啊,怎么能比Solaris还不如呢。

    其实我也明白,我的指责未必有道理。美不美完全是个人的主观感受,也许对于Java的铁杆粉丝来说,Java程序的界面才是最美最美的。这就带出了另外一种思路:既然大家口味各有不同,与其强求一致,何不顺应各人的习惯?让Windows用户看到Windows风格的界面,而让Mac用户看到Mac风格的界面,不是挺好吗?换言之,不必像Java那样reinvent the wheel,重新设计出一整套图形界面组件,简单地封装一下各个操作系统已有的组件就好。应该说选择走这一路线的有很多。应用软件中有Firefox、Open Office等,我相信Adobe Reader、Real Player等也都是这样做的。纯粹的开发库也颇不少,wxWidgets(当时叫wxWindows)可谓是其间的佼佼者,它也成为我硕士学位课题的选择。

    我为什么选择wxWidgets?从最终用户的角度来看,它生成的图形界面完全是Native的,没有任何不适应之处,这是它胜过Java的地方。(微软在我结题之前推出了Windows XP,我很容易就鼓捣出了Windows XP新风格的图形界面,将屏幕截图收入学位论文。要是我一开始选择了Java什么的,我就不知道该怎么办了。)从开发者的角度来看,它的使用相当简洁、方便(事实上它用起来很像MFC),文档齐备,而且作为一个开源项目,它的开发与维护一直相当活跃,各式组件极大丰富并持续增加,很容易就搭出相当漂亮的界面,这是它胜过其余走Native路线的开发库的地方。wxWidgets主要支持C++,口号是一次编写,到处编译、运行;等我学会Python,才注意到原来它也支持用Python、Perl等脚本语言开发,这一来连编译这一步都省掉了,开发起来比Java还快,这是后话。

    然而Native路线也有其问题。还在我刚开始留意wxWidgets的时候,我就看到有人批评说,走Native路线,就需要处理每一种平台上每一种组件的每一个bug。我当时并未将这一警告放在心上,几年下来,越来越觉得这是真知灼见。比如我用wxPython(Python + wxWidgets)写了一个日记程序,就遇到无数稀奇古怪的问题。最近解决的一个问题是这样的:我发现在MaxOSX平台上运行时,程序某窗口上大部分组件都不能用鼠标点击,查了差不多两个钟头,最后发现是某wxWidgets组件在MacOSX上对Z-Order有严格要求,而这个问题在Windows平台上就不存在。这样的事情多遇上几次,很能陶冶情操。

    --------------------------------------------------------------------------

    就在我琢磨如何开发跨平台图形界面软件的时候,问题本身却正在发生变化。十几年来,Netscape鼓吹的网络计算机失败了,Sun鼓吹的Java Applet失败了,微软鼓吹的ActiveX也失败了,然而,就在一夜之间,AJAX诞生了,Web 2.0的时代到来了。从技术上讲,Google于2004年愚人节推出的Gmail令人信服地证明了Web应用不是什么二等公民,它完全可以与桌面软件同样精彩。后知后觉的我,还在三台机器之间将自己的日记倒来倒去,而比我更年轻的程序员们已经专注于开发运行在浏览器之内的软件了。现在,重要的是跨浏览器(Internet Explorer、Firefox、Opera或Safari),而不再是跨操作系统(Windows、Mac或Linux)。而Google的GWT——AJAX开发的利器,也随之成为最热门的开发工具。

    今天,我通过浏览器收发邮件,通过浏览器排定日程,通过浏览器在线聊天,通过浏览器编辑文档,通过浏览器购物订座......随之而来的,是桌面软件的作用日益淡化。短短几年之前,浏览器还不过是诸多桌面软件之一,而今却变得比操作系统还要重要;而桌面软件也都争先恐后地和因特网攀上亲戚——即使不支持网络存储、发表或同步什么的,至少也该检查一下更新吧。仿佛就在昨天,浏览器还在一个组件一个组件地模拟着桌面软件的界面;而今天,继Java不成功的尝试之后,万维网接过火炬,业已确立起一整套统一的丰富的图形界面标准,成为越来越多的桌面软件参考乃至遵循的对象......Adobe推出了Air,允许开发者使用AJAX、Flash等Web技术来开发桌面软件。这个世界颠倒过来了。