生日快乐,南京大学!

2007 年 5 月 20 日,今天是南京大学 105 年校庆,这也是我在南大度过的最后一个校庆日了。

虽然四年间均未曾参加过任何庆祝活动,其实是不喜欢凑热闹,但是今天我想说一句:南京大学,祝你生日快乐!

在南大四年,我不敢说在学术上得益多少,因为我自身就没有脚踏实地的学习数学,但我仍是碰见过几位传道授业解惑的好老师。他们的言传身教,才是我最应该感谢的南大给予我的东西。

我还应该感谢的,是南大培养出一届又一届优秀的学生,我的师兄师弟同学们。从他们身上,我学习到很多很多,在这些优秀的同学面前,也深为自己感到汗颜。

还有小百合,南大学生的网上家园。虽然十大经常很无聊,虽然人气极旺的都是什么贴图版女生天地版南大校园生活版之类的版面,仍然会有人坚守在 Algorithm 版 CPP 版 UnixLiunx 版这些乏味的地方,能交到不少朋友,仍然会有人支持在百合十一区的勇者独行,很欣慰校领导们并不总是采取封源截流的做法去处理这些呼吁。

还有南京大学本身的尴尬处地,给了我们那种既不张扬又不妄自菲薄的性格,使我们面对任何人任何事都能显得不卑不亢。

我不会感谢的是南大的校领导南大的后勤集团,这些人里大部分是垃圾。可能他们也有他们的无奈,但我认为,他们不配。或许我应该感谢的一点是,他们教会了我这个世界上哪里都有黑暗,包括纯洁的校园。

大哉一诚天下动
如鼎三足兮,曰智、曰仁、曰勇
千圣会归兮,集成于孔
下开万代旁万方兮,一趋兮同
踵海西上兮,江东
巍峨北极兮,金城之中
天开教泽兮,吾道无穷
吾愿无穷兮,如日方暾

Blog Suggest

今天早上爬起来,看到一篇非常非常好的文章:你应当如何学习 C++(以及编程)(rev#1) [href: http://blog.csdn.net/pongba/archive/2007/05/16/1611593.aspx ]。

由于文章和评论都相当的长,而且作者加了 rev#1, 大概还是准备把这篇文章继续写和修改下去,我就不在博客里全文引用了。这篇文章和它的所有评论都值得仔细读一遍。

其实在一开始我学习的语言就是 C++,显然在一般情况下,教授 C++ 的书和教授都会每每提及 C 指出它的不足和 C++ 的优点。我在学校期间也丝毫不掩饰对 OO 的 C++ 的热爱和对简陋的 C 语言的鄙视,并因之也鄙视那些学 C 语言的人。当我听谁谁谁说正在学习 C 的时候我就会告诉他/她,C 语言已经过气了,功能太简陋而且要成为历史词汇了,还是学 C++ 吧!大概是因为 C++ 比 C 多了那么两个让人感觉骄傲的加号,当时愚蠢地以为学习 C++ 的人都能比学 C 的人更加地昂起头走路,想想真是太 rediculous 了。

我在大学期间也学了不少语言,虽然说没有太深入了解,但基本的使用还是没问题的。也曾经师从吴朝阳学习并分析过 STL 的代码,语言间的比较和对库深入的学习,也让我更加深信 C++ 的优越性。当时的我甚至非常愚蠢地认为,既然有 C++,C 语言早就应该淘汰了。

但是这些认识当我真正开始写工程应用的 C 语言代码时完全改变了,大学期间实验性的代码能说明的问题太少了。我仍然承认 C++ 很优秀,是很好的程序设计语言,但是并不是每个项目每个人都适合用 C++。在现在的我看来,C++ 太累赘了,除非是有非常好的可以使用 template 的环境,我不会选择 C++ 做为开发语言。很可能有 C++ 的狂热爱好者会鼓吹面向对象的设计,封装、派生、多态等等一些乱七八糟的理论(其实我以前也是其中的一个),但是,就像 云风 在博客里所说:"不过对这些(C++ 和 OO)了解的再多也不为多,每次面临新的设计时,就可以找到足够的理由不用 C++ 不用 OO 。对,就算是用 OO ,我也可以保证对象设计的整洁清晰;但我更清楚的知道,其实我可以不用它。"

我不像云风那样有着那么多年的游戏设计和开发经验,还没有过自己设计一个软件的机会。但是在我移植 GDB 的时候,我越来越体会到 C 语言的美好。我真的想劝说那些鼓吹 C++ 的人,请读读 Linux/Unix Kernel, GCC, GDB 的代码,就算你读过以后仍然坚信 C++ 是最好的,但我相信你不会再认为 C 语言是个垃圾语言并不再适用于当今时代。你会发现很多很多需要使用对象或者其它 C++ 特性的部分都可以通过精巧的设计来避免,而且虽然鼓吹 C++ 的人一直会宣扬 C++ 的代码重用可以精简代码等等,但在应用中你就会发现,C++ 代码的规模在正常情况下要远比同等功用的 C 语言的大(否则嵌入式领域就不是 C 语言的天下了)。

还有一点我很不满 C++ 的地方是在 GDB 的使用上,相信用 GDB 调试过 C++ 代码的人都深有体会。Readline library 并不支持双冒号"::"在命令中的自动补全,所以在成员函数上设断点是非常痛苦的事情。当程序中使用模板的时候,一个函数标识符的长度会很轻松的上几百,命令行补全一失效,不得不手工输入。所以当需要在类的成员函数上设置断点的时候,都要使用一些技巧。比如在类名上使用命令自动补全,在列表中寻找到自己需要的函数,拷贝保存下来它的名字,然后再通过粘贴设置断点。如果仔细点儿你就会发现,成员函数的第一个参数其实是 this 而不是在函数声明时候的第一个参数,这会在调试期产生误解。C++ 简化了程序员的思考,但是让底层的中间文件和目标文件变得更加混乱。

C++ 很优秀,但不是万能灵药。不是学了 C++ 就了不起,不是学了 C 就低人一等,就像 pongba 所说:"一般性的编码实践准则,以及基本的编程能力和基本功,乃至基本的程序设计理论以及算法设计。才是真正需要花时间掌握的东西。" "熟练运用一门语言绝不意味着要把它的边边角角全都记住。"

——但,C++ 的犄角旮旯实在太多了!

最后,特别推荐 pongba 的博客"C++的罗浮宫"[href: http://blog.csdn.net/pongba ]。pongba 者,刘未鹏也,南京大学数学系 2001 级,也算是我的直系师兄了(^_^)。翻译过:Working Effectively With Legacy Code, Exceptional C++ Style, Imperfect C++。

函数调用栈和栈帧

在计算机科学中,Callstack 是指存放某个程序的正在运行的函数的信息的栈。Call stack 由 stack frames 组成,每个 stack frame 对应于一个未完成运行的函数。

在当今流行的计算机体系架构中,大部分计算机的参数传递,局部变量的分配和释放都是通过操纵程序栈来实现的。栈用来传递函数参数,存储返回值信息,保存寄存器以供恢复调用前处理机状态。每次调用一个函数,都要为该次调用的函数实例分配栈空间。为单个函数分配的那部分栈空间就叫做 stack frame,也就是说,stack frame 这个说法主要是为了描述函数调用关系的。

Stack frame 组织方式的重要性和作用体现在两个方面:第一,它使调用者和被调用者达成某种约定。这个约定定义了函数调用时函数参数的传递方式,函数返回值的返回方式,寄存器如何在调用者和被调用者之间进行共享;第二,它定义了被调用者如何使用它自己的 stack frame 来完成局部变量的存储和使用。


|------------------|<--high address
|     ......       | Previous
|     ......       |  frames
|------------------|<-----------
| registers and    |
| local variables  |
|------------------|  Caller's
|   argument 6     |
|   argument 5     |  frame
|   argument 4     |
|   argument 3     |
|   argument 2     |
|   argument 1     |
|------------------|<--previous sp
|  return address  |(n-4)sp
|------------------|(n-8)sp
| saved registers  |
|     ......       | Current
|------------------|  frame
| local  variables |(Callee's
|     ......       |  frame )
|------------------|
|   next calling   |
|  arguments list  |
|------------------|<--sp
|     ......       |
|__________________|<--low address

图片链接:http://solrex.googlepages.com/frame.jpg

上图描述的是一种典型的(MIPS O32)嵌入式芯片的 stack frame 组织方式。在这张图中,计算机的栈空间采用的是向下增长的方式,SP(stack pointer) 就是当前函数的栈指针,它指向的是栈底的位置。Current Frame 所示即为当前函数(被调用者)的 frame ,Caller’s Frame 是当前函数的调用者的 frame 。每个 frame 中所存放的内容和存放顺序,则由目标体系架构的调用约定(calling convention)定义。如图所示,MIPS O32调用约定规定了所占空间不大于4 个字节的参数应该放在从 $4到 $8 的寄存器中,剩下的参数应该依次放到调用者 stack frame 的参数域中,并且在参数域中需要为前四个参数保留栈空间;如果被调用者需要使用 $16 到 $23 这些保留寄存器(saved register),就必须先将这些保留寄存器的值保存在被调用者 stack frame 的保留寄存器域中,当被调用者返回时恢复这些寄存器值;当被调用者不是叶子函数时,即被调用者中存在对其它函数的调用,需要将 RA(return address) 寄存器 ($31) 值保存到被调用者 stack frame 的返回值域中;被调用者所需要使用的局部变量,应保存在被调用者 stack frame 的本地变量域中。

在没有 BP(base pointer) 寄存器的目标架构中,进入一个函数时需要将当前栈指针向下移动 n 字节,这个大小为 n 字节的存储空间就是此函数的 stack frame 的存储区域。此后栈指针便不再移动,只能在函数返回时再将栈指针加上这个偏移量恢复栈现场。由于不能随便移动栈指针,所以寄存器压栈和出栈都必须指定偏移量,这与 x86 架构的计算机对栈的使用方式有着明显的不同。

在 RISC 计算机中主要参与计算的是寄存器,saved registers 就是指在进入一个函数后,如果某个保存原函数信息的寄存器会在当前函数中被使用,就应该将此寄存器保存到堆栈上,当函数返回时恢复此寄存器值。而且由于 RISC 计算机大部分采用定长指令或者定变长指令,一般指令长度不会超过32个位。而现代计算机的内存地址范围已经扩展到 32 位,这样在一条指令里就不足以包含有效的内存地址,所以RISC计算机一般借助于一个返回地址寄存器 RA(return address) 来实现函数的返回。几乎在每个函数调用中都会使用到这个寄存器,所以在很多情况下 RA 寄存器会被保存在堆栈上以避免被后面的函数调用修改,当函数需要返回时,从堆栈上取回 RA 然后跳转。移动 SP 和保存寄存器的动作一般处在函数的开头,叫做 function prologue;恢复这些寄存器状态的动作一般放在函数的最后,叫做 function epilogue。

An Old Friend

半夜了,室友们仍然没有睡觉的意思。鼓楼比浦口管理松很多,温度高于 29℃ 宿舍楼就不熄灯了,直接导致的后果是某些人看电影到深夜,某些人打魔兽到深夜,某些人无聊到深夜。

因为 Linux 下的 Ctex 中文字体特别不好看,QQ 不能登录,不知道如何加载电影字幕等等诸多原因,用 Windows 的时间明显变长。在某部分无聊的时间内,浏览了一下 QQ 好友们的空间。

很久以来与老朋友们的联系仅限于短信和电子邮件,也是渐渐地趋于稀疏。不太多人写博客,就算有,恐怕也没几个人像我更新那么频繁。今天闯进好久好久没见到的一个初中同学的 QQ 空间,该生以安妮宝贝似的文字把我小小地震撼了一下,还是当年的赅子吗?唤起很多旧事的回忆:

赅子,初三时候坐我前排,颇有惊世骇俗之态,亦有不同常人之能。有若干历史事件加传奇让我记忆犹新:

历史事件:

赅子的母亲也是我们初中的老师,所以就被我们万恶的初三班主任马xx整得很惨(鉴于马xx的儿子也是我同班同学,此处略去真名并省略脏话两千字)。赅同学骨头极其之硬,可以说让我叹为观止,绝对是地下党加卧底的最佳人选!具体的事件就记不清了,但我脑子中能浮现出很多幅初三班主任马xx殴打他的画面,是真的殴打。如果事件不大,基本就是拿着书朝头上招呼,猛砸猛呼;有两三次比较严重的事件,马xx把他拉到教室外面用脚往身上踹。有的人可能不信,初中老师怎么可能体罚那么严重。但像我这么从小老实听话的孩子都被他皮鞋踹过疼了一个星期,原因仅仅是在上体育课前的课间和高中部的人踢了会儿球(他禁止我们踢球)。

我们班男同学基本都挨过打,赅同学也挨打,没什么不同。但赅同学与众不同就在于挨打之频繁以及挨打之功力。大概马xx打赅子的频繁程度和严重程度仅次于揍他儿子了,但赅子挨打的时候,从来都是一声不吭。无论问他什么事情,他绝对不会说半句,就算自己有理,他也从来不为自己辩解,你打他就像打一根木头。惭愧的说,其实这句话我也深有体会,因为我坐在他正后面,基本也是把他当作沙袋,什么时候郁闷了就朝他背上打两拳,绝对是一点儿反应都没有。哪儿找这么好的沙袋啊?

赅子很喜欢踢球,当时大概只有他不怕马xx的淫威敢在放学后到我们自己的操场上踢球,我们班的其他学生全是骑车到我们县的重点高中或者找个偏僻的小空地去踢球,这也是他挨打频繁的原因之一。很多人都踢球,踢球本不是什么惊世骇俗的事情,但是赅子就能做到惊世骇俗的就是,他能穿着三角内裤和拖鞋从家里出来,然后跑到学校操场去踢球,我想有这份经历的哥们大概不多。

传奇:

所谓传奇者,就是未经亲眼看到的事情。赅子有很多件,当时班里经常传说他的事情,记忆尤深者有两件。

一件发生在我们同班那年寒假。寒假开学后,某日,班主任马xx面带笑意地问赅子,你家的玻璃都安上了吧,你小子很厉害呀。当时就觉得纳闷,什么时候见过马xx笑那么阴险那么开心啊?一问才知道,这小子寒假把家里的玻璃全搞碎了!我们那有一种礼花,大概像饼干筒那么粗吧,直径大约十几厘米,点着以后会喷出来火花,一般是正月十五在家放。那小子不知道从哪儿搞过来一个那么粗的炮仗,在院子里点着了,可想而知有多大威力,"砰"的一声家里和邻居家的玻璃全都被震碎了,他在家也挨了一顿好打。

一件发生在小时候,我同桌给我讲的。我们县在盖建设银行家属院的时候,挖出来一个防空洞,当时很多人进去玩。因为没有照明,进去都是黑乎乎的,他们小孩子就乱摸。赅子比较背,摸着摸着就摸到了一坨屎,手上那个臭啊!本来是很倒霉的事情,谁知道这小子一转身就往别的人身上、脸上抹,抹完就跑。出来以后他们几个在一起玩的家伙都快给笑死了,然后一直就被传为笑谈。

就是这样的一个孩子,现在居然用那么忧郁那么脆弱的语言去抒发心中抑郁,去表达自己,我是无论如何也不会想到的。

孩子长大了...

孩子们长大了...

Some Thought About NJU

今天当了一次愤怒青年。其实血性早就被磨灭许多了,只是看到那篇帖子还是想尽自己的一点力量,大概也是因为经过一些这样的遭遇却只能忍气吞声积下的愤懑。

南京大学是我的母校,她给了我很多东西,我无所谓她是不是一所国际或者国内一流大学,我只是非常非常希望她能成为一所好大学,有好的员工、好的教师、好的学生,能教人向善、能给人真理,pursue every thing that is good,而不是在功利世界内迷失方向丢掉作为大学的核心价值观念,那样我才能由衷地为她感到骄傲和自豪。

今年 5 月 20 日是南京大学的 105 岁生日,昨天这个事件的发生意味着 105 岁的南大仍然不够成熟,仍然不能负担起所有人对她的期望,甚至可以说相去甚远。身处在中国的这个时代,很难说自由民主科学的思想能够在南大校园里一支独放不染凡尘,连学生都能感觉到功利的压力更何况一个杂合着各方面利益的大学?真希望南大能再出来一位杰出的校长,能让南大远离尘世污秽,成为一片干干净净的学术圣地,让每一个南大人都沐浴在真理的光辉中。

我知道那是奢望,恐怕只是幻想而已。但如果每个人都向这个方向努力,就算达不到,南大也会变得更好。已经被官方势力玷污的小百合虽然不再圣洁如初,但就像茶花女坚守自己的国家一样,我祝愿小百合能在所有网友的护卫下永远捍卫自成立以来的信念,以独立的姿态做为南大人交流的平台,传承下十年来的光荣与梦想。

Idle time ?

劳动节在家呆了两天,又犯了一次胃炎,痛了大半天。这也是我在北京太不注意饮食的报应。其余的就乏善可陈了,睡睡觉,遛遛狗,养养神。那条狗的所做所为这次给我带来了不少乐趣,不过至于那些委琐狗事,就不说了。

昨晚一夜车到南京,原来 8 个小时 40 分钟的车程提速后 6 个小时 20 分钟就到了。看到长江大桥的时候我都有点恍惚,有这么快吗?还好有大桥这个地标,不至于错过南京站。凌晨 3 点半到宿舍,几个小子居然谈兴大起,说话到 5 点。眯了一会儿实在无法入睡,就爬起来了。

桌上床上乱成一片,好打扫了一番,把老余拿走的电脑搬回来,重装了遍 Win。小百合上发帖讨了个 Ubuntu Feisty,还劳驾 dolphin9 亲自给我送到了宿舍,明天装罢。

习惯了公司的专线网络,再回到南大乱七八糟的网络里,真闹心。google 的服务勉强还算可用,space 居然可以在校内访问了,但其它的国外网站依然的是相望不相闻。yahoo mail 用不了了,虽然我已经在 gmail 里 pop 过来,但回归测试报告总是被 yahoo 当作 spam 处理的,忘记设置 pop spam 了。习惯了早上看报告,现在一没有还真有点担心。不过南大的破网络又不允许通过代理 ssh 到服务器上,就算想工作也没办法,就随它去吧。

我最纳闷的一点是,在 Win 下为什么 firefox 2.0 会不能登录 google 和 space,而 IE6.0 却可以,难道是安全性设置有问题?好久没用 Win 了,连一些常用的东西在哪儿都有点晕了,再说吧。

唯一还能值得称道的一点是 ftp 资源依然很丰富,晚上拖了不少电影,光顾得聊天了,明日再看好了。代理又开始限速,在国内下载也不如以前快了。不就是为了推广一个什么"奶罩(BRAS)"网络嘛,何必逼学生那么急呢?明天装上 tex 软件之后要把论文的一些想到的硬伤修改一下,再好好润色一遍,拿去给吴老师看看。事情倒是不多,也不是很忙,挺惬意的。还是有些不适应,刚回来嘛,难免,不过这生活可比打工强多了。

Time To Leave

没有忍住,还是到售票点去了一趟,还好就在住处南面的太阳园。没有太长的队,票也没有过年时候难买,只是好郁闷的只买到商丘南站,只好再从南站倒北站回家。

一堆书要扔到公司了,只带回去一本算法导论,学习的话,足够了。被子什么的放同学那里,不过还是有一些乱七八糟的东西,麻烦。

其实可以早走两天避开五一的,因为协议也是 15 号就到期了。但我说过了要干完四月再走,不想再给人事多添什么麻烦。

先回家住两天,看买票方便否,就转回南京。南大要 105 岁了,百年校庆没赶上,105 年能算一个小庆吗?

该毕业了才显示出大家的才华横溢。拿到 UCI 系统生物学 offer 的 Min 同学连续贴出三件毕业纪念衫设计,相当相当的相当的不错。我说咱别打击别人了行吗?学数学的出去读生物也就那了,难道还打算再转设计?Ally 同学参加校园十大歌星赛,进了决赛,虽然冲击十大落败有点小遗憾(不然俺们年级就能有两个十大歌星了),但也真的好厉害了。以后还可以应 Xu You 师兄的话去 UW-Madision 继续唱,就不知道老美们兴这个吗?

今年知道的有 28 个保送,23 个出国,三分之一的孩子都混得不错,考研,工作的统计快出来呀。就像顾老师说的一样,真为大家自豪,这就是俺们滴南大,俺们滴数学系。

回去以后就不用再百合强迫症了,因为可以一直挂着了 :-)。然后就应该吃饭喝酒打球玩游戏,我要把拉下的越狱补上,把没来得及看的电影看完,还要把欠别人的饭债钱债人情债都还掉,希望最后两个月生活别让我太失望。

陶然亭公园

周六的阳光相当明媚,呆在室内简直像犯罪。不过总算没有再躺一天,约好和丽君去陶然亭公园玩了一圈。比较汗的是太享受于在亭子中晒太阳、吹风和聊天的舒适感,到闭园出来时候才发现我们只转悠了公园的一角...

要是让我描写春日里北京公园的景象,我只好用尽所有恶俗的词汇,还是不要倒自己的胃口,只说:天很蓝,树很绿,水很脏,人很多,亭很俗,风很爽。最让我崩溃的是很多当地人都会拿着小网勺去舀鱼,当我和丽君正在讨论看到的一条泥鳅是什么鱼的时候,旁边一位妈妈舀出来一只小乌龟,真正的乌龟啊...诡异死了

我觉得自己没有欣赏什么景色的能力,尤其是人为堆砌的景观,看见总觉得怪怪的。是否会对大自然的鬼斧神工比较有感觉呢?还没有真正见过让我震撼的,以前是有时间没钱,现在不那么没钱了,但是没时间。不过我还是很喜欢和好朋友一起晃悠的乐趣,重要的是人,不是吗?大声地讲着商丘话,不理会别人的眼神,好像和嘉诚在上海晃的一幕重现。

现在从心里感到,自己的想象力、记忆力、表达力、对环境和对人的感觉都大不如从前了。我会钻在自己的套子里,不愿意让别人看到真实一面,也没有兴趣去观察别人的世界。怎么说呢,一种落入蝇营狗苟生活的苦闷,丧失了辨别一些重要事物的能力,已经模糊了一些坚持的信念,也无法得到纯粹的快乐。

闾丘在博客里说哈佛为了帮助她和同学那些脱离工作一年的人重新适应环境,专门请来心理治疗师帮助。那么像我这种在半年里经历了几番变化的人会有些心理问题就不足为奇了。我以前以为这种话题会永远与我无关,现在看来不那么确定,我都能感觉到自己出问题了。不过不用担心在我身上会发生什么残害别人残害自己的事情,我的本性就没有那么极端,会调整好的。

PS:
Math 03 的同学们也是昨天去将军山春游,貌似挺开心的,看得我也很高兴。

又PS:
今天把从姨姥姥家拿的被褥送了回去,又是虚与委蛇一番,看来我对此道已经很熟练了。

再PS:
火车票只能提前五天买,没时间,我打算再次撞票,车到山前必有路。

Bill Gates in China

真是搞笑啊,前几天在百合上和一些人探讨时提到过 Bill Gates 的事,今天居然看到大门被清华授予荣誉博士学位,北大也不甘落后啊,立即给大门一个名誉校董。

清华也真会瞅时候,1997 年大门来清华的时候也没见它多激动,今年一听说哈佛要补大门的学位,立马抢了先,嘿嘿,貌似还是大门的第一个博士学位证书。晕死了,功夫花在这上面干嘛,你给别人一个学位别人也不会怎么地,难道大门还真的感激这个学位不成?

中国的大学啊,还是做点实际的事情比较好。

红包

我还真发现自己的运气不是一般的好,今天 PM 找我谈了一下,意思就是说对我这半年的实习很满意,要给我发奖金,不过得等到我毕业了以后再到公司来实习的时候发给我,数目不算小,卡卡卡卡。鉴于还没吃到嘴里,就不透露详细情况了。虽然是口头约定,我也不怕他抵赖,不给也可以啊,到时候让 Sun 给我写几封推荐信也值了,^_^。

其实我很感激我们公司的。当初申请的时候是很随机地填了现在的公司,我也没报啥希望,电子公司怎么可能要我呢。 PM 电话面试我,一点都没紧张,随便聊了聊,谁知道就让我过来北京。我还有点害怕,不会是搞传销的吧,那么容易就让我过来。后来看看公司的写字楼还算气派,就想反正是到写字楼里,难不成还在那把我给捆了,横了一条心就来北京了。嘿,后来发现还真的不错。同事大部分都是计算所和清华的,而且大部分都是有着将近十年工作经历的,气氛很轻松,相处很容易。我尤其感激 PM,对我非常好,刚开始实习那会儿我随便做出点什么东西他都会发邮件给大家,内容都是:Thanks Wenbo for the good work! 之类的话。这对一个刚踏入职场的学生有多大的鼓励可想而知,这份实习能让我得到满意的报酬,还能让我感觉到自己努力被大家承认,能力被大家认可,我真的很幸运。

刚来公司那会儿开始熟悉回归测试,是使用 DejaGNU 的自动测试框架。熟悉了 DejaGNU 后我就提出把回归测试环境规范一下,然后 PM 就放手让我把已成型的环境修改了一遍,顺便给 DejaGNU 加了几个扩展。所以现在公司里可以说没有人比我更了解回归测试环境、Tcl/Expect 和 DejaGNU,当然出了问题大部分也是找我。规范了这个以后编写测试脚本的任务就简单多了,只需要使用已有的库就可以。然后 PM 就让我给模拟器添加了一个命令行补全的东东,刚开始以为很难,后来发现 readline library 之后,就简单许多了。然后 PM 就说,看你代码写的不错,你就负责移植 GDB 到我们的芯片上吧。当时我听着都有点晕,妈呀,GDB 我总共才用过三四次,这一开始就让我移植,有点恐怖。我说,那我试试吧,然后真就把 GDB 给弄出来了。其实真正写代码的时间只有两个星期左右,其它时间都是在学习,调试器必须和底层相当大的联系,对 architecture 不熟悉肯定做不出来的。我就是一直在了解一些新名词:prologue, epilogue, stack pointer, frame, unwind, isa, delay slot, elf, dwarf2, calling convention...太多东西了,学了不少。GDB 大概不到两个月就完成了,然后就写模拟器的 gdbserver,就写 debug stub,提交一些 debugging information 的 bug,还修改过一点 BFD Lib, GAS, OBJDUMP, OPEN64,当然是很简单的为了 fix bug 的修改啦。不过基本上除了 vedio codec 那部分的东西,工具链的其他的软件我都摸过一点,^_^。还是在公司里能锻炼人,其它的不敢说,在 MIPS 的 architecture 方面,我不算个生手了,在 GDB 和 Dwarf2 文件格式方面,我也有了相当的了解。

怎么说呢,我之所以感激公司就是它相信我的能力,让我去做那些我都不敢想的工作,给了我很大的满足感,也让我学到了很多,也算是以后求职的资本。而且公司对我不薄,不是那种只用最低廉的价钱购买员工劳力的公司。我从来没提过薪水的事情,公司却给了我几次意料外的惊喜,让我在金钱方面轻松了很多。Sun 说他想在中国花几年时间培训一支 compiler 和 system 的团队,正好我研究生阶段也是在北京读书,目前有一个打算想跟着 Sun 学 compiler,这样的话无论以后求职或者是出国就相当容易了。反正我还有充足的时间去考虑这件事,等回到南京以后要多看看 compiler 方面的 paper,研究一下 Open64 的 code,好好评估一下自己的能力和兴趣。

MSRA-UCLA

今天居然收到微软那个什么 MSRA-UCLA 计划的回信,申请都发给他们一个月啦这会儿才回信说收到了,我都快忘了这事儿了。

其实我也根本没抱什么希望,MSRA 啊,UCLA 啊,这计划国内才招十个人,能要我?所以那个申请表我也随便填填,连推荐老师都没有就给寄过去了。只是因为那次在北航听了一次 MSRA 什么图形计算组的头儿的讲座,看到 MSN 视频时候加面具挺有意思的,就申了一下那个方向。

唉,不是不想去啊,虽然平时都用 Linux 鄙视 Windows,使用 gcc 鄙视 VC,但我对微软还是有些敬意的,毕竟能做到如此地步也不易,当然很想能到微软实习了。川大那个牛人唐前两天也收到了 MSRA 的实习邀请,能见见也好啊。不过这事儿咱说了不算,况且我现在逐渐想往 Compiler 方向转,进去 MSRA 也学不到太多东西,还是留在现在公司实习比较好,有牛人提点啊。嘿嘿,咱自己几两水儿咱也知道,要是 MSRA 真给我发面试邀请了,那就得说我运气不是一般的好,如果我能通过面试,那就说明老天太青睐我了。不过真有机会去面试那就相当近啦,西格玛大厦就在我上班的路上,天天上下班我都要仰慕一番。BTW:有时候到沃尔玛吃饭还能碰到 MSRA 的员工呢,难道西格玛里面的食堂也很烂吗?

只当是一个梦想吧,让我清楚一下自己的定位。我还是得多考虑一下回学校的事儿,大概会是在 29,30 左右回家,然后 3,4 号回南京,该买票啦。唉,论文草稿完成了就一直懒得改,到现在才把其中一张 stack frame 图示重画了一下,改成了比较典型 MIPS O32 调用约定。剩下的还是回学校再改吧。

四年喽,要毕业喽,回去讨饭喽。

Green Bomb

走在北航的校园里,忽然发现杨树的叶子已经小巴掌大了,飘满杨絮的空气中泛着那么浓郁的绿意。天气渐渐有了燥热的感觉,北京的春天来的好突然,而且,好短。

这一段好像没做什么能够回味的事。工作时间呆在公司,休息时间呆在公司,周末睡上一整天,或者和这个同学那个朋友吃顿饭,偶尔会到第三极看上半天书,更经常的是到公司上上网,写点东西。虽然发过愿想到处转转,但是总在懒惰驱使下难以成行。来北京半年了居然可以宣称一点,除了坐火车站,从未进过二环,也从未去过任何需要买票的景点。就连北京的垃圾公交车都未曾坐过几次,中关村这片地儿,我基本都用脚丈量过一遍。

也体验到一些工作人士的悲哀。一整天只能在公司耗着,如果饭堂在大楼里面,根本连阳光都见不着,如果再需要加班的话,可想而知是什么样的情况。由于住的比较近而且住处比较难过,虽然不要求加班,我也通常是九点以后离开公司。将近 13 个小时对着电脑,连续 5 天,有时候很崩溃。身在异地,基本没有什么娱乐,和同事虽然处的不错,但是代沟还是代沟。遇上不熟悉的工作,都得自己摸索,虽然可以求助别人,但总是相信自己能弄懂。报告给他人的 bug 到头来却需要自己去 fix,也是件蛮有成就感的事。

闲来强迫似地去关注熟悉的环境里和熟悉的人身边发生的事,百合一天会登录好几次,google reader 也是每天两番必读。只有不适应当前环境时才会去关注要成为历史的东西吧,就像刚上大学时频繁地看校友录一样。心情一直在压抑当中,生活也很累,情绪都不算高。虽然在北京也有同学和朋友,但是也明白每个人都有着自己的生活,我不喜欢别人打扰我,自然也不会过多打扰他们。虽然有些事也能感到略微的幸福,可知道梦想照进现实会很痛苦。唉,我总是不能很快地适应环境,不是怕新环境,怕的是适应期的苦闷。不过,该来的,总是要来。

惊闻弗吉尼亚理工发生校园枪击案,其实不算是惊闻,那只是一条和我无关的消息。看着国内外媒体忙活,我只想说:什么时候中国随便死几个人都能让你们如此激动如此高效率,我再开始关注新闻。

这个春天发生了很多事,这个春天什么都没有发生。

龙芯

这星期算是比较闲的一个星期,很多工作要等别人的进度,而且 ^_^,我自己也有想偷懒的因素。中间我居然花了一整天时间浏览了一下 《See Mips Run》,因为是 MIPS 的老员工出的书,写得还算不错,好像去年 10 月份还出了第二版:《See Mips Run Linux》,只是电子书现在还不太好找。

《See Mips Run》可以作为一本了解 MIPS 体系架构和编程的教材,甚至可以作为加深理解计算机体系架构的参考书。因为它几乎涵盖了体系结构设计和程序底层实现的所有方面,而且能将 RISC 结合某种特定的 CPU 进行探讨,又没有一般手册的枯燥,在这本书中可以了解到各种理论模型的实际实现方式。也有个缺陷就是它不够新,它所关注的是 R10000 以前的 MIPS,特别注重的是 R4xxx,但这些也是 MIPS 的经典之作。

在当前很多的嵌入式芯片中的设计中都可以看到 MIPS 的影子,包括计算所的龙芯(Loongson),更是受到 MIPS 的深刻影响。从一则新闻就可以看出来:2007年3月28日下午,中科院计算所与意法半导体在人民大会堂举行龙芯处理器技术合作签约仪式。龙芯通过该合作获得了 MIPS64 架构全部许可使用权,而意法半导体通过合作取得龙芯处理器芯片在全球制造和销售的授权。

随便扯点龙芯的话题,最近慢慢地了解了一些龙芯神话,也算揭开了一点龙芯的面纱。不是说龙芯不好,计算所的研究人员的确很优秀,龙芯做得也很好,很厉害。但是作为中国的科研机构,总会有一些很有意思的现象,就比如龙芯总是拿自己跟奔腾比。有这样的话:"最高主频达到1.0GHz,实测性能超过1.5GHz奔腾IV处理器的水平。"我以前看到这种说法总是觉得,哦,好厉害。只是现在慢慢懂了,龙芯和奔腾的 x86 根本不是同一个架构,这种比较可以说毫无意义。拿寄存器来说,龙芯 2E 总共有 64 个定点寄存器,64 个浮点寄存器,而奔腾 IV 是 16 个定点寄存器和 16 个浮点寄存器,可以想象四条腿的马和两条腿的人赛跑的景象。

当然,不是寄存器多就肯定快,也不是寄存器多就好,只是采用 MIPS 体系架构的 CPU, 使用了那么多快速存储设备,主频相同情况下某些方面性能高点当然是很正常的事情。作为 RISC 的龙芯和 CISC (相对) 的奔腾,它们两个的流水线技术、指令集、内存访问基本不同,可以说没有什么可比性。但是为什么连用户手册里龙芯都是拿自己和奔腾系列比较呢,而且只比主频?显然是看起来好看,就像很多公司发布 CPU 都会专门找测试集合一样,这样能忽悠人。

我不相信龙芯的开发人员会真拿与奔腾系列的参数比较当事儿。但很显然的是,中科院、科技部和国家领导们希望它与奔腾比,因为砸下了那么多钱却只看到和一个自己都没有听说过的芯片比性能,谁爽啊?也没办法跟上头交代啊!中国老百姓也希望它与奔腾比,因为是人都知道奔3奔4,你说别的咱老百姓也不懂啊。就拿算是精英阶层的大学生们来说,不知道 PSP,iPod 是什么东西的大概没几个,但知道 PSP 用的是两块 MIPS CPU, 知道 iPod 用的是 PortalPlayer(NVIDIA now),nano 用的是 ARM9, shuffle 用的是 SigmaTel STMP 的有几个,听说过这几个名词的又有几个?龙芯相关公司也希望它跟奔腾比,因为总是要糊弄老百姓的,让科研人员和媒体忽悠一下比自己忽悠效果好多了。

还有一句中国的科研机构经常挂在嘴边的话:"拥有全部自主知识产权。"这句话说起来很有气势,但做起来有那么容易吗?像龙芯,采用了多少 MIPS 架构的东西,连指令集都那么的相似,我不懂这些方面知识产权保护的方式和内容,但说龙芯拥有全部自主知识产权,我不信。就像中国的麒麟操作系统一样,你是改的别人的内核,在宣传中说"该系统已通过自由标准组织Linux标准基认证"的同时还说拥有自主知识产权,真当老百姓是傻子啊。

可以这样说,如果不使用 Linux,基本上没有亲切了解龙芯电脑的机会,因为龙芯上现在只能跑 Linux,而且我想,龙芯在可以预见的时间内,基本不可能赢得 Windows 的支持,就算是 Linux,它也只是支持一小部分。所以,龙芯的存在,和老百姓的 PC 没有太大关系,龙芯的市场也只能是在嵌入式和服务器领域,很难进入桌面市场。但是,龙芯的存在,给了中国一个机会,在处理器市场上竞争的机会,谁知道未来是什么样呢,别管手中的东西是好是坏,总比从敌人那里拿来的用着顺手。只是很难那,计算所的老师都说,想达到 Intel 的水平,那得至少 20 个计算所去做,还得国家鼎力支持。龙芯能做的现在的样子,很不容易了。只要别重蹈汉芯的覆辙,为了赢得国家和民众的支持,吹牛也吹点吧,只是别吹破了就行。我的同事有好多计算所出来的,有的还担过教职,他们对龙芯评价也很高,但都说,龙芯项目现在没多少真正厉害的人了,有能力的都跑国外了,看来龙芯的发展也并没有那么乐观。

呵呵,之所以聊龙芯的话题是因为好像公司下星期会来几个参与过龙芯项目组的计算所毕业生,忽然想起来了就扯点。毕竟算是中国芯片产业的希望啊,关注的人越多,才有可能变得越好。

Google Passed By

今天中午和 Sun 一起吃饭,回来的路上他问我,你不是想出国吗,我这有一个 US Google 的项目,不知道你感不感兴趣?要是做了的话想出国就很容易了。我一想有这等好事,赶紧问,什么项目啊?Sun 说,US Google 想找国内的一个老师和学生做一些 Search Engine 的研究,本来我想找清华的一个人,他已经有项目了,后来想找计算所的一个人,却不知道跑哪儿去了。反正这东西和我也没什么关系,如果你的导师做这个方向就可以给他让你跟着他做了,正好你也有机会参与。我只好非常无奈的说,我导师是做网络对抗理论与技术方向的,估计扯不上边。

唉,我要是读计算所就好了。

Life Pieces

忍了几天,又想写点东西了。论文初稿已近完成,这些天倒也充实,白天工作,晚上写论文。只是因为公司在装修一个硬件实验室,好几天吵吵地不行,不然大概已经完成,也不必为食言而发愁了。

刚看了一个新闻,什么 Google 又出拼音输入法,还为词库和什么狗纠缠不清。只可惜常用 Linux 系统,那个 EXE 在我电脑上也没甚用处。其实我对输入法要求相当低,只要能支持智能 ABC 的双拼规则,我就愿意使用。以前发现过一个紫光可以自定义双拼规则的,我把回忆到的智能 ABC 的所有双拼对应的键填进去,费了老半天劲了,结果发现紫光会让我的系统崩溃着玩,立马放弃了。自从用过了 Scim,在 Linux 下我再也不会选择别的输入法了。为什么呢?就因为 Scim 可以选择很多种双拼方案,而且非常友好地支持了智能 ABC 的双拼。从实践上来说,我甚至认为 Scim 比智能 ABC 做的还要好,因为它的词频记忆绝对比智能 ABC 的更智能。当然了,和王三表同志所弘扬的黑马输入法没法比,但是黑马支持智能 ABC 的双拼吗?如果黑马支持,我立马就去买套用。其实对于习惯于词输入的人来说,整句的词库并没多大意义,不过,说不定我会改变一下这个习惯。我很期待 Windows 的 Scim,但如果 Google 的输入法能像 Scim 一样,我也会把自己在 Win 下的首选改为它。其实选择输入法可不像葛优选手机一样,哪家人多选哪家,而是哪家符合自己习惯和需要就用哪家。从 N 年前养成的输入习惯到了现在,改起来有那么容易吗?

还是一个软件的问题。偶然看到孙燕姿又出了新专辑,心中痒痒地慌,又偶然看到心仪很久的魅族 M6 降价,心中又痒了一下,几痒几不痒就让我到村里搞了一台 4G 的,看着爱不释手啊。咱的耳朵不是金耳朵,硬件好不好也听不出来,不过我算是充分地认识到了魅族软件的垃圾,那是相当的垃圾啊!!!不知道魅族软件工程师是怎么想的,一插到 USB 上就屏蔽掉所有的按键,也只能怪我一直无所谓于所谓的"安全删除硬件"。直接把线从电脑上拔下来,然后发现所有按键依然被屏蔽,屏幕上依然显示"USB 连接中",NND 直到电耗完。怎一个变态逻辑了得???要不是咱想支持国产,而 iPod 又不支持 FM,我真后悔没买个 Nano,水 2G 才 900 。

又是一个软件的问题,不过是和软件工程师有关的问题(咳咳,我的意思是程序员)。天宝兄弟两天前在博客上发泄了一通,http://www.liongg.net/?p=104 ,大肆宣扬对某个国内知名 GIS 公司对待实习生方式的不满,一肚子苦水啊。看过一本书,好像叫什么 Extreme Programming xxxx ,里面谈到了如何能让团队成员高效率地开发程序,如何让团队成员有满足感。想想我能进现在的公司很幸运啊,虽然公司不大,但做的事情很厉害,员工也全都是精英,而且工作的氛围相当的好。怎么说呢,能有一种被别人重视的和需要感觉真的能让工作起来开心许多。我也和很多在北京工作的程序员交流过,能够有我现在这样的工作环境的还没有遇见过,尤其是在上地中关村产业园的那些小公司,我基本没留下什么好印象。所有的都是 N 多人坐一排,不准上网,不准做和程序无关的事,电脑没有光驱,USB 口被封掉,N 多人一个电话,天天加班没有加班费,工资很低,总之就是把员工当贼看待,当民工使唤。不知道像 Google 这样的公司是不是真如宣传中那样,反正微软和 IBM 除了有钱也不是什么太好的地方。唉,找到一个适合自己的公司也不易。反正啊,我在这也干的不错,也打算毕业以后马上来公司继续做事。经理昨天还问我,毕业以后什么打算啊?我说,毕业以后还想过来干,反正在家也没什么事做。经理说,好,等你毕业过来我们就不把你当 intern 了,当我们的正式员工对待。我就在琢磨,难道是在暗示我再来会加薪,那敢情好!^_^

不罗嗦了,赶紧把论文整完。

Out out out

想那帮兄弟了,最有机会玩的时候我却在异乡的异乡折腾,FFFF
决定了,五一回家过,过完回南京
发现最近很无聊,禁网几天,除了查资料收邮件不做其它事,我倒看看能不能忍住
Sun Chan 说颐和园的花很漂亮,有空得去看看
祝小力复试顺利,还有所有我认识的要在这几天痛苦的,上帝和菩萨保佑你们
罗嗦这么多,其实就想说我得有段时间不写了
bye

无常的际遇

今天小力姐来动物所复试,12 点半到的北京。两年多没见了,没觉得样子变很多,只不过见到老朋友有一种说不出的感觉。我还是比较喜欢那种与世无争自成一统的生活,对竞争虽然并不害怕,但很讨厌,因之也很讨厌考试,一次次地把人摆在十字路口。看到别人要受这种忐忑之苦,心中也是极度烦闷。又想起第一次去北大,坐上离开的公车时,看着老朋友远去的身影,对次日复试结果的不可知,难受至极。什么时候能再无此感觉啊?

上周天宝兄弟来地理所实习,正好在北航北面的郭林请他吃饭,吃完了顺路到来复试时候住的招待所看了看,拍了几张照片。虽然地方很差,不过,可以说是我的福地了。今天和小力分开后也顺便到动物所临近的鸟窝附近拍了几张照片,很累,不想再一张一张贴了,有兴趣看的点这里:http://picasaweb.google.com/solrex/RandomBeijingImage

blogspot 又被伟大的中国信息长城给封了,只好把 http://blog.solrex.cn 重定向到了 space,看来当初决定同时在两边发文还是明智的。我想有自己的独立空间了,其实配置 wordpress 根本不是问题,我在自己的主机上配置比较过很多博客,域名也有了,再买一个空间而已,只是我真的懒于去自己维护一个博客系统,现在仍然是,不过 GFW 真的是有点过分,有空了再考虑考虑吧。

低潮期,强颜欢笑中。

SVN you should know

SVN 是 Subversion 的缩写,一个开源的版本管理工具,类似于 CVS 和 Visual Studio 的 Source Safe。不过据它的作者称是因为忍受不了 CVS 的缺点所写的,可能会比 CVS 表现好一点,因为我只有在 check out 某些开源代码时候才会用到 CVS,并不经常,所以只是猜测。不过肯定是比 Source Safe 表现要好,因为两者的理念是不同的,Visual Source Safe 管理小型项目还可以,是不适合管理多用户的大项目的,再说,Source Safe 也只能在 VS 里面用,而 SVN 的客户端有 Linux 和 Window 的版本。顺便提一下的是,WIN 下有种最流行的 SVN 客户端就是集成在右键菜单的一个小乌龟,很有意思的。

SVN 有非常好的使用文档,相比其它的开源项目来说,SVN 的中文化也做的很好,有专门的中文站,可以搜一下。SVN book 介绍的相当全面,但是,读完那么长的文档也没有必要。我这里就介绍一些常用且是最常用到的命令(Linux 下,Win 下就不说了,都是 GUI 操作)。

建立版本库:svnadmin create /data/svnpool
这是指定版本库存放的位置,貌似必须是一个绝对路径,建立好以后里面会建立起一些配置和数据库的文件。

指定编辑器:export EDITOR=vim
因为每次的版本操作都要添加一些信息在 log 里,把 EDITOR 放在环境变量里可以使用自己熟悉的编辑器来编辑这些信息。这句话经常放在 .bashrc 里。

导入项目:svn import file:///data/svnpool
在当前目录下的所有目录和文件都会导入到版本库里。

列表查询:svn list file:///data/svnpool
一般情况下都要先查询一下某个目录存在不存在才去导出。

导出项目:svn co file:///data/svnpool/project
这时候会在当前目录下建立一个 project 的目录,里面存有 SVN 的信息。

更新项目:svn update
使当前目录下的所有文件和目录版本与版本库中保持一致。

查看不同:svn diff
查看当前目录下的所有文件和目录与版本库中有那些不同,也可以加上版本参数 -r revision1:revision2 查看两个版本有什么不同。

添加文件和目录到当前项目:svn add subdir/file
把当前目录下的 subdir/file 添加到当前目录对应的项目中去。

删除、移动或复制当前项目中的目录和文件: svn rm/mv/cp ...
把某个文件或目录更改名字、复制或从版本库中删除。

提交更改:svn commit
把更改后的文件提交到版本库中形成新的版本。

在初始导出和导入的时候,可能需要给出 URL,主要有几种格式,file:///, http://, svn://, svn+ssh://user@host。当项目已经导出时候,就不需要打路径名了,有可能需要密码,如果验证的话。

这些是最常用的命令,像其它的一些命令,比如 merge 之类的,用到时候再查 svn book 和 man page 也不晚。版本控制很有用的,比如自己平常写的代码,放到版本库里就比较好查询和撤销修改,而不用每次都保存个备份。而且增量修改时当代码发生错误时候可以很快定位更改在哪里,找到错误原因。其实所有文档都可以放在 SVN 库里的,只是某些文件类型不好做 diff 罢了。

Thesis And Others

(之所以在标题总包括英文,是因为我不喜欢 blogspot 把我的日志链接变成 blog-post_nn.html。)

最近写字很痛苦,像是强迫症一样,不想写,但养成的习惯又觉得不写少点什么,还是记下点东西好些。主要的原因是没有静心的时间和空闲,上班,下班,有时候周末也会来公司做些事,大概是无聊吧。本身也不是很喜欢闹腾的场景,在学校时候还有一群哥们在一起扯,现在基本无语了。除了工作的交流,一天没多少话,对于我这种话多的人,实在是一种痛苦。

论文算有眉目了,本来因为觉得 GDB 移植和数学没什么相关,而研究生读网络安全,想做一些密码学的东西,但吴老师说,既然做了很多工作,也比较深入了,就写 GDB 的移植和原理吧。后来在网上搜到一个上交大的计算机硕士发在国内一个叫《计算机工程》杂志的论文,讲的是 AS 的移植,人家硕士还发这种论文,我本科论文写个 GDB 移植看来也不是很掉价。工作已经完成了,而且完全是我自己做的,写下来基本没什么难度,我还顺便尝试一下用 SVN 来维护论文的版本,tex 文件也是文本,除了中文编码问题,和程序文件也没什么区别。

最近也比较忙,公司的两种芯片都是 Multi-Core 的 RISC CPU,老板一直想要一个支持多核的调试器,但是现在很多对多核的调试机理都是多个调试器对应多个核。我本来想用一种cheat的方法来实现专注于单核但可切换多核的功能,就是在 GDB 的角度来看是单核的,但实际上可以运行时切换到另外的核上。这个工作量应该不大,但这样会有一些问题,比如 break point 只能实现在一个核上。项目经理想得非常好,他希望 GDB 能 load 多套 symbol fie,而且能同时控制多个核。谈何容易啊,要能做那帮 GNU 的 MAINTAINER 们早就做了,有很多 mail 讨论这个问题的,但一直没有一个有效的机制来描述多核,因为多核的情况太复杂了,有各种各样的实现方式。不过具体到某种体系结构来说,并不是不可能实现的,IBM 的一个工程师就说他们实现了 SPU 和 PPC 的双核调试。GDB 是不可能根据某种特定情形修改自己的,它必须到有一种数据结构描述能够兼容大部分多核 CPU 时候才会更改自己现有的架构。我不知道这个 hacking 的工作我能不能做到,但恐怕在回学校前是做不完的了,只有等读研究生时候来北京再接着做了。现在正在疯狂地读代码中,移植的时候只需要考虑 back-end 的东西,像 symbol, breakpoint 啦根本不用管,这会儿也得看了。

也有一件很不爽的事,看到一个人在博客里理直气壮地说自己从来不给应聘者回拒绝信,而且还非常鄙视应届生。唉,还是 JavaEye 的资深会员,以前 JavaEye 的资深会员在我心中是多崇高的地位啊,现在看来某些人也就 just so so。而且他在 JavaEye 的博客上的评论基本上一片赞成声调,我不知道是不是我错了,难道出于礼貌回一封格式固定的拒绝信就那么难吗?难道非得让应聘者享受等待的痛苦就那么让人开心吗?JavaEye 上基本上都是大老,这些大老们都会这么看待问题,那么中国的公司做不过别人也是可想而知了。其实从我的应聘实习生经历来看,虽然不多,但是大公司都会给拒信的,我收过 Unilever 的拒信,Google 的拒信,Microsoft 的拒信。小公司也有几个,不过小公司给拒信的真不多,我记得只有一家做 Java 报表的公司给过拒信。没收到拒信真的没什么,我会以为公司 HR 比较忙,或者邮件服务器有问题,或者其它种种问题,但是如果我知道一家公司的 HR 理直气壮地说我就懒得给你拒信,我真的是对这家公司很反感。三十年河东,三十年河西,公司和 HR 把自己当爷,总有一天会有人让你们自己拿自己当孙子的。一个人能力有问题没什么,但做人有问题就会让人厌恶了。

顺便再说一个趣事,我也当了回神童!公司的一个同事那天和我聊天,问我硕士论文什么题目,我就纳闷了,我是本科啊。结果知道他一直以为我是硕士,还告诉他同学,我们公司有一个20岁就硕士毕业的实习生,笑死我了。

貌似 Picasa 也防盗链

才发现把 picasa Web 相册中的 image location 放在 blogspot 是看得到的,在 spaces 里是看不到的,在百合也是看不到的,除非你在浏览器中打开过这些图片,浏览器中有缓存才可以看到。看来 google 也并不想别人分享它的流量,不过比百度好一点的是只是不显示图片而已,没有再给显示出来一个大叉,上面写着"这是百度的",NND。我不知道是不是我的环境问题,如果真的 picasa web album 有防盗链措施的话,我只有舍弃它了。不知道别的相册怎么样,已经注册了个 flickr,没时间用,有空再说吧。

在 space 上看不了图片的可以暂时先访问相册:http://picasaweb.google.com/solrex/RandomBeijingImage ,或者到 blogspot 的博客。