三月 30, 2006

Life Inside Intranet

公司大了,就会有自己的网络;公司大了,就会有很多不同意见;公司大了,就会觉得自己那点事很重要,不能让外人知道。所以,在这样的公司里工作,就不能随意在公司以外的blog上发帖子,不能把公司网络的链接加到del.icio.us上。

幸好这个世界上有种东西叫开源软件,它给我们这些生活在围墙以内的人带来些许方便。最近,在等待测试结果的闲暇时候,我在自己的机器上装了ScuttleWordPress,用来管理链接和记录一些(暂时)不宜外传的故事或想法。由于它们都用了MySql,所以也不得不学了点入门知识,比如添加用户,创建数据库之类的。不过一直觉得WordPress不好用,尤其是它的编辑器,所以装了Performancing这个firefox的插件,它既支持Blogger.com,也支持WordPress。以后写blog,就使用它就好了,然后选择不同的blog发布,很方便。何况现在SCIM输入法这么爽,以后就在Linux机器上写blog,也免去firefox 1.5与紫光输入法不兼容的问题(重复输入数字)。

最近感觉工作有点无聊,主要是效率很低,就像一个微软员工谈到Vista延期时说的:

Get rid of 90% of the Process that goes between writing the code and getting it checked in.

当然光抱怨是没用的,我也一直在思索如何改变现状,有了一点想法,但这种问题也不是一两天能够解决的,所以,郁闷的时候,能够自己调节一下,找点东西解解闷,对于个人心理健康是很重要的。有这么多优秀的开源软件,何不找两个来玩玩呢?!

三月 26, 2006

Fedora Core 5

Fedora Core 5刚出来,我就下了一个DVD的iso,耗时一天一夜,然后刻盘、升级。为了安全起见,我决定先升级公司里的Fedora Core 4,然后再升级家里的Fedora Core 3。

公司里升级很顺利,但是发现中文字体不好看,研究了一番,发现可以通过菜单“桌面=>首选项=>字体”将默认的10号字改为13号就可以获得不错的可视效果。不过对于15寸显示器来说,字体是好看了,显示的内容可就更少了。下面两张图是在家里17寸显示器上的效果图。第一张图上菜单和桌面上的字体都是10号,效果不怎么好,而对话框标题是13号,就很好看。第二张图都是13号。

 

既然一切顺利,我就放心的回家升级,哪知折腾了半天告诉我硬盘空间不够,到Redhat网站上一看,说最大可能需要9G空间。我在家里的电脑恰好装了所有的package,很不幸,根目录上没有这么大空间,其它分区倒是有空间,但似乎用不上,没办法,只好重装。为了安全起见,先把一些重要的东西备份到家里另一台电脑上,然后格式化,只留下home目录。这次安装没有装KDE,以及很多其它的包,需要的话以后再装吧,以前装了那么多,也没用上啥。

用了一会发现点问题,回收站没有反应,但是删除的东西确实在home目录下的.Trash目录里,只不过桌面上的回收站没有显示出来,尝试了很久也没有解决,搜索之后发现已经有人发bug(184473, 186384)给redhat了。邪门的是这个bug只在home位于单独的分区时才会出现,而我恰好遵循了这个传说中的best practice,没办法,等等吧。更邪门的是,公司里也是home单独分区,但回收站却是好好的。(184473里面报的情况更复杂)

因为FedoraFAQ上还没有FC5的yum配置,只好自己搞,先安装了livna,然后是atrpms,这个记得一定先做`rpm --import http://ATrpms.net/RPM-GPG-KEY.atrpms'。然后可以在livna上装mplayer,不过codecs要在atrpms上装,这些在FedoraFAQ for FC4里面都有介绍。另外还发现在桌面上点击右键弹出的菜单里没有“打开终端”的菜单项了,要通过`yum install nautilus-open-terminal'安装。

最爽的一点是在FC5里面SCIM代替iiimf成为默认的输入法,其智能拼音要比iiimf的智能多了,而且更重要的是,可以改变配置,使用Ctrl+space之外的方式来调出输入法,这样我就可以用Ctrl+space在emacs里面很爽的set mark了。

最后,我还是装了一个非开源的软件——realplayer,因为用mplayer播放rm和rmvb时不能拖动。但是在使用前一定要在“工具=>首选项=>硬件”页上禁止“使用XVideo”,不然realplayer无法正常播放视频,声音倒是正常的。

三月 20, 2006

Waiting List

最近突然意识到自己老是在等,真正做事情的时间很少。

主要问题还是出在测试上,无论修改多少代码,都要跑一堆的测试,要第二天才能得到测试结果。因为反馈的速度很慢,浪费了很多时间。这里面的原因有很多,一是人多机器少,测试资源紧缺,“排队”测试是很正常的现象;二是只有黑盒测试,没有白盒测试,所以不知道究竟哪些代码被测试到了哪些没有,只能靠量来轰炸。

测试的易用性在过去一年有了很大改善,提交测试不再是一件令人头疼的事情,所以大家也就更频繁地做测试,然而这种测试具有很大的盲目性,因此,我们浪费了很多时间在这上面。所以,开展白盒测试是今年工作的当务之急。

做了这么多年还没有白盒测试有点令人费解,我想主要还是认识不够,对问题的严重性缺乏了解。其实,公司里还是很重视测试的,但是,有没有测试、有多少测试用例很容易分辨,要实现高效的测试则很难。

三月 14, 2006

Xgl demo video

昨天把刻好的Live CD拿回家,在家里的机器上试了一下,虽然可以用,但经常死机。今天在http://en.wikipedia.org/wiki/Xgl发现一个demo的链接,下载地址是http://www.freedesktop.org/~davidr/xgl-demo1.xvid.avi。没条件亲手尝试的,可以看这个视频过过瘾,大概60M左右。

Xgl出来有些时日,一直没有去了解它到底是什么。昨天晚上在家里尝试了一下,觉得很有意思,想着第二天Google一下,后来突然想到,也许到Wikipedia上找更合适,del.icio.us也是个不错的选择。以后也许该换个思维,Google并非总是最合适的。

三月 13, 2006

3D driver for ATI graphics cards

一直不理解为什么GNU3D driver for ATI graphics cards列为高优先级的项目,因为我接触过一些装着ATI显卡的Dell机器,装Linux没什么问题,肯定能够启动X。直到上个周末开始Linux + Wine + Warcraft的尝试,才明白驱动程序之间的差别居然可以这么大。

折腾了两天,才算能在Wine上启动魔兽了,可是慢得要死,根本没法玩,即使用了传说中的opengl选项也没用,后来观察到CPU利用率狂高,估计是驱动的问题,就到ATI的网站上下了最新的驱动(当然不是开源的),虽说中间出现过一次死机的现象,但游戏速度可以说基本流畅(电影还是很慢),偶尔有停顿的感觉,但不严重。

第二件跟ATI显卡驱动相关的事是Xgl,为了体验这个传说中十分神奇的东东,我刻了一张Kororaa Live CD,居然找不到机器能够启动X Server,因为都是ATI的显卡。和Jie Zhang的体验差不多。

Gnash也同样是GNU的高优先级项目,似乎已经取得了一定的成果,希望ATI显卡驱动也能早日成形。

三月 08, 2006

Choose Right Programming Languages

一度,我只会一种程序设计语言,就是C++,而且直到现在,我也不认为自己会用C(因为真的没写过什么程序),只是知道一点语法而已。

现在,我会了一点Perl,又开始学习Emacs Lisp,并且打算再学习几种语言,多掌握几件趁手的兵器。程序设计语言就像是木匠工具箱里的工具,只有配合起来用才能做出像样的活计,只会用锤子的人也就能去钉钉子。Tour de Babel是一位前Amazon员工写的文章,谈了他对几种流行的程序设计语言的看法,颇具参考价值。值得注意的是,其中C++一节几乎全是负面评价,但我却感觉每句话都说在理上,下面这段话就引自这一节:

An Amazon engineer once described our code base as "a huge mountain of poop, the biggest mountain you've ever seen, and your job is to crawl into the very center of it, every time you need to fix something."

另外,他对Perl的评价与我自己的感受很类似;而我也就是因为不喜欢Python那种使用空格的方式所以一直没有去学。现在看来,Ruby应该是我下一个准备学习的语言了。

说到选择合适的语言,不禁想起不久前看到的一篇文章——"Top Ten of Programming Advice to NOT follow",其中第一条就是关于exception的,看了大呼过瘾。有一段时间特别想看一些开源软件的代码,尤其是C++写成的,但是看过几个之后发现,基本都会禁止使用exception(以及其它几个特性),甚至包括Firefox。当时感觉很郁闷,为什么要阉割一种语言,难道就没有一种语言恰好够用吗?如果没有,难道就不能发明出一个?

诚然,选择也要有选择的余地,能发明程序设计语言的毕竟是少数,只能在现有条件下做出最好的选择,几乎不会有人像Donald Knuth那样因为不喜欢人家的排版就自己写一套排版系统,这恐怕也是程序设计行业越来越平民化之后所面临的挑战——到底还有没有人愿意做精英。

三月 06, 2006

Emacs Lisp Macros

断断续续地在看Emacs Lisp Reference Manual,卡在Macros一节下不去了,把Macros、Byte Compilation和Evaluation三节反反复复看了好几遍,终于弄明白了,原来此Macro非彼Macro,和C里面的宏完全是两码事。

Emacs Lisp里的Macro实际上是Code Generator,和C里面的文本替换完全不同,即Emacs Lisp Macro是一段可以执行的Lisp程序,其执行结果并非是一般的值,而是另一段可以执行的Lisp程序。所以,一个宏调用实际上包含两段Emacs Lisp程序的执行过程,首先调用宏,生成一段新的Lisp程序,再来执行这段新生成的代码。第一个阶段就是所谓的宏替换,Byte Compilation则只做第一阶段,而不去执行新生成的代码。

说穿了不过是一层窗户纸,可不明白的时候才叫郁闷呢。所以说,如果质量可以保证的话,有人教要比自己看书效率高的多,因为可以交互,不懂就问,而写书的人只能猜测读者的问题,比如我在这里就把我觉得容易忽略的词用了粗体,这些词正是我在读Emacs Lisp Reference Manual时忽略的。

说到这再跑两句题。最近在看苏福忠著的《译事余墨》,其中谈到英译汉的主要问题在于是否弄懂原文的意思,很可能一字一句都有玄机,稍有疏忽就会“差之毫厘、谬以千里”。联系到自己学Emacs Lisp Macro这么费劲,问题也全出在阅读理解上,这才意识到自己这点英语水平还远远不够,与其每次都浪费时间反复阅读,不如索性下点苦功夫提高英文水平。自从过了六级就没再认真学过英语,这回又有动力了。

三月 03, 2006

Accomplishment

每个人都想有所成就,可到底什么才叫成就呢?

有一段时间,我对C++特别狂热,感觉自己几乎读遍了市面上叫得响的C++书籍,尤其是读了《设计模式》之后,更觉得自己了不得了,当时特别有成就感。毕业设计狂用了一把STL,工作后由于项目限制,不能用STL,就在design pattern上下功夫,只要能搭上一点边就绝不浪费机会。当然,这里面有练手的成分,但无论如何,代码写好之后感觉特别好,不是因为解决了什么实际问题,而是因为用了当时最火的技术。

然而,这种成就感是虚假的,就像傍上大款的小明星以为自己就此跻身上流社会一样可笑。真正的成就感应该是来自于对他人直接的、或者间接的帮助,帮助人们提高工作效率,帮助人们更好地享受生活。这时候,solution is more important than implementation.能抓到老鼠的就是好猫,而其颜色如何,血统高贵与否倒是次要的了。这些是我在写了一个又一个Perl脚本之后获得的启发。有人说用Perl写出的程序很难维护,只适合写小程序,解决小问题。且不说这种观点正确与否,实际上,很多时候我们都是在做那些看起来琐碎的小事,真正重要的事情反而没有时间去做。Perl语言非常简洁,可以很快构建出一个小程序,尽管这个程序可能不好理解,但是却从此把人从烦琐的、机械的工作中解放出来,去从事更重要、更有意义、也更有趣的事情上去。而且,这样的小程序也未必需要怎样的维护,因为它所解决的问题是如此之小,小到根本无法容纳滋生复杂的基因。

原来,我经常为自己实践了书上的方法而兴奋不已,也会鄙视那些破坏我辛辛苦苦搭好的架势的人,就像有洁癖的人无法容忍一丝灰尘;现在,这种感觉淡了,反而愿意去写一些Perl脚本,自动化那些过去需要手工操作的工作,并“厚颜无耻”地向别人推销。我并不是喜新厌旧,认为Perl就比C++好,也无意引起争论,只是想说,只有踏踏实实做一些对他人有益的事,才是获得成就的唯一途径,而使用什么工具,不是特别重要。

等到事业有成,再来风花雪月也不迟:-),比如工作累了做两道数学题休息一下,或者背诵一遍C++里名字查找的顺序(这是我从来没记住,也没想记住的一部分)……