Service Pack,微软滚动不息的雪球——这回是Office 2007

又是10多号了,微软为我们这些正版用户的服务时间到!右下角黄色的小盾牌又把疼人的小脸露出来了,12月安全更新,8个,一共……怎么会是750MB?难道是传说中的Windows XP Service Pack 3发布了?上了一下Microsoft Update网站,发现原来不是Windows出了Service Pack,而是Office出了Service Pack。所以,本月的安全更新也不是8个,而是7个(MS07-063MS07-069)。用自动更新来下载Service Pack,是一种愚蠢的行为。自动更新这个程序不知道是谁开发的,要是我来管这个项目,那帮工程师早就回家了。作为一个本地运行的程序,有那么多信息,居然不管三七二十一先全部下载下来,也不问本地有没有保留缓存——为什么不在下载之前检查一下哪。去看了一下Office 2007 Service Pack 1的下载点,只有200多MB,用FlashGet下载,只用了不到20分钟。

最近,微软产品无论是桌面系统还是服务器,Service Pack是不会断的了。还没有Service Pack的,会发布Service Pack 1(.NET Framework 2.0.NET Framework 3.0的Service Pack 1引起的硬盘转动带来的余热尚未消失)。已经有了Service Pack n的,会发布Service Pack n+1。终于到了这样的年代:同一产品线的新老版本由于Service Pack的存在而彻底地纠缠在了一起,Windows Vista Service Pack 1即将出炉,已经发了Release Candidate,但Windows XP Service Pack 3仍然值得发布说明这个“过时”版本仍然势头非常强劲(至少让我近期升级我是绝对不肯的)。Service Pack后,又继以Update for Service Pack;Update for Service Pack后,又继以Cumulative Updates for Service Pack;Cumulative Updates for Service Pack后,又继以下一代Service Pack。操作系统有Service Pack,操作系统部件有Service Pack,应用程序有Service Pack,服务器有Service Pack,Framework有Service Pack,恐怕接下去硬件的Firmware也会有Service Pack……真可谓生命不息,Service Pack不止。每次Service Pack的推出,又是对某种产品的再次关注,会给IT评论家、技术经理、稿费混子们送一次赚钱的机会。微软的这一套,我7年前就参透了,但对这一招居然能奏效7年,还是感到意外。

钥匙之苦

钥匙对我来说属于童年就开始意识到的不祥之物,发明锁和钥匙之人一直是我恨之入骨的。我的短期记性属于绝对无可救药的类型,几乎每个和我有一定程度交往的人都有着有关我遗失钥匙的记忆。一摸口袋,发现一把——糟糕的时候是一串——钥匙已经不在,这对我来说简直是摆脱不得的诅咒,甚至有时会出现在梦境里。办法是想过不少,但是不加重负担和人的可笑而能够增强保险系数的却是一个也没有。钥匙往往在最紧要的关头,在我最无助的时候向井下的我扔来巨大的石头,若非我生性坚忍,对世态炎凉大抵不以为然,怕是早就因这钥匙而自裁了。

昨天又来了这么一次。计划得很是周全:11:10收拾到必要的书籍;11:30出门,去欧尚超市采购折叠床和电热毯一个;12:00叫好出租车,赶向火车站接人;然后,把人安顿好以后继续回家做自己的工作。我住的房子的防盗门是有反锁机制的,必须从内部开门。从里面开好门以后,由于要把一个手提箱和电脑背包带出,短期记忆立刻消失了,于是我顺手把门关上——钥匙被留在了防盗门的内部。当时我虽然发现钥匙忘记在门内了,但完全没有意识到诅咒再次降临。意识到这一点是在11:45分,折叠床和电热毯都已经采购完毕以后时,一摸口袋,发现另一把钥匙,亦即准备安顿人的房间的钥匙忘在了家里。而现在,由于自己房间的钥匙被锁在了门里,我已经无法进门了。这样,接下来的所有的事都被阻塞。并且,我手里拎着至少重达300斤的东西,已经精疲力竭,而且——不出所料,此时天一定开始下暴雨,每次都是如此,见怪不怪!

赶紧给陈曦打电话,请他回来帮我开门。他略一思考,告诉我房东应该还在附近,请他来帮忙应该更快。我顿时觉得,也许事情并不像想像得那么糟。如果可以在15分钟内用房东的钥匙打开门,那末接人的事仍然不会有很大的延迟了。

即使如此,300斤的重负已经让我觉得天地间的苦难。可怜旁边人群熙熙攘攘,竟无人假以援手。这书籍在阅读之时使我快意,给我力量,在背负时却使我痛楚,让我无奈。旁边的一部黑车司机趁火打劫,本来从超市回家只要5元(而且我若无负,是绝对只坐正规的出租车的。此时已经自身难保,天上的雨滴如若鞭笞不断落于脊背),现在却非翻番不送。但是,我有关于迅速开门进房的梦想,再次被钥匙击得粉碎。

房东很是客气,送我上楼。我拿到房门钥匙如得久旱甘霖,插入锁孔后却发现无论如何旋动不得。既未换锁,钥匙无误,何以至此,难道真是天意?然而事实执拗不得,只能一面请房东太太将另一把备用钥匙取来,一面分析原因。当我提到我的那把钥匙插在内侧时,房东一拍大腿,说,“是了,是了!钥匙插在内侧是为保险功能也!从外侧是打不开的,此番休矣!”听了此话,又看时间,已经是快到下午1:00,如同冰水当头浇下(其实这也是实情,浑身已被淋得甚是落魄)。只能调遣力量去火车站代为接人安顿,好在朋友此时当仁不让,表示一定尽力。此是后话。

坐以待毙究非良策,此时头脑开始清醒,先找物业。物业表示此类情形,只能联系开锁公司,并给以电话。电话交涉之下,提出报酬150CNY。房东及房东太太却是善人,说自己可以代找熟人开锁,等了20分钟物业联系的开锁公司业务仍未上门,决然去话拒之。房东的熟人却说,自己身在宝山,是自己业务不精的老婆来修。又过半个小时,一个女人果然姗姗而来,提着工具箱开始捣鼓。基本的思路上以原配钥匙为基础,加以适当截断,就能开门。然而显然女性对于金工缺少基本的感觉,虽然也有挫刀行头,却无独门绝技。配了一把不成,又跑回店铺再配一把,但仍然不成。此时已近下午2:00,我早已不能再等待,只能拿出笔记本电脑继续工作,靠着屋里透出来的那一点点无线信号和电池的电力来支撑。房东一家下午还有事,虽意诚欲助,也实属无可奈何,只能留我一人在彼等候。

最后,还是房东的熟人自己从宝山开车回来才把门打开,此时已经是3点有余,我的电池也即将告磬。基本上,能够耽误的时间都被耽误了,更不必提还花了一笔冤枉钱。每次都如此,不把所有的麻烦都经历完事情无以收场。回来拿的也是钥匙,忘在门里的也是钥匙。下午4点半,我终于见到了要接的人。工作虽然没有耽误,但心里满是苦涩。

不知道今生今世还要受多少钥匙之苦, 神的补偿,应该是我的企望成真吧。

诡异的Budweiser

酒精饮料渐渐成为生活中难以缺少的部分。当然并非成了酒鬼,只是觉得RIO出品的Rum预调酒的蓝玫瑰味系列相当不错,经常会来一瓶(最近发现宾治味的也属上佳)。不过陈曦则比较偏爱啤酒,尤其中意Budweiser。但今天发现一个特殊的现象:Budweiser的售价随着其容量的增加而降低。

小易拉罐装(355ml)的Budweiser售价6.4元,大易拉罐装(500ml)的Budweiser售价6元,大瓶装(600ml)的Budweiser售价5.2元。跑了几家便利店(alldays良友金伴等),发现售价略有几毛钱的不同,但是“容量与价格的增长方向相反”这一点是出奇地一致。

这一点不能说不诡异。无论如何,我们抱回了两大瓶Budweiser和一堆RIO。在美滋滋地对饮中,度过了愉快的一晚。

做到Kernel里!

用过Linux的图形界面的人,都会感到反应速度与Microsoft Windows差得不是一点点。我一开始想不明白这件事:Linux的资源占用显然比Microsoft Windows要少得多,在486上就能跑得很顺,你试试在486上跑跑Microsoft Windows 95呢!直到有一天,有一个业界的朋友喝了点儿小酒,对我说了一句话,我就全明白了。他说什么?他说,Linux根本就他妈的不应该想桌面的事儿,它连GUI都没做到Kernel里!

做到Kernel里意味着什么?意味着不必经过系统调用,多过了一层,可以直接访问底层的资源。想怎么用,就怎么用。这种极高的权限,没有任何一个用户进程能达到,它们想要访问任何的资源,都要先向操作系统打报告。操作系统慢条斯理地从请求队列中一条一条地拿过来看,还要用几千个时钟周期来想想谁先谁后,还要防死锁了,还要平衡这个平衡那个了,等到用户进程的代码真正被推进CPU,已经黄花菜儿也凉啦!  所以说,如果一种服务想要真正跑得快,没别的话,你非得把它做到Kernel里不可。

很多人都来向我这个英语水平很差的人发问:你的英语为啥可以学得不错?呵呵,你看看人家外国的小孩子,那么小英语就开得极溜儿,什么方言俚语了,什么引经据典了,什么过去将来进行时了,人家张口就来。根本不像我们的一些同志,说一句洋文要想n久,考虑了语法,又考虑语义;考虑了语义,又考虑语序;考虑了语序,又考虑修辞。等他准备开口要讲的时候,嘿嘿,人家都睡着了!我的一个英语水平真的很好的朋友和我说,要记住一个英语单词,你只要在不同的地方看到9次,你就永远忘不了它。这是很好的经验,但我说即使这样,中国人还是怎么都学不过美国小孩子的英文,法国小孩子的法文,或是土著小孩子跳大神儿的咒语。人家那是做到了Kernel里的!我们的英文再硬,也还只不过是系统调用。只是“程序优化与否”的区别而已!当然如果比中文的话,那就是我们的Kernel了,这才是我们真正能够依赖的东西。

无论做什么技术也是一样的,如果始终是为了考核,为了奖金,为了非技术本身的东西去做技术,就永远也做不到Kernel里去。只有将它完全融入肌体和灵魂,才有可能出神入化。我特别喜欢Bruce Eckel的书,当然主要的原因的是它们写得好,另一个原因是它的名字也非常有深意。《Thinking in C++》,是的,你总是用英语或汉语思考,再转成C++的么?试着直接用C++去思考,把C++做到你的Kernel里去!试试看,你会发现自己能够做到自己原来想都不敢想的事,达到自己原来想都不敢想的高度,你就是一切的操作系统。

技术是怎样变得丑陋的

最近花了一些精力在做页面上,体会到了一点有关技术演化过程的感觉。

大概HTML可以视作“最原生”的一种描述性语言了,虽然和C还不能比,但是只要想想一个空荡荡的页面就能够这样,你写几行,上面就多显示几行;你加一些控制的tags,就可以实现各种字体的变化以及版式的变化,一切看起来都很良性的发展。其实搞计算机的人都有一毛病,就是喜欢看到自己用高层的、机械的指令被转化成实际的动作,比如图形的显示或是外设的运动。尽管我们只要稍微动一下脑子就可以想到,写的代码就是再牛,也还是遵循一定的协议来驱动最终的物理层。说到底,不过是达到了无数早已安排好的状态中的一个。

但是人的控制欲望是比较有趣儿的,他们不希望有自己被协议控制的感觉,而希望跳开那个圈子。于是,HTML就引入了表单元素。有了表单元素,就有了根据内容编程的需要。然后,Javascript就来了,于是,每个tag都需要有自己的名字,才能作对象标识(Object Identity)。但这样还不够,HTML写的页面,全是一成不变的,这样怎么能满足根据提交结果动态生成的需要?再来个CGI。CGI还不行啊,这种架构返回的页面都是在服务器端计算,这样的话,服务器的负担太重了。嗯,再搞个分布式的计算环境。但数据呢?数据哪里去取?上个DBMS吧。好家伙,这么一来,好端端的技术,被加上了如此之多的负累。每一种新加的服务,都有数个协议,数十个标准,数百个规范,数千个语法,数万个争论。就是这种无奈的状态,把那些黑人骗钱的狗屁培训机构养得肥肥的。剥去这些美丽的(美个屁啊)外衣,里面是个非常轻巧、完备而又高效的HTML内核。每一种附加的东西,最后都必须落实到这个层面,才能完成页面的显示这么一个终极的目标。不过,想压抑自己的这种拓宽的欲望,真是着实不易,我已经说过,自己用NOTEPAD来写全部的页面。我现在做到了,以后也一定会做到。但是,昨天还是忍不住往MENU.HTML中加了一批<select>,加完以后,为了响应它,又不得不加了几个事件——什么onclick和onchange。总之,“纯文本”的希望,又破灭了。其实,数学、物理学及至一切的应用科学,又何尝不是如此。你随便拿一本数学或是物理学的文献,翻到最后面看,你都会发现脑子要炸开:一堆精灵古怪的丑陋符号充斥着一页又一页。这个时候,最聪明的办法就是把每个术语和符号往前推,看看到底是什么,把美妙的Dirichlet引理、Maxwell方程组变成了这个样子。是人的控制欲望,把技术变得丑陋不堪。所以如果你想知道一门技术科学的事,请搞清楚人们想要控制些什么,为了达到这些目的,他们对最初的美妙版图作了哪些蹂躏。最重要的是,只要你把最初的那个核心搞得非常明白,再怎么变化,你的心中都会有一要主线在牢牢地牵引着,不会陷入细节不能自拔。这就是中国古话里所讲的,“万变不离其宗”。