2009年12月22日星期二

replay

发现最近的生活,越来越重复了。怎么说呢?每天早上起来,照例刷牙洗脸,吃饭出门。走在南泉路上,会看到一辆119。拐到兰村路上,会看到一个黑衣MM,对面走过来。人很漂亮,一般是在打手机,否则就是拿手机听歌。前走一点,有个保安在和卖煎饼的聊天,一个抽烟一个翻煎饼,每天的差异差不多就是有客户和没客户而已。再往前,在东方路前会碰到一个辫子MM走出来,辫子很长,从后面看很漂亮。不过记住,如果你不想对世界失去信心,一定要走在她后面。走在前面千万不要回头,无论是有人喊你还是后面有车要70码你。我头次很好奇的回了个头,结果一天都无法正常工作。走到东方路,有八成概率是一堆人在等红灯。恭喜,这代表你会在20秒内碰到绿灯――平均值通常是5秒。
上地铁后就更规律了,如果一堆人在等车,那车上肯定也是一堆人,你如果被挤上去就算是走运了。相反,如果只有小猫两三只,那么车上多半也没有人,慢慢走上去就好。到了世纪大道换车,就可以开电脑放音乐,头一首歌照例是《钢之炼金术士2009》的片头。到了张江,有车停左边和车停右边两个选项。不过没有关系,凡是在进站前停车的,就是左边,否则是右边。因为车要靠右开,停靠右边站台的车在开出时,换到左边(相对他是右边),而我们的车在进站时要靠左,也需要换边。不停车怕又碰到昨天一号线的事故,因此惯例是要停车的。
地铁下来后,有两个红绿灯,第一个灯是20秒横走40秒直行,因此多数会直行过去。第二个灯是50秒横走20秒直行,因此多数会横向过街。联合以上数据计算概率,两次直行的概率是19%,先直行后过街的概率是47.6%,先横后直行的概率是33.3%。没有觉得什么不对?看来又多一个走傻掉的。计算以上概率的方法是分支法,联合概率乘法?我没事先过个街,第二个路口走回来?那不真傻了?
最后,到办公室。一般这时候是王菲在唱《只有我自己》。如果刚唱到"走过千山万水",那说明地铁走的还是挺快的。如果已经到了"失去你,就失去,面对孤独的勇气",那――要么是地铁走的慢了,要么是你走的慢了。

2009年12月7日星期一

论BTchina的倒掉

    BTchina倒了,死的很惨。被广电总局直接勒令关闭,连整改的机会都没有。无疑,大家都知道,VeryCD会紧随其后。无论是非如何,请允许我先向这两家陪伴我多年的网站道声感谢,一路走好。
    就打击这个问题来说,我无疑是赞成的。广电总局打击集中向两个关键词,盗版和非法。无论哪个,都是应该打击的对象。但是这次打击本身却值得怀疑,主要集中在三点,是否允许整改,选择性执法,还有实际效果。
    首先,拿整改问题来说。BTchina和VeryCD做的是下载业务,其中有盗版下载再正常不过。一般打击都是先责令整改,然后再关服务器——虽然我们知道责令也不见什么效果,BTchina肯定改不过来的。不过样子还得做啊。不过从某种意义上说,样子做不做也就是政府内部的事情。无论做不做都是合理合法的,所以这点问题还不大。
    其次,我质疑比较大的一点,就是选择性执法。有个朋友说的比较精辟,每只猫都有他的目的。我总是不惮以最大的恶意来揣测咱们的政府——他们这回想干啥?如果要打击盗版,那问题严重了去了。中国桌面上,十有八九都是盗版Windows。哪怕你买了个笔记本,上面带了个正版Vista,一般也非要装个番茄花园不可。中国人看的电影,听的歌,乃至于用的手机,都是盗版产品。所以从这个角度说,我到真的很愿意国家打击盗版。盗版没了我们的软件才更好卖,盗版没了才有人被逼用Linux,盗版没了我们这行才能赚钱。不过咱得看事实,不能听风就是雨,更不能YY。广电总局要真有决心打击盗版,首先应该奔着卖盗版盘和卖盗版书的去——虽然他们也被互联网下载整的生不如死。问题是,他们没有。
    那,会不会是打击非法音像呢?这话说的更搞笑了。BTchina和VeryCD上有没有色情我不敢说,不过要有也绝对少于新华网。这不是指责新华网有多色情,而是阐述两者身为不同主体的无奈事实。BTchina和VeryCD要是碰到色情门那是沾上就死抡上就亡。作为半国企的新华网,就算偶尔行为出格,只要不出大差错无非就是检讨一下而已。这种情况下,前两家的审查力度,和后一家怎么可能同日而语?实话说,我当初还非常努力的试图在VeryCD上找什么色情资料。只能说他们的版主比较尽责,连疑似的都没有。要打击非法音像,还得找小网站——就是那种准备烧一把就走的。除非碰上严打,否则等查处来的时候,人都没了。
    那我就得怀疑了,广电总局想干啥呢?说打击盗版,不像,说打击非法音像,也不像。这事情我怎么看怎么觉得像上海政府查处黑车,黑车不黑车不重要,重要的是规范正当市场——说白了就是交钱。百度百科也涉嫌抄袭Wikipedia啊,怎么没看广电局找他们麻烦呢?人家3000万春晚赞助可不是白交的。
    那这事靠不靠谱呢?我只能说,越来越不靠谱了。从本心来说,我希望打击盗版,但是从现实而言,无论是美国政府,欧洲诸国政府,还是中国政府,对打击盗版都没啥办法。前两者有海盗党——当然,他们也被人盗版了他们的logo,真是讽刺。后者则有1亿多网民,每天发明各种奇怪的办法。现在的网民水准是越来越高了,或者说软件是越来越傻瓜了。原来下载必须在中心节点上投入大量资金,而且政府一来就玩完了。后来则是中心节点上只要搭个论坛,剩下的自然有P2P软件搞定。现在,根本就没中心节点。DHT的普及,使得去中心化的优势体现的淋漓尽致。Emule里面可以用kad搜索,直接搜索你需要的资源——正常情况下不比VeryCD差。而torrent里面则有个种子市场,可以直接搜索你要的种子。
    好家伙,连服务器都不要了,这次广电局再要下手,只有从网络传输上下手了——中国为了解决轮子问题,为GFW投资了不少钱。不知道广电局是否能收到足够的钱,把这个系统扩大个几倍,把P2P的混淆协议也全概括进去。作为一个老程序员,我劝诫所有的下载者一点。下次再弄的时候,用emule的kad搜索来找你需要的资源,你会发现其实verycd也不是必须的——虽然对他们来说,这是个比广电局查处更不利的消息。

2009年12月6日星期日

用python实现webserver(二)――Thread

    我们上面说过,Prefork模式有着先天的缺陷。针对http这种大量短请求的应用(当然,http1.1以来,有不少客户端使用了长连接),Prefork的最高并发很让人不满。并且,无论是否高并发,Prefork的性能都非常不好。现在我们介绍一下Thread模式。
    和Prefork非常类似,每Thread模式通过新建的线程来控制对象的传输。和Prefork模式不同的是,一个用户能够建立多少个线程并没有限制。在系统上似乎有限制,65535个,但是同样,文件句柄最高也就能打开65535个,因此通常而言一个服务器最高也就能顶50000并发,无法再高了(nginx就能够支撑5W并发,再高要使用一些特殊手法来均衡负载)。而且线程的建立和销毁的开销非常小——没有独立的空间,不用复制句柄,只要复制一份栈和上下文对象就可以。但是,由于所有线程运行在同一个进程空间中,因此每线程模式有几个非常麻烦的瓶颈。
    首先是对象锁定和同步,在每进程模式中,由于进程空间独立,因此一个对象被两个进程使用的时候,他们使用了两个完全不同的对象。而线程模式下,他们访问的是同一个对象。如果两个线程需要进行排他性访问,就必须使用锁,或者其他线程同步工具来进行线程同步。其次,由于使用同一个进程空间,因此一旦有一个连接处理的时候发生错误,整个程序就会崩溃。对于这一问题,可以通过watchdog方式来进行部分规避。原理是通过一个父进程启动子进程,子进程使用每线程处理请求。如果子进程崩溃,父进程的wait就会返回结果。此时父进程重启子进程。使用了watchdog后,服务不会中断,但是程序崩溃时正在处理的连接会全部丢失。最后,是python特有的问题——GIL。由于GIL的存在,因此无论多少线程,实际上只有一个线程可以处理请求,这无形中降低了效率。下面我们看一下Thread模式的测试结果:
测试指令: ab -n 1000 -c 100 http://localhost:8000/py-web-server
返回结果:
Document Path:          /py-web-server
Document Length:        1682 bytes

Concurrency Level:      100
Time taken for tests:   3.834 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      1723000 bytes
HTML transferred:       1682000 bytes
Requests per second:    260.85 [#/sec] (mean)
Time per request:       383.362 [ms] (mean)
Time per request:       3.834 [ms] (mean, across all concurrent requests)
Transfer rate:          438.91 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   75 468.4      0    3001
Processing:     2   32  84.0     20    1593
Waiting:        1   30  84.0     18    1592
Total:          2  107 511.0     20    3828

测试指令: ab -n 10000 -c 1000 http://localhost:8000/py-web-server
返回结果:
Document Path:          /py-web-server
Document Length:        1682 bytes

Concurrency Level:      1000
Time taken for tests:   37.510 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      17231723 bytes
HTML transferred:       16821682 bytes
Requests per second:    266.60 [#/sec] (mean)
Time per request:       3751.004 [ms] (mean)
Time per request:       3.751 [ms] (mean, across all concurrent requests)
Transfer rate:          448.62 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  695 2422.8      0   21004
Processing:     0   67 341.1     28    9855
Waiting:        0   64 340.5     26    9855
Total:          0  762 2516.6     29   30856

    根据结果可以看到,Thread模式在1000并发的时候还工作良好,每秒处理请求数在250-300req/sec,但是每个请求的总处理时间已经高达760ms。并且从中我们可以看出,大量的时间都是消耗在等待上,说明线程的建立逐渐成为问题(为什么?下面说明)。实际性能测试的结果,也表明大约一半的时间花费在了等待上,而另一半花费在了线程建立上。加上销毁的开销,整个系统主要的瓶颈在于由于大量线程建立和销毁造成的CPU开销上。
    结合上述情况,我们同时也想到一些问题,Thread模式在一个进程中,到底能创建多少个线程?上文上说大约是5W个,其实太理论了。实际上如果按照Windows来计算,最高不超过1000个,Linux下也在这个数量级上。为什么?由于进程内存空间的问题。一个线程在创建时,默认需要1M的内存空间来作为栈。对于专用的高速系统,我们建议将这个值调整到500K,一般一个session的内存消耗就在500K上下,考虑还有堆消耗,500K是一个比较安全的值。单一进程,32位访问的寻址空间是4G,然而系统需要使用其中的2G作为系统空间——这一状态可以经由启动时的3G参数调整(针对Windows)。然而由于使用了系统空间,因此系统中很多表项空间不足,对稳定性也有不利影响,通常我们建议不要进行这种“优化”。而系统的基础使用和库使用需要数百M的空间,安全起见,能够自由的用于栈的可分配自由空间只有1G的大小。这1G的空间,以创建1M的栈计算,只能同时开1000线程。这就是单一进程中线程的极限。
    实际上,是根本做不出这么多的线程的。贝壳的小型测试机上只观测到过10-20个线程/每进程。这是由于线程的建立也需要时间,在创建下一个线程之前,工作进程已经跑了一些了。创建几个工作线程后,第一个工作线程已经完成工作。因此我们在实际中看到的是,压力越高,连接建立的速度越慢。因为负责创立新线程的线程获得越少的CPU时间用于工作。为了增加处理速度,通常我们可以采取一个CPU建立一个进程的策略,这被称为多线程/多进程模式。下面我们来测量其工作效率:
测试指令: ab -n 10000 -c 1000 http://localhost:8000/
返回结果:
Document Path:          /
Document Length:        3318 bytes

Concurrency Level:      1000
Time taken for tests:   20.319 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      33590000 bytes
HTML transferred:       33180000 bytes
Requests per second:    492.14 [#/sec] (mean)
Time per request:       2031.939 [ms] (mean)
Time per request:       2.032 [ms] (mean, across all concurrent requests)
Transfer rate:          1614.36 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  160 912.4      0    9008
Processing:     0   28 174.7     12    4738
Waiting:        0   27 174.3     12    4738
Total:          0  188 987.5     13   12758

    这是台双核的机器,性能差不多提升了一倍,这就是多进程/多线程模式的威力。按照这个数据外推,在常见的8核处理器上,将达到2000req/sec的处理速度,甚至更高。
    当然,也不用高兴太早,我们看一下apache2的每线程模式:
测试指令: ab -n 10000 -c 1000 http://localhost:8000/
返回结果:
Concurrency Level:      1000
Time taken for tests:   6.147 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      3213925 bytes
HTML transferred:       453375 bytes
Requests per second:    1626.87 [#/sec] (mean)
Time per request:       614.678 [ms] (mean)
Time per request:       0.615 [ms] (mean, across all concurrent requests)
Transfer rate:          510.61 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  111 398.3     59    3087
Processing:    28  126  99.0    113    1772
Waiting:       10  104  98.7     92    1745
Total:         78  237 423.1    175    3691

Percentage of the requests served within a certain time (ms)
  50%    175
  66%    188
  75%    207
  80%    217
  90%    235
  95%    256
  98%   1016
  99%   3222
 100%   3691 (longest request)
    这种效率在8路的CPU上,性能将达到6400req/sec。所以想用python实现真正高效的前端本身就是个错误的逻辑。

2009年11月10日星期二

MSN强制升级

    从前天开始,单位里的MSN8.5就无法登陆,老是提示我要升级。今天家里的MSN也无法使用了,被逼无奈,先用pidgin顶一阵再说。不过现在贝壳正在考虑MSN的用户搬迁工作,目标是迁移到Gtalk上,不行QQ。
    有几个朋友问贝壳,升级不就好了,何必兴师动众呢?首先,MSN8.5的安装程序只有20M,而MSN9的安装程序高达132M。其中多出来的100多M东西可不是白装的,他们大概会吃掉你30-40M的内存。而且9里面有很多插件(其实8.5也有,不过就一个,总算还好屏蔽),安装上去后,工作的时候做调试麻烦异常,工作机器上装这个纯粹给自己找麻烦呢。而且微软素行不良,有劣迹在前。盗版黑屏问题大家还记得吧?升级提示上说是安全修补补丁,结果装上去屏幕就黑了。不说黑屏现在如何了,就说这种欺骗用户安装的手段,有谁还相信这次的强制升级是为了安全问题么?微软系统安全是出了名的差,一个安全公司用测试用蠕虫在win7上跑,只有20%不到能被微软自己拦截。其中固然有安全公司危言耸听,但是测试过程是全公开的,做假不来。这还是微软主推的最新操作系统,安全性据说很好。如果真是为了安全问题,先把Windows里面那堆雷死人的安全问题解决了才是王道。
    反倒是QQ的强制升级政策我觉得尚算可以。 QQ协议分为2005/2006/2007/2008多个版本,通常而言可以使用当前版本和前一版本。就是说,现在用的协议是2008的话,那么2007协议还可用,而2006协议就不再支持了。通常而言,这种时候继续使用2006协议的人微乎其微,基本可以忽略不计。这个政策主要是给不愿意升级的人一个缓冲的空间。对于腾讯而言,实施这个政策其实比微软更有压力。因为微软的协议是公开的,而腾讯则是采取封闭协议,甚至打击第三方客户端的企业策略。我们姑且不论这个策略的得失,但是维持两个协议版本,就给破解协议的人留下了破解的时间和空间。因此对于腾讯而言,这个策略是和公司战略相违背的。
    更深一层的问题是,强制升级问题说明了我们所依赖的服务的脆弱性。MSN在中国占据的客户群体并不算大,远远不比QQ。然而就是这样一个客户群现状,微软就敢于强制升级。今天是强制升级,明天收费呢?所以说任何事情依赖一个公司是不行的。我还是会使用MSN,但是会逐步将用户迁移到Gtalk和QQ上,并以开心网和Facebook做补充。力争做到这三个IM中任意两个能覆盖大部分朋友群体,开心和Facebook保留所有联系可能。这样可以适当制衡某些软件公司(不仅是微软,还有腾讯),也可以减小出问题时的损失。
    其实要做到这点并没有任何困难。当你认识一个人的时候,只要和他保持两种以上的IM,并且在开心和Facebook(当然,这个没法强求了,毕竟中国的GFW...)上交换一下好友就好了。对抗强权,从小事做起就好。

2009年10月20日星期二

用python实现webserver(一)――Prefork

    要实现webserver,首先需要一个tcp server。作为python的设计原则,最好是使用SocketServer或者封装更好的BaseHTTPServer来复用。不过既然我们的目的 是为了学习,那么就不能用这两个内置对象。我们先实现一个最古典的每进程模式实现。而我们标题上的Prefork,则是apache服务器对这个模式的称 呼。
    每进程模式,顾名思义,就是每个新连接开启一个进程进行处理。首先创建一个socket,bind到一个套接字上。当有请求时,accept。(好多英 文,不是我有意cheglish,全是api的名称)accept会返回一个通讯用的socket,这时fork出一个新的进程,处理这个socket。 主进程在每次进入accept后阻塞,子进程在每次进入recv后阻塞。这样会带来几方面的好处。首先是模型分离,即使一个子进程崩溃,也不会影响到其他 子进程。其次是身份分离,当你需要让http server以高于常规运行(常规都是以apache, www-data, nobody运行的)用户的权限进行工作时,每进程模式是唯一安全的模式。其他模式都会造成同一进程内的其他session也暂时获得这个权限的问题。但 是同样,这样有几方面的问题,主要就是性能问题。
    由于每个连接都需要fork出一个新进程去处理。因此针对大量小连接的时候,fork和exit消耗了大量CPU。问题更严重的是,由于用户进程总数是有 限的(PEM或者ulimit都会限制这个数量),因此压力大到一定程度时(通常是1024或者2048),就会出现无法创建连接的情况。而对小型服务器 而言,在压力还没大道这个程度以前,服务器就会由于性能达到限制而造成段错误。以下是实际试验指令和结果:
测试指令: ab -n 10000 -c 100 http://localhost:8000/py-web-server
服务器报错:
[20090924 05:51:18]: Traceback (most recent call last):
[20090924 05:51:18]:   File "main.py", line 19, in <module>
[20090924 05:51:18]:
[20090924 05:51:18]: sock.run ();
[20090924 05:51:18]:   File "/home/shell/py-web-server/server.py", line 30, in run
[20090924 05:51:18]:
[20090924 05:51:18]: while loop_func (): pass
[20090924 05:51:18]:   File "/home/shell/py-web-server/server.py", line 56, in do_loop
[20090924 05:51:18]:
[20090924 05:51:18]: if os.fork () == 0:
[20090924 05:51:18]: OSError
[20090924 05:51:18]: :
[20090924 05:51:18]: [Errno 11] Resource temporarily unavailable

测试指令: ab -n 1000 -c 100 http://localhost:8000/py-web-server
返回结果:
Document Path:          /py-web-server
Document Length:        1320 bytes

Concurrency Level:      100
Time taken for tests:   14.189 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      1361000 bytes
HTML transferred:       1320000 bytes
Requests per second:    70.48 [#/sec] (mean)
Time per request:       1418.851 [ms] (mean)
Time per request:       14.189 [ms] (mean, across all concurrent requests)
Transfer rate:          93.67 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   18 328.4      0    9000
Processing:     4  109 211.0     95    3335
Waiting:        4  100 211.1     86    3324
Total:          8  127 498.3     95   12332

    为什么只有100并发?因为200并发的时候测试机上的服务器已经崩溃了。而且我们看到服务器的效率大约是70req/sec。等过两天,讲到 Thread模式的时候,大家可以对比一下Thread模式的效率。基本上说,针对普通服务器,个人觉得Prefork模式并发数量尽量控制在 100-800这个级别比较合适。更高的也许能承受,可是就可能发生不稳定(原因上面有说,就是进程数量限制)。那么Prefork模式通常用在哪里呢? 数据库!Oracle和Postgresql全是Prefork模式的(其中Oracle的Prefork模式还经过一次分发,更复杂一些)。压力通常在 100-200这个级别,连接基本不断开,连接的请求和销毁开销很小,但是处理的过程开销很大。并且,由于处理过程复杂,一个链接的处理错误不能殃及整个 系统。对于这种问题,最好采用Prefork模式进行处理。同类的问题还有一些EJB服务器,复杂中间件等等。
    那么反过来,作为客户,我在面对Prefork模式的时候,如何才能高效处理呢?——对,大家都想到了,连接池模式。通过连接池存放空闲连接,避免连接的建立和释放开销,从而增加服务器性能。
    另外,python实现其实性能是很有问题的,我们对比一下apache2的测试结果:
测试指令: ab -n 1000 -c 100 http://localhost:8000/py-web-server
返回结果:
Document Path:          /
Document Length:        45 bytes

Concurrency Level:      1000
Time taken for tests:   7.914 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      3204355 bytes
HTML transferred:       452025 bytes
Requests per second:    1263.56 [#/sec] (mean)
Time per request:       791.413 [ms] (mean)
Time per request:       0.791 [ms] (mean, across all concurrent requests)
Transfer rate:          395.40 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   70 432.8      3    3028
Processing:     0  193 733.0     88    6629
Waiting:        0  190 732.4     85    6621
Total:         46  263 950.7     93    7895

--
与其相濡以沫,不如相忘于江湖

2009年10月9日星期五

用python实现webserver(零)――导言

    本系列文章的所有代码,都发布在http://code.google.com/p/py-web-server/。项目的目的,是通过写作一个可用的http web server,学习服务器程序编写中的一些方法,以及http协议的细节。
    如同我在项目介绍中说的,项目遵循以下几个设计原则。
  1. 精简,容易阅读和学习。
  2. 自注释,重代码轻文档。
  3. 代码核心,不需要对使用者友好。
  4. 灵活配置,多种实现。
  5. 效率,安全性,特性不是最重要的。
    有兴趣的,可以也通过本文的介绍,不看代码写一个类似的东西。而后对比代码,找出设计上的异同和优劣。如果您也设计了一个,请告诉我,我很高兴能够得到大家的指正。

2009年9月13日星期日

软件自由英雄谱

    谨以此缅怀那些为了今日软件事业的自由做出贡献的先辈们。(注1: 多数人没牺牲,谢谢)(注2: 排名不分先后)(注3: 科普作品,大家别怕)
    我在撰写这篇文章的时候,避免使用自由软件这个词,而改为更普遍意义上的软件自由。因为自由软件是RMS提出的一个专有词语,指软件的开源,复制,协作等 特质。而我试图通过软件自由这个词,表达人们在使用软件上的自由,以及使用软件来为我们获取自由。我们拥有知道软件一切内幕的自由,我们拥有修改软件的自 由,我们拥有思考的自由,我们拥有挑战老系统的自由,我们拥有拒绝通过软件收费的自由,我们拥有通过软件获得信息的自由,我们拥有不受任何人,包括政府监 控的自由。为了这种自由而付出的,不仅是自由程序的拥护者,也有商业程序的拥护者。
1.Richard Matthew Stallman
    大名鼎鼎的RMS,GNU的核心人物,自由软件的布道者。要是在这个列表上没有他的名字,那我不知道还有谁能留在这张表上。具体可以看这里(http://zh.wikipedia.org/zh-cn/%E7%90%86%E6%9F%A5%E5%BE%B7%C2%B7%E6%96%AF%E6%89%98%E6%9B%BC)。简单来说这家伙最大的几个成就:创立了GNU和FSF,为自由软件的传播奠定了基础。制作了emacs,当今黑客世界两大编辑器之一(另一个是VIM)。制作了GCC,世界上使用最广泛的编译器。
    RMS的核心想法是,因为软件而收费是罪恶的,这种人是撒旦(当然,Bill Gates是其中最大的那个)。他认为软件应当自由分享,程序员从中收取的应当是服务费。今天,RedHat正是继承了这一模式。通过免费的软件和收费的服务来进行持续的开发。
2.Linus Benedict Torvalds
    常常和RMS并提的一个家伙,具体在这里(http://zh.wikipedia.org/zh-cn/%E6%9E%97%E7%BA%B3%E6%96%AF%C2%B7%E6%89%98%E7%93%A6%E5%85%B9)。 一个低调又火爆的家伙,没有什么太多言论,但经常语出惊人,最有名的是以“一群自慰的猴子”(OpenBSD crowd is a bunch of masturbating monkeys)来形容OpenBSD的团队。最大的成就就是写了个操作系统——没错,就是叫Linux的那个。
3.Donald Ervin Knuth
    哈,这个人就不像上两个那么广为人知了。他(可不能叫这家伙,得敬老)有个中文名字,叫高德纳,页面在这里(http://zh.wikipedia.org/zh-cn/%E9%AB%98%E5%BE%B7%E7%BA%B3)。 最大的成就是写了本书,叫做《计算机程序设计艺术》。有意思的是,写到一半的时候,觉得现在(那是上世纪80年代的事情)的排版软件不爽——于是自己下 手,写了一个叫做Tex的排版系统——然后再回来继续写书。这本书算起来已经写了30多年了,估计成书时间和《浮士德》有的一拼。而Tex是当今高端排版 中最流行的系统(多数都不是直接拿来用,而是用了LaTex之类的包装),如果有向国际期刊投稿过的应该有印象。Tex也是被誉为最接近完美的程序,它的 介绍在这里(http://zh.wikipedia.org/zh-cn/TeX)。他的版本号是以圆周率为基准的,头一个版本叫3,后一个叫3.1, 以此类推。目前的版本号是3.1415926,刚好是祖冲之的密率。高伯伯曾表示,等他死之后,版本号就改为π,剩下的bug就作为程序的功能放在那里。
    有一个未经证实的故事。据说上世纪Internet还没出现的时候,美国军方找人设计了TCP/IP协议,他们希望有人为他们实现基于Unix的TCP /IP协议栈。于是他们花了四千万美金,找人写了一个协议栈,并且拿到高伯伯的学校去用。对此高伯伯非常不满意——别误会,我指的是实现的效果。于是就自 己花了点时间写了一个,结果比原版的协议栈更快速而稳定。美国军方觉得非常困惑,问他是怎么做的。高伯伯说,读你们的协议,然后编码。
4.Andrew Stuart Tanenbaum
    这个知道的人也不会太多,当然,职业玩家例外。当初AT&T禁止UNIX7的代码公布,因此大学里面都没什么实际产品可以用来教操作系统这门课。 于是,有个叫AST的老师就怒了,你不让我干,我自己干。于是写了一个叫做Minix的系统,并且还写了本书,叫做《操作系统:设计和实现》。后来有个学 生,觉得这个系统改改能干别的,于是给AST去信。AST说,改什么改,我写这东西是拿来教书的。于是这个学生就自己写了一个系统——对了,这个学生就是 上面的Linus,而那个系统,就是大名鼎鼎的Linux。
    时至今日,Minux已经发展到了第三版(他的版本号是跟着书走的,第一版,第二版,第三版...),是大多数大学里面教授操作系统基础原理的标准教材。 同时,也在嵌入式系统等领域有非常大的应用。但是,由于AST还是坚持他的教学和精简原则,因此在桌面和服务器领域就别指望了。关于AST,大家可以看这 里(http://en.wikipedia.org/wiki/Andrew_S._Tanenbaum)。
5.Ian Murdock
    这个人很多人都听过,不过看着名字还是认不出来。他是Debian系统的作者,具体可以看这里(http://en.wikipedia.org/wiki/Ian_Murdock)。
    Debian有什么特殊呢?其实就本身来说,Debian并不算特别成功。但是Debian有庞大的衍生系统群,更有Ubuntu这样充满活力的发行。 Linux世界有所谓三大发行,四大包管理系统之说。其中三大发行指三个在世界上最广泛用于服务器的发行版本,即RedHat Enterprise Linux,SuSe, Debian,其中只有Debian是无服务商支持的。而四大包管理系统就是指RH的RPM系统,Debian的APT系统,arch的PCMAN系统, 和Gentoo的emerge系统。
6.Ken Thompson
    有没有听说过?至少看着眼熟吧。这家伙是贝尔实验室的,最大成就就一个:Unix作者。详细内容请看这里(http://en.wikipedia.org/wiki/Ken_Thompson)。
7.Dennis Ritchie
    没听说过?也很眼熟?这家伙和上面那位是朋友,最大成就也就一个:给上面那位提供了基础语言,C语言。详细内容请看这里(http://en.wikipedia.org/wiki/Dennis_Ritchie)。
8.Bjarne Stroustrup
    又是一个怎么看怎么眼熟的家伙?那当然。他和上面两位不怎么熟,不过他们都是一路的。他是C++的作者,详细内容请看这里(http://en.wikipedia.org/wiki/Bjarne_Stroustrup)。
9.Phil Katz
    这个就很少有人知道了吧,不过大家肯定天天和他打交道。大家用记事本打开任意一个ZIP文件,开始的两个字肯定是PK,这就是Phil Katz,具体请看这里(http://en.wikipedia.org/wiki/Phil_Katz)。
    这是一个有点悲剧的人物。在上个世纪的时候,大家还在BBS上混。由于速度有限,因此下载站的资源都是压缩提供的(当然,直到今天肯定还是如此)。最初的 压缩格式大多是ACE的,这是一家商业公司,直到今天还活着。由于PK不满意这家公司的压缩软件,压缩率低,速度慢,而且还不断提出高昂的收费。因此他决 定自己写一个压缩软件,就是最初的PKZIP。由于软件免费提供使用,压缩率高,解压速度快,因此很多站长自发的将数据格式转换为ZIP。后来PK就干脆 开了PKWARE软件公司,免费发行压缩程序代码,同时提供方便使用的图形界面版本。但是非常可悲的,由于格式开放,因此这个软件有个非常大的竞争 者,winzip。我想有些Win95时代的老用户还记得这个软件。PK在软件开发上很有天分,但是在市场策略上却不很成功。WinZip对ZIP格式的 熟悉其实比不上PK(那当然,人家是原作者),然而WinZip却拥有很多用户友好的特性,右键菜单解压,虚拟解压(将压缩包的内容临时虚拟成一个目录, 用户可以无缝的使用,XP中集成了这个功能,但是WinZip的虚拟解压很容易撤销)。所以最终PK的软件公司破产了。他本人在2000年4月14日因饮 酒过度,在一家小旅馆内死去。
    至于WinZip呢?碰到了一个更强大的对手,WinRar。功能类似,但更简洁,最主要是支持大多数流行的压缩格式。因此目前压缩软件领域还是WinRar占据着主流,市场就是这么残酷。
10.Phil Zimmermann
    这个人基本没人知道,但是却是这张表里面最典型和突出的一个人。他是PGP的作者,具体可以看这里(http://en.wikipedia.org/wiki/Philip_Zimmermann)。他的成就很难用一句话说明,要阐明他的成就,就必须从美国的国家安全出口管制说起。
    在上个世纪,美国政府有一种观点,他们需要能随时随地的窃听任何一个人和其他人的通讯。同时,作为延伸,他们制定了国家安全出口法案,将密码产品作为军用 管制品,限制出口。这其实是很荒谬和不合逻辑的,任何公开的算法都可以被多个人独立的实现。只要算法是公开的,即使产品不允许出口,国外也可以没有任何阻 碍的实现出来。而如果算法是不公开的,则会出现两个弊端。一个是阻碍密码学的交流和进步,更麻烦的是,根据密码学的内在逻辑,这样的系统,由于验证不完 全,因此比公开的系统更加不安全。
    在1991年前后,PZ制作了PGP软件,用于保障当时备受争议的电子邮件的安全(小常识: 电子邮件默认是明文的,安全程度和你写在明信片背面寄给你父母的句子差不多)。这个软件使用了1980年以来提出的现代密码系统几大密码系统,实现了签名 安全和秘密安全。这里我们小小的讲解一下电子邮件的两大安全系统,对此无爱的人自行跳到下一段。签名安全就是指,你收到一个邮件的时候,能够确信,这个信 的内容是原始发件人的真实意思表示,而不是被篡改过的。秘密安全就是指,当你收到一个信的时候,你能够确信,除了你没有别人能够偷看到内容。对此,一般采 用公钥系统来实现两者的安全。所谓公钥系统是这样一种系统,用公钥加密必须用私钥解密,用私钥加密必须用公钥解密,私钥很容易计算出公钥,公钥非常难计算 出私钥。当你要签名安全的时候,将邮件内容用自己的私钥加密再发送一次(实际是将内容hash了再加密的),接收者解密后对比。由于篡改者只有公钥,因此 虽然可以拦截和修改内容,但是无法伪造出一对匹配的内容,用公钥解密后刚好一致。而秘密安全则是用对方的公钥加密。对于更高层级的要求,你的公钥不仅要求 公布,而且必须在国家认可的部门公布,这样就由国家认定了你的公钥和你的身份的一致性。当你对一个内容签署的时候,只要能用公钥验证签名,就可以认定内容 是你的真实意思表述,并被法律所承认。
    当时的PGP当然还没有这么复杂,但是对于当时缺乏任何安全性特征(当时连TLS都没有)的电子邮件来说,是非常必要的补充。可是我们上文说了,美国禁止 出口这些产品。于是,PZ免费的将软件的最初版本散发给同事和其他人使用,而这些人又可以免费的分发出去——这和自由模式非常的吻合,除了我找不到具体信 息标明当时PZ是否从授权上同意他们做这个事情。法律上说,PZ并没有“出口”密码产品,但是实际上,是他实现并且向全世界推广了高强度的电子邮件安全系 统。从某种意义上说,PZ可以说是叛国者。非法散布军用管制品,危害美国的国家安全(这还不像中国那种含糊不清的指控,这里的军用管制品定义是明确的,并 且是由国会制定的)。于是,PZ受到了三年的官司和五年的调查,直到96年的时候,克林顿签署了新的法案,放松了密码产品的出口限制。其实也没松多少,从 40位到56位——大概就是从5个字符到7个字符的区别。反之,我们改变观点,从世界的角度说,由于他的勇气和决心,我们每个人从中受益匪浅。
    必须得说,其实这一改变很大程度上并不是PZ个人努力或者公民运动的结果,其中有巨大的商业力量。IBM,微软和Lotus之类的跨国软件巨头在出口产品 的时候,由于受到出口限制,因此在海外产品上的安全性一直很成问题。很多时候他们因为这个问题受到了巨大的挑战。在这一问题上,他们有足够的理由去游说白 宫,改变出口限制的要求。关于这个案件的其他资料,可以参考这里(http://cyberlaw.stanford.edu/~prz/ZH/faq/index.html)和这里(http://www.techcn.com.cn/index.php?doc-view-130949)。
    在今日,PGP仍旧是一个非常强大的加密系统,并且是开源的——理所当然,如果不开源,我们会担心其中是否有漏洞和后门继续危害我们的安全。并且,从密码 学内在的逻辑来说,不公开的系统是不安全的。不过他仍旧受限于美国国家安全出口管制条例,原因是因为由于今日强大的计算能力,因此密钥通常的长度是 1024,2048,4096位长的——远远超过美国国家限制数十倍。因此这一软件的强密钥版本只有英文版,因为不用考虑出口。对于海外人士来说,我们更 推荐OpenPGP,同样是开源的,而且基于开源模式开发的GNU自由软件。能够充分保证你的信息安全。
11.Lawrence Edward Larry Page
    哈,在所有人中,这个是最出名的。不过在这个列表中列出此人,并非因为Google的成功,而是因为其公司“不作恶”的信条。直到今日为止,Google还良好的保持着不作恶的信条。
结尾
    我们遍数评论一个个的软件自由英雄的时候,才会发现,无论在哪里,通向真正自由的路都坎坷而血腥。RMS直到快50还一直单身,到处流浪。他没有自己的汽 车、电视和房产。PZ面临了政府的指控,三年的官司,五年的调查,以及叛国者的骂名。PK更是直接挂了。当然,其中也不乏成功者,Donald Knuth和Andrew.S.Tanenbaum的书都卖的不错。Linus Torvalds和Ian Murdock也算是软件白领,收入不菲。Larry Page更是名列世界级的富豪榜。然而我们必须知道两件事情,没有他们的存在,我们就没有安全的通讯,没有廉价而优质的软件。因此,照RMS的最大对手所说的,即使没有这些人,人类也应当把它们造出来。

2009年9月8日星期二

计算机中的海森堡效应和罗素悖论

    有点标题党,海森堡测不准原理大家都知道吧,你观测一个东西以获得他精确的描述,然而你测量行为本身就会干扰这个东西的存在,从而永远无法准确测量。
    近日贝壳碰到一个计算机中的海森堡效应,因为工作需要,贝壳需要获得/proc/loadavg中的load参数。这个参数在uptime时会显示,大致意义是这一秒内平均的活跃进程数。(对电脑无爱者请自行跳过以下内容到下一段)准确的计算方法是在一秒内的所有tick上,累加当前的待运行线程列表长度,而后除以一秒内的所有tick。当tick趋于无穷小时,相当于对活跃进程的定积分除以横轴长度,即平均值。
    同个文件内有另外一个值,活跃进程数,是当前的待运行队列长度。从理论上说,如果贝壳要计算一个小时(或者其他大尺度时间)的loadavg,可以高速取样该值,在一小时内求平均,即复现load参数的意义?
    想法很好,不过实际上差很多。开发服务器上的loadavg大约是0.01-0.05,但是贝壳按照后者算出来的load总大于1。问题在哪里?
    记住一点,当你去获得loadavg的时候,你当前的线程永远是在运行的。因此你获取的行为会增长活跃进程的值,哪怕其他时间什么都不做,这样会将取值的瞬间的load提高至少1。而内核的计算的时候,是不会把自己的行为计算为活跃进程的。
    那么将值减去1对不对?也未必。在知道上述问题的同时,我们可以想象。在高压力下,你的线程什么时候会获得运行的机会?只有在最高优先级的任务空闲的时候。因此,你取得的值会严格的小于真实的压力。
    因此,不要相信当前活跃进程数,那个值永远大于1,并且不总正确。如果那个值是0,那逻辑上讲,你就碰到了罗素悖论。
    咳咳,又来一个问题,什么是罗素悖论?
    很简单。如果说真话的人永远说真话,说假话的人永远说假话。有人对你说:“我在说谎”。你就听到了罗素悖论。同理,如果理发师只给不给理发师理发的人理发,而所有理发师的头发都有人理,那你也碰到了罗素悖论。同样,如果有程序告诉你,我读取了当前的活跃进程数,但是这个数表明我不活跃。
    同样,你也碰到了罗素悖论。

2009年9月3日星期四

搭建家用的OpenVPN服务器

    啥都不说了,贝壳最近搞了一个家用的OpenVPN服务器,任何机器,随时随地可以穿到家里来,很方便。用VPN干啥?这就多了。我可以用vpn操作 Windows上的vnc,使用Windows的共享文件服务,直接向Linux Server放文件(这样别人可以用http下载),查看摄像头(被网络公布了)。将来如果有其他网络设备(例如冰箱和空调),也可以一并管理。不过最直 观的——可以很方便的打游戏,我们根本就在一个网络里面。要点是,这些服务要分别开映射端口非常麻烦。而且有的服务从安全起见,根本不能开端口(例如臭名 昭著的Windows文件共享服务)。
    具体原理上,贝壳有一台Windows,上面用Vmware搭建了一台Debian Linux,两者使用桥接模式。从概念上看,就是一台通向公网的路由器,里面放了一台Windows和一台Linux。现在,贝壳想通过某种方法,将外部 的一台机器接入内部的局域网中,就如同随身携带着一根通向家里路由器的网线一样。
    下面直接上具体配置:
-----------filename: /etc/network/interface-------------------
auto lo
iface lo inet loopback
iface eth0 inet static
        address 0.0.0.0
iface tap0 inet static
        address 0.0.0.0
auto br0
iface br0 inet static
        bridge_ports eth0 tap0
        address 192.168.1.IP
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 192.168.1.1
        dns-search home
-------------------------------------------------------------
    使用上述配置的原因是,vpn只能联通你机器上的逻辑网卡和服务器上的逻辑网卡。单就vpn自身而言,是无法让你连到服务器上的内网网卡的。因此,我们需要通过网桥的配置,将eth0和tap0配置成网桥。这样,你的服务器就如同一台交换机一般,联通了两个网段。
    而后,我们设定服务器配置。
-----------filename: /etc/openvpn/server.conf----------------
local 192.168.1.51
port 1194
proto udp
dev tap0

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh2048.pem

server-bridge 192.168.1.IP 255.255.255.0 192.168.1.100 192.168.1.149
push "route 192.168.1.0 255.255.255.0"
keepalive 10 120

user nobody
group nogroup

persist-key
persist-tun

cipher DES-EDE3-CBC # Triple-DES
comp-lzo

verb 3
status /var/log/openvpn-status.log
;log openvpn.log
log-append openvpn.log
-------------------------------------------------------------
    其中的server-bridge是因为我们采用网桥的关系,100-149是向外部拨入分配的IP池。贝壳的2-100是内部固定IP保留,150-199是内部DHCP池,200-254保留。这个大家可以按照自己的情况配置。
    需要特别注意的是,由于上文我们已经建立了tap0这个设备,因此才dev中必须指定tap0设备。如果你仅写tap,那有可能是新建一个设备出来。到时候就好玩大了...
    上文中,我们使用了ca cert key dh四个密钥文件选项。下面我们说说如何产生这些密钥文件。
    首先,你需要复制usr/share/doc/openvpn/examples/easy-rsa/2.0/到你的个人目录,并修改其中的vars文 件。将其中的一些东西修改为你需要的参数(很简单,我假定大多数人都会用,这个是基于SSL的),而后source vars,执行下述命令。
./clean-all
./build-ca
./build-key-server server
./build-dh
#需要�入密�的
./build-key-pass username
#不需要�入密�的
./build-key username
    最后两个可以随便签署,想发多少密钥就给多少人签署。不过请注意,easy-rsa的默认脚本中,是没有ns-cert-type server的设定的,因此*千万不要*在配置中加上这个设定。否则会导致TLS handshark failed。
    最后,启动vpn,并且修改你的防火墙和路由器映射,贝壳这里使用的是udp1194端口(默认)。再给客户分发配置和key,具体如下:
------------------filename: home.ovpn-----------------------
remote shell909090.3322.org 1194
client
proto udp
dev tap

ca home.crt
cert shell.crt
key shell.key

resolv-retry infinite
persist-key
persist-tun

cipher DES-EDE3-CBC
comp-lzo

verb 3
-------------------------------------------------------------
    其中home.crt是服务器上的server.crt,shell.crt和shell.key是刚刚签署的用户密钥。如果有密码,需要设定密码,或在连接时提供。

--
与其相濡以沫,不如相忘于江湖

2009年8月20日星期四

互联网的黄金时代

    今天,一个朋友推荐我看了篇《创业成功80%是运气?》的文章,作者可能是雷军。里面说,99年是互联网成就的年代,几大互联网巨头都是在99年成就的。 因此作者推测,09年也是互联网成就的年代。前者我认为很有道理,后者就纯粹在胡扯,拉人去投资了。退一步说,即使是对的,也是蒙上的。
    为什么?我们首先得看,为什么99年是互联网成就的年代。这就得讲到98年以前,电脑是什么样的一个形态。记得贝壳95年刚接触电脑的时候,那时用的是 286。和现在完全不同,电脑最主要的功能是文书处理。因为当时根本没有互联网建设,电脑用户沟通的途径主要通过点对点拨接的BBS(不用了解是什么东 西,贝壳自己都不怎么明白)。这种BBS和现在的BBS完全不是一个概念,但是BBS这个词却来自于当时的这个形态。这种沟通方式非常不方便,也非常贵。 因此用的人很少,基本都是专业人士和各个高校,这等于限制购买电脑后只能单机使用。由于电脑根本是单机使用,因此但凡要增加功能就必须买盗版盘。要 WPS,盗拷(最早还没有盗版光盘呢),要看电影,买盘。于是电脑的主要形态被限制到了预设的几个功能上,而不是根据客户的想法随意定制。而这几个功能中 呢,最常用和实用的就是文书处理。96年的时候,最火的就是UCDOS和WPS。凡讲电脑入门如果没有这两个那就是落伍,是怪胎。而在98年的时候,接连 发生了几个事情,因此才酝酿出了风起云涌的互联网大潮。
    首先,98年前后,Win95/98在中国大量普及。在此之前,由于受到文字,版权,习惯,配置等诸多限制,大家还是停留在dos6.0的年代不肯出来。 Win9X系列的普及(当然,主要是盗版普及)对电脑降价和普及起了不可磨灭的作用。也许有人听不懂了,软件的普及能降低硬件的价格?话是这么说的。从总 体来说,DOS6.0的入门难度高,高到要维持一个能够运转的DOS系统,就非要经过专业的,正二八经的学习不可。而Win9X的入门和维护难度基本是 零,你就算不明白,也不阻碍你的使用。因此,有大量的普通用户可以使用电脑,电脑的组装量就大了。更具有决定作用的是,由于DOS的入门难度高,因此很多 客户必须购买专门的电脑公司的电脑系统,即所谓的“品牌机”。使用品牌机的最主要理由是需要电脑公司的服务,来维护电脑系统。而Win95安装维护简单, 任何一个人都可以拿着盘装套系统出来。除去偶发的硬件故障,着实没必要非买品牌机不可。于是,当时品牌机对市场的垄断被打破了。大量的小作坊稍微经过培 训,就可以拿着一堆电脑配件组装起一台电脑来。教客户几分钟,他就可以自行安装起Win9X和Office。而后机器如果出现故障,顾客也可以很轻松的重 装。于是大量的小作坊相互竞争,使得电脑的价格直线下滑。我记得96年时主流电脑的价格在2W上下,98年时只有1W上下,01年时更是只有5000。注 意这里比较的是主流电脑的价格,不是同等硬件。里面固然有着摩尔定理的作用,也相当的得益于Win9X的普及。
    而此时,更具标志性的事件是国内大多主要城市,都开始了电话拨号上网的业务。虽说中国从89年就开始接入互联网了,然而真正标志着普通民众上网的事件还是 98年前后的163/169电话拨号上网业务。大家可以想像一下,要是没有网络了,你的电脑还能干什么?怕是只剩下看书(还得买盘),听歌(也是买盘), 放片而已了吧?我们今天所用的大多数功能,都是以网络为基础,或者要基于网络获取数据的。电话拨号业务一开,等于就开启了一扇通向无限可能的大门。虽然当 时的价格大约是1.6元/小时,而速度一般只有5K/s。这种流量下基本无法承载什么复杂业务,多数都是基于文字的业务。例如QQ,当时肯定只能做文字, 不能做视频聊天。又例如BBS,当时也是以文字为主,图片点缀一下。要是哪个搞不清楚放一堆图片上去,站长到还没头痛呢,用户先受不了了。
    现在我们看到,98年的时候,互联网具备了大量的潜在用户,也打开了通向无限可能的大门。可谓是万事俱备,只欠东风。而东风从哪里来呢?所谓的东风,就是 亚洲金融风暴和2000年互联网泡沫中的时间差。在98年的时候,东南亚发生了非常严重的金融风暴,相信大多数人都有所耳闻。而98年的时候,正是互联网 飞速发展的时候。2000年的互联网泡沫还没有提前到来,投资回报比高到吓人。在金融风暴中损失惨重无处容身的热钱,碰到了一个飞速发展回报极高的产业, 就如同火柴碰到了汽油一般,瞬间就无可阻挡的燃烧起来。而引爆点,就是互联网门户和娱乐。腾讯,百度,携程等互联网公司,都在那个时候纷纷发展起来。金融 环境的影响究竟有多大呢?我们不妨想像一下,如果是2000年的时候,用户和网络才准备好。这时金融相对稳定,金融风暴中跑来跑去的热钱也该投资的投资, 走的差不多了。而互联网公司普遍表现不好,美国各大网络公司一片惨红。这时候,中国的各个网络公司才组建起来,他们还能顺利的拿到融资,完成由小到大的华 丽转身么?
    当然,当年之所以成为互联网的黄金年代,还有其他的很多因素。但是就贝壳的浅见来说,当时互联网的成功,和广大的新增客户群,新出现的网络,还有相对良好 的投资环境是分不开的。现在,中国的网民已经发展到了极限,12亿人口4亿网民,即使还有发展空间,也是屈指可数的事情。不像我们的前任,永远会出现新的 客户(这里顺便提一下,实际上互联网大量出现用户的时间大约是在05-06年前后,宽带包月普及的时候)。我们的投资环境呢?不利,很不利。美国经济刚刚 打了个喷嚏,现在全世界人民都在重感冒,没空搭理中国一堆互联网公司的脑残想法。那么,我们的下一个黄金年代在那里?
    接下来,我们有几件事情会引发互联网的大革命,不过贝壳和大家一样头痛的是,我们谁都不知道这些事情会什么时候到来,是否会一同到来。
    首先,是真正的3G网络。现在所谓的3G网络都是花架子,没有什么实际意义的,3G最大的优势在于低廉的随时在线成本。当前,所有客户上网都是通过电脑拨 号,而电脑是需要了再开机的。但是我们的很多应用需要客户随时在线,例如IM类业务,对客户在线就有严格要求,微博客也有类似问题。为了能让用户随时在 线,就必须让客户在手机上使用电脑的应用。问题是,如果没有一个廉价的网络接入,哪个客户愿意付出N高的网络费用就为了用个IM?那还不如打电话。现在的 3G曾有个笑话,什么叫3G?一秒3元,所以叫3G。这个价格至少要下降到一个月100-200的范围内(流量不限制,甚至还要在其中包括有线的接入费用 和电话费),才有大量用户愿意入网。更好的接入模式是两台手机一根ADSL线路,包含电话/手机/电视/网络/3G在内的所有通信业务,总价200上下。 不过以目前的垄断形式而言,大家可以口水收起来了。
    其次,是全球经济复苏。要是大家都没钱,是没人愿意投资电脑产业的,也没人愿意用。
    而后是取消互联网备案和审查制度这滩狗屎,建立一个真正公平公正的法律环境。众所周知,互联网属于服务业,而服务业对于环境的公正性要求是最高的。即使经 济复苏,也绝对不会有一个投资者愿意把钱投资到一个政策整天变化,商业运作随时为政策让路的地方。以饭否为例,如果某个投资者投资了,而后饭否因为种种不 明原因关闭了,那么投资者的损失谁来负责?对于这类问题,必须有个公正的,公平的政策,提前说明。如果投资违背了政策,那么损失没什么好多说的。如果没有 违背政策,那就不应该让投资者受到损失。而不是暧昧不清的制订一个根本实行不了的政策,然后看谁不顺眼就关谁,对其他人的违法不闻不问。只要这个大山不真 正的走开,中国的互联网就不可能真正的走入下一个黄金时代。

2009年7月28日星期二

组合翻墙方案

1.墙的存在和原理简述
1.1.墙的存在
    在您访问某些网站的时候,经常会发现无法访问。通常来说,这是服务器挂了。但是现在,越来越多正常的服务器出现了无法访问的情况。这些服务器中有一些是因为色情和暴力问题,但是更多则是政治层面的因素,例如google和twitter。对于用户来说,可能不关心政治层面的因素。但是政治自然的关心了你,所以我们需要找一种方法,让我们依然能够使用网络上一些很重要的服务。例如gmail(本文即是在gmail中写成的)。本节中,我将简述国家网络防护工程(简称GFW, Great FireWall)的工作原理,并在下一节给出一些比较成熟的翻墙方案。
1.2.DNS污染
    我们通过DNS(Domain Name Service)将域名转换为IP地址。通常而言,我们不会怀疑ISP的DNS服务器的可信性。然而在某些地方,DNS服务器被用来欺骗客户端,达到屏蔽的作用。例如,在上海的某些地方,fanfou.com曾经被指向127.0.0.1。如果机器按照这个地址访问,那么肯定无法获得预想的数据。
    这个方案如果控制不当,可能造成全球性的后果。曾经有报道,伊朗将youtube的域名指向了自己的一台蜜罐(Honeypot)服务器。但是由于配置不良,因此DNS错误被扩散到了伊朗以外,导致全世界的youtube访问都被定向到了这台蜜罐。整个过程造成了youtube6小时以上的服务中断。
1.3.DNS替换欺骗
    由于DNS污染会被下面2.1节的方法绕过,因此在某些地方针对OpenDNS的数据被进行了替换欺骗。UDP53端口的查询数据包被拦截和替换,其造成的结果就是即使使用了OpenDNS,返回结果和电信服务器的结果仍然一致。
1.4.IP禁止
    对于某些IP,防护系统直接禁止了该IP的访问。这种手法一般见于早期,由于经常导致误杀和株连,同时对最普通的proxy都无效,因此现在已经不常使用。
1.5.关键词过滤
    防护工程在中国网络的核心路由器上,都放置了一些探头。具体的方法为配置一个核心路由器的镜像端口,将所有通讯数据全部向端口转发一份。该端口指向一套深度包检测集群。如果数据没有异常,则不对通讯进行干扰。如果数据异常,则发送RST包拦截通讯。同时记录双方IP,拦截其后5分钟内的所有TCP SYN包。
    这种方法的优势在于,无论多复杂的网络拓扑结构。只要能够开镜像端口,就可以工作。无论多大的规模和多高的流量,只要能添加服务器,就可以支持。同时由于屏蔽效果好,对普通访问的干扰小,因此目前已经成为最主要的屏蔽方式。
    这种手法无法针对UDP工作,因为UDP不存在链接断开状态。同时如果双方都屏蔽RST包,则连接不会被中断。然而如果双方都屏蔽RST包,会导致一些主动断线在对方那里变成死连接,因此无法通过拦截RST包来防御。同时,按照当前的测试结果,IPv6的包并没有被拦截。相信这是因为核心路由器支持了IPv6,但包检测集群尚未支持IPv6包检测。
1.6.热点屏蔽
    近来发现一种趋势,当某个链接的热度非常高的时候,通向此链接的访问会被屏蔽。由于是接受到RST包,因此不像是服务器超载。这是当前防护系统的新方向,尚没有更多资料。
2.翻墙方法简述
2.1.OpenDNS
    DNS污染可以通过修改自己的DNS服务器来屏蔽。以Linux为例,当前你的DNS服务器配置可以在/etc/resolv.conf中查看。你可以将其替换为OpenDNS的DNS服务器,而非电信的服务器。OpenDNS是一家商业公司,通过提供DNS服务来收费(不具体解释商业运作)。一般来说,他们的DNS服务还是比较准确的。
    通过OpenDNS可以防御DNS污染,但是无法防御其余方式,而且会被DNS替换所干扰。因此建议一般作为常规网络配置,而非专门的翻墙方案。
2.2.hosts
    hosts的目地和OpenDNS一致,但可以防御DNS替换。其原理是通过将正确的DNS结果写入/etc/hosts文件,在绕过网络解析过程。从而避免DNS出错。
    该方式无法防御1.4-1.6的屏蔽。
2.3.proxy和变形
    针对DNS欺骗和IIP屏蔽,我们可以通过指定一个国外的代理来访问。由于DNS解析在代理商进行,因此一般不会被欺骗。由于不直接访问IP,因此IP屏蔽也失效。
    一般而言,该方法无法屏蔽1.5的屏蔽,但是有一些变形产品(例如Firefox的gladder插件),通过变形URL请求,使用特殊代理的方式对1.5进行了部分绕过。但此种方式不保证100%成功。
2.4.ssh -D
    ssh是一种安全的远程命令行工具,具有很多端口转发选项。其中有一种动态端口转发选项,在服务器端开启后,使得ssh可以被作为一个socks5代理服务器使用。
    此种方式需要有一个墙外的ssh服务器,一般可以购买墙外的空间,他们会附送一个。此种方式可以绕过全部屏蔽方式,但是由于ssh本身的稳定性,因此经常有掉线的问题。而且有的服务器关闭了动态性转发选项,或者对长期连入的ssh连接进行断线处理。同时,由于很多人接入同一个IP进行翻墙,因此很多网站(例如google)会认为你的访问不可信。
2.5.tor
    tor是一种分布式代理工具,可以在隐蔽源和目标的情况下访问服务器。该方法可以绕过所有屏蔽方式,但是通常而言,该方法的访问会比较慢。同时也存在访问不可信的问题。
2.6.gae
    gae是google的个人引擎服务,一般由很多服务器构成,而这些服务器一般位于国外。有人针对这个特点,制作了特殊的python程序,能够将客户的访问转换成特殊的加密包,在服务器上访问目标服务器。因此可以被视为一种特殊的代理协议。该方法可以绕过所有屏蔽方式,但是由于众所周知的原因,gae服务器本身有的时候也会被屏蔽,导致该方法无法工作。而且由于google本身的屏蔽,该方式对于某些网站也是无法访问的。该方式也存在访问不可信的问题。
2.7.vpn
    vpn是唯一一种能够快速有效,一劳永逸的翻墙方式。使用vpn后,等同于你的机器拉了根线接在国外的网络端口上。因此该方法可以穿越所有屏蔽方式,同时很少有访问不可信的问题。唯一的问题是vpn,尤其是快速的vpn很难得,而且通常很贵。
3.组合翻墙
3.1.问题
    纵观全部翻墙方式,每种方式都有一定的缺陷。2.1-2.3并不总有效,ssh不稳定,tor慢,gae看运气,vpn又贵。同时,我们还要借助终端的客户端组件(foxyproxy之类)来区分被屏蔽的网站和普通网站(使得普通网站的访问不使用特殊的方式)。
3.2.目标
    本文试图通过某种方法,同时使用2.4-2.6的一种或多种方法。达到访问透明,使用稳定,速度尽量快,流量尽量小的目标。
3.3.架构
    我们使用squid和haproxy进行代理调度,达到上述目标。squid是一种老牌的开源代理服务器,其特征是会对代理内容进行缓存,减小访问流量。同时,可以将请求转发到其他代理上。从而会自动检测和管理多种代理服务器。haproxy是一种基于tcp和http的反向代理程序,在此我们需要使用它的TCP代理能力,将多种socks5代理集成为一个。
基本架构图如下:
                                                      /       -> tor
web brower -> squid -> privoxy -> haproxy -> sshtunnel
                        \     -> gappproxy
3.4.优势
    相对单层代理,组合方式具有多个优势。
    使用squid分离访问线路,并缓存访问数据。对大规模密集访问,可以有效的减小流量。而且对除Firefox外的浏览器,可以根据其访问范围控制代理线路,进一步减小代理流量。(Firefox可以使用AutoProxy或FoxyProxy)
    使用haproxy反向代理了socks5服务,因此可以并行使用多个sshtunnel的带宽。同时自动检测这些ssh是否可用,保证了访问的连续,同时也非常容易添加和减少代理。
3.5.劣势
    本方法有一个比较明显的问题,即squid无法直接使用socks5代理,因此需要通过privoxy进行转换和保密。但是此时squid只测试privoxy的存活,而不理会socks5的存活。因此当haproxy的后端全部失效的时候,squid仍旧会认为privoxy有效,进而导致出现privoxy的错误页面。
    同时,由于haproxy只检测ssh端口是否相应。因此当远程服务器几乎不响应代理请求时,haproxy并不会将这一代理移除出列表。从而导致某些请求需要非常长的时间完成。
3.6.适用范围
    本方式在完成设置后,可以稳定,快速,小流量的访问所有网站。客户端无需过多的设置。但是服务设置过于复杂,系统庞大,多数时候还需要一台专门的Linux。相对而言,这种方法更适合于3-5人以上,同时需要翻墙的情况。通过一台专门的虚拟服务器作为代理,可以顺利的让多人同时使用国际网络。
4.一个实现
4.1.基本系统
    debian stable,aptitude install squid3 squid3-cgi lighttpd tor privoxy haproxy。
4.2.gappproxy
    针对gappproxy项目,请自行去其主页上查看服务器组建方式。作为本次成果之一,贝壳封装了一个gappproxy的deb包。修改了部分源码,并形成了服务。需要的用户可以下载gappproxy-1.0.0beta_all.deb包,安装并修改配置文件即可直接使用。
4.3.sshtunnel的封装
    一般而言,我们使用ssh -D来开启sshtunnel。但是这样做有几个缺陷。首先是tunnel无法跟随系统启动,其次是由于tty关闭后程序一同关闭,因此往往需要screen或nohug来保持连接,最后是ssh往往容易意外关闭,导致需要手工重启。
    贝壳针对这种情况,包装了一套脚本,并形成sshtunnel_1.0.0beta_all.deb包。需要的用户可以下载并修改配置。服务启动后即一直运行,关闭后会自动重启。
5.远景目标
    上述系统安装的细节并未详述,同时,对于新手也太过复杂。因此,考虑实现一套完整的最小虚拟机,提供完整的上述功能。并且给出一套界面,使得用户可以方便的配置和操作整个代理系统。

2009年7月14日星期二

地铁二号线今天大规模停运&生日

    今天早上,贝壳沿着地铁四号线到世纪大道准备换乘二号线的时候,发现车站内有大量人员滞留。六号线卷门不开,二号线站台堆满人。地铁方面广播,二号线故障,暂时停开,恢复时间不定。因此贝壳无奈,只好上地面去方法。
    贝壳先是在世纪大道上找出租,不过大家可以想象,这是徒劳的。而后去公交站,发现——我实在不想经历那种密度。最后,走到杨高路,和几个人合打了一部车,从杨高路走龙阳路到张江。结果,又很无奈的发现,龙阳路堵车。最后,花了50多,在11点的时候总算到了张江。
    真是良好的生日的开端,希望我下一年不要这么倒霉。电脑诸神啊,赐我一个女友吧。不会C++也好,不用Linux也行,只要她别用Windows,而且还不怎么会用。Enter。

游婺源

    写这么多年blog,每次都当回事情,实在写的太累了。还是简单一点,不要费劲了,想到哪里,写到哪里吧。
    简单来说,有朋友家在婺源,我过去玩了一次。地方不错,好山好水,绿茶不错。记得冬天去,夏天昆虫多,草也多。一个朋友给叮肿了一圈,另一个活像被鞭打过。而且太阳太大,一个成了活包公,贝壳回来褪了层皮。
    另外,如果当地人告诉你,不远,不可怕,很好玩,不要随便相信。他们倒是不会害你,只是他们的标准和你的不大一样。超过60度的斜坡,连爬一个多小时,只是一个稍微有点累的常规路途而已。因此,如果你没有一定的体力和运动上的自信,不要随便和当地人去走小道。小道这东西有两个坏处,一个是走到一半不能回头,另外一个就是随时可能找不着或者被修路修掉滑坡断掉。
    好吧,有意的话联系我。

2009年7月7日星期二

ssh翻墙服务

    不多说了,上脚本。
-----------/etc/init.d/sshtunnel------------
#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin
CONF="/etc/default/sshtunnel"
source $CONF

if ! [ -x /usr/bin/ssh ]; then
        exit 0
fi

start ()
{  
    echo -n "Starting tunnel.."
    ssh -CNq -D "$PROXYPORT" "$USERNAME@$SSHHOST" -p $SSHPORT -o ServerAliveInterval=30 &
    echo "done."
}

stop ()
{  
    echo -n "Stopping tunnel.."
    PID=$(netstat -nlp -4 | grep ":$PROXYPORT")
    PID=$(echo $PID | sed "s/.*LISTEN\s*\(.*\)/\1/" | cut -f1 -d/)
    kill -9 $PID
    echo "done."
}

case "$1" in
  start|restart)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|clear}"
    exit 1
    ;;
esac
exit 0
-----------------end of file------------------
---------/etc/default/sshtunnel----------
PROXYPORT=7777
USERNAME=abc
SSHHOST=abc
SSHPORT=22
-----------------end of file------------------
    首先准备一个远程服务器,获得域名端口,用户名密码。而后将上述脚本放置于指定位置,修改/etc/default/sshtunnel的值,即完成配置。但是上述脚本并没有解决自动登录问题,因此,请生成一个没有密码的密钥,将公钥导入远程服务器。
    在完成配置后,可用update-rc.d sshtunnel start 90 2 .进行自动启动服务的安装,其中的2请替换成服务器的默认启动级别。如果不知道可以用以下方法查询。
# cat inittab | grep ^id
id:2:initdefault:

2009年6月30日星期二

系统

下文转载自solidot。

曹筠武因《系统》获2009年骑士国际新闻奖 

    南方周末记者曹筠武凭《系统》一文获2009年骑士国际新闻奖译言)。得奖者全球只有3人,另两位分别是一位民主刚果记者和一位《纽约客》记者。 曹在《南方周末》2007年12月20日刊发长篇特稿《系统》,详尽深入地描述了发生在网络游戏“征途”中令人触目惊心的故事。它需要玩家投入真实的金钱以求在弱肉强食中生存。他注册了游戏账号,并结识了一些老玩家,将他们作为自己深入报道的一部分。 ICFJ主席Joyce Barnathan表示:“今年我们的获奖者都敢于大胆地讲真话,不管多危险,都不会向困难的题材低头。他们报道了别人避而远之的重要新闻。”

以下是一点背景说明。

《南方周末》之《系统》与中国媒体之“系统”

《南方周末》2007年12月20日刊发长篇特稿《系统》(点此链接查看我转载的全文), 详尽深入地描述了发生在网络游戏“征途”中令人触目惊心的故事。这也是我近年来读到的最好、最注重细节、最引人入胜的网游报道——不是简单枯燥的道德说 教,不是大而化之地泛泛谴责,更不是公关软文的阿谀吹捧。读过之后,你很难不陷入思考:数百万人沉浸的虚拟与现实交汇的地带,究竟是什么文化氛围,人们的 行为和心理有着怎样的模式,这一切又会对所谓“现实生活”发生什么影响?极权、意识操纵、欲望,对于这些统治虚拟和现实的东西,在史玉柱的“巨人网络”美 国上市、众多媒体交相赞颂又一个财富神话的此刻,我们还能被允许发出什么别样的声音?

我读完全文,感觉首先是“可怕”二字,尤其是文中描绘的玩家的集体抗议,被系统屏蔽,甚至因此被投入虚拟的“古拉格群岛”的那一幕。据称主要作者曹 筠武自己就是80后的游戏玩家,难怪有此大作!这不是一篇传统意义上“平衡中立”的新闻,是一篇带有立场却尽量以事实说话的特写,甚至略有煽情,但我喜欢 这种有节制的激情。

如果说曹筠武向我们呈现的是在这款“网游巨作”中“系统”的可怕,那么这篇报道本身所遭遇的,却让人为中国媒体之“系统”而心寒。或者,可怕的究竟是“系统”,还是隐藏在“系统”背后的操纵者、利益群体或权力精英?

我凑巧在常去的BBS的某版面读到被转载的《系统》一文,但却吃惊地发现,这篇文章在网络上似乎正在被抹去。在《南方周末》自己的网站上,2007年12月20日这天的页面里,你不但找不到这篇文章的html版本,甚至连报纸提供的PDF版面中,也“凑巧”缺少了本文所在的两个版面。截图如下:

nanfangdaily20071220

而就在几天以前,《南方周末》曾在[财富]栏目刊登一篇对史玉柱的报道,挟“巨人网络”上市之余威,极尽曲笔赞美之能事。这篇文章当然安然无恙地存在于网站当天的页面上,html和pdf俱全(截图如下),而且用搜索引擎查询,结果也是铺天盖地。不知道在专业人士眼里,这算不算一篇成功的公关软文枪稿?

nanfangdaily20071213

中国知名的游戏论坛17173中也有人提到了《系统》一文的消失。

为何如此?几乎毫无疑问,是那只“看不见的巨手”在操纵,在公关,在“和谐”。有明白人关军点出,而在他看来,这篇文章的写作与刊发,已经是“智慧与勇气”的体现:

“毫无疑问,史玉柱同学看了这样的文章会不高兴。他的公司刚刚与《南方周末》搞了一个合作,叫“奥运征途”,赞助该报记者 寻访历届奥运会举办城市,一路上不是美金就是欧元,花销不菲。史同学不高兴的后果是什么呢,以我的小人之心揣度之,就是挥动大刀,咔嚓一声“秒杀”这个合 作。”

OK,我一直认为,从向权力下跪到向金钱下跪,对市场化商业化进程中的中国媒体来说,那是易如反掌、顺其自然的转化。新闻审查和网络过滤对任何一个 有点文化的中国成年人来说,都绝对不是新闻;但是当金钱如此轻易地操纵一家报纸(而且是号称中国很牛掰很有风骨的那家)、更多家网站论坛的时候,当“巨人 ”式“脑白金”营销无往不利的时候,我们是不是都应该想一想,责任在所谓的“系统”,还是“系统”后面的人,还是也包括我们自己?

有鉴于此,不得不又一次打破网络常规,不是给出全文链接并引用,而是全文转载——因为你不知道什么时候被你引用的链接就从网上消失了,而我的全文转载至少还可以一直保留在我的独立blog上,并通过rss订阅来到并不算多的500多个读者面前。

南方周末:“系统” 全文链接http://ohmymedia.com/2007/12/23/736/

看来这个内容还不容易保留,我干脆全文转载。

南方周末:《系统》
来源: 南方周末
作者: 曹筠武 张春蔚 王轶庶

■编者按:

在一款同时在线人数超过百万、全部玩家加起来可以组成一个超级城市的网络游戏中,它的游戏精神是指向乐趣,还是指向权力和金钱?它的社会规则是新世 界的开放自由,还是率土之滨莫非王臣?这不只是对某一款游戏的追问,甚至也不只是对韩式网游的价值观的追问,而是对人与游戏、人与人的关系的追问。虚拟世 界是现实世界的一部分,也有着人们必须捍卫的准则。

在当下中国最火的一款网络游戏中,玩家们遭遇到一个“系统”,它正在施行一种充满诱惑力的统治。这个“系统”隐匿无踪,却无处不在。它是一位虚拟却 真实的垄断者。“如果没有我的允许,这个国家的一片叶子也不能动。”这是智利前独裁者皮诺切特的声音,悄然回响在这个虚拟世界之中。

白天,27岁的吕洋是成都一家医院的B超检查师。

晚上,她是一个国王,“楚国”的国王——玩家们更乐意按游戏里的名字尊称她为“女王”。在这个虚拟王国中,“女王”管理着数千臣民,他们都是她忠诚的战士。

在一款名叫《征途》的网络游戏中冲杀了半年多之后,吕洋自信看清了这样一个道理:尽管这款游戏自我标榜以古代侠客传统为背景,实际上钱才是在这个虚拟世界中行走江湖最关键的因素。

吕洋受过良好的专业教育,丈夫是生意人,资产殷实。钱对她来说从来不是问题,但她仍然忿忿不平地把这款游戏中一些风头正健的人称为“人民币玩家”。虽然在游戏中投入了数万元,但她仍然屡战屡败,原因就在于有人比她更愿意花钱,也花了多得多的钱。

正如《征途》的创造者史玉柱所言,这的确是一款适合有钱人的游戏。在这个世界里,欺凌他人的威力和合法的伤害权都标价出售。

尽管一切都是虚拟的,吕洋却曾经坚信她找到了一条通向光荣与梦想的金光大道。不过随着人民币的不断加速投入,和很多人一样,吕洋发现,金钱铸就的,其实是通往奴役之路。

战争即将爆发

所有人都必须是“人民币玩家”——和平受到鄙视,战争受到推崇——被杀死者得到的只有耻辱

坐在常去的一家网吧的VIP包房里,吕洋显得兴奋而又忧心忡忡,她面前的19英寸液晶宽屏上,黄色的粗体字反复闪动:“国战将在晚上8点15分开始”。她还有两个小时,对她手下的战士们做最后的动员和部署。

将要攻打楚国的是游戏中的头号强国魏国。魏国拥有上万名玩家,更为关键的是,魏国的支柱,“王者家族”成员们,个个都是令人敬畏的英雄,他们的等级 遥遥领先于一般人,装备着成套的最为昂贵和罕有的神圣铠甲和武器。在“世界英雄排行榜”上,他们长期牢牢地占据着前五十名中最靠前的位置。

他们拥有恐怖的杀伤力,人人以一当百。即使吕洋这个“女王”和他们对垒,如果战术采取不当,也存在被“秒杀”的危险。所谓秒杀,就是在几秒钟之内, 在意图还击之前,就被一招致命。吕洋的丈夫并不玩游戏,但他也会对此开开玩笑:“就像武侠小说里写的,如果刀够快,你可以听见自己的血从脖子里喷出来的声 音。”“女王”吕洋对他们最为忌惮,同时又略带鄙夷。“他们就是人民币玩家嘛。”她说。

实际上,只要进了这个虚拟的小世界,所有人都必须是“人民币玩家”,区别只在于你愿意花多少而已。

和以往的所有网络游戏不同,《征途》并不计时收费。简单地填写一份网上表格,就可以注册账号。只需要起个名字,选择性别、国家,一个虚拟身份就此诞 生,光荣而艰难的征服之路摆在了你的面前。根据游戏的主线故事背景,你会惊奇地发现其实你是皇族之后,由于战乱被弃于荒野,现在你长大了,知道了自己高贵 的血统,接下来该做的就是练一身好武艺,奋起于草莽之间,闻达于庙堂之上。建立自己的国家甚至取得统治世界的皇位以恢复祖先的荣光,则是你的终极目标。

故事很合中国人的口味,惟一令人感到困扰的是:热血沸腾之后,你发现现实和理想的差距原来是那么大。一个新诞生的身份是1级;而王国里最英勇的英雄 们能练到“转生170级”:练满普通人的168级之后,他们又获得新的不朽之身,并再次练到了170级。简单地说,那就是人和神的差距。英雄们手持 “完美的神圣武器”,浑身旋绕着代表高贵的紫色光晕;而你却两手空空,甚至全身上下只有一条遮羞的短裤。

现在,你可以购买点卡,持续地把人民币注入游戏中的账户,以便快速升级,购买各种名贵材料打造装备;你也可以不花钱,如果什么都不做,只是呆在游戏 里的话,系统不会向你收取一分钱。但很快你会发现,你连荒地里的一只蚊子都打不过,你的活动空间甚至仅限于出生地,一个叫“清源村”的小村子,更为广阔的 世界则是为英雄们准备的。当然,最让你沮丧的还在于,贵为皇族的你,却永远生活在被其他玩家“秒杀”的巨大阴影之中。

显然,吕洋走了一条真金白银铺就的英雄之路。她如今是“转生145级”,历经艰险戴上了王冠,她的坐骑是一条浑身闪着火光的龙。但英雄亦有英雄的烦恼,她的王国正面临严峻的挑战。

吕洋自认为是一个“和平主义者”,她把女性的温婉带到了对国家的治理之中。“女王”很少主动攻击别国,更喜欢带着臣民们消灭怪物,或者经营骆驼商队。但这并不能避免受到攻击。

“国战都是系统安排的,”吕洋解释说,“国王只需要提交申请,系统就会自动安排好战争爆发的时间。”

系统喜欢“国战”。这个虚拟世界里,“和平”受到鄙视,战争受到推崇。战胜国可以自动获得战败国国库里的金钱和物资,国家排名由“国战”胜利次数决 定,强国的臣民名字下闪耀着一颗颗星星,那代表着每一次辉煌的战胜。当然这并不是最重要的,对于战争中的人来说,冲入别国的土地,肆意砍杀每一个胆敢与之 抗衡的人,无疑是释放内心深处原始冲动的绝佳办法。

系统准确地捕捉着人性的弱点,召唤着玩家们在违背普世价值的虚拟世界中放纵自己的邪恶。它赋予战争中的人肆意杀戮的权力,给予杀人者加倍的经验值奖励;系统也会标明你的斩首纪录,那一串串数字就像印第安战士割下的头皮代表着无上的荣光,而被杀死者得到的只有耻辱。

吕洋打电话,上QQ,或者在游戏中直接交谈,她自知实力对比悬殊,因此通知手下的战士们集中力量,守住王城的一角。她的声音因紧张而略带颤抖,尽管对现实中的她来说无论胜败都毫发无伤,但在游戏里,她知道那意味着生存还是毁灭。

离战争爆发,还有两个小时。

国王死了

推销员来了——冒险家乐园——都在“系统”的支配之下——小角色杀死了国王

在开始“征途”之前,吕洋玩的是另一款游戏《传奇》。她玩得并不好,仅仅当作一种周末的消遣。《传奇》计时收费,玩家购买在线时间用来升级和打造装 备,所有的事情都费时费力。“比如你要打一个终极怪物,”吕洋说,“要跑很远的路,在迷宫里面转来转去,杀掉无数的小怪,可能耗一个晚上,你才跑到大怪的 面前。”最让人崩溃的是,当历尽艰辛终于站到大怪面前,一不小心却被秒杀了!那么,从头开始跑路吧。

吕洋可能从未得知,在她晕头转向地跑路时,一个叫“送礼只送脑白金”的玩家也在这款游戏中闯荡,他从来不耐烦那些烦琐的升级步骤,而是直接购买高级 别账号;他成千上万地花钱,砸下最顶级的装备。以钱铺路,他在最短的时间内得到了最强大的威力。在这款典型的韩式“泡菜”游戏里,他试验出了自己独辟蹊径 的玩法。这位玩家就是后来《征途》的老板史玉柱。

2007年年中的一天,就在吕洋常去的这家网吧,一个推销员站到了正在“跑路”的吕洋面前。他衣着得体,面带微笑,用充满诱惑力的词汇介绍了一款名叫《征途》的新游戏。“绝对不用走迷宫,我们要的就是爽快。”吕洋记得他这样保证。

吕洋就此和朋友们“踏上征途”。她的这些朋友们要么是医院的同事,要么是丈夫生意上的伙伴,空闲不多,但钱不少。他们很快发现,《征途》的确是一款爽快感十足的游戏,简直就是为他们这样的人设计的。

要找系统角色接受任务,不用费力去找,点F键,下拉菜单里角色名字一一罗列,就像网络上的超链接,双击名字,就自动找到面前;要去某个地方,不用走迷宫,点开地图,找到地名,鼠标左键单击,一会儿就到了。

很快吕洋就离开了“清源村”,热闹的“凤凰城”和辉煌壮丽的“王城”才是她的舞台。这位后起之秀被吸纳进了“楚国”最有威望的家族“桃花源”。单打 独斗是不现实的,拜入名门正派才是出头之道,这里就如同武侠小说描写的江湖;而家族与家族联合可以组成帮派,帮派各自有各自的势力范围,在达成妥协之后又 互相配合支撑起一个国家。

游戏里的大部分系统角色,比如杂货店老板或是锻造铺师傅,都可以被帮会控制,此后他们会持续贡献“保护费”。系统鼓励帮会争夺控制权,谁杀死竞争对手,谁就能接手保护费。帮主们因此热衷于抢夺街区和店铺。这样在吕洋看来,她的置身之处,又像是1920年代的上海滩。

这里的确像那个“冒险家乐园”。低级别的玩家甚至也可以挣钱!完成一些特定的任务,比如护镖,可以得到一定数量的“银两”;达到一定级别和保证一定在线时间后,系统甚至会给玩家“发工资”;还有各式各样的“奖励”、“返还”。

“其实都是些小钱,”吕洋说,“相比花掉的钱简直没法比。”但由此带来的成就感和满足感是无法比拟的,你能想象在砍翻敌人的同时还能挣“银子”么?“想得到更高级的奖励么?”吕洋说,“那就花更多的钱呗。”

时常有“外国人”冒险进入楚国,他们可能是魏国人,也可能是宋国人,或者是其他9个国家中任何一国人,但不管是哪国,一旦踏入楚国地界,他们的名字 就显示为红色,这个颜色意味着:敌人——应当杀死的人。每杀死一个这样的人,系统就会在“护国英雄排行榜”里为你加上光荣的一分。

他们并非是闲逛者,而是根据系统分配的指令而来,他们必须进入敌国完成诸如“刺探情报”或者“抢夺太庙资源”等等任务。而同样根据系统赋予的职责,家族和帮派此时的任务就是杀死他们。

那时吕洋还是一个小角色,她正在砍杀一头犀牛,屏幕上出现一条指令,帮主撒下了帮主令,要求帮众前往杀敌。点击“是”之后,吕洋被传送到王城边境附近,众人正把敌人围在当中奋力砍杀。

帮主“狼烟”是当然的主力,他是一个“武士”,近战肉搏是他的特长,他的“无双剑”能造成惊人的杀伤。在炫目的刀光闪耀间隙,吕洋突然发现敌人的坐骑是一只麒麟,这意味着他是一个国王,只有国王才拥有这种神兽!

吕洋是一个“法师”,她专修冰系法术,可以从远处以冰雪为武器。这是她参加的第一次激战,她站到一个安全的地方,将霜冻从空中撒向敌人。麒麟居然哀号倒下,国王死了!吕洋幸运地完成了最后一击。

屏幕上黄色的粗体字夸张地跳了出来:“天哪!吴国的国王居然被楚国的无名小辈女王杀死了!”吕洋在电脑前禁不住手舞足蹈,她杀死了国王,一个小角色杀死了国王!她双脚猛地一蹬,电脑黑屏了——她兴奋得把电源插头踢掉了。

往后几天,吕洋都有些“神神叨叨”的。游戏里“全世界”都知道她杀死了国王,朋友们有些羡慕地向她祝贺。即使在医院上班,吕洋也在办公室的电脑上下载了游戏,她就是喜欢挂在游戏里,反复地看那条早就过时的消息:“天哪!吴国的国王居然被楚国的无名小辈女王杀死了!”

有时候严厉的院长从办公室经过,威严地审视医生们的工作,吕洋只能把游戏界面最小化。她会悄悄地跟同事炫耀:“牛啥嘛,他要是耍游戏,我一招就把他砍翻!”院长其实并不坏,但吕洋觉得他“缺乏对女性应该有的尊重”。“在游戏里,女人也可以统治男人。”她宣称。

国王万岁

核裂变一样蔓延的仇恨——好的装备都意味着金钱——总有无数的人在疯狂比拼——“国王万岁!”

但“女王”其实并不像想象中一样“牛”,几天之后,就在王城外,一个敌人逼近,他骑着鬃毛飞散的烈马,威严得像天上的神,他只问了一句话:“你就是那个女王啊?”一个巨大的火球从天上砸下,落单的“女王”还没来得及答话,被“秒杀”了。

吕洋目瞪口呆,短暂的惊愕之后她脑子里只有一个想法,她要升级,要得到最好的装备,她要当真正的王,她要报仇!

仇恨是这个世界中最强大的动力。“秒杀”吕洋的玩家,立刻被系统自动排入她的仇人名单,时时提醒“女王”报仇雪恨。“仇人”是这里最常见的社会关系,仇恨关系同样存在于家族、帮会和国家之间。如同核裂变一样蔓延的冤冤相报,在这里是受到鼓励和颂扬的永恒主题。

她找到“代练使者”,一个代表系统与玩家做交易的虚拟角色,他就站在王城大道边上,答话谦卑而热情,乐意为有钱人服务。吕洋向“使者”支付人民币购买经验值,“使者”则让她迅速升级,从人变成了神。吕洋觉得这么做很值得,在这上面,她“只不过花了千把块钱”。

但是,杀伤力和防护力是由装备决定的,级别只是佩戴相应等级装备的必须条件。就像金庸的小说,内力的修炼是必须的,但一把玄铁剑却可以让杨过无敌于 天下。游戏中按照等级不同划分出了20等装备,以法师职业为例,武器由最初的柳木杖到最为罕有的至尊杖。此外还有铠甲、头盔、腰带、护腕、项链和戒指等 等。

这些好的装备都意味着金钱。和别的网络游戏不同,在这里,打怪和接任务不会掉装备。“我都要最好的,”吕洋说,“你只能去系统商店买材料,再找系统铸造商打造;或者,你只能去赌。”

“赌”,就是“开宝箱”。玩家向系统购买钥匙和箱子,很便宜,一块钱一套。用钥匙点击开启,屏幕上一个光芒闪耀的箱子缓缓打开,各种材料或装备如同 赌场大转轮一样排列在箱子里,光圈飞速转动,停下的地方就代表赌到的东西。箱子里经常会有玩家们最希望得到的高级装备,但转动的光圈却往往和它们擦肩而 过。

吕洋如今回忆,最疯狂的时候她就像一个赌场里的赌徒,会在屏幕前大声喊叫自己想要的东西,比如“乌木,乌木”,那是一种高级材料,而最后她往往得到的只是一点少得可怜的经验值。“乌木”,或者那威力强大的“幽冥戒指”,仍然摆在宝箱里,闪着诱惑的光。

这个世界中还存在着一个“开宝箱”排行榜,每天开宝箱最多的人,可以得到一颗罕有的令人倍增威力的“补天神石”。

这个巧妙的设置具有无穷的诱惑力,总有无数人在疯狂比拼开箱数量。吕洋曾一晚上开过上千个箱子,但始终功亏一篑,总有人比她更为执著,她从没拿到过那颗神奇的石头。

各式各样的排行榜随时闪现,世界英雄排行榜——根据级别和装备带来的威力排序;护国英雄排行榜——根据杀死敌国人的数量排序;国家实力排行榜 ——根据国家物资和国战胜负记录排序……就像电视里随时出现的脑白金广告,实时变动的排名对野心勃勃的英雄们高频率轰炸,提醒他们在这个严酷的世界里一刻 也不能放松。

玩家在不懈地开着箱子,他们有时好运地得到一点好东西,绝大部分时间几无所获,但越是没有收获,他们越是迫不及待地打开下一个箱子。他们每点击一下,就代表一块钱,又一块钱……就像一个永不停歇的沙漏,金钱涓滴成河一般随着每一次点击汇成巨流,流向看不见的系统。

吕洋自认为运气还比较好,“平均开1000个箱子,好运的话能有十几次拿到好东西。”

由此吕洋成为了她现在所鄙夷的“人民币玩家”,上万的人民币被迅速而几乎不被察觉地花了出去。在游戏中。“女王”拥有了可怕的威力,她为自己,也为 朋友报仇;她接受请求,为本国的商队护镖;同时她也会和英雄们一起侵入别国。她声誉日隆,跻身英雄之列,在游戏里,她甚至和威猛的帮主“狼烟”喜结连理。 当然,也由于她在现实中是一个那么可爱的姑娘,她被推举为楚国的国王。“国王万岁!”人们向她俯首称臣。那是吕洋在征途中的最高点,也惟有在那转瞬即逝的 一刻,吕洋觉得自己付出的时间和金钱是值得的。

国王累了

“系统”是最为勤奋的——女王觉得自己像驴子——花钱买你生气——快感只在一刹那

吕洋心里清楚,王位是真金白银买来的。一套转生150级左右的顶级装备,平均要开5000个宝箱。按照系统繁复的装备打造设置,要给一套装备镶上 14颗星星,打开“灵魂锁链”,镶嵌补天神石,花费又在5000元左右。随着等级的提高,原有的装备又必须相应替换或升级。平均每升5级,装备就要更新一 套。

这时的“女王”已经成了一位熟练的开箱工,日复一日地开宝箱,升级装备,再淘汰,再升级……“后期主要就干这个事情了,”吕洋回忆,“不更新换代不行,不然国王很快就变菜鸟。”

这样的压力不仅仅来自于游戏内部。在吕洋常去的网吧,甚至洗手间里都贴着征途网络公司的宣传四格漫画。当你洗手的时候,你就能看见一个漫画小人,在尖刻地嘲笑那些疏于升级的“懒人”。而招贴画上威风凛凛的英雄在每个网吧的门口注视着你;勤奋的推销员们时常出现在玩家身边。

与媒体上的各种宣传攻势相比照,这些推销员被称为史玉柱的“地面部队”。他们大多是“脑白金”销售旧部,活跃在中国广大的二、三线城镇,对于如何发掘利润,他们有着训练有素的敏感和才能。

系统是吕洋见过的最为勤奋的游戏系统,它更新换代的频率令人应接不暇。“要么花钱买安全感;要么省钱,随时被欺负,”吕洋说,“一天不上线,就会觉 得自己又落后了,实在是太累了。”她觉得自己像被胡萝卜吸引着一直向前的驴子,总有更加强大的“威力”在前方向她招手,而漫漫“征途”几无止境。游戏中弥 漫的仇恨也令吕洋越来越厌恶。一些结下了梁子的人民币玩家在每一件小事上都要一争高下。他们反复抢夺对系统角色的控制,互相攻打帮派总舵,没完没了地袭击 对方的商队,在PK竞技场上更是置敌人于死地而后快。甚至宝箱排行榜第一名也是他们争夺的目标。

如果一个玩家开了5000个箱子,另一个就一定要开第5001个。他们把这种疯狂的玩法叫做“花钱买你生气”。

系统不停地自我更新,统御术层出不穷。就连传统的打怪任务,系统也干脆允许家族与家族之间抢夺砍杀boss的权力。身为一国之主,吕洋总是必须身先士卒,如果她稍有懈怠,总有红了眼的部下口出怨言。

这越来越不像吕洋想要的游戏。吕洋觉得这个世界变得愈发丑恶,荣誉被建立在仇恨和贪婪之上。和以前的激动不已相比,如今快感只在疯狂结束后的那一刹那,接下来她会觉得无聊。

在楚国遭遇魏国的挑战之前,“国王”已经开始厌倦了。

地底的火在喷涌

只希望坚持半个小时——和平的气氛在蔓延——“跟你们老板说,不要尽干些挑拨离间的事情。”

“国战”在晚上8点15分爆发。吕洋和朋友们,她最得力的几个“武士”,坐在网吧包房内奋起应战。每当大的战役爆发,他们就坐在一个包房内,就和真实的战斗一样,肩并肩便于及时沟通,更利于互相鼓舞。

敌人从王城东门涌入,他们的国王身先士卒,冲入东门后使用“帮主召集令”,这样,他最精锐的英雄们可以被瞬间传送到他的身边。随着旋风,魏国的武士 们从天而降,他们立即被楚国战士重重包围。“女王”知道这是敌人的精锐,尽管城门外大批敌人正在涌入,但这些国王的随从才是最可怕的威胁。

武士们挥动大刀,空气被划裂成一道道光芒,他们拥有最强大的近距攻击能力和防护力,总是冲杀在前;法师们念动咒语,大地裂开,地底的火喷涌而出,天上的风云也化身为凌厉的雷电冰霜;蜂拥而来的召唤兽,来自天界和冥界,呼啸着混战在一起。战场被淹没在超越自然的伟力之中。

半个小时,吕洋只希望坚持半个小时。她从来没奢望胜利,战前魏国人放话10分钟结束战斗,傲慢的挑衅令让人反感,在战前动员里,“女王”向臣民们保证,她一定坚守半个小时。

东门不可抗拒地被攻陷,“女王”转战王城宫殿,宫殿前矗立着“大将军王”塑像,只要他被砍倒,就意味着楚国输掉了战争。楚国的战士们把战车集中起来围住塑像,在猛烈的攻击下,只有坚固的战车能够提供些微保护。

吕洋使用了“防守虎符”,她的臣民可以被全部召集到身边,楚国全国动员,宫殿前的每一级阶梯都成为血海。魏国的英雄们每杀死一个对手,就会有十个或者更多的人把他们围住。战场已经陷入混乱,没有沟通,没有指挥,每个人眼里只有敌人,本能地砍杀,不停地砍杀……

但吕洋的判断是对的,“人民币”才具有决定性的意义,这是实力之战,系统这个胜利女神青睐祭献更多金钱的一方。当魏国的国王最后砍倒“大将军王”,吕洋看了一眼时间,她坚守了将近40分钟。

这是吕洋输掉的最后一场战争,尽管她也曾经赢得过国战,但这个生性温和的姑娘如今觉得即便胜利也不能再带来荣耀的感觉。战斗结束后,她充满厌恶地声 称不再履行保卫国家的责任。“再有国家来进攻,我的家族不参与应战了。”她向臣民们宣布。“有意义么?”吕洋反问她的质疑者们,“系统挑起战争,我们往里 投钱,谁投的钱多谁就赢。”她觉得没有胜利者,“都被系统耍了!”

帮主“狼烟”和家族里的其他人支持了她的决定。“我们也觉得,这不是我们在打仗嘛,”狼烟解释,“纯属被人卖了还帮人数钱。”

吕洋成了“世界”里著名的“反战”国王。她更热衷于和别国结为盟国,当然盟国可以轻易地撕毁和约,她也不在意。在和其他国王交涉时,她也总是强调,就算你来打我,我也不应战。“让他们自己觉得没意思。”吕洋有些狡猾地说。

和平的气氛在悄悄蔓延。“国战”次数进行得太多,各国国王和英雄们互相之间开始熟络,在无数次仇杀之后,他们中的大部分成了不打不相识的朋友。“时间长了,没人好意思动武了。”吕洋说。

上线的时候,她也只喜欢跟朋友们聊聊天,组织家族或者帮派的活动,惟一杀人的情况只限于为臣民的商队护镖的时候,她讨厌那些专门盘踞在边境附近、以砍杀平民和抢掠商队为乐的“强盗”。

在网吧,她又碰见了一个游戏推销员,并不是开始那个,但一样面带微笑,用充满诱惑力的词汇请她“提点意见”。这位推销员同时自信地声称:“万人国战的场面会更加宏大和频繁!”

就在这段时间,征途网络公司宣布“重组国家”。系统将原有各区的国家重新打乱组合,原来的友好关系打破了,陌生的国王们重新被扔进了新的竞技场,而仇恨将被重新点燃。

“跟你们老板说,不要尽干些挑拨离间的事情。”吕洋回答。

昔日勇猛精进的“女王”开始变得“不思进取”,她疏于升级,也不再渴求更好的装备。她在游戏里的配偶“狼烟”有些着急了,催促她赶紧跟上,不然就要被越来越多的人超过。

而吕洋现实中的丈夫是个关心妻子的人,他以为吕洋只是累了。一天早上,吕洋醒过来,发现不怎么玩游戏的丈夫坐在电脑前,替她不停地开着宝箱,他想为她打造更好的装备。吕洋突然觉得有些心酸,在下一次上线的时候,她悄悄跟“狼烟”“离婚”了。

监牢,看不见

禁止市场经济——第二十二条军规:那儿有个概率——如果他们反对“系统”会发生什么——“天哪”

尽管赞同“和平治国”方略的人并不很多,但吕洋发现,和她一样对这款游戏从赞赏变为不满的人越来越多。连吕洋都没有想到,玩家们居然自发组织了一场针对系统的“静坐抗议”。

事情起因于系统宣布的一项新规定:绑定。根据这项规定,玩家从系统获得的装备和“银两”,都属于绑定范畴,即只能自用,不能交易,不能交换,甚至不能拆成材料或者干脆丢弃!

在游戏里,每一种职业都必须搭配对应的装备,每一种装备又由对应的材料打造。开宝箱早已成为玩家获取装备和材料最主要的方式,当你耗费掉了人民币, 需要一块“乌木”却得最终得到一块水晶,玩家们通行的办法是互相交易各取所需,或者摆摊出售换取银两。征途网络公司的解释则是,他们发现有职业玩家将游戏 中获得的银两和装备在线下出售获利,“绑定”是为了打击这种行为。

玩家们最终发现,在这个世界里,自由市场经济在某种程度上被禁止了,合法的私有财产只许保有,不许交易。在这里只有一个庞大的终极卖家被允许存在,那就是系统本身。

在一些游戏论坛里,随处可以看见玩家们黑色幽默一般的抱怨。一个帖子说:“我是个法师,花了上百块钱转到了一把刀,可是我不能装备刀啊。这把名贵的刀对我一点用处也没有,我还不能把它扔了。我甚至还要花钱向系统买个包袱,因为我没有足够的空间来装这把刀!”

“这个游戏处处都是花钱的陷阱!”另一个玩家宣称。他举出“孔子”为例,这个万世师表的人物在游戏中负责“智力考试”,通过考试玩家可以获得海量的 升级经验。但是,受教育是很贵的,向“孔子”讨教问题,居然“20两银子一次”。甚至财大气粗的人民币玩家们也对过于频繁的更新力不从心。系统最新宣布, 可以给装备镶上第15颗星星。按照规则,购买4颗宝石充一颗星,看起来不麻烦,但是这里有一条“第二十二条军规”:连续镶星会导致所有的星星爆炸。

假如你已经花费了40颗宝石镶上了10颗星,而在镶第11颗时发生爆炸,那么前面的10颗星同时消失,你只能从头开始。从第10颗星开始,成功镶嵌的几率为50%,此后递减。星数越高,爆炸几率越高。

设计者在此利用概率原理和玩家们开了一个小小的玩笑。“我在冲第14颗星时,连着爆了11次。还不算前面爆炸的次数。”一个玩家抱怨。仅仅为了给他的至尊刀镶上第15颗星,他就花费了超过3000元。

玩家们出离愤怒,他们停止砍怪,不再接受任务,国王们都难得和平地坐到一起而不是申请“国战”。在游戏地图最中心的皇城广场上,密密麻麻地坐满了战士、法师、弓箭手和召唤术士们。这些往常醉心于杀戮的角色,如今用绝对的安静来对抗系统的贪得无厌。

吕洋当然不会缺席,她率领家族成员们加入静坐行列,她甚至花“10两银子一次”向“全世界”喊话:“游戏越改越烂,系统越来越贪!”

她惊愕地发现,“系统”两个字不能显示了,变成了**;再试“GM”,还是**;再试“史玉柱”,这次是***。

吕洋既愤怒又觉得好笑。是啊,这个隐匿无踪的**或***,却无处不在。它谦卑而热情地引导你花钱,它隐身其后挑起仇杀和战争,它让你兴奋或者激起你的愤怒,它创造一切并控制一切,它就是这个世界里的神。

**虽不可见,却始终看着你。没过几分钟,正在愤怒控诉的“女王”被抓进了监狱。按照系统的指令,她将被关押8个小时。这个“监狱”不在这个世界的地图上的任何一点,它只存在于系统中,就像索尔仁尼琴描写的古拉格群岛,你从不会看见它,你只是被运送到那里。

随后发生的一切,也正是只在那些最糟糕的世界中的监狱才会发生的。“女王”太显眼了,她的麒麟神兽暴露了她的身份。监狱里的人们看见了一个国王,就如同当初吕洋还是个小角色时看见国王一样难抑杀意。疯狂的人们围拢来砍杀,“女王”一次被杀死,又在原地复活,再被杀死……

屏幕上夸张的粗体字又一次次闪耀:“天哪,楚国的国王女王居然被无名小辈×××杀死了”。

吕洋突然觉得以前的自己真的是很愚蠢,她对“女王”,或者说另一个自己的生死毫不关心,她退出游戏,关了电脑,上床睡觉了。

永远不再回来

旧王逊位,新王登基——为什么会有仇恨——又是一个财富神话——永远不再回来

第二天,吕洋上线,宣布“国王”逊位。她发现这里比现实世界更为真实,真实得那么残酷;她曾经试图挑战这个世界里弱肉强食的规则,对抗系统,却徒劳无功。现在,她彻底厌倦了。

一个渴望战斗的新锐武士接任了“国王”,并立即申请了新的国战。“女王”和她的家族没有参与这次战斗。楚国惨败而归。一个小角色,以往跟着“女王” 闯荡,如今被困在了敌国,完全是刀下鱼肉,他一次次在安全区复活,但只要尝试跑出安全区,就毫不例外地被杀死。这是个新玩家,他的账号里还没什么钱,连一 个安全离开的“竹蜻蜓”都买不起。

吕洋为这些小玩家们难过,他们原本是想获得些许游戏的快乐,却成了“人民币玩家”们发泄怒火或获得征服感的牺牲品。她上线,看着熙来攘往的虚拟角色 们,一个威严的法师背后可能是个谨小慎微的生意人,一个勇猛的武士背后可能是个和她一样的医生,也可能是任何一个在生活中原本善良谦逊的普通人。

“一个医生为什么一定要去杀死一个教师,而一个现实中的警察需要在游戏里伤害另外的人么?”吕洋禁不住思考一些奇怪的问题,“素不相识的普通人之间为什么会有仇恨?”

她开始注意到书架上那些以前还时常翻一翻的专业参考书。它们就整整齐齐地摆在那里,就像消失了很久,突然又出现了。天凉很久了,吕洋才头一回注意到窗子外面的行道树叶子开始黄了,淡黄的一片令人心里充满宁静。

她最后一次上线是在不久前。那时征途网络公司已经宣布部分地改变了“绑定”规则,公司成功地在纽约上市,第三财季实现营业收入4.052亿元,净利润2.902亿元,相比去年同期,增长率达到了惊人的164%和152%。公司账面现金达68亿元人民币。

又是一个财富神话。根据媒体的测算,史玉柱将以500亿身家荣登中国富豪排行榜的前列。

系统开始慷慨地在游戏里“发行股票”,宣称随着股价上涨,玩家可以按同样的价钱兑换成“银两”。但吕洋对这些充满诱惑力的新玩意再也不关心了,她只是被一个朋友强拉着上线的,朋友要在游戏里“举行婚礼”。

吕洋默不作声,藏身在前来庆贺的角色中,但是有一个人认出了她。这是一个武士,他手中的刀闪耀着光芒,显示着他强大的威力。“我认识你,”他说,“以前刚玩的时候你带过我们,现在我们也很厉害啦。”他们正在筹备新的国战,他告诉她。

他是谁?是请她护过镖,还是曾经被她从敌国营救?吕洋完全不记得了,她只觉得这些越来越多的威风凛凛的后起之秀,跟以前的她是那么相像,一样地野心勃勃,一样以为发现了一个美丽新世界。

她一句话也没回答,然后她下线了,并决定永远不再回来。

(应被采访者要求,文中姓名及游戏中名字为化名)

“泡菜”开的花中国结的果

韩式网游的“精髓”

“中国玩家在欧服美服都被视为不受欢迎的异类。”一位曾在《魔兽世界》任职的游戏经理说。中国人总有办法以欧美玩家望尘莫及的速度升到极高的级别, 在进行团队项目时也不喜欢遵守默认的利益分配规则。对于显得有些“迂腐”的欧美玩家来说,中国人就像是恐怖的异教徒。“欧美游戏并不鼓励力量上的无限优 势,比较讲究平衡和互相牵制,”曾经的魔兽经理说,“可能是因为传统文化和现实环境的影响,说实话中国玩家还是更适合丛林式游戏。”

一名网络游戏经理回忆,他曾经接待过一位跑到游戏公司的有钱但缺乏耐心的玩家。这位玩家专程前来咨询:是否可以直接付钱,购买顶级装备。公司上下当时哭笑不得。如今这名经理感叹,他们没有看到在这样的玩家身上,蕴含着巨大的商机,而《征途》看出来了,获得了成功。

恃强凌弱和功利主义的“社会准则”来自于韩式网游。在被称为“泡菜”的典型韩国网络游戏中,玩家最常做的功课是练级,而练级的目的则是获得强大的威 力和权力。没人能够否认这些游戏中的虚拟社会由对抗、暴力和欲望主宰,玩家们因此急功近利、恩怨分明、派系林立、残酷冷漠。这既是游戏的乐趣所在,亦是对 人性弱点的敏锐捕捉。

从《传奇》开始,韩式公会模式深入人心。这种模式极具东方式的家族色彩,对内严格管理,对外一致作战。行会会长可以自己制定行会会规,可以发出通缉令,与其他行会结盟或宣战。这种设置便于玩家们结成团体满足自己的战争欲望,同时也确立了集权式的“社会结构”。

这一社会结构不只存在于虚拟之中。每一个玩家背后都是一个活生生的人。相当多的行会成员来自于一个城市甚至同一间网吧。行会内部的利益关系日益复 杂,为了招募新手,行会可能会送装备、送钱。行会设置很多职位,成员之间等级森严,如同帮会。战争开始时各成员奋力杀戮,既获得暴力快感,又可以得到战利 品,而战利品又意味着金钱。战利品的分配亦遵从等级制度。

当韩式网游的“精髓”发挥到了极至,权力、荣誉和快感都来源于暴力,而暴力的最佳来源就是金钱。游戏设置亦乐于创造仇恨与贪欲,把玩家分为大大小小 的家族、帮派和国家,设立各种个人或组织争抢的目标,甚至直接挑起争斗。事实上,这并非《征途》一款游戏之功或之罪,这种价值指向正是韩式网络游戏的传统 精髓所在。

据说陈天桥在了解了《征途》的模式之后,连夜召开高管会议。会议的结果是《传奇》全面推行《征途》式的“免费”模式。《征途》取得了一个又一个令业 界瞠目结舌的成果,原先对史玉柱进军网游持嘲笑态度的游戏运营商们,开始纷纷潜心学习他的游戏设置。而征途网络公司近日已经将新开发的《巨人》投入公测, 根据一句前后矛盾的宣传语,它号称“最便宜的免费网游”。“《征途》式”网游,“最中国”的网游,将越来越多地出现在玩家面前。

这款最中国的游戏拥有最中国的玩家。除了《魔兽世界》等少数例子之外,不讲究权力与等级制度的欧美网游在中国玩家中并不风行。事实上,虚拟世界并不 可以与现实世界简单对应,电子游戏中的“合法伤害权”亦是必然乐趣之一。问题在于玩家们在追求这种虚拟乐趣时是否会违背自己在现实生活中的伦理准则。


欢迎大家转载,转载时请检查原作协议,未标明请先按照CC协议。

2009年6月18日星期四

IT市场统计分析

    最近在看简历,根据简历和自己的经验总结一些东西出来。管窥蠡测一家之言,权给新手做个参考吧。
1.行业分类
    从统计上看,web开发是人数最多的行业,占大约56%。其次是嵌入式市场,大约占18%。erp市场也差不多,18%。剩余的不足8%。
2.性别分布
    众所周知,程序员是男性的职业,但是出乎大家意料的,程序员中有14%是女性(纯程序员,不包括美工)。不过根据贝壳的人工观察,其中只有一人的工作时间超过5年,多数都是3年不到的新人。看来女性程序员怀孕后转业的情况非常严重啊。
3.年龄分布
    以大学毕业为基准水准计算,当前程序员的最低出生日期应当是1987。贝壳按照这个进行了统计,得出结果如下。
    1983年17%,1984年8%,1985年14%,1986年16%,是人数最多的4年。低于1987年的占11%,1980到1982年间的人数占20%,高于1979年的占14%。
4.水准分类
    水准是一个很难界定的指标,贝壳采用五级分类法,简单对其分类。大多数情况下,级和级之间没有明确的定界。
    0.是完全没有任何技术背景和资历的人士,说白了就根本不是IT人。大约占8%。
    1.初步具备IT行业人员的背景知识,能够做一些简单的软件产品,有跟随1-2个项目的经验。但是无法承担独立的项目,无法解决比较复杂的问题。在这个 层次上,程序员大多数时候根本不知道怎么做,以及该做什么,始终处于知识缺乏的状态。业界俗称,小白。大约占50%。
    2.具有标准职业从业人员所需要的知识(当然,具体是什么知识视行业和语言而定),跟随过多个项目,其中有2-3个大型项目。可能领导过1-2个项目,但 是不清楚项目管理的概念和专业知识。这个级别的人在总体人数中最多,大多数人在工作1-3年后都可以达到这个水准。可以独立的解决问题,和客户交流,完成 软件生产的整个流程。在这个层次上,程序员大多数时候都知道怎么做。主要的问题在于多数人还不知道如何将这个过程简约成自己的标准过程。一般来说,这就是 标准程序员的典范。大约占32%。
    3.精通C++,熟悉windows和linux系统管理和系统底层,掌握至少一门高级语言。熟悉项目流程和项目管理的概念和专业知识,能够带领团队协作 完成大型项目。能够独立建模,抽象问题,并通过算法解决问题。具备独立和客户沟通,协调解决问题的能力。一般有多个项目经验,曾经领导团队完成2-3个大 型项目。如果你天分不错,运气不错,又够勤奋,大概在工作3-5年后会达到这个水准。在这个层面上,算法和标准化过程这些书本上的东西首次超过了如何做, 做什么,成为程序员的首要问题。这个层级的人数也比较多,能够胜任项目经理的职位。大约占8%。
    4.精通专属领域的多项核心技术,有广泛的业界联系,专属领域有一定的知名度。研发过一项或几项领域中的关键技术,对领域的发展做出过一定贡献。要到到这 个层次无法依靠时间的积累,很大程度是天分,运气。在这个层次上,解决问题已经不是一个问题。由于基本能解决领域内的多数问题,因此发现需要解决什么,和 创造性的解决这些问题成为这个层次最主要的问题。这个层次的人基本很少,一个子领域中全国不会超过百人。大约占2%。
    5.曾经研发过改变世界的技术。这种人多数你听过,运气好这辈子能见到一个。大约占1%不到。
    贝壳当前的水准在3上下浮动,估计奋斗一下,这辈子能够达到4的层次。至于5,这辈子不指望了。
5.工资分布
    大多数情况下,工资和工龄都是挂钩的。
    根据贝壳的统计,工资和年龄线性拟合后得到的一阶近似方程为:y=-1.089*(x-1990.50)。带入贝壳的年龄,y=8.16。恩,贝壳当前的工资还是不错的,比平均值高。
6.语言分类
    由于简历是python的职位,因此python的比例异乎寻常的高,无法作为可用结果。贝壳按照经验比例适当缩小了python所占比重,得到一个估计 值。作为统计数据的修正,并列于下。根据贝壳的统计,使用java的人人数最多,占了38%,修正大约是40%。使用微软系列开发语言/工具的人其 次,28%上下,修正大约是30%。使用php的人再次之,12%,修正大约15%。最后是使用C++的,8%,修正10%。真正使用python和其他 动态语言的人,修正后大约是5%。由于职位不涉及前台,因此前台语言/技能不计入统计。
    最后谈几个感想。
1.队伍水准不成比例
    根据贝壳的经验,在多数的项目团队中,推荐的岗位配比是:1位项目经理,2位程序员,1位前台工程师,1位DBA,2位测试。如果可以,最好还有一个专门 的文档和行政。这个人数配置适用于6-12人的团队管理,如果人数不足,可以减少文档和程序员。如果人数有多,可以增加2位程序员,1位前台工程师,1位 测试。其中程序员、前台工程师的配比要基本保持2:1不变,程序员、前台加DBA对测试的比例要基本保持2:1不变。这可以说是项目团队的黄金比例,比例 失调往往容易造成窝工或工作不完整,质量有瑕疵。
    但是需要看到,这样的话要求2位达到3这个层级的程序员(PM和DBA),但是最高只能带4名2这个层级的程序员。这个和当前的2,3层次的程序员的比例4:1严重不匹配。因此造成一个现象,3这个级别的程序员不足,1这个级别的程序员太多。
    根据孟岩的blog,07-08年的IT从业人员大约是500-600万人,其中程序员大约100-130万。每年的IT行业毕业生大约是70-100 万,其中能进入程序员领域工作的大约20万人。当然,他的blog是一年多前的,而且说的是毕业生就业问题。但是根据全球IT形势,我估计这几年里面程序 员队伍规模即使增长也有限,不会超过150万人。也就是说,大约一年之内就要淘汰10%-20%的从业人员。根据上面的分布,贝壳猜想多数人都是倒在了2 到3的路上。
2.小白丛生,项目倒霉
    上面一个问题带来的麻烦是,由于小白的人数太高,因此价格太低。其中不免一些人有非常好的测试表现。这要一分为二的看,部分人是真有这个水准的,以小白的 价格雇用到这些人是非常合算的(当然最多一年,不会太久)。但是多数人仅仅是表现不错而已,这些人工资低测试表现高,很容易进入项目。而进入项目后,一旦 担任关键职务,后患无穷。实际上,整个团队中,水准1的小白可以担任的职位只有测试(而且必须至少要有一个是真的专业测试)和文档。但是仅这两个职位而 言,远远达不到培养新人的目地。这也是很多小白倒在了达到普通程序员水准路上的原因。
    更麻烦的是,如果突然招聘,很容易发生招到的程序员价格都偏高,而且很多都没定下来就先和其他公司签约了。这时候往往只有小白可以用,项目情况可想而知。
    理论上可以开放一些职位旁观项目,实际上也有人这么做的。但是旁观项目是一个非常麻烦的事情。首先项目的旁观者不但对项目没有正面贡献,反而会拖慢进度 (因为要占用其他人时间进行沟通),因此旁观职位的工资应当是负数。而且多数公司项目第一,赶都来不及的时候谁会开放旁观职位。更不说光在项目中旁观是很 难确实体会到那个职位上要面对的问题的。
3.项目经理的条件就是要做过项目
    项目经理是一个非常专业的角色,这个职位和技术总监(或者叫核心程序员,高级程序员)、DBA并称是一个团队的三大核心。核心程序员和DBA可以慢慢学, 但是项目经理是学不出来的。实际上,合格项目经理的必要条件就是带过一两个大型项目。问题是,如果想成为项目经理,你找谁让你带项目呢?
    一种方法是跟随一两个项目,带一两个小项目,学整套的项目管理方法论,最后由一个成熟的项目经理指导你完成首个项目。但是实话说,这种方法只有对大公司有 效,而且还的看你的运气。小公司里面哪里弄那么多人开两个团队?(原本的项目经理一个,你一个,这要35人以上的公司规模呢)大公司则是牛人太多,轮也不 一定轮到你头上。
    另一种方法是赶鸭子上架,等你毁过一两个项目后,也就学的差不多了。
    实际上,国内由于PM(真正的PM,而不是挂这个名头的程序员或者其他捣浆糊人士)不足,而公司规模又不足,足了也没有培养人才的兴趣。因此大部分PM都是通过后一个途径培养出来的——
4.语言生态扎堆
    我们开放的职位叫做python程序员,可我的邮箱里面有一半上下的人都是java和C#的资历(我不看他会的语言,而是看他资历的),其中真正有 python资历的人十不足一。实际上国内大部分的人都在学java和C#,做web和erp程序开发,大部分的小白其实扎堆在这里。真正成为3,4这个 层级人才的,java/C#/C++/python的比例其实差不多,很接近。
    实际上这和当前的语言生态有关。到也不是说这个生态有问题,而是这是当前现状市场化配置的必然结果。大量的小白(6成以上)集中到6成上下的低端web、 erp和嵌入市场。这些市场的目标需求不复杂,没有重大的技术问题,服务器压力不大,因此小白足以应付。既然是小白,那就需要选择一种使用人数最多的语言 (因为最好找人)。于是两大语言集团,java和ms系列的asp,asp.net就成为必然选择。
    web行业和erp行业的几乎全是ms系列和java系列的语言,而嵌入式里面则大多数是C++(当然,也有j2me,不过那不完全输入嵌入式开发的领 域,很多应当属于游戏领域),这个是受限于嵌入式本身的技术特点。C++本身也有写的好和写的差之分,但是由于程序员要控制更多的东西,因此差的程序员很 容易被识别出来,也更难在行业中生存。因此嵌入式行业的总体开发成本比web行业要高。
    在我的行业中,缺少游戏行业的分析。这主要是因为我的简历里面几乎没有游戏行业的从业人员。我无法解释这个现象的成因,也许游戏正在从软件行业中独立出去,成为一门独立的体系。

2009年6月10日星期三

你要哪种钱?

今天和几个人坐在一起的时候,突然听到对面的人叫我。
贝壳,快借我点钱。
贝壳刚刚有点瞌睡,有点迷糊。往左看看,星际。往右看看,魔兽。张嘴――
――你要哪种钱?
人民币。

2009年6月1日星期一

电脑操作与人机工程学

    贝壳大学念的是工业工程,毕业导师就是人机工程学方向的,贝壳的人机工程论文就是按钮的大小和操作效率。因此,今天贝壳罕见的回归本专业,谈谈电脑操作的速度问题。
    首先一点就是,无节制的优化速度是万恶之源。为什么?道理和优化程序一样。你实施一个优化必定有一定成本和代价,为了一个一个月进行一次,一次三秒钟的操 作,进行一次优化。假定你搞定优化用了半个小时——一些情况下的却需要这么长时间。这样你需要100年才能收回你的投资,显然,这很愚蠢。
    那么,什么是优化,为什么要优化?
    操作优化,指的是你利用一些专业和非专业的方法,将日常最常用的操作简化。减少操作次数,减少操作时间,减少精力集中的负担等等。最常见的方法是“按键精 灵”或者是快捷键。而之所以要进行优化,则是因为——我懒——俗话说,只有懒人才是好程序员。也许有人会想,那设计者为什么不设计的效率高一些?拜托朋 友,你也讲讲道理。设计者怎么知道你是要经常复制还是要经常剪切?于是他只能假定你经常剪切(或者复制)。如果不幸,你恰恰相反。也许你就需要优化,也许 贝壳的文章就能给你的工作提供非常大的便利。
    那么贝壳下面逐个讲解贝壳碰到的一些优化方法和范例,具体的运行则要靠大家的发挥,没有一定的模式。如果你觉得你的电脑操作工作平淡无聊,那就说明你需要 优化了。每种优化方法需要一定的专业知识配合,贝壳会给出评价。评价有三种,适合普通人,就是说一般稍微会一些电脑的人,可以根据网络上的讲解来使用。适 合专业用户,指用电脑3年上下,电脑比较熟练的人,可以经过试验配置成功。还有疯子专用,指这个方法基本就和您无缘,除非您正好是程序员或者疯子。
    首先我们从最基本的开始,鼠标,按键,快捷键,快捷键排位。这个方法适用于普通人,但是下面一段是比较专业的论述,不感兴趣的可以跳过。
    鼠标和键盘是我们最常用的输入工具,而根据贝壳的人机工程论文,鼠标的输入效率低于按键。但是要注意,这个结论并不永远成立。对于某些图形操作,尤其是高 精度操作来说,键盘上可以操控的方法变成上下左右四个键,效率大大降低。如果使用其他键来辅助,这不是人类能接受的方法,疯子也不行。此时使用鼠标比键盘 效率高多了。键盘输入快的根本原因在于一般人精神集中后,一秒可以按三个键——至少也有两个。而无论精神怎集中,区域怎么大,要输入一个点击至少要一秒。 按照信息量计算,键盘的可用信息量要比鼠标大一个量级。然而,除了输入文字,键盘并不好用。根本原因在于鼠标的模式是阅读-选择,而键盘是记忆。因此,键 盘操作是用户不友好的。
    通常来说,我们可以用键来定义一些常用功能,这样会加速操作。通常而言,这个被称为快捷键。例如,Atl+Tab是切换窗口,相信大多数人都知道这个热 键。这个热键好用的根本原因在于快速的在两个窗口见切换——如果用鼠标会累到死。我们可以记忆一些常用热键来加速,毕竟之所以定义常用热键是有意义的。例 如Atl+F4的关闭程序,结合windows使用可以以<win>,Atl+F4,U的顺序来关机。整个操作只要一秒,单手就可以,真是酷 到不行。Atl+Space可以唤出系统菜单,因此Atl+Space,X可以最大化,Atl+Space,N可以最小化,这两个也可以单手操作。
    单手操作热键的意义在于免去频繁的键盘/鼠标切换。当你需要双手执行热键的时候,你需要半秒将右手从鼠标上移动到键盘上,再花半秒移动回去。这样就平白多 了一秒的时间——这还是高手的时间,普通人更长。对于加速操作来说,这么移来移去很没有意义。而键盘/鼠标的配合才是操作电脑的理想境界。你可以在资源管 理器里面试试一个操作,在一个文件夹内选择一些文件复制到另外一个文件夹。这是贝壳最熟悉的配合动作——因为太频繁了。首先点中头一个文件,按下 Shift点最后一个。放开键盘鼠标,按下Ctrl+C。点击目标目录,按下Ctrl+V。速度快的原因在于,Shift放开后,按下Ctrl+C的动作 基本是下意识的。这样鼠标可以轻松的去找目标——同步的。按下Ctrl+V也是下意识的,所以整个动作的时间序列是——点头一个文件,点最后一个文件,点 目标。当然,拖曳选中区域,拖曳到目标目录一样可以,而且是单手鼠标操作。只是这样一来,首先你无法添加选择零散目录——用Ctrl键就可以做到。其次如 果不小心在移动的时候松开左键,就会触发麻烦的同文件夹文件复制。因此上述方法兼顾了稳定性和速度。
    也许你觉得无聊,不就是文件复制么?我点右键也可以啊。问题是,如果点击右键,再点选菜单,至少需要1.5秒的时间。比这个方法至少慢了1秒。如果你每天的工作需要整理大量的文件,我想你不会高兴遇到这个问题的。当然,如果你基本不复制文件,好吧,当我没说过。
    更多的时候,我们需要定位目录中的某个文件或者文件夹。对此,你可以输入文件的头两个字母。这时候光标会被带到符合这两个字母的头个文件——我想离你的目标不会太远了吧。这个同样是双手配合操作。

2009年5月26日星期二

用简体还是繁体

    作为一个使用了24年以上简体(不要怀疑,贝壳三岁开始学写字的),并且暂时还要继续用下去的人来说,这几乎是一个不用问的问题。但是,最近,贝壳考虑是 否应当改用繁体,否则真有成为文盲的可能。何为文盲呢?中国规范常用字无法写出80%以上的,我觉得就应该算做文盲了。也许这些新时代的文盲可能具有非常 高的学历,甚至会是博士。但是5个字里就有一个字写不出,不是文盲是什么?
    不过最近的汉字简化修改方案,似乎有把贝壳往文盲上推的嫌疑。凡能读这篇文章的人应当都知道,所谓的汉字简正之争。简正之争,由一个汉字方案的学术争议, 有逐渐演变为一个中国,谁是中国的国家和民族之争的现象。但是,无论谁是最终标准,应当都具备一个国际语言的基础特性,即一致性。例如汉字就应该是汉字, 不能今年是汉,明年就变成了�,再下去又是不知道别的什么。中文固然因为语言使用区域非常广泛有非常多的别字别音,而且在某些地区还是主流,但在规范上应 当兼容扩充,而非来回修改。例如山东地区,打车叫打个的(de1,一声)。打的这个词按照贝壳所见到人的叙述,应当来自南方,香港和广州(当然,也可能因 为和贝壳讲的人本人就是香港人的关系)。原来是打的士(di1shi4),的士的读音在广东话中非常类似taxi,后者在英文中是滑行的意思,比拟出租在 街上四处溜达,寻找乘客。中国在改革开放后才有了taxi,因此叫法上都学香港,才有了的士,打的,的说法。这个不在规范之内,应当考虑统一的问题。否则 若是一个香港老板跑到山东,当地人秉承圣人之乡的理念,非常热情好客的说:我给您拦个的(de1)吧。岂不笑掉人家的大牙?
    汉字规范之争其实涉及到非常多的政治和经济层面的问题,但是和小老百姓关系最大的是一致性。诸位可以想想,若是您学了30多年字,一朝之间2成的字突然被 人宣布不会是这么写了。您从一个正常人就猛的变成了文盲,换您您干么?为什么台湾反对简体字?因为一旦简体字推行,社会上多数人比文盲更加文盲——他们连 读都不会,要重上六年小学。您想想,换您您干么?现在和台湾还没较上劲,咱们自己先和自己较上了。文字要改,大改还是小改?如果是小改还好,如果大修,无 疑是直接宣判了贝壳的文盲。这种情况下,还不如直接学繁体字的好。
    说到学繁体字,到也不是贝壳信口开河。而是当下,会电脑的人学繁体字的成本真的不高。你仔细想想,你到现在总共用笔写过多少字呢?反正今年过年到现在,贝 壳拿笔就写过三个字,自己的名字。凡是吃饭刷卡签合同,必定要写这三个字,其他都不会写了。贝壳又长期挂在网络上看各种资料,外加高中时期还特别研究了前 秦散文,三国志(不是三国演义!)。因此简体繁体都能看。现在换用繁体,无法就是输入法切换一下,把输出简体的转换为输出繁体。对于开源输入法而言,简单 到只是码表转换。而后学会写自己的名字,学会1000常用字。基本贝壳就能冒充会繁体字拉。
    其实诸多字形的修改只是小事,问题是有很多讲法的统一和规范的推行落实才是当务之急。例如,以前贝壳小学时候还有专门的课程还分辨的地得。现在出了社会发现,有多少人管你的地得?很多人一些基础的文法都有问题,在这基础上还谈什么修改规范呢。

2009年5月24日星期日

AMD64下的Google Gears

    到http://dev.laptop.org/~joel/gears/下载了用吧,debian testing下正常。当然,离线还没有测试过——

2009年5月9日星期六

关于杭州飙车事件

写在前面的话。
在德國,起初他們追殺共產主義者,我沒有說話--因為我不是共產主義者;接著他們追殺猶太人,我沒有說話--因為我不是猶太人;後來他們追殺工會成員,我沒有說話--因為我不是工會成員;此後他們追殺天主教徒,我沒有說話-- 因為我是新教教徒;最後他們奔我而來,卻再也沒有人站起來為我說話了。
————Martin Niemoller
贝壳一直是个胆小且懦弱的人,虽然看了形形色色的事情,但是从来没有发表一点评论,连路过都没有一句。也许因为从事技术工作,贝壳清楚当今网管能够做到什么程度。然而针对这次的杭州飙车事件,实在无法闭口不言。事情发生的地方离贝壳的宿舍不足1公里,贝壳还到那里吃过饭。想像一下,如果当时过街的是贝壳......
首先,按照新闻原则,确认事件是否发生。gg一下,发现以下链接(http://tupian.zjol.com.cn/05tupian/system /2009/05/08/015492581.shtml),来源是浙江在线(搜狐也是转载这里)。就贝壳所知,这个是浙江日报的运营网站。贝壳 whois了一下,根据cnnic的结果显示,这个域名的DNS服务器地址是zjdaily.com.cn,而这一服务器正是浙江日报的官方服务器。更直接的证据来自浙江在线的联系方式,新闻中心0571-85310961,8531正是浙江日报的局号。
根据上面的原则,我们可以认为这个事件应当是真实的。贝壳进一步跟踪了新闻来源(互联网抄袭现象阿...,过程显示浙江在线转载杭州网,杭州网转载都市快报),结果在这里找到了源头(http://hzdaily.hangzhou.com.cn/dskb/html/2009-05/08/content_666555.htm)。
杭州日报的记者们,我为你们骄傲。整整三个版的报道(http://hzdaily.hangzhou.com.cn/dskb/html /2009-05/08/content_666488.htm),经过清晰明了。而且注意贝壳使用的网址,这是实体报纸的电子版,和实际报纸基本严格对应(这个应当是方正飞旋系统)。换句话说,这不是个网络报道,而是有记者参与的,见报的真实新闻。
OK,我们认定了事件的真实性,那么整个事情还有什么好说的呢?注意下面的消息,来源是中新网,其运营商是中新社。(http://www.chinanews.com.cn/sh/news/2009/05-08/1683856.shtml)这次问题到不在记者这里,而在交警认定这里。我不知道交警是如何认定和下结论的。但是我来简单计算一下,如果被撞起5米高,撞出20米外,到底是什么一个状态。
假定g=9.8,整个计算过程其实就是高一物理。撞起5米高,其向上的初始速度假定为v。整个过程满足v^2=2gs=2*9.8*5,求得向上的初始速度约9.9m/s(我没算错,你也没看错,贝壳中学物理竞赛拿二等奖的)。向上的单程时间为v1-v0=gt,带入数值为9.9-0=9.8t,上下总时间约2秒。2秒内横向行进20米,横向速度也为10m/s。根据速度合成公式,整个人初始的速度方向为斜向上45度,速度为14.14m/s。如果我们假定整个人体重65公斤(我没看具体体型,不过这个是一个常规中国男性的平均体重,资料来源http://ask.koubei.com/question /1306122623215.html)。当时转换的瞬时冲量达到65kg * 14.14m/s = 919.1kg.m/s。假定冲击在0.3秒内完成,那么当时的力量就达到3063.7牛顿。什么概念呢?就是在瞬间,一个能够对你产生300多公斤压力的锤子(自身大概有1000多公斤)向你以14米以上的速度砸过来,你们接触了至少0.3秒。漫画中打飞人的原型重现阿......
而且根据碰撞原理,人重量远远小于车,因此人飞出去的时候的速度应当是车速的两倍。(高中碰撞公式,难为贝壳还记得)当时的车横向车速不会低于 5m/s,否则人根本不可能以10m/s的速度飞出去,更何况还没算空气阻力。即,在刹车后,碰撞发生的瞬间,该车的车速不会低于18公里/小时。不知道当时有没有人能够测量刹车过程的刹车痕长度,以及当时刹车的时间?根据这个长度和时间,贝壳可以反向算出在刹车前,这个车到底跑了多快。不过贝壳可以透露找到一个基础数据,如果在撞车的瞬间,您在车里忘记系安全带。那么车速达到30公里/小时的时候(折合8.3m/s),您就可能发生严重危险甚至危害生命。至于您在车外,以18KM/H的速度和车接吻。无论您带了什么东西,基本都可以领便当了——

PS.补充于5月10日:
曾经风传媒体关于此事闭嘴的传言,估计不完全属实。10日的都市快报(向他们的主编致敬)发表了三版的后续报道 (http://hzdaily.hangzhou.com.cn/dskb/html/2009-05/10 /content_667288.htm)。可能是曾经封口过,但是又解禁了。

2009年4月21日星期二

Linux的环境

    很多专业人士的Linux是万年不换的,贝壳没有这么专业,电脑最近老换来换去的。所以列一下有什么东西是一个Linux必装的,以免忘记。其他东西就算 了,需要了再说。另外说明一下,以下列表是针对日常使用,而不是专业开发。例如python环境中的一些组件,还有一些太基础的系统组件都没有列。贝壳认 为会到这里看这些东西的人这些基础常识都应该有了。
    1.firefox + thunderbird。这两个是万年组件,好用跨系统。不多说了,列一下插件。
        1.1.Flash Player,adobe的能用就用那个,不能就用swfdec。
        1.2.CustomizeGoogle。
        1.3.Firebug,要用debian提供的包,否则无法用。
        1.4.FoxyProxy,移动系统要修改about:config。
        1.5.GMarks。
        1.6.Google Gears,x64有定制的安装包
        1.7.Google Reader Notifier,Google的产品好多。
        1.8.Greasemonkey。
        1.9.NoScript。
        1.10.Tree Style Tab。
        1.11.TwitterFox。
        1.12.Update Scanner。
        1.13.Session manager。
        1.14.QuickText,TB插件,能够使用模板定制信件。
        1.15.WebMail,TB插件,能接收Hotmail邮件。
        1.16.SendFilter,能够使用发送过滤。
        1.17.Enigmail,邮件加密系统。
    2.Gnome-do,快速启动程序,很方便。
    3.pidgin,万用IM,很强大,最好加上两个插件
        3.1.msn-pecan,msn的另类插件,功能比标准的多一些。
        3.2.fetion,飞信 for pidgin的插件。
    4.mplayer + audacious,经典电影播放器加还不错的音乐播放器。
    5.amule,emule的Linux替代品,电驴软件。
    6.ibus,很爽的输入法,不过比scim的系统结合程度要差一些,也还在发展中。
    7.OpenOffice,想开.doc .docx文件么?装OO3以上。
    8.eclipse,很强大的编辑器,唯一问题就是太大太强了。
    9.emacs + vim,推荐emacs23,自编译。比22好用太多了。
    10.apache2 + mysql,啥都不用说了,日常保存一些东西,共享文件,运行一些网页程序很方便。不过对已有的人是不需要的。
    11.mercurial,这恐怕是今天最专业的一个组件了。这个组件的目的是分布式的管理文件版本。对于大多人来说,最大的好处是可以本地化的管理自己的一堆文件,以及处理各个版本。
    12.comix,漫画浏览器,也是不错的图片浏览器。
    13.cryptkeeper,这个是文件加密软件,内部使用encfs作为加密基础。很不错的。
    14.Wine,只要想运行Windows程序,就非装不可。记得字体反虚化,否则会难看死。
    15.revelation,密码管理器。
    16.tsclient,远程到windows下。
    17.dictd + gnome-dictionary,方便的词典系统,比stardict差点,但是不那么让人恶心。
   

2009年4月8日星期三

debian testing下的ibus安装

    贝壳经过N个人的宣传,决定试用一下传说中的Ibus,下面是试用安装手记。文章参考了后面的参考1,特此鸣谢。
    apt-get install git-core python-gtk2-dev cvs libtool automake python-enchant libgtk2.0-dev libdbus-1-dev libdbus-glib-1-dev python-xdg
    在安装以上依赖后,运行。

# 安装ibus
git clone git://github.com/phuang/ibus.git ibus
cd ibus
./autogen.sh
chmod +x debian/rules
dpkg-buildpackage

# 安装ibus-pinyin
git clone git://github.com/phuang/ibus-pinyin.git ibus-pinyin
cd ibus-pinyin
./autogen.sh
chmod +x debian/rules
dpkg-buildpackage

    而后,在根目录会生成两个文件。贝壳的是ibus_0.1.1.20080908-1_amd64.deb ibus-pinyin_0.1.1.20080901-1_amd64.deb。名字比较旧,但是查看git log的话,是2009年4月8日的版本。先安装前者,再安装后者(顺序不要弄错)。而后就是设定部分。
    设定的话,请不要按照参考文去设定。这是贝壳血的教训,足足弄了4个小时。正确的做法是用root用户im-switch -c。而后选择ibus作为输入法。
    而后,稍等,先不要着急重启。在两个包里面还有个bug??
    在ibus包中,有这么一个文件。
/usr/etc/xdg/autostart/ibus.desktop
    在debian testing中,这个位置的自启动是无效的!
    正确的做法是,cp /usr/etc/xdg/autostart/ibus.desktop /etc/xdg/autostart/ibus.desktop
    如果不按照上文修正,结果就是ibus会正确启动,但是没有托盘区和输入条,全凭感觉选字(汗-_-|||)。    
    其实这应当是一个bug,scim可以在/etc/X11/xinit/xinput.d/scim中设定好守护进程,而后在系统界面出现后自动出现(这 也是为什么每次启动的时候scim总是先看到的原因)。而ibus尚不支持界面出现后再去注册托盘区,因此必须试用autostart来启动守护进程。
    总体感觉而言,ibus比scim更加漂亮干净,据说对kde的支持也更好。不过试用过程中还是有点问题,主要是以下几个(2009年04月08日列表):
    1.�字没有!我相信,其实是很多字没有!
    2.firefox就在贝壳写这篇文章的时候,崩溃了一次。以前贝壳的firefox很稳定的,从来没有崩溃过——   
参考:
[1].debian 5.0 安装 ibus中文输入法.http://hi.baidu.com/cvwolf/blog/item/3d812b4e8c4fe201b3de0591.html

2009年4月5日星期日

移动时代的一个应用预测

    贝壳今天在晚libfetion for pidgin的时候,突然灵光一闪,想出一个移动时代的应用。
    应该说,这是一种融合了IM,语音,高速网络,移动设备后的应用。本身看起来像IM一样,可以方便的和别人聊天。但是,由于移动的垄断,目前除了飞信,谁 也无法保证客户的长期在线。虽然MSN等等可以借助GPRS上网,但是GPRS毕竟是要断线的。如果借助移动和设备的结合,就可以让每个客户端长期在线。 当然,这个思路就是移动飞信正在弄的思路,本身并不新鲜。
    和别人聊天,多数是用文字吧?那如果能够附加语音,视频呢?我们可以想象这么一个场景。某人A给B打电话,B在开会,不能接。如果在现在,只有发送短信。 价格贵不说,打字也很麻烦。如果借助这种业务,A可以给B发送一个语音邮件。选中B,选择语音邮件,说两句话,关闭,点击发送。B在收到信件后,可以当场 看,也可以等有空了看。甚至,更进一步的,如果计算技术达到一定水平了。B可以选择识别A的语音邮件,将内容转换为文字(当然,这个由A做更合适。他具有 自己的语音库,传输量也小了很多。)。或者选择A的文字邮件,将内容阅读出来。这样实际上可以保证任何人的随时随地在线,而且语音和邮件互通。
    当然,这个技术的实现太过依赖于移动运营商的开发和开放,也依赖于语音技术(语音识别和TTS)。如果是美国,估计在3-4年内会出现这类产品,4-5年内会普及。如果是中国——上帝保佑你吧,中国移动。

2009年4月3日星期五

手机病毒的真相

转载自http://blog.wangyingqi.com/2009/04/03/137/,以下为内容。


防止被骗,帮我宣传,随便转载,不用署我的名字都行。

作为一个软件从业者,我有很多其他领域的知识盲点,当我看到有人揭露私人豆腐坊的生产过程之后,我就再也不敢到小市场买豆腐吃了。当我了解到药品销 售者和医生勾结向病人推销过量药品这个事实后,到医院买药我都要仔细查看药品的名字和功效。没有人是全能的专家,我很有自信不会在计算机和软件上受骗,但 是难保 其他人不被骗。写这个文章应该算是社会责任,于是,我这次充当内部人士揭秘,来看看手机病毒的真相。
普通用户对手机的了解还是太少,能分清智能手机和非智能手机的人就更少了。能知道所谓Symbian和Windows Mobile系统的区别,知道iPhone和RIM这些单词的人算是很高端用户了。不单单普通用户不知道这些概念,连同样是作软件但是不做手机软件的技术 人员,也都不清楚这些操作系统的最基本的知识。于是,目前大家能见到铺天盖地的手机病毒爆发,3G来了要装手机杀毒软件,手机中毒后隐私外泄等等如此骇人 的广告和说辞。那手机病毒很多嘛?我的手机很慢是中毒了嘛?到哪里装手机杀毒软件?哪个手机杀毒软件最好?一个月多少钱?如果你心中有以上那些问题,那么 很荣幸的告诉你,你已经被骗了,你忽略了一个最重要的问题。

手机病毒真的有嘛?

首先我们来区别一下智能手机和非智能手机,目前的数据是国内已售的智能手机占整体手机市场20%,虽然我坚信这个数据会越来越高,但是就目前来看, 如果你 的手机不是诺基亚,三星,摩托罗拉,苹果iPhone,黑莓,Palm,多普达,HTC等这些稍高端品牌的话,就基本不用担心手机中毒的事了,也许有人说 手机品牌不就是这些嘛,其实能看到这篇文章的人也算是互联网信息圈内的人了,外面有大把的普通用户在用着低端手机,而他们才是最容易受惊吓,最容易以讹传 讹的不明真相的群众,传播正确的理念都靠我们了。如果问具体哪个型号的手机是不是智能手机怎么办呢?很简单的方法是到淘宝上搜索该手机,然后找一个信誉最 高的商家,产品介绍里面就有是否智能手机这一栏。在知道自己的手机是否是智能手机后,一个最浅显的结论是,如果你的手机不是智能手机,那么手机病毒和你无 缘。放心睡大觉吧,别为这事儿烦心了。

糟了,我的是智能手机哦。

别怕,继续往下看。软件病毒实际上是一种对系统有害,更改用户数据,给用户造成经济或名誉损失并能够自我复制自动传播的软 件。这个定义里面的一个很关键的词是"自我复制自动传播",也就是我们常说的感染。智能手机都可以安装很多软件的,看起来就像普通的电脑一样,智能手机好 像具备了被感染的能力,也就有中毒的风险。那怎么才会被感染呢?又一个重要的概念出现了,一种智能手机操作系统的软件不可能安装在另外一种智能手机操作系 统上(这个说法有一个小漏洞,后面再补上)。如果不理解这句话的话,我来举个例子:棉铃虫是是棉花种植中的一种很严重的病虫灾害,在棉花的主产区很容易传 播和互相感染。但是,人是不会长棉铃虫的。我们不用担心去收棉花的时候染上棉铃虫。智能手机操作系统也是一样,塞班(Symbian,诺基亚智能手机的主 打操作系统)的软件只能在塞班的手机上运行,绝不可能在用微软移动操作系统(Windows Mobile)的手机上运行。拿iPhone的软件跑到诺基亚的手机上运行也是天方夜谭。结论就是,你只能被使用同样智能手机操作系统的手机感染。目前能 找到的智能手机平台大概是Symbian,Windows Mobile,Blackberry,iPhone,Andriod,Linux,Palm,还是一样,到淘宝上搜索自己的手机,查一下看看自己属于哪个 帮派?接下来我挨个介绍。

我知道我的系统是什么了,那哪个系统最容易中毒呢?

先说iPhone吧,这个最容易讲,一个正常的iPhone想要装软件只能到苹果官方的软件店上找,而苹果对软件的功能和安全性审查的极其严格,虽然有人 对这种封闭垄断行为很是不满,但是对最广大的普通用户来说,至少在安全这个问题上,用iPhone的根本不用操心。Google推出的Andriod智能手机操作系统,目前也是沿用这个策略,你只能装官方的软件店上的软件。用这个系统的朋友也可以放心大胆的用了。
Symbian是一个比较复杂的系统,市面上能见到的有Symbian s40,s60第一,二,三,五版,UIQ等。先找个简单的来说,Symbian s60 的第三版以及之后的所有版本,包括UIQ,在上面正常安装的所有软件都必须通过Symbian官方进行安全认证。或是用户自己给软件打数字签名作认证(这 个不讲了,普通用户不会这么干的)。Symbian虽然没有官方的软件店限制,但是签名认证这一点就已经给s60高端智能机一个很好的安全保证。不用 说做一个病毒传播出去,就连作一个正常的软件想要发布都会有很多门槛,必须买一个$200一年的开发者资格,每次发行一个版本都要付给官方$20认证后才 能大范围的安装使用。要想写一个恶意软件很容易,但是要装到很多手机上用并传播,基本上不可能。至于s60的第一,二版本,诺基亚在2005年的机型 N90以后就再也没出过这两个版本的智能手机了。他们的安全认证等级确实比较低,但是市面上已经没有这些产品卖了。大家也不用为古人担忧了。
Palm大家可以忽略了,已经很久没有Palm系统的新机出现了,近来要推出的Palm Pre会搭载新的操作系统WebOS。目前没有真机,但我相信这种现代的操作系统,都会十分注重安全性的。也先不用为未来担心。
至于Linux,其实手机上用的很少,摩托罗拉的A系列一直在折腾,单从血统来看,Linux的手机安全性肯定不必担心。另外,像这种比较偏门的机型,现在占有率不高,未来发展方向也不好。不用说病毒,就是正常的软件开发商都不想为他作软件。所以用这一系列的商务人士们也可以无忧了。
Balckberry的软件安装目前未见到安全认证机制,同上面未说完的Symbian s40一样,是市场上占有率较高且有中毒风险的系统。但是很有意思的是,基本上没有病毒爆发的迹象。而Windows Mobile也继承了Windows一贯的光荣传统,安全认证机制基本为零, 属于高危范围。而为什么目前没有很多手机病毒呢?其实,目前在电脑上,单纯 的病毒已经无利可图了,写病毒已经不再是一种技术炫耀,病毒作者已是无利不起早的经济利益偷窃者,电脑上的网游盗号,网银盗号才是他们要关心 的。手机上没有他们想要的,我们的认为重要的亲密短信,隐私图片,对犯罪者是没有吸引力的。这也是目前在这些相对危险的操作系统上也没有手机病毒爆发的重 要原因。
如果说要窃取利益,装了软件后在后台偷偷的发订阅服务的短信应该是最常见的方式了。但是为什么目前也不泛滥呢?这个和几年来整治SP提供商有关系,短信特 服号和厂商直接关联,SP资质非常的难拿到,敢作坏事就再别想作SP了。他们想赚钱倒是真的,但是没必要作这个犯罪风险这么高的事情。这也就是大环境好, 立法好会很好的杜绝犯罪,也会很好的杜绝软件病毒。电脑上也是一样,如果能有好的立法保护每个人的虚拟财产,目前的盗号木马绝对不会这么猖狂,说远了,不 要跑题。
差不多都说完了,再补一下刚才的那个漏洞,实际上一些Java的程序是有可能在各种不同的智能手机平台上传播的。但是有一个前提要说的是,Java的程序 能作的事情很有限,访问网络,访问手机上的文件,发送短信这些都会有十分明显的提示,让用户确认后才会进行。这个安全限制是在Java这一层次就已经解决 了。所以基本不会对大家造成什么风险。

可是手机病毒这么多人在说,他们都是骗人的嘛?为啥你说没有就没有阿?有人说有阿?到底有还是没有阿?

其实是真的有过手机病毒,当然目前都是恶作剧形式的,我看到的都是s40,s60第一,二版本,和Windows Mobile的早期版本的几个样本,为什么会中毒的原因,想必大家也有概念了,就是操作系统的安全性差造成的,但是大家不用担心,目前这些样本都不再活 跃,也基本没有啥传播能力了。算是一些待在实验室里面的样本而已。和广大普通用户没关系。就当前的流行手机操作系统看,我没见到任何可以称作病毒的东西。

那现在手机杀毒软件都是骗人的?

关于这个问题,我来分析一下目前国内一个卖的比较好的手机杀毒产品,网X。他在官方网站上放出了所有他可以查杀的病毒名, 一共216种。里面大部分的病毒样本是没有标明可运行的平台的,看了我上面写过的都应该知道。平台不吻合根本没法运行,还谈什么病毒行为?另外,他的产品 承诺每月升级4次病毒库,每次升级2块,或是8块钱包月,包年98(您没看错,就是比按月买还贵),两年的卡188元。从第一个有时间标注的病毒2008 年4月17日到2009年4月2日,一共有病毒53个,想起来也还不错。刚好平均每月4到5个,有这么巧嘛?接下来我们再看一下所谓的病毒是什么,最近的 一个病毒样本是一个Python脚本,我来解释一下这个东西要怎么才能运行,首先你要在诺基亚的s60手机上装一个目前只有程序员才关心的Python脚 本解释器,然后又碰巧别人传了这个脚本给你,而且你还要跑到系统中找到这个脚本并手动运行,OK,病毒爆发了,不断发短信了。听不明白吧?不知道 Python是干嘛的吧?运行这个病毒有难度吧?怎么可能中这个病毒阿,我真的是佩服这个厂商的智慧。"医之好治不病以为功"这句话在这里表现的淋漓尽 致,也真的是给安全软件行业丢脸。某个很有名的安全厂商卡X出租车司机也在做手机杀毒软件,10块钱一个月,作的事情没有比网X强多少。综上,骗不骗人各 位自己判断吧。

那手机很安全拉,不用管病毒这些事情了?

事情都要往前看,现在装手机杀毒软件很像给一个婴儿吃抗癌药,看似有用,但完全是庸人自扰。如果几个相对比较危险 的系统能改进安全措施,基本上手机病毒就没有出头之日了。但是难保将来不会有死不悔改的厂商继续漏洞一大堆还发行产品,不过我觉得那是未来的事情,手机基 本一到两年一换,有必要为自己明年的手机安全先买单么?其实说到漏洞,目前的几个操作系统都会不定期的发布一些官方的漏洞补丁,当然发放的频率很小,几个 月也见不到一个。前段时间诺基亚发布了一个Symbian s60第三版的短信补丁,不打这个补丁的话,有可能被一条特殊格式的短信将手机的短信功能破坏掉。安装也很简单,到诺基亚官方网站下一个就可以了。装上去 就万事大吉。其实个人认为不装也无所谓,我周围用诺基亚手机的人可以用一火车皮来形容,没见一个人中招的。

3G来了手机病毒是不是快要爆发泛滥了?

我的答复是3G和手机病毒一毛钱关系都没有。3G来了只会将智能手机推广到更多的用户那里,而安全的系统用的再多也不会有中毒的风险。我反而认为, 如过能监控一些软件的行为,比如能告诉用户有软件将要发短信,将要联网,将要访问文件,在适当的时候有一个提醒,就已经足够了。这也就是为什么电脑上的杀 毒软件越来越走下坡路,而360卫士这样的软件被更多人接受的原因。

那为什么有的时候我的手机会变慢,有时候会死机呢?

其实99.9999%是因为短信息太多了,或是同时运行的软件太多了,而手机的硬件性能会使得其不可能承载太多应用。解决方案是删除一些短信,关闭一些程序,或是直接重启一下手机基本就能解决了。

说了这么多,一句话概括一下吧。

目前手机根本就没有真正的病毒,忘记这件事情吧!

再听到有人提起手机病毒的时候请用这句话答复他,也请大家记住那两个公司的名字,不要轻易的相信他们那骇人的说辞。经济危机了,要捂紧自己的口袋。

防止被骗,帮我宣传,随便转载,不用署我的名字都行。

上海的房价

    贝壳blog的老看客应当都记得,贝壳写过一篇房价分析的文章。今天贝壳简化一下模型,然后分析一下上海房价。
    上次那个文章的核心要点是,买房和租房的问题。我们今天把模型简化一下,假定某个房子的价格是100W,其中10%是装修费用。房价不涨不跌,到底买房还是租房呢?很简单,我们假定装修会在5年内等速消耗,中国的存款利率是2.25%,贷款利率是5.5%。如果我要买房,我就要承担装修的消耗和放弃把钱放在银行里或者去投资(当然,这个另说)的收益,因此叫机会成本。很容易算出,每个月消耗的装修费用是100*0.1/60(100W的一成在60个月里面消耗),机会成本在100*0.9*2.55%/12(100W的九成每年会产生2.55%的利润)到100*0.9*5.5%/12(100W的九成每年会产生5.5%的利润)之间。如果房价不涨不跌,那么一个月的房租应当在3579到5791之间。如果低于3579,理论上我根本不会考虑买房。我一定会租房,然后把100W放到银行里面,拿的钱一定比3579多。我可以拿出3579付房租,剩下还可以自己用。
    有人可能会考虑10%的装修成本也进银行等等的问题。100W一月的利息是1875,每个月都在赔钱阿?其实没有这个问题。因为,我们对比的双方,是通过两条路径达到一个终点的差异。一条是将100W存入银行,租5年的房子。一条是将100W买房,5年后卖出(假定交易成本为0)。其中买房的每月成本是3579,只要低于这个数值,即使租房每个月都赔钱,一样是赚了。您得想,买房的那位5年后装修成本可是一分都回不来,硬碰硬10W就没了阿。
    好,上述是一种最低房租,那么最高呢?如果房租高于5791,我绝对考虑买房。为什么?因为(当然,得假定您有钱,或者能贷到100W),即使贷款100W买房,过五年后,您把房子一卖,付出的费用比你贷款利率还低,不买房的就是白痴了。
    于是,通过上面的论述,大家应该听明白了,房租和房价间存在相对关系。房租是短期房子供需的表现,房价则是长期的。那么我们通过上述论述,可以计算一下中国的房子租售比。具体过程贝壳省略,结论应当在172-298之间(其实就是千分之3.57917和千分之5.7917的倒数)。即,172到298个月的房租能买一套房是合适的。超过298个月绝对选择租房,低于172个月绝对选择买房。
    如果房价涨跌呢?贝壳继续简化模型,也不论述计算过程了,设房价为A,其他参数同上,涨跌比例平均每月x,涨为正数,总体交易成本0.02(这个仅仅计算最基础的契税)。那么上下平衡截止点分别为[A*0.1/60+A*0.9*0.0255/12-Ax+A*0.02/60, A*0.1/60+A*0.9*0.055/12-Ax+A*0.02/60] = [0.003912-x, 0.006125-x]。当然,成本还有市场风险等等,先不说。
    进而,贝壳考据了一下上海的房租和房价系统,各个地区虽然略有不同,但是其平均租售比无一例外都低于了千分之四,很多都逼近了千分之3.579,甚至极端的一些低于了千分之三。以贝壳调查的典型房为例,2500的寻租价格,90W的挂牌价格,租售比千分之2.778。也就是说,目前从理论上来说,租房比买房合算。前两年也是同样情况,对比一下上面的公式,贝壳只能说,大家都在看涨房子。那现在大家还有看涨房子的么?基本没有了吧?我们将上面的x设定为<0,即小于千分之3.9就可以租房子了。那为什么租售平衡还不向出租转移呢?
    我们只能得出结论,一定有什么在整个模型中忽略的因素在阻止平衡的移动。阻止有三个方面的,价格,数量,风险,和习惯。
    首先,我们说价格。如果贝壳的价格调查依据是错误的,房价偏高而寻租价偏低,有可能出现这种现象。或者在整个租房过程中有大量其他成本(水电煤和风险都另说了),那么也可能出现这种现象。问题是,贝壳的调查数据是从二手交易挂牌和寻租挂牌来的,双方都是盘口上方数据,要高一起高。贝壳原来租房的经历告诉贝壳租房也没有什么特别的成本。因此,贝壳先排除了价格因素。
    其次,我们说风险。由于房屋买卖风险高于房屋出租风险,因此也会阻止平衡的移动。这点来说,是符合经验的。但是风险是暂时的,如果说风险高的话,前两年买房的时候怎么就不怕了呢?
    然后,我们说数量。可能由于某种因素,因此房屋的出售被限制。因此造成了平衡的破坏。这个贝壳完全不知道。
    最后,我们说说习惯。中国人有给下一代买房的习惯,因此造成了房价的异常平衡。这也是符合经验的。不过我不知道,在大量的亏钱下,精打细算的中国人会先改变习惯呢?还是会先变的“不会精打细算”了。
    那我们先抛开上一个问题,从实际角度谈谈买房和租房的运作。如果您打算买房的话,贝壳建议您先调查当地的租售比,还有租房者的构成,如果租售比在上述范围以外(当然,如果利率变化比例也会变化),那么您需要进一步调查附近将来的变化。有些地方的租售比异常,可能是因为某些同志听到了风声,附近可能兴建某种设施(尤其是地铁站),因此大量买入造成的。当设施新建完成后,房价可能不会变化。但是寻租者多了,因此造成租金上涨,租售比会渐渐回复正常范围。租房者的构成有利于判断附近的房子是否会跌价,如果大量都是浮动的外来人员,或者特定群体(例如奥运一族),那么将来房子就可能因为某种因素跌价。
    另外,就是当前房价是否正常的问题。贝壳不是学金融的,也不明白一堆很悖论的大道理。但是根据上述理论来分析,中国的房价大概要跌掉一半,这还是在当前低利率下。如果利率升高,理论上房价还会进一步下跌(不明白?贷款买房的人少了,卖房投资的人多了,能不跌么)。以贝壳调查的典型房为例,2500的寻租价格,90W的挂牌价格,按照0涨跌计算,房价应当是52W。差价哪里去了,我倾向于任正强的说法,政府那里去了。
    也许有人奇怪,贝壳为什么从头到尾都在讲租房买房买房租房,不分析分析大势技术什么的?那是因为租房是房价相对短期的体现,比较少一些政策,预期的干扰,体现的纯粹的供和需的关系。贝壳不是专业的经济人,可以说就是平头小老百姓一个。数学还算过得去,但是讲专业经济理论,全球经济形势就立刻要了命了。租房这东西有人租,房价就高,没人租,房价就低。价格高低,就看你的量和有多少人能出这个价,干干脆脆明明白白。
    同样,上面的东西见仁见智。也许专业的学者能提出无数意见,但是这就是我们小老百姓的盘算。

2009年4月1日星期三

笔记本选购不完全指南

    这几年来,贝壳接触了不少电脑,并且经常被人叫去选购各种电脑和配件。其中最为复杂的就是电脑配置,因为电脑配置具有很强的可换性,可以根据需求精确定 制。喜欢A的CPU加B的主板?完全没问题,买了组装就是。回顾贝壳玩电脑来14年的趋势,组装机逐步的在驱除品牌机。95年的时候品牌机还有很大优势, 而现在只有公司才会考虑进品牌机。最主要的原因也不是出于性价比,而是资产管理和经营者的回扣。作为个人来说,找个信任的人配个配置,去电脑商场比价,讲 价,组装,大多数人都可以做到。而在维护上,遍布各地的维修点,电脑基础维护知识的普及,也大大削弱了品牌电脑的价值。但也因为电脑配置的这种灵活性,使 得电脑选购组装上的普及完全不可能。一个电脑配置单要考虑无数的事情,实在不是非专业人士能够处理的。反倒是灵活性略差的笔记本选购可以由非专业人士搞 定。今天贝壳就讲一下笔记本电脑选购上的几个要点,最近需要下手购入的朋友们,注意了。
    首先一点,请先搞清楚你为什么要买笔记本,这有助于确定你要买什么笔记本。买电脑的理由有很多,工作学习娱乐都有可能。不过买笔记本的理由只有一个,移动 使用。如果你是因为地方太小,可以用小机箱加液晶和无线键盘。无论花费大多少,绝对比笔记本便宜。如果因为你有两个地方要用,可以买两台机器,配置同步, 也比笔记本便宜。如果要考虑不断电,那更简单了,一个UPS就可以解决问题。只有多个地方要用或者移动使用,才需要考虑笔记本。而对比买电脑的理由,一般 来说,娱乐是不需要移动使用的。因此我强烈的建议那些买笔记本的理由是打游戏的朋友,买个台式机。如果因为你懒,想在床上玩,请弄个无线键盘鼠标加上液晶 电视接口,或者干脆弄个桌子专门放你的液晶屏幕。无论是效果还是价格,都会比笔记本优秀很多。
    而后我们说一下移动学习的问题,一般来说,贝壳不怎么推荐移动学习。要录音,请用MP3。要打字,请回宿舍。要计算,更不用非在餐厅或者教室里。一般来 说,要使用电脑的范围应当不会大于你的宿舍,但是贝壳倒是经常看到一些特例。因此,具体情况请自己分析,想想你是否真的需要一台笔记本。
    另外还有一种就是混合应用,外出要学习,回来要炒股,父母打游戏,老婆买东西。这种混合型的应用是实际情况中最多的一种,通常具体情况很难分析,不过请把握上述的原则。只要不要带来带去的,请尽量考虑其他方案。
    最后一种就是商务应用,无论是出于保密的原因还是出于方便的原因,贝壳都推荐使用笔记本。
    按照上面的讲法,我们推荐使用笔记本的情况基本是三种,商务应用,混合应用,移动学习,还有少量的赶时髦分子。根据这几种原因,我们可以相应的确定你应当 买哪种品牌的电脑。通常而言,商务应用的主力就是Lenovo和Dell,几乎找不到其他机器。其最主要的原因就是这两种本本的商务气质。以Lenovo 为例,他的技术是收购IBM的,因此有很多非常有用的技术。包括指纹识别,硬盘防震,超长电池和增强型电源管理。这些技术有助于你在商务活动中避免为一些 意料外的事情耗费精神,例如窃取,数据丢失,没电(这是普通本在商务应用中最容易碰到的问题)。通常而言,商务本的定位价格有两类,一类是 8000-12000,定位基本就是对着Lenovo去了。另一类是4000-8000,基本就是Dell了。Dell的电脑价格便宜,服务也还不错。唯 一问题是总部设在厦门,一旦你发生需要返修级别的问题,需要回厦门处理。一次往返的时间和价格,有点配不上它商务本的定位。不过看在价格的份上,是否有吸 引力就是见仁见智的问题了。
    做商务的同志们需要留心一类本子,通常我们称之为廉价本。价格在2000-4000之间,一般由国内的一些厂家出品。这里并不是说崇洋媚外,而是这些本 中,有相当一部分的是“看上去很美”的本子。配置也不低,和Dell本子4000的机器比也不丢人,价格却非常平易近人。但是,本子却相当的容易出现各种 小毛病。原因在于,一般生产中往往会出现一些有很小瑕疵的成品,我们称为二线产品,或者叫下线货。以这些零件拼装的电脑,价格当然便宜,也当然容易出问 题。一般而言,一流厂商一旦定位为商务本,自然会关注质量问题。如果是下线货,照例是不会用的。一旦出现质量问题导致客户损失,这无疑是拆自己招牌。但是 所谓廉价本,就是针对“坏了也无所谓”的客户的,只是可以肯定,他们不会这么宣传。如果买这种本子,一切问题自行负责。
    如果是移动学习,贝壳反到会推荐廉价本。原因在于学生本身钱就不多,多资料损坏也不会太在乎(当然,关键资料还是自己备份起来的好),和厂家折腾几次更是 可以当作磨练。用一个方正或者神舟的入门本子,3000上下就可以挺个3-4年,直到你毕业。可能会坏个一两次,不过也没有什么太大关系。这想必对大多数 学生有相当吸引力吧?当然,如果你有钱,喜欢烧一个顶极的Mac来,那也是你自己的嗜好。
    还有两类本子,贝壳分别称为鸡肋本和专用本。例如Sony的一些游戏本,双核,独立显卡,17寸,2W上下。买这种本子,要带的话不如弄个台式机背着,不 带不如弄个台式机放着。整个一个鸡肋。还有Mac的一些高端本子,就是针对图像处理和视频处理去的。你要专业到这个份上,自然会知道这些机器。你要不知 道,就是不够专业。(好——无语的逻辑——)
    最后一类就是混合应用,这是非常多的一类,也是最难定义的一类。冲着什么本子去就看你的混合定位和要求最高的一个需求了。如果整个里面混合进一个高端商务 应用,恐怕就非冲着Dell或者Lenovo去了。如果全是看电影打游戏,弄个廉价本吧。如果要不间断的炒股,建议你弄两个本——我没在开玩笑。第二个本 可以考虑采用小型上网本(坚决不推荐某品牌),价格才2000-3000。本子超小,方便移动应用。
    另外就是自配件的估计,普通用户现在推荐160G硬盘,1G内存,准备好升级2G。高端用户建议250G硬盘,2G内存,准备好升级4G。上述估计适用于2009年上半年。

2009年3月25日星期三

夜飞临北京有感

    我不是第一次在夜间坐飞机,但,我是头一次在夜间坐飞机的时候在窗口俯瞰中国的大地。不得不说,我彻底被惊呆了。
    开始的一段时间,天上有云,黑漆漆的什么也看不见。但当飞过一段时间后,我在机舱里百无聊赖中随意向外一瞥,眼前却展现出一副瑰丽的景色。飞机不知道什么时候从云层中穿了出去,大地清晰可见。一条条的街道和街灯蜿蜒纵横,将黑色的大地切割成各种形状。有的地方灯光尤其密集,有的地方则疏散一些。远远望去,好似大地上的一块块斑纹。在一块一块的斑纹中,零星点缀着白色的灯光。虽然云层已经过去,但是下面仍有少量的薄雾笼罩在天上。薄雾散射灯光,仿佛在水面上倒映了天上的银河。我凝神细看,依稀可以看到一个街道上的街灯,映照在街道上的影像。这段道路前后都没有灯,不知道是坏了,还是根本就在山中。但是三两盏灯映照在道上,形成一个独立的,小小的天地。也许这是某个少年回家必经的道路,也许这是某个老人天天散步的场所。但是,无人知晓,我,这样一个天上客,在3000米以上的高空,偷窥着这个小小的世界。

2009年3月21日星期六

三月西湖游记

嘿嘿,跑来跑去做项目虽然辛苦,但是有一个好处,那就是有空的时候可以按照当地情况跑出去旅游。贝壳今天稍稍有空,出去西湖逛了一圈。
说到西湖,其实贝壳跑了无数次了。不过住的虽然近,但是岳庙和苏堤还都没去过。没去过苏堤和三潭映月,怎么能叫去过西湖呢?贝壳今天特意去了一次岳庙和苏堤。岳庙没什么好说的,只是门票稍稍有点不爽。25,说贵倒是不贵。不过我们来接受爱国主义教育还要自己买单,这个——倒置了吧?
苏堤就在岳庙的正门过去。贝壳刚上苏堤,就有人叫。今天真够凑巧,是贝壳在浙报的一个客户,今天也是陪人出来走走,正好碰到。杭州这个地方真的不大,今天就碰到了三个缘分。今天的风景果然应了某人的话,西湖美景三月天,春雨如酒柳如烟。按照此人说法,如果今天突然下雨,我就应该碰到一位姓白的女生借伞—— 问题是,我有伞阿。幸好今天没有下雨,否则就不是西湖美景,而是计算机产品的末日了。贝壳今天出门,就带了那台HPmini1017。不是多心哦,下面就用上了。
问题,苏堤中间有个醉什么亭,是醉什么呢?那个字很像是书字,贝壳没仔细看,差点还以为真的是醉书亭。后来有位老人就着话题讲起了古,这个字不是书字,而是春字。哦?贝壳掏出HPmini,架上蓝牙和GPRS,上网一查。这位老先生还非常有名(http://talkdream.blogbus.com /logs/3839413.html),在google上找"苏堤醉春亭",有至少两篇关于这位先生的blog。不过贝壳就着往下一看,差点笑喷出来。这个blog是06年写的,到现在已经有两年半了。这位老先生的讲话线索一点都没有变。浪漫的情人堤后面果然是关于矿泉水的问题,大家还是一如既往的一哄而散。贝壳凑上去,问问这位老先生的底细。他应当是住在西湖附近,以前经常跑到苏东坡纪念馆去看。后来扩建,原来的介绍内容全都变了。于是跑到苏堤上给人科普,顺便讨点矿泉水费。据说03年非典事发前还上过中央4套的节目。难怪他讲的都是苏堤,醉春亭,三潭映月呢。要跑上来一个阿炳,别说记得年代,就是阿炳的原名都未必记得。不过这位老先生毕竟是免费科普,矿泉水费也不是强要,也不是天天来。有缘的碰到没缘的拉到,碰到也算是个缘分吧。
贝壳在听完科普后,立刻上推,更新推,然后再上gtalk,散播八卦散播爱。(MSN上被我冷落的同学们,不是贝壳偏心,TMD只要用GPRS就打不开MSN)
而后,贝壳在花港观渔走了一圈,出门,发现——该死的杭州又堵车了。偏偏从苏堤南面到天目山路的所有车都会被堵,咋办呢?这个时候,贝壳就充分发挥了自己曾经被忽悠过所练出来的——地图通。查了一下google map,从龙井村过去不堵车。记得从龙井村过去是坐游三,到玉泉,玉泉坐15,到天目山回家。好,就这么决定了。
于是贝壳出了西湖,往西走。向着茫茫群山就走了进去...当然,走没多远就看到了游三车站(大家请记住,这里的度量衡是以贝壳的标准衡量的,一起走过路的同学应该深有体会,尤其是高中同学,要是您也学着走,脚抽筋贝壳恕不接待投诉)。一路上山色真好阿,路旁还有不少喝茶的茶亭,当然,价钱估计便宜不了。实话说,贝壳很想带某同学的朋友到这里,直接自己泡茶自己喝,估计也很爽吧。估计游三路是杭州所有线路中山色最好的线路,有兴趣游览的同学一定不要错过!
最后么,当然,贝壳回家了,于是有了这个blog,事情基本这样结束。
真的结束了么?第三个巧合呢?
贝壳的一个朋友和贝壳说,她的一个朋友是贝壳的blog读者!OMG,今天是什么日子?

2009年3月20日星期五

要死的磁盘挂载

follow了我推的人应该都看到了,从昨天到今天,贝壳都在狂找U盘挂不上去的原因。贝壳的两个本子,一个T61一个HPmini,明明都装的Debian testing,两边的配置都一样,怎么就是一个可以挂载U盘,一个就是无权限呢?
贝壳首先进行了包检测,是否少装了包,结果没有。然后再进行了配置对比,也没有发现差异。而后,贝壳祭出了绝技,strace和dbg的调试。一跑,贝壳傻眼了。一台机器是AMD64,一台是i386。CPU和内核完全不同,导致整个行为没有一点可对比性。难道无法挂载是因为CPU的问题?
在贝壳长达10多小时的排查后,贝壳无意中打开了HPmini的fstab文件,发现一个让人绝倒的事实。贝壳的HPmini是从u-live上面镜像过来的。因此继承了u-live上面LABEL=live-ntfs /的设置。而亲爱的gnome-mount是会启用这个文件的——
结果,这就是贝壳悲惨世界的原因——

2009年3月17日星期二

上网本,UMPC,手机的混血

贝壳最近又手痒想败家了。对象是上网本,UMPC,或者HTC G1。不过以上三者都不怎么完美,要能结合起来就非常有诱惑力了。要是价格低点那就更——
不说瞎想了,就说说上网本,UMPC,G1的概念和对应客户。以及贝壳为什么想要混合以上几个东西。
UMPC是指和电脑具有类似构架,但是更为小型的电脑设备。当然,官方有更严格的规定,例如最低分辨率,触摸屏等等。UMPC和上网本的区别主要就是官方的几个内部规定,满足就是UMPC,不满足则是上网本。但是对贝壳来说,不管这些,好用就好。贝壳希望的机器,具有7寸的触摸屏幕,对应的键盘。这样的话,贝壳可以用键盘来操作电脑(熟悉的人应该记得贝壳的快捷键使用和单手操作电脑的绝技吧),并且触摸屏可以剩下一个触摸板的空间。
但是,仅仅以上条件却不能让贝壳满意。为什么呢?首先是因为体积。现在的上网本经典大小是230x160x30,这么大的一个家伙,就算带出门也够当板砖用了。其次,这东西不支持SIM卡插槽,这造成了非常麻烦的问题(当然,支持恐怕是更麻烦的问题)。贝壳无法通过这个本来直接上网,打电话,管理电话。
其实,后者的特性主要是针对HTC G1去的。现在的手机基本已经相当的智能,但是却有两个先天的问题。一个是没有能让人用起来很爽的键盘!这样写起程序来非常费劲(旁:汗—— ..-_-||||,手机上还不忘编程,真TMD是程序员)。其次是构架不同于经典的x86构架,扩展和使用程序都非常不方便。
如果一个本子,有200x150x30的大小,0.8kg上下的重量,支持SIM卡插槽,支持触摸屏幕,使用SSD硬盘。还可以标准的安装debian,使用linux下的各种程序。那基本就是贝壳梦想中的本子。当然,如果价格能在3000以下更好....贝壳可以拿这个本子到处跑(虽然体积还是个问题),到处写程序看电影看小说都不成问题。还可以打手机(那可以直接从thunderbird中拨出阿~~),GPRS上网(TMD混蛋中国移动,现在 3G还没出来呢)。
当然,现在很多手机基本也可以实现上面的功能,除了一个标准尺寸的键盘外。但是可惜的是,这些手机的系统都不是标准的系统,一般用户是无法重写和定制的。如果按照刚刚的方案来定制,那么整个机器上跑的就是一个完整的系统,甚至可以跑一个XP起来。稍微定制一下就可以当手机专用系统用了。像贝壳这样的编程人员更可以方便的给手机编程,来扩展手机的功能。
还有更好的一个方案,就是将手机回归原始。使得整个手机除了电话和短信外,什么功能都没有。而后给手机指定一个标准接口,在需要进行复杂应用的时候,直接插在上网本的外面当外接设备使用。这样手机的屏幕和键盘都可以极度精简,体积小巧方便使用。接入电脑后,非常方便的可以浏览网页,观看电影等等。其实本质上就是一个强大的手机(当然,要用经典构架)外接一个大型(相对大型)的显示器和键盘系统。

2009年2月16日星期一

Remember The Milk

这是篇广告文。
不知道你有没有听说过GTD?我长话短说介绍一下,如果你每天都有成堆的事情要做,经常忘记做什么事情,每天都在焦虑是否有什么被忘记了。或者你经常被意外的事情打断,无法顺利工作,甚至忘记正在做什么,那么你真的需要好好看一下Get Things Done这本书。这本书的主旨在于推荐你一种生活方式,一种不需要焦虑是否忘记了什么的生活方式。他的步骤很简单,最少只需要纸和笔就可以进行(当然,贝壳推荐用电脑)。如果你需要做什么,用纸记录下来。做好一件事情,用笔划掉。每隔一段时间,回顾一下,什么事情还没做,什么事情拖沓了,哪些事情应该先做,哪些事情应该后做。简单来说,就是Todo List。
那么Remember The Milk(下面简称RTM)好在哪里,值得贝壳特意推荐呢?事实上,贝壳在GTD上换过不少工具。Mozilla Sunbird,太庞大,要用的时候老去开笔记本?gtodo,很小巧,问题大同小异。Rainlendar,很漂亮,显示还不错,Todo List就碰到了一样的问题,贝壳总不能天天开着笔记本走路吧(虽然实际情况差不多)。Google Calendar,倒是非常好,行事历丰富,支持短信提醒,同步选项众多。Outlook,Sunbird,Rainlendar,甚至可以直接同步到手机上(不知道的同学,请参考GooSync)。但是有个致命缺陷,无法将事件标记为完成。这样要表示完成就只有删除事件,导致无法回顾。因此,贝壳最终选择了RTM,配合Google Calendar使用。
贝壳已经将RTM设定为主页,这是贝壳的第二个主页,头一个是iGoogle,可惜做到后来太杂乱无章,废弃。每天贝壳空下来了,跑到RTM上,看看今天需要完成什么事情。如果有突发事件(例如你在写论文的时候突然需要找一些资料,有人突然说贝壳来一下),那么评估一下突发事件的状态。一般来说,如果突发事件没有上下依赖关系,没有回顾的必要,没有突发中的突发(这是最主要的),那么完全可以不用记录。否则你需要先记录突发事件,将他标记为最优先。如果不这么做,当再次发生突发事件的时候,你要么补充记录上一个的,要么就会忘记事情。一般来说,10分钟以内可以处理掉的事情是很少被再次打断的。当然,如果可行,贝壳推荐突发-延后的处理方式。就是说,当突发发生后,将突发要处理的目标记录下来(例如,12点前去客户那里一下),标记为最优先,然后接着处理当前的事务。这样一般只会中断1分钟的思考,不会造成记忆的混乱,你的工作可以顺利的继续下去,不会受到各种因素的干扰(当然,必须先处理例外,例如:贝壳来一下),也不需要担忧忘记事情。
如果在不能开机的状况下,例如路上,贝壳优先考虑使用RTM的mobile版本。如果不行,那只有记录在写字本里面,回去补充。而后,每天晚上,贝壳会翻看一下今天的记录,看看明天有什么需要做的事情,哪些优先,哪些可以推迟。如果有空,可以做什么计划好的事情。等等等等。那么同学们会问了,Google Calendar呢?
GC可以和RTM结合,从而看到RTM的事件列表(方法就自己gg吧,贝壳不废话了)。当然,这只是有限的结合,意义并不大。GC真正的意义在于方便的和手机同步,从而对固定议程,重复议程有很好的显示和提醒作用。例如记忆生日,提醒周报,记忆飞机等等。这个和RTM的GTD并不冲突和重复。