Archive for July, 2009

牙疼

Monday, July 20th, 2009

牙疼了两个礼拜,中间好几个夜里痛醒,有几晚基本只能靠门牙切割食物而毫无咀嚼功能,苦不堪言。实在扛不过去,于是请了半天假去医院 — 兄弟们根据经验说我这个案例不用拔牙,补牙就行,介绍了一堆经验。

下一点半离开公司,太阳毒辣得让人怀疑是否生活在火星,感觉自己的全身被炙烤。医院大楼的门口相当阴凉,几乎让人打起冷站。挂号后去口腔科取号排队,等了二三十分钟后终于轮到我。

目睹了一件件器械,回想起来有点毛骨悚然。我那颗牙的蛀牙史已经相当长,已经严重得可以轻松放入一整粒米。闻着牙齿被磨的焦味,胃开始痉挛。加上不知名的药水,还有一种能直接磨到牙洞内部的器械,我不住的向身边的器皿吐掉口中的渣滓。那种药水、渣滓混合的味道,刻骨铭心。出医院后,舌头不自觉的吸了一下那边的牙缝,差点吐在路边。

LP说我的鼻炎是硬撑出来的,这次的牙疼也是。我想也是。对于鼻炎,我是没想到重感冒会有如此后遗症;而对于这颗牙,大概是我片面相信了商业软件的准则:if it works, don’t touch.

无论如何,健康最重要,预防乃是健康中之最最重要!望朋友们以我为戒!切之勿忘。

生活在贵国

Monday, July 20th, 2009

在贵国生活真的是件劳心劳力的事情,而且看不到尽头。通货膨胀,楼价上涨,汽车肇事,建筑倒塌 — 一件件都让人堵心。 此处省略万字。

Ubuntu - The Killing App of Linux Platform

Monday, July 20th, 2009

第一次正式接触的Linux发行版是RedHat 7.1,2002年。后来用的比较长时间的是RedHat 7.3,因为只有在那个版本我才能使我台式机的内猫正常工作。后来用奖学金买了RedHat 7.3/8.0,价格都是RMB 68,但基本上都是给同学安装了。实习后买了本本,开始装的SuSE,而放在老家的台式机上跑的是Debian 3.0。后来转向ubuntu,从5.10至今,一直apt-get dist-upgrade到Jaunty 9.04,基本没有出现任何问题。

当年TA问我为什么用ubuntu,是不是因为它polished,我说不是,只是用着比较方便、顺手 — 我不想回到手工配置一切,到处找驱动的时代。实际上,过去的一年多我的本本里面就跑了个wmii,怎么看怎么原始,但是方便、快捷,还自我感觉有点酷。

前几天开机发现fsck,不放心,于是重新格式化硬盘,重装了系统。试了ArchLinux, Debian,最后还是用了ubuntu。装完之后才发现原来如今的ubuntu看上去已经如此养眼。有句话是这么说的:You can’t sell a platform without a killing app on it.  Linux内核无论做的多么牛B,如果没有杀手级应用,那么也仅仅寥胜于无吧。用ubuntu作桌面系统无疑是让人快乐的,我又从wmii回到Gnome桌面。

Display Chinese TXT File in Vim/Emacs

Saturday, July 18th, 2009

For Vim, put the following line in ~/.vimrc:
set fileencodings=utf-8,cp936

For Emacs, add the following to ~/.emacs:
(custom-set-variables
'(current-language-environment "Chinese-GB"))

Even when one byte matters

Wednesday, July 15th, 2009

前几天读了一篇文章,“Even When One Byte Matters”。然而今天我就犯了个指针越界的错误,虽然也仅仅是越界了一个字节,其效果就像上帝显灵一样,令人印象深刻。

是一段算字符串md5值的程序,主函数中的变量声明如下:
int i;
char asc_buf[MD5_DIGEST_LENGTH * 2];

“asc_buf” 中存放的是字符串md5的值转成ascii的形式。MD5摘要的长度是16,而字符串形式的长度是它的两倍,也就是32。然而,一个粗心,这个数组少定义了一个字节 — C的字符串以一个额外的’\ 0′结尾。然后,在另外一个md5_to_ascii( )函数中,有这样一句:
asc_buf[MD5_DIGEST_LENGTH * 2] = ‘\ 0′;

于是,它的结果是把i的值设为了0 (精确一点的说,是i的最低或者最高字节为0,取决于大端还是小端)– 想想堆栈的布局便很明白了。如果这段程序没有测试,便提交到了一个很大的项目里,这个bug还是比较隐蔽的。C的强大得益于指针,而指针也恰恰是万恶之源。双刃剑。