终于可以舒一口气了,自周二早上上线新注册系统以来,我就没轻松过,现在看来,之前的内测只能保证业务逻辑是正确的,而一旦应用到实际的生产环境中,不少跟性能和可靠性有关的问题暴露出来了。那天下午和第二天正赶上移动机房在做什么调整或测试,网络状况一塌糊涂,我负责的那部分几度濒临瘫痪,火速调整了程序对意外情况的处理机制——那部分正是我对之最没经验,也是最疏于测试的。这个调整异常困难,因为putty疯狂掉线,半天敲不出一个命令来,后求索性登录不上,那情景真叫束手无策,太不是滋味了。

昨晚我的系统则暴露了一些严重的内存错误,这些错误在逻辑上可以归咎于我在这个升级项目中继承的老代码,但是出了状况责任还是在我:对待遗留代码太轻浮了。如果我足够尊重老代码,以原汁源味地方式保用它们, 或者完全相反,彻底吃透它们,然后再自由利用,都不会导致系统频繁挂掉。可事实是,我先前很武断地修改了一些参数,殊不知,那些老代码确实有BUG,但因为一些参数被调得比较好,所以很多陷阱被小心规避了,被我那么一改,在设备不稳定以及流量比较大时,系统几乎天翻地覆。昨天直到下班时还好好的,可晚饭后上去一看,程序正汹涌地暴core文件。坐立不安,连夜调试,快两点才把问题糊住。

可昨夜的处理只能算是应急措施,今天一狠心,重写了那部分老代码——说起来我自从接手维护那个老项目就看它不爽了,只是一直没感到必须花时间彻底改造。今天觉得,昨晚的状况足以作为扔掉这个鸡肋的理由了,这次系统升级也是唯一的机会了,而且,经过昨天对异常现象的观察,对如何重写也颇有心得了,不像以前那样嘴硬心虚。

重写非常顺利,现在我对我负责的这个子系统基本心满意足了——功能和运行状况都很好,而且所有业务代码都是自己写的,也就是说没有哪一块是不在我的掌握之中的。今晚一边开着系统日志一边看完了电影《赎罪》的剩余部份,看着日志刷刷地走,惬意啊。至于那个电影,从文件时间来看居然是半年前下载的。

这周累,健身活动也取消了一次。回头想想,有几个关头还挺恐怖的:上线以后暴出问题,又不可能因为个别子系统的缺陷撤回老系统,只能尽最大努力就地解决问题,真不敢想象如果毅力或能力挺不过来咋办。

明天啥事不干,就慢腾腾地消磨时间。后天要上班,为了那8天。

在用Linux时不止一次被各种控制字符困扰,今天决定清算一下,以下便是成果。

ASCII控制字符

ASCII控制字符(ASCII字符集中的0~37)一般显示为^X,其中X是相应控制字符代码值加64(8进制100)所构成的字符。比如BS(退格)显示为^H,因为BS + 64 = 8 + 64 = 72 = H。在终端里输入这些控制字符的方法是ctrl + X,这里的X不需要区分大小写。

这样就能解释为什么vim有时会显示诸如^M、^J这样的让人眼花的东西。先说一下文本文件的格式:MAC/UNIX/PC。MAC格式的文本文件用ASCII CR(回车,'\r')分隔行;UNIX格式用ASCII LF(换行,'\n');PC格式则用ASCII CR + LF("\r\n")。vim可以正确、利索地显示任一格式,不像Windows记事本那样不能对UNIX和MAC格式分行,但是如果文件中混合着这三种分隔符,vim似乎是以非常民主的方式(少数服从多数)选择其中一种作为行分隔符,落选的则显示为^X。比如,假如vim认为文件是MAC格式的,那么CR就是分隔符,LF则显示为^J;假如是UNIX格式,则CR被显示为^M。

UNIX终端特殊输入字符

有些ASCII控制字符在UNIX终端里是有特殊含义的,比如ASCII DC3(^S)表示STOP(从终端的观点看,STOP是一个字符的名称),意为停止输出,按下这个键后,无论再键入什么,终端也不会有任何回显,但实际上仍然是可以接受、执行命令行的,据说这项功能是为了在网络条件不好时减少掉线的情况。与之相对应的是ASCII DC1(^Q)表示START,意为恢复输出。所以,如果不小心按了ctrl + S,再按ctrl + Q就可以了。

然而我也碰过ctrl + Q死活不作为的情形,非常郁闷,不得不放弃那个会话,损失自是相当惨重。现在估计,那是因为终端的START字符被更改了,不再关联到^Q上。

是的,终端特殊字符到ASCII控制字符的映射几乎全部可以更改,除了CR(回车)和NL(换行)。《UNIX环境高级编程》表18-6是一个关于这些字符的详细清单。

^S <=> STOP 和 ^Q <=> START 只是典型情况,却非唯一。此外再比如^H <=> ERASE(删除字符),我曾经遇到过这种情况:进入sftp后,每次按BS键都蹦出来^H(也有时候是^?),急得一败涂地。

要更改终端特殊字符,在命令行中用stty命令可以很方便地做到,stty print or change terminal characteristics。针对刚才说的BS键回显成^H不起作用的情况,这样就可以了:

stty erase ^H

意思是,^H will erase the last character typed。

用stty -a可以print all current settings in human-readable form。

P.S. 并非只有ASCII控制字符才可以作为UNIX终端特殊字符,普通的可打印字符也可以,只不过这样做没有实际意义而已,如果执行stty erase b,那你每敲一个b就会吃掉上一个字符,自然也就没法上b这个字母上屏了。

大概半个月前,我把别人的dopod P800接到我的公司电脑上,那台手机是WM5的系统,MS ActiveSync连不上,不仅如此,后来我自己的手机(dopod P800 / WM6.1)也不能连了,实际上我手头的所有WM手机都连不上:HTC P4550,  dopod S700, dopod S900c(电信定制机)。我捣鼓了一个多小时,无果,为了不耽误工作和影响情绪,强忍收手了,最近工作确实比较忙,而且不涉及WM项目,实在不想节外生枝。

但是这些手机在我家里的电脑上都可以连接,据此似乎可以推测,不管我的电脑哪里出了问题,总之是被那台WM5的dopod P800搞坏了,而我手头的手机均未受影响,这些手机也不会影响其它电脑。

诡异的是,昨晚老张得知我的电脑不能连接WM手机后,兴冲冲地要帮我搞定,也是无果,后来他把我的P800接到他的电脑上,你猜怎么着?连不上!看着老张愈发纳闷,我既泄气又期待地告诉他,现在也许发生了更严重的事,就是你的电脑也不能连接任何WM手机了。他不信,接上现在正在用的华硕P526,被我不幸言中了。

吊诡得一逼啊,如果前一个推测是对的,为什么老张的电脑会被我的P800搞坏?

而且这还不是最吊诡的。老张不死心地接上他的东芝手机,那个手机的块头跟P4550相仿,貌似挺老,不过屏幕是VGA的,芯片组好像也是MSM 7x的。你猜怎么着?连上了。然后再用P527试,也能连了……其它的统统能连了。我火速把东芝拿到我的电脑上。神机啊,一切都恢复正常了。

现在我得要何等程度的想象力才能设计一个说法去解释这前前后后的事情?

P.S.

相比这件事,之前碰过的Windows XP host 与 VMware Linux 的网络连接与ActiveSync的连接冲突的问题实在是小巫见大巫。在那个冲突中,虚拟机突然、无故ping不通宿主电脑,从宿主电脑上拔掉WM手机就好——可是大多数时候WM手机和虚拟机都是同时连到宿主电脑上的,而且各自为安。

P.S. AGAIN

尽管行货手机被阉割WIFI很让人窝火,但是除此以外,行货在软件上的优点是很明显的。以我手头的水货HTC P4550和行货dopod S700为例,我下载过多个P4550的ROM,其中两个是官方的,分别是港版繁体和港版英文,WM版本涵盖了5、6.0、6.1和6.5,刷了N次,始终没法基本满意。WM5不便之处太多,6.x的要么通话质量极差(可能是radio版本不妥),要么在界面定制、应用软件的取舍等方面留下了ROM制作者太多的个人喜好痕迹,以致很难拿过来就用而不带一点心理疙瘩。比较来比较去,还是倾向于官方ROM在界面方案和应用软件上的选择,可是语言是个大问题,英文系统中不能显示中文,更不能安装中文输入法,繁体系统对联系人的排序方式一直让我完全摸不着头脑。虽然在英文系统中安装中文支持包,但这又会有新的问题:字体,在不巧的情形下,英文系统显示的中文惨不忍睹。当然,自己修改字体也不是完全不可能的任务,也可以独立更新radio ROM,问题是普通的手机用户(而非玩家)哪有精力没完没了的DIY?尤其是考虑到,手机资源论坛普遍都非常保守,基本可以认为它们挂出一个资源不是为了方便用户,而是吸收用户,这会大幅增加DIY的精力成本;而对于ROM来说,OS与radio的版本组合数量之多更是让我放弃了孜孜不倦地测试的念头。

然后再想一想,把设计界面、筛选应用程序、测试系统稳定性这些事交给OEM实在是很划算的事,除非谁认为这些工作本身就是乐趣所在(按我理解,自愿的ROM制作者就是这种人,据此可以认为从那些五花八门的ROM作品中得到满足的是制作者,而非用户)。看看dopod S700,里面集成了多普达自己设计的很多实用程序,有了它们,WM作为手机——通讯工具——就很尽职了,再自己安装一些经典的基础软件,比如Total Command、AlReader / Haali Reader,作为PDA也挺好用了,而这些基础软件是广泛流传的,完全不一定要注册临时帐号在那些手机论坛上下载,而且版本比较稳定,不为更新劳神。

应该说,拿HTC P4550的情况代表水货是不太公平的,P4550没有行货版,因此可以利用的软件资源相对少些,而且翻新货太多,以致人气不足,所以ROM制作不那么繁荣,否则也不至于那么难找一个基本合意的ROM。不过事情的本质还是那样的,我能想象,如果抛开对所有权的考量,公司的行货dopod S700在我手里会比我的水货dopod P800在软件功能上更丰富好用,尽管我曾经花了不少工夫收拾P800的软件环境。

 

上个月裴裴结婚,我和小曾都去了徐州一趟,回来后小曾激动得一逼鸟糟,一把鼻涕一把泪地写了返徐记。正好我这阵子懒得动笔自己写,直接把他的链接过来算了,虽然很多内容跟我无关,但胜在省事啊。

但是在有些事情上我要跟小曾划清界限,用《海峡两岸》里台湾人的话说,要跟他做“切割”:我不像小曾那样对徐州有近似故乡的感情。看到矿大西门口闯红灯的汽车,我经常幻想我能像电影《地狱小子》里的大块头那样一拳把它们砸烂。事实上我动手敲(虽然是用拳头,但以那个力度实在不好意思称之为砸)过一次,那还是上本科时,车里的伙计跟我争辩,就在我觉得他们理亏时,遭遇一句“你是学生,就这修养?”我就不想再纠错下去了,然后就感到失落:面对他们的逻辑,我心灰意冷,而如果他们是另一种人,捋起袖子就克的人,我也早就被打趴下了,所以无论如何我面对闯红灯的行为都没有好主意。

2009-09-06

拥有

呼~刚收拾好衣柜,堵了很多天,现在利索了。妹妹昨天去南京了,在这里时,我把我的盛夏天衣服的箱子誊给她用,所以衣柜才被塞得满满的。

她在这住了一个多月了,从七月底到九月初,正好跟我多事的八月重叠,总之过去的一个多月里我的生活都不在常态。一些固定的模式被打破了,比如晚饭后想写点东西(或者打游戏)时,发现妹妹已经在用我的电脑上淘宝网做买卖了——这是她的正事,优先,而我不想用她的电脑。或者比如我想看书,发现客厅沙发上有人在看电视,而我的房间里是妹妹在上网,而我又不想去隔壁房间,于是稍微有点无所适从。

我试着搞明白我为什么在一些事情上感到如此不适:

1、关于妹妹住在这里:最大的差错出在,七月底来的时候预计八月初就会去南京,相当紧急的说。结果直到昨天才去,而且是前天才突然知道这个安排的。这里面折磨人的地方在于:她随时可能走,因此我不想采取比誊个箱子更大的措施来应付,而正因为没有充分的措施和思想准备,她每延迟一天我都觉得我被耗了一天。如果她一开始就说:“我要在这住俩月!”不会有任何问题,我会在接下来的两个月里积极地把隔壁当成我的房间,而不是在那里得过且过。

2、关于不想用别人的电脑:这个情形也许有专业的心理学解释,但是我不懂,只能直觉地说,我不想使用不属于我的东西。“使用”这个词在这里的意思不是“利用”,而是接近于“在上面投入专注”。这么说味道有点变态,但事实就是如此,写日志不比上网查铁路车次,要大环境和小环境的。类似的例子还有,因为工作的需要,我手头有公司的三、四个手机,在外观和性能上都优于我自己用的这个,而且它们会由我保管很长时间,但我还是不能把它们拿来作日常使用。除非它明确属于我,否则我没那个心情去把玩它,而宁愿平静地摩挲自己的手机,尽管与此同时我会想“我的手机太烂了,该换个”。另一个例子是妹妹在这时我在隔壁睡得很不踏实,老丈人的呼噜只是原因之一,更重要的原因是我失控地认为这张床——我此刻坐的地方——才是我的,迫不得已在另一张床上睡觉时,其实我在等。

~~~~~~~~~~~~~~

今晚和安屁颠屁颠地去商场买了些打折货,然后买了点花哨的小蛋糕和饮料,感觉生活恢复了些许。前几年EHOMME(好像叫“逸欧”)这个牌子刚出现时,我跟找到精神寄托似的喜欢,在标价那么硬的情况下连买了两件,过些天又去买了一件,另加一只包。不过后来再去看时,就没有以前的感觉了,发现先前喜欢的那种特质越来越少。今天也买了几件,实在是因为打折后挺便宜,其次才是不难看。回家后整理衣柜时看到以前买的那三件,断定变的(或者换的)是设计师,而不是我,因为直到现在我还是强烈地认同老的三件。

所以,我以后不会再标榜自己喜欢这个牌子了。不过百度资料不打算改了,那里的每一项都不打算更新,冻结在那个阶段。