wpe7.jpg (11495 bytes)

我的征尘是星辰大海。。。

The dirt and dust from my pilgrimage forms oceans of stars...

-------当记忆的篇章变得零碎,当追忆的图片变得模糊,我们只能求助于数字存储的永恒的回忆

作者:黄教授

二〇〇五


一月二日 阴天

感谢女侠给我指出的错误,看来我有一次把两个演员弄混了,的确我辨认人的眼光有些问题,不论男女。《woman in red》里面的女主角和《魔戒》里面的精灵毫无关系,根本是不同时代的,不同类型的演员,我的pattern-recognition系统看来有问题,不过关于红裙子和玛丽莲梦露我是对的,这一点已经得到了权威的确认,这个当然是因为我再metro的招贴广告上看到后听人说的,所以比较有印象,为防止贻笑大方特此更正。顺祝所有的朋友新年快乐。


一月四日 晴间小雪

迟到的总结。

experience is priceless...


一月五日 回来的时候突然开始下雪了

Who can flip mode bit?


一月七日 阳光明媚,照得人心里暖洋洋的

今天去Loyola上统计课,自从学了离散数学之后,对于所有其他数学犹如一种了然于胸的感觉,好像练武之人练好了基本的内家功底之后,学习别门别派的武功有触类旁通的感觉。上完课后,在图书馆花了45分钟时间认真阅读英文版《毛泽东选集》第一卷,觉得有豁然开朗的体会,仔细捉摸主席的十大军事原则,与当前伊拉克前线的斗争加以对比,感觉冲突很多,看来这种恐怖主义成不了大气候。然则,十大原则与分析问题的方法对于当前执导《英雄无敌4》的斗争策略却有着非常现实的意义,应当继续在战争实践中学习战争规律。

今天终于决定放弃对于clique问题的继续摸索,这种注定失败的尝试是每一个computer science学生所必须经历的,否则,它应该没有资格拥有这个头衔。比如,全世界每一个学计算机的人都知道travel salesman's problem是没有polynomial的算法的,可是,我敢说几乎每一个真正学计算机的人都会尝试着画上几个小时,或者几天甚至更长时间来捉摸,否则,你永远不明白为什么这一类问题会有这样的难度,至少你会有一点点体会。有头脑的人并不会去尝试解决不可能解决的问题,但是这样的尝试会让你了解你不一定知道的问题。至少我的这个bitmatrix作为一个简单的工具达到了我当初的目标。在我没有明白matrix的本质的时候,我以为它是从数学家那里借来的宠物,因此,我把每个entry用long int来表达,当我真正明白了matrix是二元关系的表达之后,我开始抗议数学家把matrix改造的面目全非,因此,为还原其本来面目,我用bit来表达。当然,代码本身没有多少东西,无非是用stl里面的我心爱bitset加上一个整数模板参数来实现一个matrix。但从此以后我会有一个趁手的工具来表达图论等等的问题了。因此,虽然简单得不能再简单,委员会最终决定不再等新的内容就将其存档吧。

统计学一向是我所鄙视的一门经验主义为主,系统理论框架为辅的实用主义气息最浓的所谓科学,是仅次于我所深恶痛绝的最缺乏创造力的所谓科学的化学,生物学,医学。 stat250 开篇讲的就是statistical inference,说了一大通就只有一句话就可以概括,用我们所能够研究的模式来套现实的pattern意图有一个所谓的科学地解释,如同国内骗钱的金融分析家用一大队似是而非的图表骗一些无知的愚夫愚妇的钱的伎俩。说得更难听的就是主席所说的“削足适履”似的教条主义本本主义。碰巧这学期我要学习这两样比较愚昧的科学。

对于人类所能研究的问题,我常常想起中学物理课本对伽率略对匀加速运动的思考过程,首先,他想做的是研究最简单的变速运动--匀加速运动。但是这个“匀”字是相对于时间还是相对于距离要做第一部的取舍,他很快地否定了距离,因为,当时的数学工具部允许他做这样的研究,现在假如我们重新来做一次基本的观察,靠着一点点高等数学我们就知道这是一个比较容易的微分方程问题:suppose s=f(t):, distance s is some function of time t; v=g(s): velocity v is some function of distance s; a=h(v): acceleration a is some function of velocity v.

Since we assume the simplest model, then "a" is a constant, i.e. h(v) = k for some constant k. Then a=h(v)=v'(t)= g'(s)= g'(f(t))*f'(t)=k means derivative for t by chain rule. I haven't studied differential function, but the common knowledge tells me the simplest solution by guessing f(t) = e^t, plug in this e to the power to t  and we get: 

g'(e^t) = 1/e^t    changing variable of e^t to s, we get g'(s)=1/s which implies that if we assume the changing of velocity is constant with respect to its distance, then the acceleration with respect to time would be a function of distance s of reciprocal of s. Is it beautiful? But I highly suspect Galileo can solve this question at his times. The acceleration with respect to time would be much easier one. Does that remind you change of basis in linear algebra if we want to translate between different measuring system. (It is nonsense.)

 文学城上有个别人对于毛泽东在解放战争期间的战略决策有三大失策,我对此进行了驳斥,指出正如围棋中的大局与官子关系一样,很多人永远不可能成为战略家因为他们永远在局部计较一分一毫的得失,却看不到全局的胜负手。

今天重看《The Matrix》顺便查了一下字典,原来英语里面是有这个字的,deja vu,大约学英语的人可以用这个词来检验自己英语学到了什么水平,我觉得我学了这个词英语水平又进了一大步,哈哈,大言不惭,大耻不羞。顺便说一下,这个词意思是“似曾相识”,这样使用英语大约相当于汉语中的成语典故一类的妙用。


一月九日 天晴

昨晚看了一部Jane Fonda的老片子<Klute>这应该是男主人公的名字,一个私家侦探。这部片子比较有意思的是风格上很有希屈柯克的悬念片的意思,我直到结尾才明白这是一部侦探篇,因为从一开始的一个与纽约相隔遥远的美国内陆的一个生活刻板的研究员的神秘失踪为引子,揭示了大都市夜晚的另一面(The other side of night)---call girl的生活,Jane Fonda在影片里面更像一个线索,侦探Klute循着他的生活轨迹向人们展示了平常你不一定能看到的生活层面,人性中的弱点,黑暗,变异,其中的大量的反复的Jane Fonda的录音的重放,既是影片中影子人的内心阴暗面的揭示,又是call girl工作的如同示范手册般的文雅的表现。另一个比较有意思的的是气氛营造,相比起来悬念偏不等同于恐怖片,你不能刻意得让观众产生恐怖心理,但是你又要让观众有好奇心与不安定的感觉,夜半歌声通常产生恐怖与惊悸,但是电影处理的效果却让人产生的是好奇甚至美的感受,的确这种感受很难体会除非你看过电影。总的来说,我对Jane Fonda得好感多了一点点,因为,我以前只随便看过一部她扮演一个职业杀手的片子,非常的拙劣以至于让我认为她只是靠身体演戏的,并经这部片子里面还是有一点点演技的成分,尤其最后那个影子人给他放另一个call girl被虐待的录音时候她眼泪鼻涕具下场竟还是有一定感染力的,可以想象她应该回忆起同行的悲惨命运就是自己的未来,同时眼前这个貌似温文尔雅的上等人下一步要做的就是这样。

VC里面为了和unix兼容作了很多令人费解的东西,stat既是函数,又是结构,让我很困惑。


一月十日 阳光灿烂

今天偶然知道我其实很浅薄的

昨天去听一个化学系的入门讲座,实际上是教育本科生不要抄袭作弊的道德课。国外的大学对这方面非常的重视,plagiarism(就是抄袭)实际上是一个学术界的大问题,任何社会,任何时代都是阻碍科学文化进步的大问题,这种道德教育的预防针在刚进大学的时候就注射是最合时宜,这里的确是这样。我对这个问题不想多说,对于演讲所用得很多警句很有兴趣,(其实这个本身就由plagiarism的难以解决的矛盾,即怎样划定的问题,和是否能够自觉遵守的问题,和怎样监督的问题。)比如,

“抄袭一个人的东西叫抄袭,抄袭很多人的东西就叫做研究了。”

又比如,“亚当的优势就在于他所想到的好的句子一定都不用担心是别人先想到的了。”

“你的东西里面原创的部分不好,好的部分不是原创的”。(英语里面original既是原创的意思又是有创造的意思,因此,其中的双关语非常的奥妙。)

其实,这些有意思的警句我应该去引用英文原文才能让人体会其中的奥妙,但如果能够让不懂英文的人也能体会西方人思想的精妙也许是一个更有意义的事情。正如另一句,大意是糟糕的记忆力让一个人让一个人成为了思想家,因为,一个人有超强的记忆力自然能够完整地记住他所读过的东西,自然不会认为他错误地认为他所用的东西是自己在那里读过的,至少他可以加上注释,因此他是不用担心plagiarism的问题的;而一个人有着非常糟糕的记忆力也不用担心plagiarism,因为他从来都记不住自己读过得别人的东西自然也不用担心他所想到的是别人的成果了;只有记忆力不好也不坏的凡人才要处处小心翼翼担心会掉入plagiarism的泥坑,因为,凡人能够靠自己的头脑想出来的问题应该不多,大多数是看过别人的成果头脑中剩余的一点印象。


一月十三日 临辰爬起来下载Norton

我的Norton antivirus到期了,不小心删除了,又要重新下载,阴差阳错地下载的时候被恶意地3721这个混账王八蛋钻到了我的浏览器里面。没办法卸载,我一怒之下把ie也卸载了,但还是无法删除3721的一大堆dll,在process manager里面也找不到无法关闭,搏斗了近一个小时才在注册表里把所有的3721的项目删除才最后重启删除。


一月十五日 今天是什么天气?(昨天?)晴朗的天空下着雪。。。

其实我实在想昨天是什么天气,因为已经过了12点了。练习unix下的编程。

computer architecture《计算机结构》里面有一个经典的论断:平均起来说一个程序中只有20%部分的代码在80%的时间里在运行。这个论断对于人类也同样适用:对社会中80%的人来说,他们的头脑只在20%的时间里运行他们全部知识与能力的20%。我时时刻刻都害怕自己沦为那80%中的一员。

有多少人能自觉地意识到操作系统里面根本没有copy这么一个系统函数?这是一个非常令人难以相信的论断,以至于我当初自己也在反复之间当我被别人反驳的时候,但是现在我在unix系统命令(准确地说是system call,决不是什么命令行的小孩子玩意。)里面就是找不到,只好自己写一个,因为很简单的,我的实现唯一不同的是我不允许目标函数存在,这当然不是很妥当当我完成之后才意识到,不过,这不过就是open里面的一个flag的差别,很容易改变的。

晴朗的天空下着雪。。。这好像是一首很古老的歌,恰好这就是蒙特利尔。


一月十七日 天空飘着似有似无的小雪花

今天买了5月1日经上海回厦门的机票,预计将在5月2日当地时间下午到达上海,如果各界同胞希望劫机或者宴请的请提前预约,不过鄙人不打算在机场发表任何书面讲话。此次访问中国的目的有以下几点:1。进一步加深中加两国人民的友谊。2。访问时间正值来加拿大整整三年,准备在申请入籍前最后看一下中国。3。学了两年多感觉比较累准备回国调整身心。4。现在中国经济技术发展很快,希望回国感受一下发展的潮流,为今后的学习提供一些实践的指导方向。5。经过两年的学习感觉内功有小成,希望闯荡一下江湖以武会友切磋一下武功。6。想有一个良好的环境尝试一个project,当然现在还不成熟,不便透露。 7。希望游历一下中国的名山大川,读万卷书不成希望能走万里路。8。去年Quebec政策改变了,夏天读书太少领不到钱,为了不给加拿大政府太难过,决定回国四个月节约费用。

今天感觉像刘玄德一样脾肉复生,因此马上去学校健身房登记了一个25块钱的锻炼计划,再回来的地铁里给了一个一只胳膊的自由职业者一块钱的硬币。


一月十八日 可能是今年最冷的一天了

早上七点半去上课,晚上十点半回来,因为Albert大虾肯上传Diablo2,因此特别给他的小题目安排在puzzle里面,好久没有出题目了,这个题目的水平是友情赞助。

写了一个简单的二进制表示法,结果在unsigned int这里被unix困扰了半天,才想明白atoi本身返回的signed int,因此,我无论如何没有办法从命令行参数传入最大的unsigned int,即0xffffffff。


一月二十一日 晴朗

I cannot observe the strange behaviour of "readlink" again.


一月二十三日 阳光普照

很久没有接受过这样的编程挑战了,comp444的第一个作业出来了,据说还是比较简单的,因为每一个小的功能都是简单的系统命令的应用,但是把他们集合起来就是一个小工程了,我为了系统地解决问题,尝试着模拟实现c-library里面高级的带buffer的文件读写函数,否则,全部在系统命令上执行代码太长乐,对于搜索关键字,我又想像写scanner那样定义一个DFA。不过昨天起床起得太早了,最后再debug的时候经常睡着了。没办法只好去理发,下午去健身房,晚上炖了一锅牛肉汤,本来买的是做酱牛肉的牛肉,结果又不自觉地改成了炖牛肉,实际上我还是不知道怎么做酱牛肉。


一月二十四日 老天爷不经意间就又开始下雪了

在Linux下调试指针错误实在是一种痛苦的经历。我不知道是否会有人像我这样为了五分钟的减少去另外划一个小时的工作。当然,这种五分钟的提高时以后每一次都会减少的,这就是系统程序员的习惯吧?我居然已经自封为系统程序员了,不过本人专业的方向就是系统软件。(还是软件系统?这个问题我两年也没有搞清楚。)花了一个多上午写了一个简单的动态数组,这种东西我已经写了不下三四次了,没有什么难度的东西了。


一月三十日 赶快做个备份,我差一点把自己的源文件给改掉了

comp444的作业还是有一点的难度了。还有一个有趣的化简DFA的算法


二月三日 晴朗

这两天太忙了,好几个作业要赶着交,同时有两个期中考试。不破不立难道不对吗?

我在concordia的悲惨生活。


二月七日 阴天

学习不忙的结果就是看了不少的电影。《亚历山大大帝》看完后再回过头来看《discovery》的版本,你会觉得这个电影导演实在是不怎么样,基本就是以纪录片左脚本来拍摄的,剧情散乱主体模糊,似乎为一想告诉你的就是亚历山大之所以建立了不世的功勋完全是因为他的杀父嫌疑让他不敢返回马其顿,因此成就了他闯荡天涯的成就,和《Troy》一样又是一个双性恋英雄的征服历史,这似乎是当前北美社会的有一种思想潮流,就是同性恋被社会的正式承认,打开电视,翻开报纸,铺天盖地的是关于同性恋结婚的争论,这一点有一点点甚嚣尘上,的确,我们这个社会发展到这个阶段自然繁殖已经不再是家庭的主要职能,这一点当然应该在社会结构上得到反映,这不奇怪。另外几部老片子可以说是比中国电影还要幼稚一些,比如通灵术披上计算机的科学外衣,让我觉得这是对机器的亵渎。温室效应被归咎于外星人的阴谋,让我想起了《Dr.Strangle Love》里面那个臆想狂将军的经典自述:How can I sit back and allow communist's subversion, communist's conversion and international communism conspiracy to contaminate our precious bodily fluid?  So, 这位将军决定反击,派出了他麾下的整个北约组织的所有战略轰炸机去消灭commies,结果当然就是突然间,“这个世界清静了”,借用一下我一向认为很naive的中国新生代所崇拜的经典语句。这种冷战情节在众多的科幻电影里或多或少的有所反映,在《I married an alien monster》里面我已经说过,地球成为外星人与其土著居民,就是我们地球人了,争夺的目标,通过地球人的领袖种族,即美丽坚,得卓越斗争我们地球人获得了又一次的解放,这正是布什在他的战争檄文中的思想一样:让民主自由与基督之光传遍异教徒的世界。外星人入侵的方式有一点大同小异,不外是披上我们人类的画皮混杂在我们中间并且窃取重要的职位,比如想象力丰富的可能会怀疑全球首富是不是外星人?“它”们左右我们社会的发展,垄断我们的资源等等。另一类科幻片似乎总是在担忧我们的未来,比如我们这个如蝗虫般贪婪的种族在短短的一两个世纪内就用尽了地球几千万年积攒的化石能源,有一部电影用类似于George Orwell的《1984》似的阴暗色调描绘了人类在未来与饥饿作斗争的悲惨生活,那时候,我们连代用食品都耗尽了只好开始使用直接从尸体进行简单转化的食品,虽然我觉得我们每天吃的动物尸体和我们自身的尸体在组织细胞这一层没有本质的区别,可是,电影中的主人公和大多数的观众一样认为这是一场悲剧,至少难以下咽。我想列举的这些的目的是,大多数国人只看到少数好莱坞创造了票房纪录的电影,然后对比国产电影从而得出国产电影一无是处的结论,实际上好莱坞每年拍的片子不计其数(对我来说就是看不过来,当然我看的都是几十年前的老片子,我没有钱去装新电影的cable),不乏刚从电影学院毕业的小儿科。

关于miss sunny的问题,我想了很久还是只开了个头,昨天承蒙胡大虾盛情邀请我去YMCA去健身,去的路上想到了一个dynamic context的问题,就是我们在讨论的集合是一个动态增长的过程,比如我们不断发现原有状态的组合成的新的状态,这样我们原有的状态的集合运算可能就要修正,比如,union, intersection, minus。可是怎么解决呢,用类似动态数组的方式更新context必须有一个参数就是当前的context的范围,这仅仅是一个编程的想法还是一个更general的思想?YMCA的设备实在是太好了,相比之下Concordia得可怜的gym好像caveman活动身体的石头墩子。


二月八日 今天据说是农历新年

过不过年对我们加拿大的劳动人民来说有什么区别呢?在地铁上,汽车上想啊想,突然明白我昨天想得不对,根本不用什么动态的context。实际上,用一个bitset来表达组合就可以了,这个可以看作是每个状态的ID,并不一定要把bitset和它恰好能够表达的二进制数字联系起来。不过,我还是不太愿意动手去写,一则越来越懒,二则还是有些问题觉得不妥,是什么也说不清。

How to convince myself that the parent and child process are sharing the same file status table?


二月九日

今天已经是新年了?

总参作训处机要科《绝密:台海作战的方向在东方》


二月十日 又下大雪了

有一部老片子我推荐你看,英文名字《Ben-hur》我不知道中文怎么翻译,这也是主人公的名字,它是公元一世纪,(应该是公元前一世纪吧?因为其中也穿插着基督受难,总之是和基督同时代的故事。)以色列的一个贵族,因为布满罗马帝国的统治,和与自己从小亲如手足的罗马执政官发生了种种恩恩怨怨,类似于《基督山伯爵》的风格,颇有传奇的色彩,其中罗马帝国的辉煌表现得淋漓尽致,虽然是五十年代拍的老片子不可能如今天的好莱坞用电脑作出宏伟的战争场景,可是对于人物性格的刻画,尤其是种种细微的细节描写可以说是登峰造极。这是一个信念与信仰的故事,同时也是一个仇恨与宽恕的史诗,是一个奇迹与传奇的画卷,也是一个描绘着希望与绝望的走马灯。我觉得比我最近看的《troy》与《亚历山大》强多了,不愧是11项奥斯卡奖的获奖者。


二月十二日 雪停了窗外一片银白,今天计划包饺子

关于Linux里面的signal,老师在上课演示的时候出现了一个奇怪的现象,当我再次重新做的时候怎么也没有了,不知道是不是因为solaris和Linux不同的原因,实际上我也不知道orchid到底是什么系统,也许是solaris吧?反正sunset.cs大家都知道是unix,alamanni.encs 是linux同样的代码编译运行都不一样,甚至不能编译,这就是unix及其变种的最大优点和缺点,优点是各自不兼容软硬件厂商可以多赚一份钱,市场互不干涉。缺点就是各自不兼容软硬件厂商可以多赚一份钱,市场互不干涉!我没有打错字,现在也没有睡觉,我说的意思就是一件事对某些人是优点,对另一些人就是缺点,比如消费者和生产者。在声明函数指针的时候,要特别小心,尤其是他的返回值也是一个函数的话。又花了两个多小时才成功声明了一个函数指针类型,这个函数指针的返回类型是一个函数,同时他的参数里面也有一个函数指针。我承认我对C的语法,(就是编译器用的语法)感到很困惑,当你声明的函数指针类型的返回类型是一个函数的时候,这个返回类型你要写在哪里?比如能够这样写吗?typedef void(*)(int) (*MyType)();当然不行,因为写高级语言的时候习惯了类型在前,可是遇到函数就不行了,他只认得嵌套的格式,可是即使是你写了嵌套的格式,在类型声明的时候,编译器认为你在声明函数指针变量而不是类型声明:typedef void((*MyType)(int))(int); 编译器总是报错说 error: `MyType' declared as function returning a function,我对于此百思不得其解,也许这是编译器的一个极限,最后我只能分步骤进行typedef,结果就是typedef void (*HandleType)(int);

typedef HandleType (*FuncPtr1)(int, HandleType);这个问题实在是难以理解,或许我哪里错了?有那位大虾可以指教我一下?另一个很有意思的小的结果就是,我这个简单的对于signal函数的想象试验让我看到了数组插入的另一种代码的表示,这个实在是小冬冬了。

哈哈,我终于算是明白了一点,看,typedef void (*((*MyType)(int, void(*)(int)) ) )(int);
这样就可以了,因为再C里面括号不像在C++里面那么随意,也就是说C里面的类型检查也许非常的强,从另一个角度讲就是不那么灵活,对于程序员来说要困难一些,我想应该是这样的首先,你要告诉编译器返回类型void(*)(int),注意(*)对编译器来说就是函数指针的意思,然后你要把你的整个定义用括号包起来,同时里面也是有函数指针的,第一个就是你的类型MyType,所以,你也要用挂号(*MyType)让编译器知道这是一个函数指针类型,其次是参数这个就比较简单了,在C里面括号的应用一定要小心小心再小心!!!我想这两个是完全不同的东西:typedef void*(MyType)(int);   typedef void (*MyType)(int);

看下面的例子:typedef void* (myType1)(int);       typedef void (*myType2)(int);

请注意,这两个声明紧紧差别在括号的位置,意义是天差地别。一个是声明了一个函数(注意不是函数指针类型)返回类型是void*,另一个是声明了函数指针没有返回值。

怎么用呢?比如我们在声明两个函数:void handler3(int num);    void* test(int num);
myType1* p1;
myType2 p2;

p2=handler3;
p2(4);
p1=&test;
*p1(5);

这里是两个函数的实现和运行结果:

void* test(int num)
{
printf("test return void* and num=%d\n", num);
return NULL;
}
void handler3(int num)
{
printf("This is handler 3 and handling %d\n", num);
}
 

[qingz_hu@alamanni ~/mywork] % ./funcptr.exe
This is handler 3 and handling 4
test return void* and num=5
这个例子说明了括号的重要,我要牢记在心。


二月十四日 无雪

我把comp444的问题简单整理了一下,这门课非常的好。关于library的地址空间我和老师有不同的意见。


二月十五日 阴晴?

今天我累死了,从早上七点半上学回到家都十点半多了,最后Hina给我单独辅导了将近两个小时,我都快饿晕了,两眼看着汇编都在冒金星。非常感谢这个曾经教过我的老师,我对他的看法也彻底改变了,他确实是一个不错的老师,他就像他自己说得他痛恨让学生fail,或者drop。如果不是他这样一步一步把一个高级语言的loop拆解成汇编然后再重组,我是不可能理解并行处理是这样依靠loop unrolling来实现的,其中的data dependence依靠冲命名寄存器被去除了,依靠重组指令,我们把相互依赖的指令分到不同的组里面,依靠加长循环体我们减少了跳转的指令个数,最后我终于学到了一点基本的依靠软件实现pipelining的概念。下午在实验室泡了一个下午,明白了几个问题,sigsuspense实际上是把block和sleep结合成一个atomic的syscall。SIGKILL,SIGSTOP是两个不可以BLOCK也不可以重新设定signal handler的信号。passwd是一个程序可以访问passwd文件和shadow文件去改变和查询密码,正因为如此,他的setuid bit必须设定否则别的用户没有办法执行它,因为passwd,shadow文件时root用户创建的,游人可以在一个root级别的shell script执行的时候把她中断,从而取得root的用户权限。login是直接从init process fork出来的子进程,用户登陆成功以后,由login process用fork, exec创建一个用户默认的shell,这个信息当然是从passwd文件独到的。


二月十八日 风雪交加

今天是春假前的最后一天,下午做完化学实验和同组的欧亚同学去吃越南河粉。回来后玩了一会儿Grogono教授的3D动画库demo。真是好神奇啊,夏天我一定要好好玩一玩动画。闲下来就看看《Noting Hill》,我想一个人的思想实在是难以捉摸的一个东西,我现在很难想象我当时为什么会去买这部电影,当然,这种浪漫轻松的东西始终是让人快乐的。早上玩了一下signal,我认为在signal的handler里面如果睡着了的话,i.e. pause(),你永远不会再醒过来。不熟悉linux/unix的读者一定会以为我有再打什么诳语,其实,很简单的。看DVD时候想起了我在TAV里面从那对夫妇身上学到的一点点东西,丈夫教了我一句法语:C'est la vie,妻子教了我一句英语:everyone can contribute one word。


二月二十三日 挺冷的,有零下二十几度吧?

据说今天是元宵节,晚上去春明家吃火锅,吃到了黑芝麻馅的元宵,真好吃。席间发现春明同学理论水平就是比我高,比如听到他说要批判妄自菲薄自我的“历史虚无主义”倾向,以及所谓成王败寇的“社会达尔文主义”,这些名词我都是第一次听说,很有意思,看来读书与不读书还是有区别的。今天,在去吃饭的路上想明白了一个简单的道理:Linux的信号最好适用于两两之间的简单通讯,而且最好是用于单向,想明白这么个简单的道理,就知道我当初的设想有些是不妥的,我打算明天再改。signal里面的问题其实挺多的,这个程序远比我想得复杂,虽然我在第一天就写完了框架,实际上能做到完全的bullet-proof时的安全的同步并不容易。比如这个简单的小问题我就没有完全明白。
whatevergoes.htm#signalCount


二月二十六日 应该不算冷吧?只有零下十几度不到

临辰起来把我的signal程序简单整理总结了一下,这种程序一点也来不得马虎,因为单进程的程序里面如果不准确有时候至多不过是效率低一些,对于初学者来说算不得大错,可是这种多进程,夹杂着信号处理的程序就很不一样了。比如这就是典型的错误:

while (!gameOver)
	   pause();

这种随手写出来的code经不起一两百个进程的检验,很快你就会发现程序跑起来有时候队,有时候不对。computer science最大的好处与最大的坏处就是没有多少偶然性可言,这里的偶然性指的是侥幸,比如远古时代巫师祈雨,有时候祈祷了很多天还不下雨,作为巫师你可以蒙骗渔夫渔妇说龙王不在家,这在英语里面叫做bullshit。你应该明白我所说得好处与坏处是应人而异的。Computer science另一个好处与坏处在于编译器面前人人平等,不论你是多高的权威,多年的经验,你还是要接受编译器的检验,而编译器从某种意义上来说是一个大家公认的标准,你如果实在不愿意遵循,那么你可以选择别的编译器(或者解释器)或者干脆自己写一个,否则你就必须要遵循这种游戏规则。在计算机的世界里很少有所谓的权威经济学家的预言之类天大的笑话,0就是0,1就是1,来不得侥幸。而软件领域里又更是平民化的一个天地,因为,玩硬件的人还可以借助大型设备的堡垒躲过大众的雪亮的眼光而高高在上,软件的威力就在于没有什么真正意义上的垄断,只要你有能力,linux的源代码都在那里,你可以去读啊,当然有多少人去看,我实在不敢说,至少我是懒得看,一则是还没有逼到那个份上,二则功力未到读起来事倍功半。这些应该是我当初尝试看delphi source code得到的唯一的收获,在没有对windows编程甚至于对计算机的基本常识有基本的了解的时候,一个人的信心是最强的,这一点在众多的BBS上你随手就可以看得到。人类对于一无所知的领域要么不屑一顾,要么奉若神明。我也是一样。


二月二十八日 晴天

 
自朱镕基下台之后,中共在经济上再无任何作为,温家宝真是一个家宝,十足的守业奴,作为总理大臣不思进取,不去考虑国计民生的三年乃至十年二十年的大事,整天抓那些鸡毛蒜皮的小事,还表现的一幅忙忙碌碌的样子,国家让这些人治理迟早是要亡掉的。弊政不除,难道还要等到下一任?从来改革的震荡都是难免的,不再经济上有积蓄的时候做,难道要等到上穷水尽的时候?那样往往都是民怨沸腾导致分崩离析的时刻,好的主张,理性的决策也不被渔民百姓所接受的。
李鹏是这样的一个老官吏,今天温家宝又是一个守业奴,毫无主张,毫无远虑,只配在三国游戏里面去治水,除此之外一无所长。一个总理不是一个事务处理的总管理员,(这句话我是从周恩来说的一句话翻译而来的,其实我对这个人并无好感,整天唯唯诺诺,除了处理人事关系上老于世故,圆滑五比以外,不是一个治国的栋梁,当时76年的天安门事件实在是老百姓找不到一个比他更好的寄托希望的对象了,这真是民族的大不幸,可悲。共产党自马上的天下以后,治国之道从来没有入门,任用的人马也只能是从从前的马上将军里面挑选,这也许是毛泽东所忧虑的一件事,从这个意义上讲,文革革掉一批老军头是完全必要的,但是这其中的原委岂能和黎民百姓明说?)不然的话,总理这个位置岂不是人人可以当得了?不一定要自己对所有的政策都有远见,当应该自己对问题要有远见,对问题的解决方案的可行性有远见,像今天中国这样的发展模式和现状,我记得我在80年代看《参考消息》时候就在日本的经济学家的预测里面找到了,难道今天中国的总理不应当为十年后,二十年后的中国做准备?要么就是不知道怎么办,要么就是人为十年后,二十年后的中国是不可预测的,后一种情况是极其可怕的,因为,不可预测的种种情况里面有一种是这个主体已经不复存在了。
今天是交作业的最后一天,实在没有办法只好开始读书,讲老实话我对硬件实现部分从来就不是很热心,一则非常的繁琐,往往熟知细节的碌碌之辈可以号称专家,真是聪明人被傻瓜骗,我不是说我是聪明人,可是我也能明白一个傻瓜出的谜语可以骗到一箩筐的聪明人的道理;二则干这种工作的人都是铮银子的人,我犯不着学这些,不过呢,看着看这也明白了不少东西,当然我能看明白的书大部分都是我原来就大概明白的,我基本上看不明白我原本就一点不懂得书,这一点我早就知道,可是就是不明白为什么?这就是我不喜欢读书的原因:先入为主。既然我都大概明白了,我还看书干什么?既然我不明白的看书也还是不明白,那又何必看书?真是一个逻辑的悖论。


三月三日 阳光无比灿烂以至于有吹面不寒杨柳风的感觉

Some discoveries about pipe.

有时候知觉最不可靠,有时候知觉比感觉来的正确。英文里面的intuition我不知道是否能够对应成中文的直觉,但是,总的来说贬义的成分多些吧,今天上可笑的化学课,我突然明白了以前中学读的课外书里面的关于相对论的解释,的确“尺缩钟慢”这些世俗的对于相对论的理解并不能说明大多数人真正能够认识到其中的本质,我想我是明白了其中的本来意义,当时看书所有的道理都似乎看明白了,可是最后还是不理解,不过当时的记忆力很好,我现在还能记得大概。其实说白了很简单,其中的道理甚至和三棱透镜能够析出彩虹一样的简单,只不过我并没有再多想一层。在回答光为什么会弯曲之前如果你能够像明白什么是直线,人是怎样认定直线的,你也许就明白了多半。在回答时间是否会真的变慢之前,现自己问自己我们怎么知道时间的,也许你又可以明白大半了,我现在非常深的体会到人是多么的先入为主,多么的想当然,而这种能力既是人在大脑运算速度远不及计算机的情况下显得比电脑聪明的主要原因,又是丧失大量发现与认识世界本来面目的机会的最大祸根。客观世界从来不懂什么叫直线,人看到根据经验自己认定的最短路径便成了直线。客观世界本无时间,人认定看到的就是即时发生的,便以此认定了什么叫同时。还要在解释吗?


三月四日 天还没亮

昨天关于相对论的胡言乱语你可以忽略不计,我想这就是科学,不管你头脑中的信念有多么令人信服,一旦落到纸上,经不起一步步的推导就只能是错的。我并不是说我想得全都是错的,只是有些细节不让我相信,好像我的直觉是多普勒效应吧。其实我更想说的是中国文化的糟粕就在于不求甚解,或者说无法求甚解,翻开中国古书从来讲的都是空泛的理论概念,个人想法,最好的贴近实际的也不过是记录宗师言行,或者游记,至少我接触的就是这些,在中国纸上的符号推理一直没有诞生过,这或许和中国使用象形文字有关,如果是真的,中华文化的糟粕看来就是象形文字了,过于费事费时的文字书写抑制了人们符号计算(symbol computation)的欲望,以至于中国人思维从来做不到严密与精细。关于象形文字与拼音文字的优劣的讨论,我想应该是由一个定论的,从语言发展史上看,拼音文字是发展的较高阶段,因为他更抽象,象形文字时期发展的一个早期阶段,根据这一点,中华文化始终没有走出进一步抽象的文字发展阶段,同时由于周围都是发展更为落后的文化,以至于无从引进更先进的文字,结果导致近代科学的萌芽至今都很难在中国落叶生根。

SIGPIPE is necessary.


三月五日 阳光很好的

SIGPIPE is only available for good-habited programmer.

GDB is magic!

Dr. Probst确实可以是一个很好的哲学家,我读了他的一点讲义,觉得他看问题很有高屋建瓴的味道,我以前对他抬不尊敬了,好的教授一般是不屑于编程的,我真是很后悔,在毕业前我一定要写信去向他道歉。实际上当我重新读我当时写得email问的问题,当阅读速度是60words/min的正常浏览速度下,我根本不可能明白我自己的问题,而我现在一点也不对教授当时的一般性概念性的解释有什么不满的:人不可能如编译器那样的速度理解这种多进程的问题,这太难了!更何况假如我初在他的位置每天不知道有多少学生写来错误百出的愚蠢问题,我会非常仔细地理解每一个错误吗?我当时太肤浅了。因此,我花了一些时间把字里行间不尊敬的字眼删去了。


三月六日 阴天

昨天晚上去看了一场电影《blade--trinity》花了一个dollar。总的来说还算值得吧?不过,marvel这个公司拍的电影过于追求所谓的cool以便迎合年龄层在10-30岁的观众,这个阶层的观众主要看你的画面是否绚丽,动作服饰是否流行个性,杀人是否动作优美并且有所谓的语言幽默的特点,当然对他们来说的幽默我常常不知所云,这个年龄的语言哪怕是中文我都会费解别说是英文了,我相信他们也不大喜欢我所欣赏的幽默吧?在去的路上,我和小温侯讨论了gdb的问题,其中一个想法就是gdb能够跟踪是因为源代码放在可知性文件里面了,试验了一下果然是的,这样无论原码是汇编码还是c代码,理论上gdb都可以去跟踪,即便你不使用gdb编译的,这就解释了为什么DDD是汇编器也是调用gdb来跟踪的原因。

昨晚和早上一直在学习怎样使用cvs,第一,在.cshrc文件里面加入路径参数setenv CVSROOT yourcvsrootdir。第二,转到你要import的代码目录cvs import  dir-in-cvs myname releasename。第三,使用的时候cvs checkout myname。目前就学到这里。


三月七日 纷纷扬扬的下起了雪

今天看了一段老江当初在香港答记者问的录像,我简直无地自容,一个飞扬跋扈的小人,一个窜上跳下的小丑,真是难以想象一个大国之君竟如此的没有气度修养,不知不觉我们大家也都学会了他的口头禅,“你们太young了,too simple,sometimes naive。”让我总是想起来围城里面的张买办说的夹杂着英语的汉语,这每句话里面的英文字仿佛牙缝里面的肉屑,并非必要只是说明吃过肉向人们展示而已。春秋战国时期赵国国君在于强秦会面的时候受不了秦王的淫威被迫给秦王弹琴(就是鼓瑟了),蔺相如都会认为是奇耻大辱不惜血溅三尺逼秦王为赵王击缶以给赵国找回尊严,可是,当今我们这位皇上居然在出访的时候主动又唱又跳,为人弹钢琴,搔首弄姿,让十几亿人民羞愧难当。就冲着一点,我决定在回国前申请放弃中国国籍加入加拿大公民,当然我知道这是个借口了。哈哈。。。

晚上又重新看了一遍在国内的禁片《活着》,原来我一向不喜欢巩俐,但这部片子冲这葛优的面子,就对她肯定一次吧。我很难想象这样的片子居然会被禁止发行,共产党看来是有亡国之兆了,从头到尾我没有看到一个坏人,也没有听到一句主人公抱怨社会,诅咒共产党的话,我甚至可以深深感受到主人公发自内心深处感谢新社会的深沉的声音:“一个普通小老百姓唯一的要求仅仅是要活着。”也许审查的官员认为这种要求对于普通老百姓来说在解放三十年间是一种过于奢侈的要求?


三月八日 阴天

在命令行里可以调用bash shell:sh -c "ls -l"。不过我想不出来有什么好处。

我总是犯同样的错误!经过dup2使得pipe的一个write端指向STDOUT_FILENO之后理论上说不论我调用write或者使file library德fputs之类应该得到同样的结果,对吧?可是我总是看不到预期的书橱,因此我开始怀疑这怀疑那,还写帖子去问老师,结果最后发现又是老毛病:忘了fflush(stdout)。这个问题我在看书上的例子的时候就注意到了,可是结果还是又让我花了大半天跟踪怀疑!!!要记住了!!!

今天终于大致明白怎样用cvs了,总之我总是出错的原因很有可能是程序本身的问题,我应当另换一个目录否则会有冲突。1。CVSROOT下的每一个目录都被当作使MODULE, 2。export主要是为了取得一个干净的版本,否则应该要用update。3。commit和diff都可以带一个文件名参数,其中版本号参数是-r1.2,4。如果要取得某一个版本用update -r1.2。这就够用了吧?加一个文件的时候仅要add还要commit。困死了要察看的话就用log命令。


三月九日 天晴

Concordia的学生会打算相应其他大学的行动来罢课,有那么几十个学生聚集在教学楼每口示威,大街的两头部署了警察和救护车,真是好笑。我买了不到三个月的皮鞋就被大街上的盐水腐蚀的鞋底破了,Wal-mart的中国造的鞋以后是坚决不买了,一定要想办法支撑到五月回国。

关于学英语的一点体会。


三月十三日 雪又停了

昨天我们又一次包了水饺,我们大家深深地感受到包饺子是一项费时费力的重体力活,包饺子累,吃的时候也累,最后大家都吃得累趴下了。虽然回国没有多少可以期待的,可是就如同一个人的期望一样,本来无所谓有,无所谓无,想得多了一些,慢慢地自己就认为这是一种期望了。常常地想我来加拿大究竟有什么收获,呆在这个北方的冰雪之地有三年了,究竟意义是什么?思想上的变化也许是最大的,生活上的改变何尝不是很大,人生的价值取向应该也是有所改变吧?现在在经济上可以说是一贫如洗,不过,心灵的深处也需得到了从未有过的安宁。明白了很多很多,这个收获应该是远远大于任何的金钱所能代表的。语言是思想的外壳,我想我现在也和从前的我使用两种不同的语言了吧?那么,我从前所交往的人群应该是使用和我当时一样的或者兼容的语言,那么我现在使用另一种语言的话,和从前的人群是否会有交流的困难?应该吧?有时候想到《围城》里的方鸿渐 ,他号称游学数年,“兴趣颇广,全无心得”,我虽然至今连一个最低的穴位也还没有完成,但自认为自己“兴趣颇广,小有心得”,算是对得起自己的了。唯一美中不足的是,方鸿渐回国的路上有鲍小姐和苏小姐的艳遇,我想我唯一可以预见到的就是在十二个小时的飞行里的一本《编译器设计》的陪伴。

Michael看人入木三分,我还不如他了解我自己。我是否应该患不己知?


三月十六日 阳光灿烂,大雪纷飞,别以为我生病了说胡话,这就是蒙特利尔

对于艺术确实是一个仁者见仁,智者见智的主题,我想起了我的favourite TV
show<Red Green Show>里面主人公Uncle Red的名言,大意就是如果艺术作品是连uncle
Red自己都可以做得出来的话,那绝对不是什么艺术。同样,这一领域之所以能有大师
的作品就在于你能作出不是任何人都能做出来的冬冬。
我没有看过那部片子,并且对那一类题材不是很有兴趣。你上一次问我读些什么东西,
我只能记得当时读得比较多的是<times><news week>,对于当时教学专用的外语片里
面,我只喜欢动作片,台词太多了我就要睡觉,比如《out of Africa》,《thorn
bird》我觉得索然无味的只想睡觉,而系里面的那帮女生看的都是津津有味。其实,读
什么都是增加修养,但是如果要速成提高口语听说能力的话,有一个捷径就是读电影脚
本,然后在观摩,再读,一些经典片子可以这样反复。不过,最主要的是要有兴趣。


三月十七日 有小雪

今天被同学逼着学了六个小时的统计因为明天要考试了,晚饭就吃了《围城》里所说的“本位文化三明治”,即面包夹酱牛肉。晚上借了一篇《天下无贼》来看,感觉是冯小刚在艺术的领域越走越低,在娱乐的道路上越走越宽。早上在地铁里面一直在捉摸3CNF的一个intuitive的算法,我现在经常幻想一些明知不可能的事情,不过正如Dr.Optrany说的,NP-Complete的问题虽然不可能有polynomial的解法,却可以有近似的算法。听化学科将原子结构非常得无聊因为我总是觉得化学家再desperately试图用初等数学解释一个概率论的问题,比如我总是认为电子云是不同的distribution的体现,而不是什么能量轨道的概念,用这个方法来叫中学生当然可以,不过实在是一种错误。系统软件老师讲到的一个conditional variable来实现的同步问题,我认为错了,一直想做试验,只好明天了。


三月十八日 阳光灿烂

I really don't want to treat this synchronization-revisit as some new work for me.


三月二十三日 阳光躲在薄薄的白云后面好像隔着毛玻璃

朱春明同学号称又要搬家了,这样他可以创造在半年内搬家三次的纪录,正好成为现代版的孟母三迁,原因也是很类似的,因为学习的环境不好,看来该同学很有好古之风,希望他在加拿大这里继续发扬古人好学的“凿壁映雪”刻苦学习精神,这里冬天雪都化不了,因此不用专门等到大雪纷飞的夜晚才读书,每天晚上都可以搬一张小板凳到院子里去“应学”,同时加拿大电费便宜,邻居家的灯大都彻夜开着,如果没有随便去街上那家商店去凿个懂就可以“凿壁偷光”了。哈哈这当然都是开玩笑了,实际上我发现我其实是在模仿一个人,这个人就是《围城》里的方鸿渐的老爹,此人写日记纯粹是文字狂,总是借现实的事件来映衬想象中的自我。


三月二十四日 阳光挺好

昨天,我和朱春明同学去足球场边上跑步,这是整个冬天里来我第一次在户外跑步,制钱只能在健身房的跑步机或者自行车上偶尔锻炼一下,春明同学还像以往一样跑了没有多远就停下来说,“你先撤,我殿后掩护。”我只好说,“你要挺住,我带着党的重要文件去找党组织,回头再来营救你。”

看了一部反映美国二战中在德军战俘营里的斗争故事,这和国内的类似题材有着强烈的反差。首先,德军的战俘营比当时中国的普通军营的生活也许都要好一些,其中战俘得到的人道主义待遇远远好过国民党军队或共产党军队,至于说日本人简直就是野蛮人都不如了。在德军的战俘营里面,美军飞行员建立了形形色色的娱乐设施,如酒吧(食用土豆皮酿造蒸馏而来。),赛马会(用捉到的老鼠替代),风光浏览设施(自制的望远镜观看邻近的俄军女战俘排队洗澡,每人赐20秒钟,门票为一根香烟),战俘们可以收到来自美国家里的邮件,可以了解到家里人的各种信息,比如,有的人的母亲写信来说在纪录电影里面看到德军的战俘营里面有网球场,冬天的时候结冰了可以滑冰。还有的人的妻子写信来说她在家门口发现了一个漂亮的弃婴很是喜欢就把她收养了,并且说她认为他肯定不相信这个漂亮的弃婴长着和她很像的鼻子和眼睛,当然还有很多人受到银行按揭催款的通知书,主要是告诉飞行员每个月他的没有按时付按揭款的房子有多少百分比已经归银行所有了。战俘营里面的德国看守非常和蔼可亲,总是面带笑容,不停地和战俘开玩笑,苦口婆心的劝告战俘不要冒险逃走,因为这样自己会受上级的处分,有两个战俘不相信试图偷跑,警卫没有办法只好按规定用机枪打死了他们,尸体放在泥地上让其他战俘接受教育,就这样德国警卫官丝毫没有生气的意思,并且还答应给每一个牢房一棵圣诞树,就算有人出于淘气,偷偷扔了一棵小石子溅了他一身泥,他也是非常耐心地说服那个人主动站出来承担责任免得大家都站着,丝毫没有打骂或者惩罚的意思。我记得在小时候看的电影里,这种事情的代价可能是好几条人命,日本人则根本不会有这种事情发生,因为,他们从来不打算抓战俘,直接打死了还节省了很多粮食。这期间,战俘们过圣诞节,有留声机,开化妆舞会,装点圣诞树,还不时地有日内瓦的国际观察员来视察并且检查卫生,住宿,还带来很多的牙刷,乒乓球以便美国人玩排球,保龄球之余换换口味,让我感到1944年德国在那么困难的时刻还这样的关心战俘的生活,(要知道当时巴顿的部队都快打到德国了。)甚至超过了今天我们伟大的温总理及各级政府官员关心煤矿工人的生死安危。中西方的差距绝对不是几十年内可以造的起来的高楼大厦的差别。顺便说一下,电影的名字叫《stalag 17》,这里stalag是德语里监狱的意思,很温馨的一部电影。

黄勇给我发了一个关于中国山东大学的几个女人破解了“MD5,SH-1”的报道,我说老实话对于所有中国的科技方面的“突破性”报道从来都是持怀疑态度,至少是姑妄听之而已,实际上我老早就看到过这篇报道,当时只当是清风拂耳,并没有放在心上。承蒙黄勇同学热心推荐,就把我学network时候的老师的讲义又翻了一下,当时老师仅仅是一笔呆过而已,大意是这一类的电子签名属于一种“安全的hash function”,或者叫一次性的hash function,用过linux的人应该也知道其中的密码就是一种一次性加密,即指需要单向加密,不需要解密。具体算法我是看不动,也没有很大的兴趣,因为,基本上电子密码从来都没有理论上不可破解的说法,从来都是和当时的计算机计算能力相比较尔认为不可能计算的。我用google艘了一下,看到了一两篇报道,我的理解是这些中国人也只是把原本2^80的穷举减小到2^69而已,虽然仅仅提高了2000多倍,但是据说已经达到了可以计算的边缘了,如果情况属实这当然是很了不起,不过,这应该也是预料之中的吧?这种电子密码迟早有人会找到捷径不是今天,就是明天,实在不行等着计算机的计算能力提高2000倍,密码自然破解了。

今天抽空把线程作业整理了一下,这个作业在班级某些同学的反复要求下被简化了不少,不过我想对于很少写同步程序的人来说不会非常容易,我感到困难的倒是文件读写的block和non-block问题。总的来说还是比较容易的,哎,作业时越做越容易了。不过关于线程的“睡眠”问题我折腾了半个早上也不知其所以然。

下午又和小朱去跑步,顺便借了《我的野蛮女友》由边看边写编程作业的readme。 相反《手机》这部片子我怎么也不想看下去,看来我是不喜欢太现实的东西了,这部电影可能有一点点太过于赤裸裸了。


三月二十七日 阳光灿烂,我是否应该去和他们爬山?

什么是不可能的任务?尝试3-CNF的问题应该是一种,或者按照那个老教授的说法,除非你因为什么原因被关在加拿大的监狱里面了,实在是无聊透顶了,你可以去尝试这一类问题来了却残生。我应该是属于吃饱了撑的。上个星期想了好几次,一直要完成,总是忘记,作了一半,现在捡起来都快忘了怎么回事了。我也懒得解释,反正没有人明白,包括我自己。


三月二十八日 早上起来天下雨了

把我得无聊的工作稍微的改进了一点。

把我的收藏列了一张表,我自己也有点不相信我在加拿大买了这么多的正版DVD,当然,对很多人来说这点钱不算什么,不过对于一个一日三餐要精打细算的穷人来说,这就不是一个小数目了,至少我觉得很多人不会向我这么傻去买什么正版。这是一种精神上的满足,使我目前仅次于计算机课本的我的最大的财富了。

你知道我最喜欢什么电视节目吗?


三月三十日 温度居然有12度

Why should I specify "O_RDWR" instead of "O_WRONLY"?

写了一个minishell玩一玩


四月二日 阴天

Wild,wild,test.


四月三日 阴有小雨

今天,wawa借给我三部电影DVD,其中一部还不错《Flight of Phoenix》,讲的是一个极端的环境下的人的精神,一群石油工人乘坐飞机飞越沙漠因为找不到石油要面临被裁员的境地,更糟糕的是飞机超载遇到沙尘暴迫降在中国戈壁沙漠上,(知道北京的沙漠化有多么严重了吗?)飞机的无线电坏了,走出沙漠的机会甚至比死等万一有飞机飞过上空的机会还要小,究竟要选择怎样的死法呢?It is too early to give up, and too late to do anything else。因此他们决定听从一个模型飞机设计师的计划用残骸飞机制造一架新飞机,(你会有这种决心和信心吗?当然这个设计师一开始并没有告诉他们。)这部电影当然是有一些特色的了,戈壁滩上杀人的红日是那么的美丽,让大多数没有去过中国的西方人更加坚信中国是一个蛮荒之地,即便在荒无人烟的沙漠也有大群的凶残的强盗。我承认这部电影仅仅比很多初出茅庐的电影学院学艺术的所谓学生导演强一点点而已,这帮只懂得用婴儿象征生命,用鲜血代表暴力的学“艺术”的学生其实是完全没有一点自己的想象力。另一部电影其实也很有意义,因为从一开始你并不知道为什么,这才是有意思的地方,更有意思的是电影的名字和国内那部臭名昭著的电影同名《手机》,因为我一向不喜欢这部电影始终没有耐性把他看完。有意思的事情就是该警察管的事情全都交给了平民,和即将退休的警察,而L.A.其他所有的警察都是杀人绑架的劫匪。而一个毫不相干的青年之所以卷入一场惊心动魄的追杀抢劫飚车行动中仅仅因为他有手机而已,而这个念头似乎人人都有手机,(当然我除外了)而最后坏警察被好警察杀掉也仅仅因为他执行任务没有把手机关掉。(当警察的执勤中一定不要开手机。) 早上有一部好的老电影我因为要去学校和同学做作业错过了,我觉得很好,一个在美国西部蛮荒时代的牙医,一个边看操作手册边拔牙的庸医,一个在一个小镇上呆不过几天就拔错牙被迫搬家的好人,被一个连去公共澡堂洗澡都随身带两把手枪的女杀手看重成为她逃跑的掩护,有意思吧?可惜没看完。(查到这部电影的名字了《The Paleface》)

我常常想我沦落到今天读concordia这样一个臭名昭著的大学真是对我当初不好好读书和现在继续浪费生命的最好的惩罚,不过,想想我当初还在TAV这样的地方呆过三个月,我今天应该珍惜,当然,我再TAV的时候我又用读过的一篇文章安慰我自己,这也是TAV入学考试的英语阅读文章,说的是一个文盲在监狱里面自学成材的故事,这应该是由所用意的,就是一个人在监狱里面值要勤奋都可以学习,何况在TAV,更何况在concordia?我不知道有多少人看到这里会把我臭骂一顿?


四月五日 小雨继续在下

Don't you think Chinese students are actually cheating by assuming they are qualified for studying in English-speaking universities?


四月六日 晴天

The major lesson I learned from this lab4.


四月七日 大晴天

早晨起来非常得无聊,浏览了几片数学方面的名人轶事,看得很有趣,摘抄了给同学,骚扰他们一下。其中一篇是介绍“线性规划”的创始人Dentzig的小故事,让我想起我当时学《算法分析与研究》的教授对“先行规划”非常的嗤之以鼻,认为intellectually shallow,我在日记里面这么写下了,后来peter grogono教授浏览了我的日记,随便问起来,认为不对,他认为dynamic programming其实非常的深奥,我不知道应该怎样评价他,只好说,I am not at liberty for comment. 看到组合学家Conway的生命游戏让我回想起了从前228里面的汇编作业,那真是一段值得回忆的好时光,我总是为自己没有机会写更多的汇编作业感到遗憾,在心底里我也许是想去学工程作一些实用好玩的东西,比如昨天看到engineering的同学做的490的project是一个会弹吉他的电子机械装置,感觉很羡慕,应该是用芯片控制机械弹吉他。可惜我一想到engineering要学一大堆的课程就头晕。读到另一片据说是英国影响最大的数学家的一篇讲演,感到大师和普通大学讲师的天壤之别:大师和讲师的区别在很多中国学生里始终是一个模糊的概念,我总是听到很多人评价一个老师的好坏在于它把一个定理或者问题解释的有多么清晰完整,这固然是对一个大学讲师的基本要求,但是对教授着足够吗?这也是当时我对于我的“操作系统”的老师非常不满的原因,因为,我总觉得他讲的东西有一些子虚乌有的成分,我再windows里面从来没有感受到他说的东西,可是,当我在一步步开始学习linux操作系统的实现机制的过程中,当我再从很大的architecture的角度来看待问题的时候,我开始体会到他的思想。我昨天和我的一个非常自负的朋友聊了两句,发现他的对于unix/linux 与windows操作系统想法,说法,还是和俩仨年前一样,而我已经有很大的改变了,这也许就是学习的过程:当我还没有被暴露很多的问题的时候,我根本不可能理解到一个层次,因为我的认识总是和我接触的客观环境相关的,我从来不太相信有先知先觉的人,至少这样的大师我是没有运气碰到的。

说了一大通还没有说到正题:在文章很多振聋发聩的观点中,有一点我觉得给我收获最多:几何是对世界状态的描述,代数是对事物运动的描述。当然我的陈述不是文章的原话,我想思想是类似的。

无聊了一个早上,只学到了一个东西:make文件里面,如果你不想让你得label与文件重名的话,有一个.PHONEY: possible_file_name,不过据说不是所有的make都支持,我也没有去试过。


四月九日 又是一个好天,不过稍稍冷了一点

google-desktop搜索实在是太可怕了,我随手一查结果找到找到了n多年的尘封的回忆,其中很多也许永远不会被我再发现,如果没有google-desktop的话。谢谢你的推荐,我现在唯一担心的是这么强大的工具,如果被黑客利用的话简直就是灾难,我始终觉得我得电脑被人入侵过,因为不少设置被搞得莫名其妙,同时我也慨叹google技术的可怕,我还是不太明白,这些index存在什么地方,这个文件应该是很大才对?

下午不务正业写了一个模拟弹性碰撞的小程序,主要是为了证明弹性碰撞是可以根据动能和动量守恒定律推算出碰撞后的轨迹的。让我有点吃惊的是好像只有一种交换速度的可能,也就是说两个小球纯粹弹性碰撞之后彼此交换了速度,假定小球质量一样。


四月十日 天气应该不错

早晨起来反思了一下,觉得最近使用人类的语言记录思想大大超过了使用计算机的语言,这个趋势很不好,应当纠正。

重睹历史,究竟是倭寇骚扰中国还是明王朝逆历史潮流而动禁止海上贸易?十六十七世纪是世界航海大发现的时代,也是航海贸易的大发展年代,资本主义的萌芽就是因为航海贸易的发展而催生的,在这样的大历史背景下,腐败无能的明王朝实行禁海政策阻止资本的流动招致资本的报复不是自然而然的吗?资本的代言人就是一些被雇佣的日本浪人,我们现在回过头来看,日本要与中国通商,如果没有中国本国的商人可能吗?就好像走私都有内家,外家一样,能一味地归罪日本吗?假如当时日本与中国的贸易没有被禁止,中国很有可能发展成一个强盛的资本主义国家,我们现在连改革开放都免了,不是更好吗?因此,有必要为倭寇平反,这正如今天走私强迫国营经济加入国际竞争一样的道理。
联系当前国内反日浪潮,我总觉得有些不对,比如,指责日本教科书编的不对,可是我们自己扪心自问,有多少人对中国的历史真正了解?历史并不只是历史学家的宠物,古人研究历史为了“以史为鉴知兴替”,请问我们究竟知道什么兴替了?中国人不知道中国的历史反倒一味的指责日本篡改历史?诚然日本杀中国人多了一些,不过两国交兵并非体育比赛,更何况在当时已经步入世界强国的日本人眼里,中国人和欧洲人当初发现非洲,美洲殖民地时候的土著没有两样,现在有多少人为当初殖民者残杀土著感到内疚?我们现在自然是认为我们给土著带来了现代文明,他们感激涕零还来不及呢。
我并非一门心思只想当汉奸,但是假如当汉奸能够改造这个民族,那么汉奸多一些也是好的。汉奸并不可悲,可悲的是当年在没落清王朝苟延残喘的日子里整天在“天桥”茶馆里坐着天朝大国清秋大梦的八旗遗老遗少,这些人整天开口“爱国”闭口“皇上”,好像很忠心,实际对国家民族一点用都没有,整天就知道吃皇粮,提笼架鸟享用太平,从无忧患意识,只配粉饰太平。

因此,给皇军带路的不一定都是汉奸。


四月十二日 晴天

signal is essentially bitmap and counting won't guarantee for all children's SIGCHLD signal


四月十四日 又是一个大晴天

早上起来读“Computer Architecture”忽然有了一个新发现,那就是阅读pipeline的部分比听差科夫斯基的交响乐有更好的催眠效果,我几乎是看一页书就睡一会儿,半个小时下来也没有看完十页书,过几天要考试了还有几百页艰深难懂的ILP (Instruction Level Parallelism) 要去领会,幸好那个混蛋老师自己也不懂,当然它不懂并不代表他不会出考卷,学习总是有用的。


四月十五日 还是一个大晴天

今天下午考统计,我决定用一早上的时间阅读pipeline,其中包括我每天最宝贵的早晨蹲厕所的十五分钟,这是我读书最专心的时段。应当承认pipeline绝非常人的直觉可以轻易得明白其中的道理,这就不奇怪很多自诩为学过计算机的人(至少是我在这里碰到的)居然对于现代的cpu都是指令级并行处理毫无概念,我读了一会儿才明白data dependence造成的stall可以用forwarding的办法部分解决,核心就是data真正需要仅仅是在alu输入的那一刻,因此,再pipeline的不同stage之间依靠硬件forward data是可以让两个consecutive的有data dependence的指令正常执行,当然,这两个指令是由限制,前提就是第一个不是load/store,因为在MISP架构下,l/s是在第四个stage。其他类型的指令我们再execute结束的时候就可以forward结果到下一个并行的pipelined的指令的ALU的输入里了。((我以前一直没有读过,一直以为并行处理对于data dependency的指令必须要重新schedule,不管是动态还是静态),挂号里面的是原来我写下的,当我慢跑完1公里,吃了一个苹果,冲了一个澡,我才明白我又在痴人说梦,data dependency的指令是不能再schedule的,这是一个ILP想要克服的障碍,到这里我有一点点明白了ILP级的并行和pipeline是完全两个不同层面的东西,好像平面和立体的差别。不由得感叹写学习笔记的好处,据说当年林副主席学习毛主席著作就经常写学习笔记的,我胡说逗你玩。)现在也明白了一般对于branch指令总归要一个clockcycle的stall,在硬件这一层就可以predict,甚至更聪明的办法是加一个branch delay slot,也就是利用这一个stalled clock cycle让他计算一下如果branch不take的话的顺序执行得下一条指令,因为,总归要执行索性先执行,预测错了这一条指令就算白做了没损失,猜对了就好像没有stall一样。不过,对于branch里面有一个细节我想不通,就是用一个npc register来存储pc+4即下一个指令的地址,当branch发生的时候,指令跳转的偏移(offset)是从指令里面decode出来的,为什么要leftshift2,书上说是要变成word,难道是因为immediate只有14bits?另外,target address应该是pc+offset<<2为什么是npc+offset<<2?npc不是已经加过4了吗?这些地方才是让人深切感受到一个教授的重要性,如果这门课是一个好老师来教的话我不至于这么辛苦,以至于要自己体会了二十分钟才理解了datapath和pipeline stage的异同:一个是从数据流的角度看待过程,一个是从时间的角度来分解过程,其实,都是状态机的不同状态,因为state是和时间与空间紧密相联系的。朱春明同学是从学硬件的角度看待这个问题的,“用时钟或者说脉冲来‘推动’状态的更替”,这种理解非常的生动形象,这自然说明了pipeline的不同stage间数据的流转路径的本质--datapath,多么贴切的英文名字。也正因为有了data在不同stage间的流转,才使得并行处理有了可能,这好像是common sense,不过当有人问你历史上曾经出现过一种架构后来为什么消失的原因是什么的时候,你是否能够想到呢?这个架构是采用超长clockcycle,即一个指令周期就是一个clockcycle,他的缺点似乎是显而易见的,1,本来不同的指令执行的时间不会完全一样长,这样很难同步,2,本来很多操作在不同的stage是互不干涉的,硬件可以合并节省开支,比如在IF stage,pc+4需要ALU,再EXE stage也会有可能用到ALU,你就不会专门做两个ALU了,这就是状态区隔导致“硬件”重用。

洗澡的时候幻想有朝一日如果能够有动态的编译器该多好啊?Grammar is just a pattern,compilers in most cases are "predictable-pattern-processor". What if the pattern is unpredictable and we need to add newly-discovered pattern  dynamically into old compiler?


四月十六日 艳阳天

早上继续学习pipeline,没有看几页,就准备为小温同学送行,然后和老张同学去跑步,回来小睡一觉然后去打篮球,晚上练习“溜肝尖”,再次重温《长征》接受革命传统教育,计划明后两天读完pipeline的两个章节。


四月十七日 好天气啊

即便是浮光掠影似的读50页Architecture的书也是累得很。我虽然已经跳过Tamasulos Algorithm地实现细节,忽略branch prediction超过两个bit以上的部分,还是觉得东西太多了,不过收获也是有的:明白了structure hazard的原因,因为,data hazard与data dependency,control hazard与control dependency对应,我以前一直不清楚孤零零的structure hazard与name dependency有什么关系,当然是毫无关系了。structure hazard是硬件资源的冲突引起的,name dependency都不是true data dependency,而reservation station好似renaming register一样自然消除了anti-dependency和output dependency,interlock和exception好似一个data hazard的硬件监控机制用来detect data hazard的。superscalar和VLIW是两个不同方向的解决方案,一个是每次issue不定个数的instruction,另一个是issue固定个数的instruction,节省了检查data hazard的过程,当然这个工作时交给了编译器了。用硬件来schedule往往就是out of order的execution,奔腾III,IV系列都是superscalar(dynamic+speculation)。 这就是一个上午的收获,脑子里棉一团团支离破碎的名次概念外加一个酸痛的脖子和眼睛。


四月十九日 阳光明媚

以前的英语老师是一个中国通,同时也非常的关注中国和亚洲,他对于当前亚洲的政治上的潜在的动荡表达了他自己的观点:一个犹太人的后裔如何看待德国。我也表达了从一个理智的中国人的不同寻常的看法,我这里说的不同寻常是想说我希望能像鲁迅一样解剥中国人的灵魂深处,当然我从来不惧怕被国人辱骂为汉奸,因为我知道我没有能力当汉奸,想卖国你必须得在一个可以决定国家前途的位置上,从这个意义上讲,能有资格叫做汉奸的只有政治局的几个人而已。


四月二十二日 灿烂阳光

花了一早上和半个下午的时间才完成了这么一个小玩意,我开始为自己的头脑担心了,这样一个东西真的复杂到要我连续奋战7个小时吗?我在开始感觉俄的时候,更多的不是欣慰而是一些忧愁。不过还是有一点点收获的,至少我现在认为没有什么更好的办法来解决这种近似chaoes的运动,想想看仅仅10个quantum在一间斗室里面运动,相互之间会碰撞,也会碰墙壁,这类的小程序好像在DOS时代就看到了很多,不知道他们是怎么做的。我现在就等着我在夏天学一些graphic之后再来把结果更好的输出。不写了,稀饭已经煮成了干饭了。


四月二十三日 早上突然下雨了,本来要爬山只好取消了

一个人究竟要多少睡眠时间呢?我现在处于一种低效率的亢奋状态,不感到疲倦但是短期记忆力很低。摸索namespace,比较windows,Linux,比较ansi c++,vc++这的确有些枯燥和无头绪。alamanni上面是用很多的softlink来解决library的版本兼容问题,这样对于程序员来说掩盖了很多幕后的真相,你只知道你在这台服务器上面用gcc,g++变异可以,实际上也许你根本没有用gnu的编译器也不一定。namespace是不是也应该把所有的声明部分都包括进去呢?看起来namespace好像就是一structure或者class一样???你不用extern别人就看不见,这好像更像汇编用得module。今天明白了一个简单的道理,不要用.h的头文件形式,如stream.h,而应该要用<iostream>这样的包装,我虽然刚开始学习c++语言的时候就有人叫我这样,可使用了一年半载之后我慢慢倾向于c的程序员那样关心效率问题,总觉得namespace增加了很多不必要的东西,一加一大堆,现在想一想其实不对,因为那仅仅是编译时候的效率,不一定和运行效率有关,而是用namespace会减少代码的无序问题,就是名字的冲突。没有在不同平台之间编程的经验就不会体会跨平台的优势,我现在对linux的看法和刚开始学习计算机的时候不一样了,会不会以后对Java的看法也会改变呢?但愿不要。

在网上找到了一张表是关于C和C++的头文件的区别的。我有时候开始怀疑离开了google怎样生存,因为现在太多的东西你不用去记忆,不用去存储,甚至我这样保存这张表的必要性都不一定存在,因为你只要google一下就找到了。人还要记忆什么呢?


四月二十五日 也不能寐因为睡得太早了

昨天花了一个早上时间最后成功载Linux下编译了cugl,这是一个Grogono教授自己写得graphic的library。其中,linux下有很多与windows不同的东西,或者说g++与vc++有不少不同的东西。Linux里面引用<dlfcn.h>可以动态加载library,searching strategy是1。A colon-seperated set of directories specified in the environment variable LD_ELF_LIBRARY_PATH。2。The library specified in the file /etc/ld.so..cache. This file is generated by "ldconfig" which lists every library it finds in a directory listed in /etc/ld.so.conf at the time that it is run。3。/usr/lib 4。/lib

我的藏书。 这里我想声明一下鄙人对教科书的态度,我一般拒绝买复印的所谓“书”,我认为你对书的态度直接会反映在你对学习的态度,如果你不对其中的内容在意,书里面的只是一般也会对你不在意,我想大多数人明白我再说什么。因此,基本上只要我能维持吃饭穿衣住宿,我基本上买正版书,当然我也对一本书一百块加币的价钱很心疼,但是,这是一种commitment。因此,我不主张买复印的书,也不主张借书。

Is it semantically reasonable?

四月二十八日 阴天有点冷

我有一些事情总是不明白,比如,我难得洗一次衣服,几乎每次晾衣服天就要下雨而且一下就是好几天,也许老天爷知道我衣服洗得不干净要替我再洗一遍?还有就是我一去图书馆读书就会在那里睡着而且睡得特别香,尤其是Loyala的图书馆睡觉尤其好以至于我一直想搬到那附近去住。今天是在是忍受不了头发的折磨不顾马上就可以回国还是去理发了。一个理发师傅的手艺好坏取决于你能否在理发过程中睡着,每次这样迷糊一会儿都是特别的香,为此我就多给了他一块钱小费。胡大虾昨天批评我最近思想右倾,我完全承认并且告诉他,我这么做就是要给某些人泼泼冷水,为此挨万人骂也是值得的。我的政治感觉是国内的思潮越来越浮躁,越来越左倾,按照主席矫枉必须过正的原则,适当的有一些人右倾是可以抵消一部分左倾思潮的。


五月四日 天阴沉沉的

回到厦门的第二天就花了半个通宵为了证明郑署昭的直觉是错误的,我把我的碰撞小程序小小的改动了一下,并且加注了比较详细地说明

我犯了一个低级错误,李向东关于勾股定理的证明是对的,即一个球静止,碰撞后的夹角必定为90度。但是我其他的结论保持不变,即其他情况不一定是直角。


五月五日 天还是阴的

奋战一碗上写了一个简单的模拟测试程序,这主要是一个模糊查找的简单试验,通过这个小东西,我发现了一个查找定义或者叫做语法上的ambiguity。比如我们字典里面有一个词"shang  hai  shi",那么我们输入模糊淄川"shs"到底应不应该被查找到呢?一种解释是模糊字串是字典里面的每个词的首字母应该被匹配,另一种解释是“sh”被第一个词"shang"部分匹配后剩下的"s"就变成非法的了,因此不能匹配。我想这种ambiguity只能用强制的优先查找来解决,我倾向于后一种因为很好实现。


五月六日 阴晴不定

回来好几天了,俗务不断,国人的传统还是一样:非吃吃喝喝无以交往,所不同的是好像一夜之间人人都有车了。昨天和netwalker聊了聊才明白“shs”这个匹配的例子原本在全拼里面就是一个很好地解决例子,因为汉语拼音里面声母的个数是很有限的,用这个办法可以符合中国用户的习惯,这是一个相当不错的解决方案,但是就语法规则的角度来看,ambiguity并非从定义之初就能够发现或消除,至少说明这类模糊查找的问题定义的语言不是regular的,起码也不是context-free的?下午去买了一身运动装,挑了一款最便宜的耐克鞋,和一身李宁运动衣裤,商店送了一张健身卡,可以去一个月,正好来看一看中国的健身房的设备,但愿不要让我太失望。路上在公交车上听梁咏琪的几首歌让我回想起无数个冰天雪地的夜晚,有人会说那种孤独寂寞是种折磨,可是对我来说熬夜写程序的日子是一个人最幸福的时光:你有一个想法想要和一个智慧个体分享,大多数的同类却不屑于听你絮叨,第一不能理解,第二不感兴趣,唯有电脑是你唯一可以倾诉的对象,不过使用的语言一般是C/C++。回想起我对自己的承诺,我想分部实现我得想法,但是一个dynamic scanner和一个dynamic parser是否是一回事呢?夏天我曾经对德国的miss sunny许愿一定要做一个DFA的化简程序,她不会当真的,我却不能不对自己的承诺当真,究竟应该从哪里入手呢?明天新买的电脑就要送来了,我是否应该首先完成夏天的project?这么多的计划是否能够在厦门这个喧噪的城市里淹没?也许一个人只有在三万英尺的波音767上才能静静地读一读LR(1)的算法?选择SLR(1)还是一部到达LALR?


五月十日 阴风阵阵,挺冷的

折腾了一两个小时就为了能够再Linux下使用USB闪存,步骤是从google上搜索来的。1。在/etc/fstab文件里面加一个栏目:/dev/sdn____mount-directory____auto____noauto,user____0 0

这里"n"代表a,b,c...看你有几个scsi的设备,一般是a,“——”代表“tab”空格,其中auto代表让Linux自动搜索文件系统,noauto代表不要启动的时候就去mount,大概是这样吧?2。然后再命令行mount -v /dev/sda1 /mnt/usb,这个时候你可以用如下命令察看df -h /mnt/usb,请注意sda后面这个1,我为了这个1浪费了快一个小时。

前天想把不合脚的NIKE鞋退掉,结果被借口我穿过不能退,这在加拿大简直是奇怪的事情,我不试一下怎么能知道是否真的喜欢,看来一定要把想法调整回国内的现实,正好想姚波同学说的那样在加拿大住久了人就变傻掉了,由此可以证明他的另一个论断:时下回国的很多人要么是骗子,即能够把善于欺骗的中国人都骗倒的骗子,要么就是原本在国内就是呼风唤雨的人物,其他类型回国按照达尔文的进化论只能被淘汰,因为,中国这个环境还是属于逼迫你进化的环境。

费了半天时间才找到解决glut.h的办法,只有download一个,不知道为什么我得Linux没有自动安装glut.h,libglut.so,我记得我是完全安装的。另外就是学校服务器上没有这样的文件可是照样可以运行编译,真是奇怪!以下是我从google上搜得的安装办法,其实和我想得一样,只是我一直在捉摸学校alamanni上怎么配置的。

1。从这里download http://fidelio.cacs.louisiana.edu/resources/linux/glut.zip

2。揭开zip用unzip,然后用rpm安装package,选项时-i,之后libglut.so.3.7就安装在了/usr/lib下,如果要让g++知道运行,你要么该文件名位libglut.so,要么建立一个软链接。

3。把glut.h拷贝到/usr/include/GL下。

4。编译的时候记得用linking option: -lglut,这比直接用libglut.so.3.7要好,把版本的问题留给系统管理员更好。

一个人的记忆是一件令人苦恼的事情。在我年轻的时候,我常常为失去重温一本小说和重看一部电影而带来的意外的惊喜而苦恼,什么事情都记得一清二楚是一件痛苦的事,因为你失去了选择忘却的权利。现在我经常获得意外发现的乐趣,一部电影我可以反复看而能不断地获得重复发现乐趣,当然这是在我失去了选择记忆的能力以后。我曾经常常说人的记忆是由选择的,现在我只能说人的选择是由记忆来决定的。比如你认为你做了一个你认为正确的选择,实际上很有可能这是你头脑中的记忆在暗地里决定的,你以前就经历过类似的场景,你曾经作出的选择被你下意识的又重复了一遍。对大多数人来说,温故而知新很有可能是你忘记了曾经知道的东西,这个新未必是什么新,对于忘却的记忆来说,什么都是新。

我前两天又在我的手提电脑里留下了一个新的烂尾工程,你是否曾经想过模板和继承是一对的矛盾体,好像武侠小说里面两种不可调和的武功,我却试图将两者融合起来,这实在是一个折磨头脑的工作:模板表达了不同事物之间有着某种共通之处,不管什么类型,你要做的步骤都是一致的;继承却表达了相似的事物之间的个性,相通的事物之间在做同一个步骤时候内部的细微的不同。这两者之间看来是矛盾的对立统一,你能够同时使用他们去描述一系列事物的某一个相同而又不同的动作步骤吗?这真是矛盾啊。所以,当我吃饱了没事干的时候做这样的无聊的事,真好像要调和阴阳武功一样,不比登天还难吗?


五月十二日 阴有小雨

我不知道我以前是否已经重复犯过这个错误:realloc输入一个动态分配的地址,返回一个地址,你是不需要自己再次作内存拷贝的,也不保证输入与返回的地址一样。反反复复安装Linux十几次终于明白了一个简单的道理,我如果在安装选项里面选得太多,我的鼠标就会和其它硬件冲突,(很有可能是声卡),因此,我应该选择比较少的选项来安装,但是这样你要自己去/usr/include下建立GL目录,并且拷贝所有的glu.h,gl.h, glx.h...etc。其中Linux是需要一些glux之类的平台特定的头文件,当然你要自己在/usr/lib下建立一些symbolic link区指向真正的动态库,比如libgl.so.3.x,libglu.so.3.x等等。好像很简单,但是很费了不少时间才弄明白,这一个星期我都在干这种简单的勾当。

这几天一直在看日本的《古钿任三郎》,中文大概翻译成《绅士刑警》,觉得作为一个了解日本现代社会的小窗口还是不错的,主人公也是非常的出色,犯罪人基本上都是文化艺术届的精英,也都很有风度,愿赌服输,甚至有些在犯罪的时候都是彬彬有礼,因此这位绅士刑警也很有绅士风度,这样的社会远比中国目前的社会好得多了。(肯定又有很多人朝我吐唾沫了。)


五月十三日 临辰有小雨

虽然不是我所学过的简单的自动机,但是一定是状态机,世界上的事物如果能够用状态机来表示,就可以用计算机来“计算”,因为计算机就是状态机。临辰的时候,我已经大致上明白了这个状态机的表示,我可以安心得吃早饭了,中午回来以后再加上几行代码就可以了。从另一个角度看,这是一个极其简单的“深度优先搜索”的问题,每一个节点只有两个选择而已,很trivial的。


五月十四日 时有小雨

赶在今天的最后一分钟记下心中的怅惘。记得大学的时候曾经看过一本书的书名叫做《理智之年》,莫非我也进入了这个阶段?应该是吧?仿佛还有另一本书的名字叫做《兔子快跑》,我从来没有耐心,也不屑于去读那些写给比我当时年龄大一倍的人看的书,不知不觉中自己已经成为书中的主人公。检讨往事,增添了不少的空空如也的感觉,一颗心常常漂浮在厦门浮躁的空气中。只能套用一句陈词滥调,少年不是愁滋味,为赋新诗强说愁;而今还不到秋高气爽的日子,不能直接说天凉好个秋,心底里常想呐喊一句:让暴风雨快点来吧。


五月十七日 下午天转阴了

俗务缠身这种褒义的说法对我这样一个闲散之人实在是一种莫大的恭维。离开厦门不过短短三年,其实很多地方已经有些陌生了。仿照从前写《一个中国人眼中的加拿大》曾有一种冲动写一两篇《一个加拿大人眼中的中国》,当然我现在还刚刚申请入籍离拿到加籍护照的日子还远着呢,题目好像信用卡里的透支,不过既然要入籍,完全可以先心理上把自己当作外国人来看看中国,诚所谓预支。

回来后第一个耀眼的景观就是女孩子的头发颜色的含金量越来越高了,莫非女人的外貌也是这个商品社会的一个产品,随着物价的攀升成了男人口袋里钞票多寡的指针?我这么刻薄必定会被大多数的女性多者抗议,不过,单单比较一下中国社会和西方大多数社会女权主义的概况就知道,在中国女性是更加赤裸裸的商品化了,她们在和男人一样是社会劳动力的基础上额外添加了社会橱窗的功能。当然,这样做未必有什么坏处,一个人出卖头脑的劳动时间和出卖身体的劳动时间在本质上都符合恩格斯的剩余价值规律。

昨天晚上偶然逛逛外文书店,第一印象是国内图书市场繁荣了,并顺手买了一本“numeric”方面的书,这个方向是我一直感兴趣却没有机会尝试的,学统计的时候老是想自己去实现以下gamma函数,正态分布,这些绝对实在C还未出现以前Fortran就可以做的工作,不过呢没有亲手做一做真是一种终身的遗憾。第二天在此光临,详细一看颇感失望,国内的图书还是这样的散乱,我在汇编语言的柜台找到了全场唯一的一本编译器方面的书,是翻译的,总的还可以,本想买回来,仔细看看就头疼,因为,国内技术书籍的最大问题就是terminology的问题,一个术语的翻译有太多的随意性。我没有在国内读过计算机这么指责有些不负责任,不过像closure翻译成“闭包”是否是由权威性呢?为何不给出英文对照呢?至少国外的任何一本书都有index,凡是出现过的学术专有名词都有索引便于查找对照,中国这方面似乎不太注意,图书是思想的交流,如果我们交流不进行概念的约定,真不知道要交流些什么?难道读者对此没有抗议吗?


五月二十四日 阴

云游一个星期回到厦门,觉得就居住而言,厦门也许稍微好一些,广州深圳的房价太高了,广州应该是类似于上海,目前的高价格主要是为了原来非广州的人口准备的,深圳稍微好一些,平均收入高一些,房价也低了一些,环境也好了不少,但是这是在你有私家车的前提下,相比较而言,深圳的快速车道乘车上下班更像北美的生活方式吧?至少和电视上的画面来比较像是这样。广州的地铁给的印象如果用一个字来形容那就是“冷”。首先,车厢内的色调都是冷色调,主要是采用了太多现代材料的关系,大量的不锈钢和玻璃,给人以冷冰冰的感觉,当然这和当地的气候相适应,毕竟蒙特利尔是一个冰天雪地的世界,暖色调给人的温馨感觉换到了广州那样烈日炎炎的日子里给人的是一身臭汗以外的无奈。其次,冷气开得太足了,我本想地铁在地下属于冬暖夏凉就不用开冷气了,想不到广州的地铁依旧是冷气十足,让我冷得哆嗦。在有就是地铁技术先进,比蒙特利尔几十年前建造的要好得多吧?至少从噪音和平稳的角度来看,由静生冷,在死寂的车厢里上班族一张张毫无表情的面孔上你会感到大都市里人与人之间的冷冰冰的金钱关系,这让我这个过客多少感到有些冷。

花了差不多一天时间才搞定了windows下的编译,原来在Linux可以的现在再windows下有了问题,问题很奇怪,我不能再cugl.h里面加“using namespace std“,必须在主应用程序里面加。真是不可思议。

Half-finished, trivial trial.


五月三十日 大晴天

回国整整一个月,几乎所有的计划都已经落空。1。编译原理只有在三万英尺的高空看了一点;2。openGL只有在刚刚回来的一个星期里在每天最宝贵的上厕所的十五分钟里看了以下;3。MFC下的windows编程刚刚才拿起来看了两个开始的章节;4。自动机的想法还是停留在去广州的火车里时的想法,也许很幼稚所以迟迟懒得动手;5。numeric看来看去不明白,连最简单得newton-raphson求导数的公式也搞不懂;怎么办呢?看来中国实在不是一个静下心来学习的地方,当然身体状况是有些好转吧?心肺的锻炼停留在较短距离的游泳上,上肢力量有所增强,不过,回来后我发现我皮肤对紫外线的抵御明显下降,也许可以看作是barbarian的“四防”能力下降了吧?(没有玩过diablo2的不会明白的。)summer project缓慢稳定地爬行,因为我认为最主要的工作在回国前的一个星期里面已经完成了,至少这是我认为的。教授知道学生在vacation里面干不了多少,尤其我这种想得比做得多的人。

我认为我在加拿大最大的收获仅仅是慢慢地自觉地培养一种科学的思考方法,或者说怀疑主义的思考方法,即开始的时候对无知的领域采取最大限度的抵制与怀疑,这是否能称为“科学的方法”我不知道。对于usb disk的识别上我当时认为朱春明从他同学那里听来的关于电压不足的说法不足为信,因为我的HP毫无这样的问题,自然仅仅是他的compaq的硬件问题。刚回来的时候,我为了连接方便在机箱背后加了一条USB延长线,结果USB闪存可以被Linux安装,USB disk则不行,我不知其所以然,猜想也许mass storage不是SCSI设备吧?现在这些都被部分的否认了,我唯一可以得出的合理的解释就是USB延长线损失了部分电压导致磁盘无法工作。我特地去买了一个带电源的USB Hub来检验发现再windows xp下看起来是这样的,尽管我无法同时接驳两个USB disk.但是在Linux下我的解释不太完美,当然usb disk毫无疑问的是scsi设备,不过,usb hub看样子就不是了,我还不知道怎样mount。去电子城买了一条256M的DDR400内存条,因为原来的是333的内存,只能降频为333,DDR的原理我还不太明白。一条2米长的网线卖3块钱,我想在加拿大就是3块加币了。一个switch卖65块好像和圣诞节时候9块加币的价钱差不多。


六月五日 大晴天

在北京的时候参加了一个面试,使c++的考试题目,其中有一道题目我想错了一点,这个问题以前就已经试验过了:类的destructor为什么要声明位virtual的,问题本身很简单,任何一本面向对象的书里面都有长篇泪读的论述,问题是我当时想到了另一个问题,就是c++里面是靠函数名字来实现成员函数继承与多态的,那么每个类的destructor是没有办法同名的,当时我记得这是我的一个猜想或者在那里读到的,destructor前面那特有的~就是一个不得已的标识符,这样在基类里面将destructor声明为virtual编译器才能自动将所有子类的destructor也当作virtual的。我当时糊涂得把这个不相关的东西也写上去了。总之,想在国内当个程序员看来是没希望了。

北京很热,一是指气候34度,二是指经济,参加的那个所谓“楼宇自动化”技术研讨会上作报告的北京的系统集成商的项目动辄几十万的建筑面积,真是全国都在支援北京的建设啊。奥运会在某种程度上和1936年希特勒上台后在柏林举办的奥运会相似,也是一种政治上的橱窗,国家不惜工本为了提高所谓的国际知名度来换取某种政治上的利益,这些并非普通老百姓所能受益的,假如现在在问一问蒙特利尔的老百姓是否愿意再办一次奥运会我想答案肯定与几十年前不一样,毕竟奥运建设的债务偿还了几十年,轰轰烈烈只有十几天,假如这些场馆交通建设让北京市政府独立承担北京市民会愿意举办这种劳民伤财的奥运工程吗?


六月六日 风和日丽

昨天和刘伟夫妇及其朋友去打羽毛球,流了大约一斤的汗,最后跑步都跑不动了,休息的时候居然碰到彭文学在跑步,这个家伙简直不可想象能够参加马拉松,平常能够跑一二十公里!看来人的潜力总是超过人的想象。后来和李向东一起吃饭感觉我现在对于未来的目标很模糊,晚上和Anthony聊了一会儿天,老朱现在全部改招老外房客了。读nino的文学评论是一种享受,也许女性天生就是一种感性动物,记得以前玩过一个养成的游戏《明星志愿》里面要把一个漂亮可爱的女孩子培养成明星,女孩子有很多的属性值,比如智力,体力,感性等等,通过学习钢琴,打扫卫生,去餐馆或者农场打工都可以提高某一些属性,但是有时候会降低某种属性,我总是玩不好,经常把小女孩逼得读书压力太大而离家出走,或者就是一味为了赚钱而打工最后成为一个体力充沛劳动妇女。人的性情的养成实际上是很难的,在一定的环境下就是有一定的属性值的组合,微调平衡各种属性实在是一种艺术。

早晨看了"algebra"的第一页就看到那个Russell的著名的集合悖论,定义:Godel的集合是由class定义而来的,class有着更加一般化的地位,它是靠二元的逻辑判断来定义的(first-order predicate calculus,二元是我自己加上的因为我认为逻辑之所以为二元就是因为他只有两种情况,是和不是。),所谓class A就是这样一个collection of objects such that everything can be determined if it belongs to this collection. In other words, P(x)=true means x is an element of class A.(我在很多地方看到说这种定义是一种intuitive或者naive的定义,我始终不明白为什么。)c从这个定义来看世界上的万事万物都可以是一个class。集合的定义是这样的,class A is a set if and only if there exists a class B such that A in B.在没有读到这里之前我本来以为集合是最广泛的定义一切的形式,结果发现集合(set)必须要依存于class的定义而存在,并且这个定义中有一个潜在的问题就是它定义了什么是set,却没有定义什么不是set,因此这就为后面的悖论埋下了伏笔。请看russell的悖论:class M={X|X is a set and X not in X} where X not in X代表说X不是X的元素,这个让我想了好一会儿才明白,in或者not in是元素和集合的关系,一个集合一般并不是他自己的一个元素,比如集合“所有的书”的元素是一本本的书,而“所有的书”绝对不和“某一本书”相等,因此,集合“所有的书”并不是他自己的一个元素,理所当然的X not in X是一个很普遍的情况。请注意下面:M不可能是一个集合!反证法:如果M是一个集合,那么M或者属于M或者不属于M。如果M属于M,根据M的定义M就不属于M了;如果M不属于M,同样根据定义M就属于M了。因此,唯一的办法就是M不是一个集合。不是集合的class定义为proper class。刚才的这个逻辑推理真的是让人头脑转了好几个弯啊。先到这里,去吃早饭了。


六月八日 据气象预报是一个大晴天,最高温度29度

浮躁得一塌糊涂!看来不是国内的人浮躁而是大环境的问题,想起了参观“毛主席纪念堂”看到的毛主席的词里面最著名的一句话:“一万年太久,只争朝夕!”当时作为一种豪迈感情的抒发再恰当不过,今天作为国内发展的雄心壮志也很恰当。问题是历史的发展阶段能否跨越?我非常的怀疑。nino常常鼓励我写下各地游历的感想,可是很惭愧,时常觉得如同竹篮打水好似捞过很多剩下的却只是一星半点,如果这一点两点不记录下来,以我得目前的存储空间不消一个月就忘得一干二净。

在宾馆里面看到凤凰卫视里面介绍美国二十世纪初的煤炭工业发展历史,其中有很多家喻户晓的名字,摩根,洛克菲勒,贝尔,不要以为这些都是什么现代工业巨头,当初他们和今天在山西挖煤的私企业主没有什么大的区别,不同的是他们更有钱,更心狠,连当时的美国总统都要让三分。那个时候矿工的生活很苦,一年的工资也不过三百多美金,而且工作时间很长,生命健康没有保障,为了能够增加一点点工资举行罢工,结果这些工业巨头就雇用保镖扛着机关枪向工人的帐篷扫射,这听起来骇人听闻,似乎比今天的中国还要黑暗,不过却都是千真万确的,在不到一个世纪以前的美国所谓的人权也不过是当时的罗斯福总统害怕引起更大的冲突而不得不派联邦军队进驻矿山制止冲突要求劳资双方谈判解决。不过到了二次大战之后,石油成了能源的主角,这些大亨们开始把主要精力放在石油上了,并且对于工人们的不断的增加工资的罢工感到头疼干脆用高度的机械化来代替工人。当时老洛克菲勒对工人的要求非常强硬,他有一个信条就是他是受命于上帝来安排工人们的福祉的,工人们的衣食住行都是由他这样的资本家来提供的,由他来决定矿工的命运是理所当然的。社会是一个社会成员进行物质交换的平台,马克思过分强调了劳动者的付出,今天的中国引进外资又过分地强调了资本的力量,也许找到某种平衡是欧美很多国家尝试了很多年的一个主题思想。

在北京坐了一回公共汽车和地铁,发现北京拥有可能是世界上绝少这样落后的一个地铁设施了,完全用人来卖票,用人来收票,公共汽车上也是如此,基本上和几十年前的中国没有两样。问题就是这样的劳动生产率能够维持一个企业的运行唯一的解释就是北京市政府的扶持,唯一的原因就是这个城市与众不同,不可能有破产与下岗的威胁,经济规律在北京不适用。这是中国的悲哀,是作为十三亿人口的绝大多数的不幸,蒙特利尔的地铁基本上是一个福利事业,不过那是蒙特利尔人用自己的财政举办奥运会的遗产,他们为此还了三十多年的债,加拿大其他城市并不因为蒙特利尔为加拿大举办了奥运会就会对蒙特利尔捐出自己的税金,这完全是每个城市主体的决定,就比如一个村子里面的某户人家摆排场请镇长吃饭,事后这户人家找村里所有人家摊派饭费一样让人气愤,这就是中国的现实,对比加拿大十个省长为了本省从联邦税金的返回比例炒得不可开交甚至要威胁独立(夸张了),中国还是一个封建君主制的国家,大约相当于欧洲国家十五,十六世纪的状况吧?

历史的阶段可以跨越吗?一万年太久?制度的沿革可以朝发夕至吗?制度下的人的演变会吗?我常常想欧洲殖民者的后代经过了多长时间忘记了王权的至高无上?这个问题在中国更加得难以类比,我曾经按照好莱坞老电影里面的景象来对比欧洲北美洲中世纪农民的生活状况,得出的结论是今天中国的农民生活还远远不及当时,这个历史的对比仅仅作为一个参照,能够说明的是中国的现实和欧美还差大约一两个世纪。我知道我的断言有耸人听闻的目的,也有招砖头唾沫的功能,不过见仁见智,姑妄言之,姑妄听之,日后如果有验证自然有人信服。


六月十一日 晴空万里

这两天一直去“都市风”健身中心累得半死,因为第一天流了至少6斤汗水(因为临走前我秤体重少了两公斤,同时我喝了至少1公斤的水,因此,我流汗至少在3公斤。),第二天知道30分钟的“动感单车”我是没有办法完全跟上的,因此,速度自己掌握,最后只流了5斤汗水。我总结了一下我为什么要花七百多块买健身季卡:1。这是一种commitment,人如果不是有所承诺很难认真对待什么事情,尤其这件事情不是很轻松完成的话,花了前去健身中心如同签了一份合同,如果合同不履行总是有所惩戒的。2。当然是健身中心比一般人家里有更加完善的设备,比如我一直对引体向上这个动作很犯憷,再加上我做肩膀有些小毛病更是不愿意进行这个动作的训练了,因为对我太难了。健身中心有一个设备可以让你自己调节重量来完成实在是太好了,循序渐进的训练永远是真理。3。非常重要的一点总是被人么所忽视,那就是专业教练的临场指导,很多人认为锻炼无非就是出大力,流大汗,其实不然,与其自己重复千百万人的盲目摸索不如听一听专家的指导意见。我做仰卧起坐的动作好多年都是错误的,锻炼得仿佛不是腹部而是腰部,这种指导的价值我认为才是去健身中心最有价值的地方。在中国你可以花这么一点钱得到这样的服务,在加拿大是不可想象的。4。锻炼要有一个好的环境和气氛,我始终对中国流行的软绵绵的音乐不太感冒,因为在欧美社会音乐也有其功能性的方面不仅仅是单纯欣赏的功能,在健身房里面有动感的音乐可以调整你的节奏与呼吸,减轻你的疲劳与锻炼的痛苦,这在自己家里比较困难,因为邻居肯定有不同的意见。另一方面,你可以看到健身中心无数的好身材,魅力在运动中有别样的定义,时刻会激励你努力塑造自己的身体,同时旁人的执著对你是最好的鞭策,这就是很多人去健身中心锻炼的一个主要原因。5。一个可以承受的价格才是你正确的选择,一个月两百多块算贵吗?想想看单车教练在台上领着你骑单车30分钟,不停地鼓劲,示范,瑜伽,跆拳道,有氧操等等的专业班,(当然大多数都是被女孩子享用了,)宜人的环境,耐心细致的现场指导,这一切算贵吗?如果是年卡的话一个月还回便宜的只有一百块左右,假如你一个月少在外面吃一顿饭,就可以承受的价格,你会说贵吗?6。健康的投资在一个刚刚从温饱型过渡来的社会里面有很多狭隘畸形的定义,比如在吃上面无所不用其极,其穷奢极欲比古代最腐朽的封建奴隶主时代有过之而无不及,还会耻笑西方人不懂得吃。中国现在所发生的一切在西方社会几十几百年前都曾经经历过,历史的阶段性是不能跳跃的,你可以缩短一个阶段但是基本上不能跨越,这是自然的规律,等到我们的后代在学校里,图书馆里学到现代中国的发展史,他们会用一种怎样的眼光来看待今天的中国人那实在是一件让人难以想象的事,也许读过“阿西莫夫”的科幻小说《他们的乐趣》可以给你一些启发。


六月十四日 气象预报有大雨,但是晴空万里

回到国内实在是人变懒了,大概这一个月基本上没有写什么像样的程序,心里内疚得紧,只好翻翻以前的小东西减轻一点负罪感。这是去北京前一天晚上给lxd改的一个纯c的实现,实在没有什么可说的,凑个数吧。和Monk聊天谈到了围棋,不禁又勾起了我从前的幻想,我对lxd简单谈了我得一些看法:认识是从差异比对产生的,概念也许可以看作是模式认定,我猜想这个过程应该在抽象之后,抽象是在差异比较过程中去粗取精,或者去异取同之后总结出来的模式这样一个过程,所有的关键都集中在比较异同的过程,因为事物是因比较而存在的,人的认识也应该是由比较而产生的,风格过于抽象,可以简单设定伟大的战略,具体战术的选择是为战略服务的,而最简单的设定甚至可以用人的记忆模式来设定,比如,最近的战术战略运用总有着较高的记忆优先等级,或者胜率高的战法总有较高的权值。Monk对围棋软件的批评在于他们分不清急所,总无法正确判断定型的时机点,这也许就是程序中形势判断的根本问题,究竟是否应该用“目数”来决定每一步的价值,这本来是所有程序的似乎必然的选择,但是,人类是否会这样去计算?是否应该用阶段来描述,就如同武功套路中的组合拳,一组动作缺一不可。


六月十六日 天气闷热,没出太阳,据说要下大雨,可是总不下,气象台的人要疯了

以前唯一有印象的莎士比亚剧本里人物对白就是"Denmark is rotten."直译过来就是“丹麦已经堕落”,我总是想把其中的丹麦换成中国,当然我不敢把Hamlet换成我自己,我还是有自知之明的。总之这个社会沉沦到了一个转折点的边缘了,很多人对于明天是既担心有憧憬,希望明天更好些,希望今天能长久。想起昨晚看的一部科幻片《time cop》,这是一个时空旅行成为家常便饭的未来时代,一个特别的精锐部队被赋予了一项前所未有的任务,防止时空旅行者回到过去去改变历史进程,用主角的浓重的中国口音的英语来说就是:I am protecting future by preserving history. 一个社会的传统被粉碎之后所谓社会领导者所意图的新的价值观未被社会成员所接受,于是一个尴尬的时代在中国出现了,从形象上说类似于电影中时空机器的一次操作失误,将时空警察传送到的一个时空坐标上已经有一个存在的人的个体结果两个人的血肉融合成了一个双体怪物,真是惨不忍睹。大多数的东方国家都比较强调保持其固有的传统,如日本韩国东南亚各个国家,唯有中国不太愿意这样做,也许传统束缚人太多,中国需要的更多的是开拓吧?

玩MFC时候发现了class wizard的一个小小的bug,再class下拉菜单里面找不到我定义的所有的class,让我很不爽因为要照猫画虎地跟着书一步一步做不成了,就去找class-wizard的文件,果然找到.clw文件,添加了class的项目就可以了。真是难为visual studio了要把一个c++的程序员傻瓜到vb,java之流太不容易了。


六月十八日 天气有些闷热尽管下了不少的雨

我可能有点感冒了,好像在加拿大三年我都没有生过什么病,回来竟然就生病了,看来他们说得不错,现在回国水土不服,其中的水土有自然的也有社会的。因为有些头脑发热就写一些胡言乱语。这些简单的幻想看似好像是大多数人的天真的幻想,其实不然,你看美国主流社会对一个简单的克隆人的辩论,对人体干细胞的提取的态度就知道,这并非大多数人的意愿,人从生物的本性来说是防卫性的自私的,即本能地对危及自己生存的一切采取抵制的态度,毕竟每个生物的本能就是生存与繁衍,如果有什么新的智慧生命体威胁到人类的地球霸主地位,人类会采取各种手段自卫的,哪怕人类知道从进化论的角度看那是徒劳的,人类还是会亲一切本能阻止新型智慧体的发展。这和自然界即人类社会中任何新型代表先进性的事物的早期命运是一样的,被压制,反抗,再被压制,再反抗,最终取得统治地位。因此,从这个角度来看机器人这种代表先进智慧和效益的智慧体一定会取代人类的统治地位的,而人类也会在很长时间里尽全力来阻止这场革命的发生。

昨天看AI的讲稿,有一个抽象的说法是识别的问题,就是一个函数来代表所有形式的认识过程Y=f(X),Y代表认识的结果,X代表输入,实际上任何的认识过程都可以归结成这么一个抽象的函数,没什么高深的,不过怎样定义X?因为现实中这个X可能有偏差,只能提要能够聪明地忽略一部分差异,也就是抽象的一个过程,或者特征值的识别。但是从生物体的角度来看这个问题似乎有一个最原始的解决方法,既不同个体之间对同一事物的观察在一定条件下是基本一致的,因此,偏差似乎原本就不存在,或者说偏差的产生不是最原始的认识过程的问题,而是对同一事物不同状态的识别的问题。比如一头牛A和B从同一个角度看会有大致一样的映像,但是从不同角度看的时候,A与B要都得出牛的结论则不是偏差的问题,而是抽象识别同一事物不同状态的识别的问题。

Algebra里面开篇讲得最基本的一个关系是equality,这个关系要满足三个属性reflexive, symmetric, transitive。i.e. define '=' as equality 1. reflexive:  a=a is always true ; 2. symmetric: a=b ==> b=a; 3. transitive a=b && b=c ==> a=c; 这个关系是最基本的关系因为生物体本能地实现了。假设生物体有一个buffer可以暂存映像,即Y=f(A)中的Y被存储在buffer中,生物体有一个最基本的元素级别的比对算法,运用与的运算来判断buffer中映像与新映像的异同,当我们再次识别一个映像而这个映像的客体是另一个对象的时候实际上运用了transitive法则,是同一个客体的时候运用了reflexive,其中不知道在什么地方好像都有运用symmetric吧?(最近,我一定使得了重感冒,胡说八道的东西越来越多。比如,我总在捉摸如果算法或者方法可以用数据来表达那么该是一场多么深刻的革命啊?)


六月十九日 阴天

照猫画虎似得重新照做MCSD非常的有感触,在几年前对C/C++一窍不通的时候学这个东西简直就是一个笑话,今天当我自己觉得学了三年的C++自以为小成来学MFC的入门的东西才感觉其中的复杂性,因为怎样设计这么一个系统呢?一个view/document的架构就是一个朴素的思想,message mapping是通信的机制,resource ID是一个识别的方法,这一切都要IDE做到自动化确实要花不少力气,bug是难免的。这也许也是VC++推出后其他的c++编译器销声匿迹的一个原因吧?毕竟这种东西的制作有一点点吃力不讨好,初学者觉得太复杂,高级用户觉得太臃肿,费了很大劲bug还是一大堆,也许很多编译器厂家当初不肯做的一个原因也在于此吧?


六月二十二日 天气预报总说有大雨,且信一回吧?

CCmdUI是一个控制菜单行为的类,比如enable,disable,checked等等,所以在updateCmdUI消息里面做菜单的控制;如果是一个modalless的window那么一定要先创建(create)然后调用ShowWindow传递显示类型参数,创建window的时候可以用一个资源ID指示MFC的模板ID,不过这是因为MFC又替你在类里面重新声明了一遍那个enum的资源ID。这其中的来龙去脉实际上复杂得多,我这才慢慢体会了一点点如今的界面设计程序员是多么的幸福,用Delphi或者VB之类的工具完全掩盖了资源与数据及其code的通信协调的麻烦事。春明同学几年前能够这么简单地看看书就去考试并通过也是难为的一件事,不过那肯定是似懂非懂吧?哈哈。前两天画了一个围棋盘就去干什么别的事情了,今天又想起来了当时应该是觉得用MFC作这样简单的工作太奢侈了吧?可能等我看看简单得OpenGL再来画会更好一些。

回国真是一种堕落,每天就是浪费时间,头脑空空,活的却很幸福的样子,浑然不知天高地远,一晃就是快两个月过去了。可以更深刻地体会鲁迅当初说的回到故乡发现大多数人还像他离开的时候一样说着从前说过的话,做着从前做过的事是什么原因。当然,现在毕竟进步了许多,时代发展快多了,现在我发现周围只有一部分人是如此吧?包括我自己,如果我还是生活在这里的话,也许也是如此。


六月二十四日 昨天看到火车站的所有火车都因为大雨停开了

关于lib文件要再第n次提醒自己,那仅仅是一个dll之类的接口文件,所以,#pragma comment (lib, "mylib.lib")应该是lib文件,不应该是dll,不过这一点我还不是非常确定,但是至少glut32.dll是这样需要在vc98/include下面有一个glut32.lib,同时并不是说有一个glut.h文件就真的有一个glut.dll或者glut.lib,那个好像是永在svg上的吧?这些可能是和平台的实现有关系吧?Linux上面有了一大堆的symbolic link来解决这些名字版本问题,windows上用环境参数。前几天偶然听某某人的一句话竟然猜想destructor能否不用类的名字,理由是“~”是destructor的标志也许编译器不再检查名字,结果是否定的。又看到居然又constructor声明在protected里面的,这好像和所有的c++的教科书相抵触,实际上很简单,因为这个类可能是很多类的基类,设计者不想让除了子类以外的其他人使用这个基类,当然,你可以把他声明成抽象类,不过这样不是也很好吗?


六月二十五日 昨天看到火车站的所有火车都因为大雨停开了,就把票退了

方法用数据来描述是一个遥远的未来。有生之年可以看到影子的是方法的归一,即泛型的方法,不过这是编译器一层的伪装,真正的不依赖类型的统一的方法似乎是没有的,除了继承与多态看上去比较像,因此,还是不能真正的自动生成新方法,那么能不能组合基本的方法呢?也很难的样子,但总是有一点点可能,除非你能够找到所有的“基本”方法,这总是让我想起我得那个猜想,也许所有的方法归根结底就是NP-complete里面讨论的哪些类型的方法。或者这样定义一个方法,某种样式的状态的改变步骤,这个定义非常地intuitive也很无意义,因为其中的所有词汇概念都是未定义的。不管怎样人必须在现阶段帮助IA学习:定义一个基础类定制出一个基本过程的框架,所有的新概念必须实现基础类的过程,当IA学习完成一个层次要上升一个概念层次的时候,用无差别的过程进行运算,运算的好处在于用时间换取决策的即时性,任何聪慧的个体也无非是平时对模式的积累运算的良好掌握者,并非完全的现场快速计算的优势,因此,与其一个高速的深蓝,不如一个良好模式积累的IA。


六月二十八日天气凉爽,好像是吧?

从广州回来了。去之前和lxd辩论中我总是认为主观和客观之间有一条不可逾越的鸿沟,在主体这一侧一定有一个最原始的假说作为支撑点,否则一切的一切都没有基础。归根到底人类是依靠条件反射和模仿来学习的,所谓条件反射可以解释成大量数据中的重复出现的识别,模仿可以解释成function似的参数替换,也就是书上说的演绎法。学了一个小小的英文:归纳法是induction,演绎法是deduction,一个是从特殊到一般的猜想,一个是从一般到特殊的应用。相比较而言,归纳法应该产生在演绎法之前,并且要比较的困难吧?归纳法能够识别的,演绎法也都可以识别了,有了归纳自然可以运用演绎,所以,核心还是如何归纳?看到“relational database system”才真正明白为什么叫做relational,原来这是一个关系的表达方法,关系的表达可以用图,也可以用表,当然表是可以表达二元关系,图就不限定了?比如,combined primary key有两个fields A,B组成,那么关系可以看作是节点间的路径,那么A,B间的局部图应该是一个bipartite。看到Henry的宝贝儿子的学习过程,我们一致的结论是儿童可以毫无顾忌的摸索实践而没有任何的羞愧感,因此它们可以很快地学会很多成人认为很难的东西,实际上从实践的量来看,儿童绝对不应该比成人来得更快。关于成人与儿童的记忆力的争论,我倾向于认为没有非常大的差别,仅仅是因为儿童的接收更加有选择性,比如大量的信息被他们认为无法理解而丢弃,这样他们需要记忆的内容很有限,自然效率高。关于6岁以前人脑的神经元结构定型的说法是Henry说的,如果是真的,那么这是一个很有意思的问题,因为,究竟什么样的结构这么的重要以至于狼孩错过这个结构发展期后就失去了成为人的可能性,究竟是因为神经元绝对数量的发育迟滞还是神经元结构的过于简单造成的结果?条件反射归根结底是怎样进入也怎样输出,比如视觉的反射不可能反馈到听觉,我们触觉的记忆最终还是反映在触觉。不过且慢!好象人可以有触类旁通的综合感觉,比如听音乐会由视觉的想象,但是这应该是另外的问题吧??


七月七日 晴间多云

我总是会想起《Eagle Has Landed》里面的那个神勇的德军伞兵突击队长Steiner,作为一个军人他毫不迟疑地履行军人完成任务的天职,历尽千辛万苦来到丘吉尔的阳台前,在举枪扣动扳机的一刹那他的致命的犹豫让这个传奇画上了一个悲剧似的句号。为什么在最后时刻犹豫呢?所有的一切努力不都是为了这最后的一刻吗?事后英国警卫对此百思不得其解,还是英国的情报官做了一个总结:也许是他身体里面的一半美国血液让他犹豫了吧?不过即便他没有迟疑地叩动扳机,历史并不能就此改变,也许他的直觉告诉了他这一点,因为从来没有人相信那个暗杀丘吉尔的计划能够成功。关于认识我总是觉得IA不能仅仅作为一个观察者,它应该采用互动式的学习方式,就是试图检验自己建立的假说,用伟大领袖的话来说就是实践。实例教学不仅仅是被动的接收例子,应该还有主动创建检验的例子来证明IA的理解是真正确的。


七月十一日 大晴天

偶然翻到编译原理的语法基础部分,发现了一些疑惑。1。DFA的定义就是每一个状态都要对alphabet里面的每一个字母有定义才对吧?对于错误状态难道不存在吗?也许是我学的使用trap state来表达吧?2。错误装态是nonaccepting状态?还是final状态?这个问题比较傻,我自己的解释是这是两个范畴的问题,对于automaton只有final与非final之分,无所谓对错。但是对于化简DFA来说,就要分对错了,这仿佛是具体运用与纯粹学术研究的差别吧?现在回过头来看我从前自己摸索着写得化简DFA的小程序和书中的通用算法完全是两个不同的方向,我的是从小到大一步一步合并,而通用的算法则是从大到小一步一步分解,其中的难易程度及其可靠性自然是通用算法了。以前miss sunny寄给我的算法,我一直想把它实现,可是每次想要动手就觉得不妥,正如我反复说的,DFS,DFA的问题我画的心思是最多的,仿佛它们是某种本质的东西,我总想写一个完美的通用的基本的框架。也许一个人有了某种经验以后做事情反而会束手束脚,因为你的见识广阔了知道有更好的选择,手头的选择往往看不上了,反倒是一个毫无经验的幼童可以自信地以为自己的选择是唯一正确的选择,义无反顾地阔步向前。这个理由作为我整个夏天的无所事事也许可以作为一个自我安慰的借口,不过,我猜想作为旁观者也许会引申为我得另外的一些决定的理由。人的理由实在是一个奇怪的东西,对于同一件事情不同的人会得出完全不同的解释,我们对于人类的这种无序毫不加以责怪,却对于实现“归纳法”的程序的这种类似的结果非常的不满意,要知道理论本无所谓对错,不经实践检验,任何理论都可以在一定范围内正确。人类不会因为愚蠢的推理而被扣上非智能动物的标签,而机器却有可能得到这样的结论,我们是不是对于机器太过苛刻了?世界上的物种有这么多种,甚至很多的昆虫都被我们认为有一定的智能,可是人类的智能中的某些部分却是其它物种所无法比拟的,这样衍生下去,我们可以猜想当前人工智能的很多方向的最终结果并不能全部都达到人的智能,也许我们将来可以看到很多的研究方向的最终结果使人造智能昆虫,人造智能家畜等等,真正的人造智能人可能只在其中的几个方向上出现吧?

前天全家开车去“北辰山”游览十二龙滩,回来原本要写一篇日记,结果没有完成,现在就在无兴致了,因为,我现在非常的不喜欢平铺直叙的思维。


七月十二日 又是一个艳阳高照的大晴天

有时候你想到了一些事情,可是他们未必有什么用,比如,DFA可以看作是一个function family,其中对于每一alphabet你在每一个状态都是有唯一确定的目标状态,那么对于每一个alphabet来说DFA的目标状态的集合就是他的函数的值域,他的定义域当然是DFA的每一个状态了,这样对于所有的alphabet来说,DFA就是一个collection of functions。我还模糊的觉得化简DFA好像是在寻找maximum matching的过程,不过这一点我始终想不清楚。

我一直想把前两天看到的关于functionoid的有趣的想法记下来,这是我搜索google时候偶然看到的,我一直对于类的成员函数指针能否转化为全局函数指针抱有一定的幻想,这次看到那位大虾的深入浅出的解释才彻底放弃了幻想,这是一位真正的高手,同时他也讲了很多的东西,我的记忆是这样的:typedef void (MyClass::*MemFuncType)(int); 然后你就可以这样调用了:void myFunction(MyClass* pClass, MemFuncType pFunc){(pClass->*pFunc)(5);}我做了一些小小的实验,其中有些结果还是很有意思的,oop中的多态的实现还是挺复杂的,从这里似乎看到了多态的影子。我一开始还想错了呢。只于functionoid,今天可能又没有时间来整理了。总的来说很巧妙,真是奇思妙想啊。简单的说就是把一系列不相近的函数做成函数指针数组的效果,以便可以用index来捆绑参数。比如 typedef void (*FuncType)(int);

FuncType myFuncArray[4]={func1, func2, func3, func4); for(int i=0; i<4; i++){(*myFuncArray[i])(i);}

可是,如果你的一系列函数的参数数目类型不一致你就不能这样了,即便其中只有一部分类似你也不能这样,对吗?不对,你可以求同存异,(时间来不及了,回来再说。)


七月十八日 天气预报要来台风了

《空谈辑》。


七月十九日 台风应该要来了啊,可是很平静的,也许是黎明前的黑暗一样的道理

Rechard和Dragon请吃午饭,韩国馆子比日本料理还要贵。饭后闲聊到Benq收购Simens的手机和Lenova收购IBM的PC的比较,两笔交易可以说交易条件有天壤之别。Benq本身在市场就有自己的渠道,收购一个工厂顺理成章增加产销量,何况Simens原本一直是赚钱的,品牌在欧洲也是占前列,收购中还有五亿欧元的陪嫁,不像Lenova白白赠送IBM好几亿美金的现金,那些员工你是一个也不敢动,因为你自己在当地没有渠道啊。当然这个问题很多人都有分析,无需多言了,我感兴趣的是Dragon谈到一些轶事。比如那个Simens的工厂在一个六万人的德国小镇商雇用了三千个员工,一直想把工厂关闭帮迁到东欧或者中国区,但当地的政府和工会世间觉得反对,甚至工厂的工会为了妥协竟然答应增加劳动时间不提高工资,这一点在欧美的工会可以说是非常罕见的,我听到过很多加拿大的公司在破产保护下工会都不会妥协,可以想象欧洲的工业与工人是非常艰难的。这应该是当初欧盟东扩想要解决制造业危机的一个非常主要的理由与原因吧,但是如今发现中国制造比东欧来的更加便宜,索性欧盟也不扩大了干脆把工厂搬到中国来更好。比如妹妹所在的丹麦投资的工厂在波兰也有工厂,结果发现中国的成本更加的便宜,因此,这里就更大地扩大规模。

长久以来,高收入高消费的欧美用关税与贸易保护筑起了一道堤坝,堤坝内是国民财富的一个蓄水池,虽然工人实际上也在受到高额的剥削但是却可以维持一个较高的生活水平,并且垄断资本也能维持它的一个高的增长率。比如,工厂虽然付给了工人较高的工资,但是日常生活相关的垄断资本通过较高的生活资料价格又可以把工人的收入的很大一部分重新溜回到垄断资本的利润库里面,因此,工人还是受到高额的剥削。这种模式比低工资低消费对劳动人民的欺骗性更大。这一切的前提是要用关税铸成一个堤坝来将国内的国民财富限制在本国国内流动。而全球化的一个重要结果是在这个堤坝上打开了一个缺口把很大一部分国内财富外流到了制造成本更加便宜的第三世界,就好像水桶里盛水多少是有水桶中最低的那块木板决定的一样,虽然第一个缺口是日常的生活资料,很快的那个封闭循环的国民财富循环因为一部分的流失而形成了分流,最终也许整个循环回完全断流,全部转移到第三世界,这也许就是非常多的欧美人民对全球化的恐惧。如同Henry回加拿大时候当地电台的评论一样,本来加拿大这样一个发达国家应该是向较落后的第三世界的中国提供制造品的,可是现在反过来了,加拿大能制造的东西里95%中国都可以提供而且价格更低,加拿大反而成了出口木材石油等原材料的供应商和市场的角色,如今中国又不断地在全球收购矿山森林这些原材料,等有一天加拿大的矿山森林都被中国买走了,加拿大靠什么生存呢?

STL相对来说还是要比AI和自动机来得容易些。我记得以前看到一个自称高手的人写的c/c++程序员成长过程必经阶段里面提到在一个时期你会有很强烈的欲望来主动学习应用模版和各种算法,我现在也许就在这个阶段的开始吧?set<dataType, compType, alocatorType>中的第二个参数是比较函数“类型”的参数,你也许需要typedef一个dataType之间比较的函数的类型,在set的constructor时候会让你带进一个实际的比较函数的对象,就是函数指针了,我只能重新生命一个compType的变量来指向实际定义的那个比较函数,如果dataType是你自定一个一个class,那个函数多半是一个friend函数。说起来啰里啰唆,写成代码其实很简单,这总让我想起在正航的日子里黄连生的口头禅:show me the code。可惜这么简单的问题show code就太不好意思了。


七月二十一日 阴天很凉快

晚上重新看一部老片子<extreme measures>。


七月二十三日 应该是艳阳高照的大热天

今天才突然意识到“侯捷”的例子是不同寻常的用法。我从来不可能想到用这种方法来使用一个模版类如果这个模版类需要一个用户定义的比较函数作为参数,因为最通常的做法就是声名一个函数指针类型及其变量并使这个变量值像真正的实现函数,然后把类型带入模版类型参数,在set这个例子里面我们需要把实参带入constructor。可是侯捷的做法有些匪夷所思,你去声名一个结构并且重载operator(),他带两个你要比较的类型,然后把这个struct带入模版的类型参数,注意这里是把结构当做类型参数,在set的constructor不需要任何参数!我一开始不明白还分别把结构类型带入模版类型参数,结构变量带入constructor结果vc的编译器抱出来的错误让我迷惑了很久,因为vc把constructor当做是一个函数声名了!!!

set<Int, IntCompStruct> intSet(intCompStruct);  //This is wrong! As compile thought it is a function declaration!!!


七月二十五日 晴有云

昨天买了一本侯捷译的《c++标准程序库》觉得好像是得找了难得的武林秘籍,其中讲解的很多东西都是我苦思冥想的东西,并且很多东西经过讲解才拨云见日。晚上和stone去打牌顺便买了一套盗版的《福尔摩斯探案》,真是便宜二十几块,简直难以想象,我不知道在中国这样的国家里只是财富试论斤来买的,真让人痛心,当然我也算是见了个便宜吧,当年我买过原版的,可能在那个时代也是一两百块吧?

同时另一个让人哭笑不得的事情是在中国我这块自留地已经被征服查封了,我按照way2host的技术指导用tracert来试图连接就无法连上,看来一定是咱们的人民政府用某种类似搜索引擎之类的东西查到我说的一些大不敬的东东。也好,省得烦了。


八月十七日 风和日丽

昨天晚上半夜十二点历尽千辛万苦终于回到了家,结束了近一个月的云游。其间我的足迹遍及张家界,贵阳,大理,丽江,德钦,这里是我走过的地方


八月十八日 早晨在梦中听到下雨声

读两本候捷翻译的关于泛型的参考书有一种感慨:从前号称学过c++实际上不过是在c的基础上加入了oop的思想,这个并非是多么了不起的东西,因为oop不过是一种编程的思想,并非什么语言吧?至少这是我当初学习的时候看到的话。如果不学stl以及c++的标准库,那真是入宝山而空回!我想大多数程序员对于函数对象(functor)以及函数适配器(function adaptor)都多少有些吃力吧?至少我是这么认为的,在这里我找到了当初学习functional programming的感觉,当你必须象操纵数据一样地操纵算法的时候,我是非常的头疼的。

vector<int> v;  。。。vector<int>::iterator it=find_if(v.begin(), v.end(), bind2nd(greater<int>(), 5));

这里对于greater<int>(),我曾经迷惑了好一会儿,后来才明白我必须传递一个有比较功能的结构或者class的“对象”,因此,调用它的constructor会产生一个临时对象,然后以“传值”的方式传递参数给“函数适配器”bind2nd。把“方法”或者说算法以“传值”的方式传递参数很微妙,在书里面有很多的讨论,因为很多的方法已经有了某种预定的“状态”了。


八月二十五日 天因似乎有雾的样子

部分地完成了《新西行漫记》,一方面我现在变得更加懒散花了好几天在学习wc3,另一方面,存储在朋友手机里的信息始终没有完全倒出来。其中很多时候我觉得我只是一块引玉的砖,人的思想的火花真的需要碰撞才能产生,那么朋友之间经常角力顶牛未必不是一件好事,因为这时候也许是最能产生新的火花的时候。


九月七日 天晴

回到了加拿大还赶上了蒙特利尔黄金季节的尾巴。时差还是没有完全倒过来。住处没有了Internet生活其实会有更多的内容。


九月十九日 天晴

昨天是中秋节,早上和同志们去china town吃早茶,下午和roommate去朋友家包饺子,吃得撑了,晚上散步看了看月亮,加拿大的月亮就是比中国的圆,也大,也亮。早上起来用scheme写了一个quicksort,相信我,对于初学者应该不是很容易的。总结了几个小问题,先编一个小专辑吧


九月二十日 天晴

早晨起来头晕目眩,去跑了跑步,回来花了快四个小时才写出来一个permutation。用scheme操作实在是不容易,至少对于我来说是这样的。不过话说回来了,写在就是让我用c++去写一个permutation的算法,我也是很头疼的,我也必定是把一个数组还有一个游标的东西当作参数来传递给一个递归函数,当然还应该有另一个思路就是递归式地进行swap动作。这些应当都是作为scheme的一个参考吧?问题是在LISP语言里没有什么引用的概念,一切都是传值,这实在是非脑筋的一件事情。当然这四个小时还是有价值的,因为当我在做combination的时候,花的时间就不到五分钟了。

顺便把一个定义函数指针数组的小问题贴出来。

九月二十八日 天晴

今天在下载的visual studio2005的测试版安装好以后第一次玩了一下。总体感觉首先就是为什么我的电脑这么差劲,根本就像死了一样,其次,vc++至少在模板的支持上终于赶上了一步,比如我看书上的其它编译器支持的template-template参数现在终于可以了!太让人兴奋了。


九月三十日 好像天是晴朗的天,只是模糊记得昨天狂风大作,(还是今天?)

我被cnf和scheme折磨得不成人样,今天好像为他忙了快十个小时吧?一个人不吃不喝能够支撑多少时间?总算勉强维持了我的荣誉,最后写了一个勉强可以工作的版本。昨天看到网上一个大虾写了一篇关于部安装visual studio在命令行下编译的最精简的文件组数,试了一下总是有一个clui.dll的无法安装语言的错误,我想大概是中文操作系统的问题吧?不过,这种盲目的尝试究竟有什么意义呢?我是说我自己异想天开的想再vc6.0下运行vc2005,这样就算勉强可以,可靠吗?后来去参加vc2005的发布会,居然该地点了也不通知我!气愤!以为我是谁呀?nino说定义既然是要给所有的饰物用来定义的,为什么不能自己给自己定义?似乎有理。ww把我转述的uncle Red的名言“If women don't find you handsome, at least they should find you handy.”中的handy作了别样的解释,顿时妙趣横生,handy=at hand。说得很通的,的确如果有个召之即来的,挥之即去的男人来使唤当然好了。

 


十月一日 天气晴朗

老赵提醒说“国庆快乐”,我回答说,“国庆节在七月份,因为我已经不太承认这个所谓的国庆节了。”早晨读了一会graphic,明白了一些课堂上听不清楚的地方,实际上很多被大陆来的所认为intellectually shallow的东西未必是他们想象的简单,因为你不知道你从小被灌输的来得所谓知识被你认为是理所当然,天经地义,因而当你在看见他的时候便以为很简单,不去做认真的思索,这也许是国人的通病,因为中国的教育体制在学生很小的时候就已经把人类经过几百上千年摸索的成果无条件地教授给十几岁的娃娃,这个时候的孩子那里有可能明白那些经典背后的伟大,即便是在大学时代,大多数人还是幼稚天真的可笑,(至少我看到的大多数是这样。)而这个时候,我们的助教们又无条件无代价地“传授”了人类几千年的积累。学习是要付出代价的,最经常的代价就是失败,没有经历失败的选择,很少能够真正明白正确选择的,而大多数的中国式的教育基本上不提倡学生又重新摸索实践的方式,这从宏观的国家教育投入产出比来看是对的,一个穷国无法承受昂贵的高等教育培养一个在单位时间内不能够掌握定向培养的实用技能的毕业生。然则从个人的角度来看,这是一个人生的缺憾,比如一次驾车出游的经历中,大多数的良辰美景都在呼啸而过的奔驰中一掠而过,如果能中途不时地停留片刻,拍两张照片,徜徉一刻,慢慢地欣赏回味那该多好啊。这才是人生旅途的真谛吧,如果你不是很急切地奔赴天堂或者地狱,不妨时时地逗留片刻,你会在旅途的终点感到一次无悔的旅行的。在跟随Erdos Number=2的Rapheal学习linear algebra的时候才真正开始理解向量和矩阵,然则这种深邃的自然界的两大客观关系的标识工具在大多数我接触的中国学生眼里却是那样的不屑一顾,让我心里真不是滋味,有时候甚至觉得自己也许过于迟钝无法和“正常”中国人一样领悟其中的诀窍。难道笛卡儿的三维坐标系是能够从诗词歌赋盛行的封建中国式教育中产生吗?难道说崇尚形式逻辑的古希腊人建立的严密推理的几何学能够在中国式的沉迷于神秘主义哲学的土壤中产生吗?中国究竟有无产生过一个真正意义上的自然科学家?(狭义的自然科学不包括医学)你是否在每次使用三维坐标的时候都想到那只不过是我们默认的标准base的线性组合的系数而已,我们的标准base((1,0,0)(0,1,0)(0,0,1))的选择的巧妙掩盖了自然深邃的美。你是否在听到勾股定理时候深切地感受到中国人在剽窃毕达哥拉斯的伟大发现?勾三股四玄五能够说明两直角边的平方和等于斜边的平方码?要知道在中国连平方的正式概念都没有,更不要说仅仅发现一个特例居然要等同于发现一个普遍关系,如果仅仅认为这仅仅是中国式的命名法则,那么你对于泛政治化的民族自豪感的宣传的认识就过于天真。


十月四日 天气晴朗

吃饱了没事干,看网络上讨论的热火朝天的关于清华的那个博士生王垠退学的问题,看到另一个也是清华的他的学长的评论觉得有些不可理解,仅仅关于使用字处理文件就代表了一个学院的学术水平吗?如果这样的话北美随便哪个大学不都是领先中国很多吗?毕竟这便是用linux,pdf,ps等等的工具的遍地都是。“MIT有scheme,剑桥有Haskell”着一定说明什么吗?也许我有一点不知天高地厚,我想functional programming如果不考虑效率的话,随便一个有点水平的计算机的学生都可以用bison之类的编译工具编一个出来的,关键是其中的思想才是精髓的,而作为工具从来就是使用者自己选择的结果,如同道路,原本没有路,走的人多了就成了路,原本这类小工具都是使用者人人都有需求的情况下,用的人越多,改进的就越好,使用商业软件与不使用商业软件对于大多数非专业编程人员来说很大情况下是无奈的选择,比如在一个美育盗版软件的环境下,有什么趁手的免费的工具就用什么了,不是不想用好的,一是太贵,二是没有。当然我没有在王垠的环境下呆过,体会不到,不过总是觉得国内的人有时候发的牢骚有些莫明其妙。不过,那个小妮子长得好像还不错的样子,是个女生吗?我一直有些不确定,因为我一直以为计算机是女人的天敌,没有听说过有什么女性计算机科学家,当然Bacon的女儿Ada除外,不过这个十九世纪的女人不过十项发明赌博机器而已。


十月九日 似乎阴有雨

虽然说graphic不是很难,但绝对不会轻松,单单修改tutor的样板程序算什么本事?我决定自己按照oop的原则设计一点架构,不过实施起来还是有些难度,拼了一天仿佛强弩之末,精疲力尽了。wesnoth害得我好苦,昨天几乎熬了一个通宵,结果中午还要去参加programming competition,题目算是容易的,不过我头昏脑胀的我们这组只完成了两个得了个第二,当然这不是什么正式的比赛。wesnoth总结出了一个经验:最好的进攻是防御,最好的防御是进攻。我一直想尝试编译这个程序,可是这种从linux移植到windows的工作实在是辛苦,比夏天那个难多了。昨天晚上饥肠辘辘地和小孟,小朱去吃牛排,真是好,吃的我路都走不动了,那个牛排真大,沙拉真多,吃不完啊。技术上有什么心得吗?零零碎碎似乎不值一提,你看我现在思路都是并行的了,头脑不清楚啊。


十月十二日 似乎阴似乎晴

把前一两个星期的工作做一个小结以证明我还活着,还能写写小程序。graphic的oop的工作我决定暂时放弃,因为正如Mr.zhang说的那样在我还没有对全局有一个清楚的认识的时候做这个工作大多是一个失败的结果,尽管我不完全承认这是一个彻底失败的尝试,至少我自己都不太满意,因为运行效率也许灰尘为一个大问题,还有就是旋转的问题。Scheme的作业也贴出来以备以后的查询。Hanoi的code太ugly了最后没有采用。cnf-dnf的转换化简应该会用在project里面。


十月十五日 天因有雨

凌晨一点半钟,我似乎还是没有睡意。耳边是黑豹的《放心走吧》,眼前是这个夏天云游的杂感,往事的回忆对我来说仿佛是另一个世界的小孔成像投过来的上下颠倒的图画,一个人的想法是多么的难以捉摸啊。我对于重复的工作是这样的不耐烦以至于为了使几分钟的简单矩阵运算而去写一个小程序来做,也许是我对于自己的计算能力极度不信任吧,也许是对于graphic理论作业上写上计算从略觉得有些内疚吧,或许是我对于些重复的代码就不觉得是重复?无意中又让我对于vc++6恼火了一把,他对于模板的拙劣的支持非常令我气愤,比如一个模板类用到另一个模板类作为数据成员,其中的数组长度依赖于模版参数居然不支持:template<class T,int size>class Vector; template<class T,int size>class Matrix{public: Vector<T,size> vect[size];...};这样不行吗?真是盼望着有一天能够用上visual2003。AI里面的SAT的讨论有些眉目了,可是组员们好像并不理解或是明白我再说什么。graphic的project更是让人气恼,两个老外简直是白痴,一直在推敲proposal的英文语法,我甚至萌生了推出的念头,有时候我真想自己一个人一个组,说句不谦虚地话,scheme我完全可以一个人单干,但是这样对于我来说并不会长进太多,毕竟和别人讨论能受到启发的。比如关于clipping,我当时就很傻以为只可能保留平面函数小于零的一侧部分,为此我还煞费苦心地去切除对称的一侧然后旋转,那个老外在问我问题的时候,我才从tutor的错误中突然发现了改变符号的办法,这种灵机一动也许是要激发的吧?只是我一个人思考的时候总是想不到。晚上看了一遍George Orwell的经典小说<animal farm>改变的电影,在欢笑之余你总会对于人类的悲惨命运难过,猪竟然是所有动物里最聪明的,只因为他们善于模仿人类实施对于其他动物的专制统治?

早晨起来继续我的无聊的工作去用程序来计算graphic里面的旋转变换,一方面我现在已经不适合使用计算器了,学习线性代数时候那帮小留学生各个算得飞快,我却总是出错,果然我的程序发现我昨天晚上花了半个多小时的计算是错误的,hopeless!当然为了半个小时的工作画上一两个小时用程序来解决是否在中国这个唯生产力论的社会里能否生存是一个大问号,看样子我只能困死在加拿大这个冰天雪地的世界了。不知不觉中我的一个早上就这样过去了,看到Alex关于继续坚持最短的term先处理的message,我对于我的坚定信念又产生了怀疑,因为深度搜索中尽快到达搜索的叶子节点可以帮你的程序尽快返回,这种好处与减少返回的次数但是每次搜索的深度加深之间要怎样取舍呢?这种两难的问题总是让人困挠啊!甚至于我现在开始怀疑我是否应该选择出现频率最高的变量还是出现披绿最小的?这简直是将大厦推倒从来的想法,我应经头昏脑胀了。在一个系统里面究竟哪种元素是矛盾的主要方面,和多数元素都有联系的还是那些和大多数元素没有联系的元素?比如我是某单位的领导要去满足单位里每个成员的分房或者福利工资上的要求,这些难缠的雇员间有些有着之间或者间接的利益冲突,有些甚至是完全矛盾的要求,那么我的策略是什么呢?实现尝试满足那些与大多数人都有利害冲突的刺头儿呢还是下安抚那些老实巴交总是与世无争逆来顺受的软柿子呢?难道中国官僚阶层中蕴含着比世界顶级computer scientist都高明的人物,要知道这一类问题是无数科学家经年累月都没有找到好的解决办法啊。究竟矛盾的主要方面灾哪里呢?头疼啊!肚子饿啊!知觉总是告诉我那些与大多数人有矛盾的人总是最难各个方面照顾周全的,好像应该首先满足他们,可是知觉上来看在试图满足这些人的时候你遇到的反复是最多的,因为左右为难的情况最容易发生,也就是搜索的返回情况应该最多,是吧?难以置信???吃饭吧?


十月十六日 有雨

早晨起来把graphic的最后一些小问题解决了,还是有一些成就感的,当然美中不足的是大的framework是借用tutor的,我只是一个模型创建者,而且还是一个比较蹩脚的,没办法我不是学美术的料,也不适合做那些精细的工程,这方面的工作还是engineering的人比较强,他们可以与fine arts的人比美,一个是能够画精细的三视图,另一个是能够画美轮美奂的素描,我对此不在行也不是非常非行感兴趣,毕竟我们有更大的工作要做,比如金字塔的大的解构的设计,至于具体建设交给工程师们去干吧。比较值得一提的是我写了一个好玩的小函数可以把一个物体人以切割成多个部分,当然就是利用传进来的函数指针不断地调用clipping函数而已,不过挺好玩的,想象一下starship上有多少个小块,一个一个地分割多麻烦,这个不是很好吗?当然很粗造了,另一个是解决了camera旋转与model旋转的小问题,就是一定要先建立view-coordinate然后旋转model的时候要把model移回到view-coordinate的原点再旋转,这个在做model-view的时候大家都知道,但是当camera移动了大家就可能忘记了,因为观察者总是以自己的眼睛为世界的中心的,所以,才需要一个world-to-view的这么一个transformation。


十月二十一日 终于天晴了

昨天和前天都是无比辛苦的一天,考完midterm之后晚上又忙到半夜debug程序并且加了一个简单的heuristic函数,现在回过头来看我在cnf的认识上比很多同学要差得多了,一些基本的想法与思路都是前人已经反复尝试过的,在tutor的网页上有很多的讨论,可惜我一次都没有去看过,实在是太不应该了,以后要力戒之!昨天忙到连吃饭都快免了,晚上回到家的路上想到冰箱里空空如也,再怎么饿都要顺路去补充给养,临付帐的时候看到柜台前的巧克力牛肉干当时真是饿得想买,后来还是忍住了,没有标价格天知道要几块钱,我前面有个流浪汉样子的人物边排队边吃,我当时还觉得她挺自觉地,吃过了巧克力,面包,可乐,剩下一个空包装还拿在手里准备付钱挺好,可是结果收银员刚打价码,他就不知道嘟噜了什么跑掉了,把个收银员手里拿着吃了一半的面包在发呆,劳动人民苦啊,要不是穷到家了谁肯干这个?昨天早上跟踪我的sat程序真是有些苦不堪言,还好些过编译器之后,没有什么事更痛苦的tracing了,其实也不过是面对几百行如同天书的scheme中去一个个的断点查找,倒是让我体验到了一个所谓getlasterror的异曲同工的妙处,我的程序对于简单的cnf问题运行都还对,碰到几个复杂的就老实出莫名其妙的错,有时候队友时候错,有着明显的指针虚指或者随机性的烙印,我甚至一度怀疑gambit的实现上有问题,scheme本身的trace我用不惯,而且这种trace是发生在几千几万行之后的,我怎么也到不了,只能用最原始的显示参数的办法,可是有的函数被调用的次数太多了,出错之前都不知道要显示几千次,根本不行,甚至我也不知道在什么地方发生的错误,(现象是知道,但是真正的原因在哪里是个问题。)一个办法是把出错的函数一个个拆开来到这顺序调用,但是一个前提必须是在出错前的某个时间点这样环境才模拟成一致,这本身就是一个问题。二是一个getlasterror的idea,我在每个可能出错的函数调用之前都把当时的信息写入一个buffer里面,这样在出错前的最后一次调用我可以看到,因为写入缓存比拼木显示快多了,并且总是覆盖前面所以不用看天书一般的查找log,当然对于某些问题我需要比较前后结果的,我就涉及两个buffer,依次写当前和上一次的结果,这样可以看到两次之间的结果比较。三是通过控制输入缩小查找范围,不过这很有些土,我只好写几行小脚本做那些繁琐的初始化动作和调用过程,这样终于化了n个小时才找到了那一个随手的错误,很凑巧的这个错误只在输入的cnf有redundant variable, i.e. (AND (OR A B A) D...)的时候才会发生,而我的错误导致的时一部分的list里面是有些没有预测到的东西,实在是运气。以后我就记住了,对于我认为不可能发生的情况不应该否定他的存在而应当在程序里面让他出错,否则后果不堪设想,这就是为什么看到windows里面和stl里面很多函数写的一些让人不可理解的if,以前很傻得以为那些人不会写程序多写了很多没有用的不可能发生的情况,现在知道我有多傻了,再有人这样嘲笑我的程序,我以后就坚决地对她微笑。:)程序的写作有很多时候是对个人的否定的否定,任你有多聪明机敏,多么眼空一切,你终有一天会认识到自己的愚蠢,当然每个人依照个人的天分与努力这一天的到来只不过早晚而已,本人看来是有些驽钝,这一天来得出乎意料的早,不过,反过来早一天领悟这一点也许天分还不算太差,自我安慰一下吧。今天又想明白了一个极其弱智的问题,在AI的讲义里面有一个refutation的自动推理算法通过negate conclusion,导致contradiction来证明结论,或者中文叫做反证法,其中滑键的方法是这样的: in cnf:   (!A,B)^(A,C) ==>(B,C) because if A then B else C. So, either B or C is true. In other words, (B,C) in cnf. 结果我居然异想天开想把这个用到cnf证明里面来化简输入,殊不知这犯下了一个天大的错误:I am supposed to prove this cnf to be true. And I am using it as a rule to simplify itself which already assume it is true. This is called proof by begging. 用中文来说就是自己证明自己,这个反证法永远不会成功的:to prove A is true, by proof with contradiction, you need to negate it and try to find contradiction. What I am doing is just negate A and try to find if !A is contradictive with A which is for sure. But this contradiction can never prove if A is true or not because no matter what truth value A is, !A^A is always leading contradiction. I am just proving a theory by itself. 这个简单的问题看起来有些弱智,不过我当时还真是转不过弯来,因为老师的讲义里面有这个化简得方法我问什么不能用呢?后来才有想到一层,如果要去证明cnf是true的话你必须先驱negeate那么你想过着negate的过程要用多少次的De Morgan Law?因为,cnf已经是一种化简后的形式,断无理由再趋复杂化,只有我们再从knowledgebase推理简单的结论时候,这种negate才比较好用,这似乎是两类不同的证明,一种是从小的方向累计巨大的结论,另一种是从巨大的公理库里面寻找简单的推论,究竟哪一种工作更加困难呢?从涓涓细流累计成汪洋大海还是用精卫填海的精神熬干大洋?应该是一样吧(当n都是很大的时候)?


十月二十二日 天晴

昨天又在实验室里耗了一天,主要是写报告,当然主要是我写一些设计思想,实现原理,其他人补充修改,几次teamwork的感觉就是老外比中国人认真的多,写报告的时候可以使字斟句酌,反复修改,这样子的精神我原来不是很理解,上过英语写作就知道为什么了,因为英语老师的批改比这个还严格,不这样写行吗?当然我的文章都是被称作semi-chinese-english的让他们费解不少。其中也发现了我算法中的错误,在我使用simplification的过程之后压根就不可能发生variable的truth value冲突的问题,因为他们早就被替换了。几天准备去zellers买两条leevis的牛仔裤,只有17块钱。

下午是一个历史上非常痛苦的下午,我觉得我像一个白痴,这种感觉不论怎样的必要,对任何人都是一个绝对痛苦的体验。这种痛苦以至于我不愿意再次面对与回忆。


十月二十三日 天晴?

还是让会以冲淡痛苦吧,这是上个星期奋战的结果,一个cnf-sat的程序,算法上平淡无奇,heuristic也是人人都想得到的,就是count the occurrence of each variable and then proceed backtracking on that list which is sorted by descending order of absolute value of occurrence of variable.那么有什么特别的吗?就是特别的辛苦,如果完全一个人写的话当然是比较辛苦的了,至少对于我是这样的。今天读书发现的一个小问题不知道对不对


十月二十五日 天阴沉沉的

当选择对大多数我的同龄人早已成为过去完成时甚至是过去完成进行时的时候,我还在用虚拟语气探讨将来完成时的可能性


十月二十八日 天阴沉沉的,的确是阴沉沉的

昨天奋战了一天居然是去解决象8-puzzle这样的trivial的问题,实在是有些让人尴尬,当然了不作不知道,做了才知道自己很多的想法都是错的,hill-climbing的方法是要每次碰到以前的经过的节点都要update以下新的heuristic value,而如果按照A*或者monotone的原则你可以放心这种事情不会发生,但是这并不等于。。。且慢,等我看了结果再说,主要的问题是我是否自动就建立了最短路径呢?我可以保证找到最好的结果,但是我找的过程是否是最短的呢?我当时的感觉是不,现在开始怀疑了,如果我每次都是正确的路径那么我的确使用了最短的时间找到了最短的路,可是这一点我不信,因为,1,这是纯粹的greedy algorithm,2,如果这样,每次我和必要去记录我已经走过的结点,如果我不需要走回头路的话。这个问题有以下部分原因起源于我的疑惑,DY只能让我将信将疑,因为我不能相信这样一本权威的教科书会有这种纰漏,毕竟已经是第四版了,不过我始终有种感觉所谓的A* algorithm根本就是一个名字上的误区,正如书里面说的他仅仅是一个定理,一个完全无法应用的理论,正如操作系统里面所谓的完美的预测未来的一个算法一样根本无法实现,当然他的用处是给人们指明了一个算法的方向昂去接近他,因此在我看来monotonicity才是一个真正意义上可以操作的算法,因此,其中的heuristic的衡量标准才变为了可以测量的“世纪路程的cost”。可是如果再把它归回为无法衡量的cost of all possible path那么岂不是和A*本质上一样了吗?这就是我的怀疑,感觉上两条曲线最后都重合在goal state,即便上他们在初发的时候不重合,他们也有可能是一致的,(这实在是矛盾的说法。不过这是我的直觉,因为两条曲线都是同样的monotonely non-decreasing并且一条是另一条的upper bound)

关于我的glutobject现在可以看到一个希望了,的确是提高了不少的工作效率,我至少用它来画一张人脸只需要去考虑位置大小形状颜色就行了,再不用去写那些烦人的transformation了。

15puzzle运行无结果,我就把它放在学校的服务器上浪费资源去了,这就是使用stl的好处你的代码真正使write once,run everywhere,不像java那么蹩脚,(不过我是不懂java不应该乱评论吧。)等明天再看结果吧。也许会被管理员臭骂一通吧?当然这样做的代价就是程序的运行效率上稍稍地打一些折扣。


十月三十日 天气好得出奇

如果你拍你最强大的王牌师去进攻一个山头,猛攻一天一夜没有任何结果你该怎么办?我的选择应该是撤退或者换一个进攻点。glutobject就是这么一个结局,也许从一开始这个设计就是有很多值得讨论的地方,结果在不断涌现的问题中我的信心在不断的消减。首先是透明物体必须在不透明物体之前画的问题,这个还可以用flag解决,其次是我突然意识到很多组合物体有一致的运动的时候我总不能一个个的重复设定参数吧?这个用各个list也还可以解决,等到说看到我的螺旋桨的旋转的诡异我有些崩溃了,因为我一直怀疑我的矩阵变幻的类有问题,等到说我花了两三个小时调试才突然意识到原来是acos函数的值域的问题,比如arccos()的范围是0到PI,那么你想要实现360度旋转,你必须自己调整。也许这一切都还可以接受等到我发现尾翼的旋转时隐时现,我有些绝望了,因为我以为是3D-Rotation中另外一个类似的asin()的值域的问题,可实际上是display callback函数的强制刷新的问题,不过我对于swapbuffer和glutPostRedisplay是否等小事怀疑的,不过等到我发现不透明物体能被透过的时候,我的信心彻底丧失了,这正如早上我发现任何一个非完全对称的物体必须要两个响亮才能定义方向的问题一样,我对于我的的设计思想是否合理开始彻底怀疑了,这样复杂的系统能否让组里面的其他人采用呢?正如mr.zhang先前的意见,当我对于一个系统还没有从整体上有所了解的时候,要做任何的系统性的设计基本上是要承担失败的后果的。就此打住,留一个版本吧。

这两天倒是做了两顿比较丰盛的晚餐,但这也难以冲淡郁闷的心情,AI的考试和倒是真的有直接关系吗?我究竟要做什么呢?是否应该安于命运的选择?有时候会觉得加入自己是一头猪,一头没有思想的猪,一定要比现在轻松的多,不过话说回来,《animal farm》里的猪可是个个都是思想家,革命家,看来就算做头猪也要不断的学习马列主义的,因为那部George Owell的小说里面的几头猪都是有来头的,Old Major是列宁,拿破仑指的是斯大林,或者是赫鲁晓夫也行,这些可都是些有头脑的猪啊。

晚上去PA店买水果,看到街角一个穿紧身黑皮夹克的女留学生签了一匹硕大的狗在散步,心中颇不是滋味,想来人生不如意之时十常八九,心情愈发的低沉,子非鱼,焉知鱼之乐,子非鱼,焉知鱼之悲。


十月三十一日 天气不是很好

今天早上在放弃glutobject之后很快地把第一人称视角加了进去。毕竟使用现成工具和制造工具的难度是不可同日而语的,这也正是人和动物的本质区别,昨天我应该说差一点进化成了人,可是很不幸最终我还是放弃了,重新变成了猴子。在十月的最后一天把作业贴出来当作对于夏天无所事事的一种补偿吧,也当作是对于AI考试一塌糊涂的安慰吧,我不是天才不可能明白我不懂的东西啊,当然更主要的是有些学过的东西也搞错了,这是不应该的。过两天好啊好研究一下alpha-beta-pruning。

忘了说了,我的15puzzle的程序在学校服务器上运行被管理员关闭了,我的帐号也被封了,我其实不是故意的,我以为dfs使用的内存并不多,不过想来原因是因为要记录所有搜索过的节点,这个数量非常的惊人,我问过教授又没有什么实际的办法,他也说没有,仅仅提到过类似于hashing,不过16个数字还能怎样压缩呢?

我的电脑有些古怪,我有时候觉得我的电脑好像被人控制一样不可思议。最后一次提醒一下,“...”operator是不能用在class的member function的。


十一月三日 天气看不出来好坏

早晨起来花了一个多小时才找出来驻留在我电脑里的混蛋程序,我是通过taskmanager找出其中的端倪的,这是一个叫做expoirer.exe的由blue knot公司生产的广告程序,它的本事显然没有在我笔记本的那个厉害,只不过在注册表里的启动程序栏里把自己加载而已,不过这个程序太过分了,他每隔一段时间自己运行,也就是ie的变形体打开一个广告页面,是可忍孰不可忍?并且和我的微软拼音输入法的功能键好像发生冲突了,(这一点我不确认,反正我一股脑把另外一些开机就启动的驱动也删除了。)这一点让我很是恼火,同时也再次证明了一点,便宜没好货,国内的盗版软件的下载一定要小心,谁知道他不是作了一个木马在等你上钩呢?


十一月四日 凌晨怎么能知道天气?

Hugh Grant的电影总是幽默智慧并存,<Notting Hill>里面Thack offer Anna各种饮料,Anna一直说No,然后Thack只好问她是否对所有的问题都回答No,Anna想了一下只好说No。Thack的同屋Spike试图开导他,问他究竟有什么心事,Thack告诉Spike是关于那个美国女孩,他打开了Pandora Box,Spike若有所思地说,tricky, tricky,他曾经认识学校的一个女孩子叫pandora,可是从来没有看过她的box。《four wedding, one funeral》里面的joke就更多了,不过我大概只能偶尔地好像网络延迟一样地在几秒钟之后才笑一下。还有一件事我最近终于搞明白了,如果我不幸离开了concordia我的苦日子就来了,你完全可以现象一个非三流大学的计算机课程的繁重,我能不能还这么轻松地活着都是一个问题。

真是艰苦的一天,终于完成了这么一个看似简单的alpha-beta-pruning算法的模拟,看来我完全不是学算法的料,最后我发现书本的算法描述可以说是间接得到极点,但是完全够了,只是如我这样的人无法领悟,最后还是看了一下中文的算法书明白了一些疑惑,不过,终于学懂了一个算法,还是值得高兴的。我想不一定所有的人都已经领悟了吧,也许我不算最差的吧?关于并行处理的一系列咚咚我觉得充满了迷雾,这个“迷雾”如果放到graphic倒是不错,因为作业里面需要,可是哈啊哈。。。

今天旁听了一个博士论文答辩非常有感触,在回国的夏天里跟着林红也去厦门大学去旁听过一个数学系的博士论文答辩,当时当然专业的东西听不懂,不过教授问的问题还是明白的,比如其中一个评委会成员固定文每个人一个同样的问题,请介绍一下你的论文发表情况,而且对每个答辩者仅仅就问这个问题而已,其他的人有时候问的一些问题也非常的业余,连我这个门外汉也听得懂评委会听不懂,也可能没有时间看论文,因为有些评委是外地的,并且问的问题就一两个,实在实在是流于形式。而在这里一个加拿大的二三流大学里,我看得都脊背发凉,评委有一张密密麻麻的问题准备着诘责你,毫不留情面,哪怕是自己指导的学生,其中的问题很尖锐有些几乎是要推翻整个论文的基础,比如我对于软件工程所知甚少只能大约明白个大概,但是也看得出来答辩双方实在是非常认真地准备过了,我想在这里想糊弄人是不容易的。这和政治经济文艺艺术不一样,那些东西有时候你能把自己蒙过去了让自己相信自己是对的,很多时候你可以真诚地让别人相信你是对的,比如演戏时候演员自己以为自己就是角色最后人人都信服了,好像布什这种人坚信自己是对的,摆出一幅坚毅决绝的样子让你不得不能不信服他的信仰,又比如中国的经济学家们气势恢宏地做出种种结论让草民百姓大小官员们不得不信服,这在科学工程这类以实验结果为基础的学科面前完全没有用,因为我们相信的东西从来不是人,连证明这样的手段当初就是为了不依赖人的直觉的结果。也许应该重复一下我的老生常谈,在中国,你相信一件事是因为你相信说这个事情的人,你反对一件事情是因为你反对者个人,反之也成立,也就是你相信一个人就相信他说的事情,你反对一个人就反对他所说的事情。

《four wedding, one funeral》里面关于婚姻的一个说法非常地经典,那个葬礼的主角曾经说过当两个人终于说光了可以说的话题之后为了避免无言相对的尴尬于是他们决定结婚,也就是说婚姻只不过为了避免无话可说的尴尬,可是我们大多数的时候又看到女人唠唠叨叨抱怨丈夫不理睬他的絮叨,这真是矛盾啊。其中另一个潜台词是婚礼是婚姻的催化剂,电影里的几对伴侣就是在婚宴上认识的,所以另一个关于婚姻的说法是眼睛的诱惑,你看到了你就被吸引了,其他都是次要的。另一个好笑的 笑话是Charles为了摆脱尴尬和朋友聊天问及他以前的女朋友怎样了,朋友说她不再是他的“女朋友”了。Charles自作聪明的说你摆脱了就好,不然像她那样不停地背着他勾引别人还是早点散了好,朋友非常地愕然呆在那里半天才说她现在是他的妻子了。对了,终于听到了那句经典“比麦当娜少,比戴安娜多”。最后一个教训要记取的就是在婚礼那天不要和从前的情人见面,尤其你的未婚妻学过拳击或者跆拳道之类的更是要小心谨慎。


十一月五日 很难得看到蒙特利尔居然有大雾的天气

“子非鱼,焉知鱼之乐”这句话原本有三重的意思。

也许“子非鱼,焉知鱼之乐”还有第四重意思吧?

落英缤纷,秋意无限。循幽径尔登皇家山,心境豁然开朗。坐在枫树林中被金黄的落叶簇拥着,随手翻看一本《pattern matching algorithms》,没读几行就心潮起伏热血翻涌,开篇的一两个算法就有点石成金的感受,又仿佛醍醐灌顶的兴奋,忍不住掩卷远眺,天地之大真超乎井底之蛙的想象。看书的时候当你看到你的想法在几十年前就已经被人做过时候,你会既高兴又难受,高兴的事是你的想法不算幼稚,难受的是你出生的太晚了。(当然你现在能够想到和几十年前别人想到是截然不同的,今天我们有这么多的资料媒体,潜移默化中你并不知道这是你自己的想法还是受到外界的影响的,多半是后者,借用以前讨论plagerism时候看到的老外的警句,就是亚当时代里,亚当是幸福的,因为他不用担心自己会剽窃别人的思想,因为所有的想法只有他自己告诉自己。


十一月八日 阳光无比灿烂

早上花了一早上写了一个简单的propositional logic tester for zebra puzzle.


十一月九日 阳光,仿佛羞涩的小女生只敢躲在白云作的窗帘后面

昨天和同组的老外们讨论A*和monotonicity,发现几乎每个人都比我对这些概念认识的更加深刻,Alex解释说A*好像一种好的bounced&bounded可以给你一个“回头是岸”的机会,因此比普通的bounced&bounded有更好的效率,这个认识非常地深刻,这正是admissible的本质,monotonicity出乎我的意料反而是更加ideal的一个虚无飘渺的理想境界,我是在大家的反复解释下才明白的,只有上帝才由这种从来不犯错误的heuristic,它当然是比允许一定范围的错误的A*要更加的可遇不可求了。其中非常关键的一点就是我当初不知天高地厚地怀疑的一个地方就是,两点之间是否可能有比起直接连线更短的距离?我们这里不讨论超级平面,或者两点之间可以有多条连线,答案当然肯定的,因此,monotonicity的论证也就无懈可击了。(是吗?我好像还是不太相信。)

我想再次提醒自己的事就是inverse-compiler-compiler的想法,以及extened-DFA的想法。下个星期必须要完成所有slides的阅读,还有能不能去图书馆学习呢?


十一月十日 没有阳光?

OpenGL一个要小心的是,一定要先定义了light,才能enable他,不过这一点我想大多数人都认为理所当然,除非是我这样胡乱尝试才屡屡让系统报错。一个基本的教训使你不能够在gluLookAt之前画物体,这好像是以前就应该了解的东西,我好像忘了一干二净,但是你可以在glutLookAt之前设定光的位置与方向,这样光的位置方向是和你的view-coordinate相对无关的,也就是不论你怎样转动camera你看到的都是一样的,如果再之后设定方向与位置,则和你的camera有关,(这里面我好像中文也不会说了。)也就是说转动camera看到的光线效果不同。并且,这样设定的光的position是比较合乎逻辑的,因为,我按照例子里面的directional light只用坐标(1,1,1,0)来定义方向,只有在之后设定才make sense。

我觉得我就是一头懒驴,一旦吃饱了就什么都不想干了,和我夏天去德钦看到的那些马帮的骡子一样只能天天半饥半饱才行,当然要拉货之前马帮是要给骡子吃一些精饲料的,于是我也买了一些黄豆以备不时之需。:)

重新看了一遍《Master and Commander》,其中一句经典的话是“The strength of a nation depends on the courage of few.”想起类似丘吉尔说到二战中英国抵御纳粹进攻的胜利时候说得从来没有这么多的人要感谢这么少的人,大概有异曲同工之效,在遥远的东方一个天天号称崛起的一个老大帝国却很可能缺乏这么少的人。大英帝国的荣耀在他的海军,因此帝国的靠着海军征服了世界,中国今天不知道他的荣耀在哪里,如果是血汗工厂里的女工,那么至少应该把他们当作帝国成员的一分子,遗憾的是工农联盟现在已经不是中共依靠的对象了;如果靠的是民族资本家,那么就应该让资本家们都加入共产党,这就是三个代表的真正含义。


十一月十三日 阳光灿烂

OpenGL 这类的东西让我讨厌的在于有些东西是单凭我自己很难解决,而一个有经验的人只是一句话的问题,比如几乎每个学习图形的人都会碰到的问题,他让我困惑的一个宝贵的早晨:为什么地面不反光?

下午project meeting了整整一个下午,还是卓有成绩的,第一发现了我的alpha-beta-prune的一个bug,其次整理出了一个清晰可行的project2的algorithms。晚上我又几乎不动脑筋地写了一个bruteforce方式搜索zebra puzzle的小程序,第一次运行的时候我才意识到可能范围太大了,结果意外地发现了一个tester的bug,我又很快地缩小了一下搜索范围。

晚上借口程序运行又看了一遍《有话好好说》,这到底是一个灰色幽默还是黑色幽默,影片里面有着强烈的不安定因素,因为摄影机是手扛的,镜头是动荡的,取景是夸张的,剧情是跳跃戏剧化的,仿佛一个动荡的年代的躁动的心情,我不知道为什么每次看这部电影都有着相似的感受。(不知道吗?)也许这是一个时代的缩影,的确这是上一个世纪中国社会动荡中发展的反映。

侯湘婷说我是一只鱼,张雨生说我是一条一天到晚游泳的鱼。


十一月十五日 2005年的第一场雪就是这么悄悄地来的

今天和supervisor会面还是有些收获的,有些问题是我曾经想过但是从来不敢去考虑的,比如有些运行期才能知道的东西,你怎么可能在程序编译期进行预测或者就算在运行期进行控制这是多么的复杂的问题呢?还有依靠编译器得到的函数的dependency来进行程序的slicing,这是多么的ambitious的问题呀。下午teamwork一下子搞到了九点多钟,饿的我半死,不过还是很有些收获的,我觉得组里面的老外每个人都很出色,尤其是alex非常的有想象力,很多时候我很佩服他能够想出那样的点子。我在上一次的meeting里面已经知道了我的alpha-beta-prune有一个大的bug,可是现在懒得出奇,就是不肯及时改正,这里再次提醒一下,alpha和beta是可以交叉同时进行的!还有一个我一直想要做而没有做的事情是用15puzzle的运行数据作为程序的学习资料自己去找出规律,我想这应该比手工去找高明多了吧?听说hex game的那个manitoba的中国教授使用手工找出的规律,我实在是佩服他的毅力。如果我的方法可行的话,我不知道会有怎样的震撼效果?


十一月二十八日 好像有雾的样子

一直没有整理作业,今天要考试了什么也不想干就把我认为我比较自豪的我写得最复杂的一个Scheme的函数贴出来吧,这是AI的第二个project里面一个重要的函数,依靠它我们可以最大限度地减少搜索的范围,这个主意也是Alex想出来的,就是shortest-path


十二月一日 天阴沉沉的仿佛很忧郁

昨天看自己以前的日记完全不相信自己半年前的想法,所做的一切竟会被忘记的一干二净,我只能安慰自己说每个人都会忘记的只不过程度不同,同时也许很多人忘记的东西本来就没有什么价值,比如说一个人天天回忆自己以前在某条马路上看到的戴鸭舌帽的牵大狼狗的小留学生有多么漂亮有什么真的价值吗?:)真正的问题是遗忘也许是一种必要的学习过程,昨天上课讲的genetic algorithm,中文就是遗传算法,我一开始对之嗤之以鼻因为在我看来这完全是一个懒人在绝望无助下的最后的选择,比如考图形学时候题目做不完了剩下最后一分钟的时候老师提醒你选择题你可以尝试你的运气,的确,在做不完的时候,或者对于mission impossible的时候这种所谓的算法的确是一个死马当活马医的好办法,对于人类遗传基因这样天比文数字还要大的问题除了束手无策就是比赛运气了。不过当老师go through了一个例子后的comment确实让人振聋发聩,正常的搜索假如你因为greedy走错了一步你几乎注定不能翻身,也就是你注定走上了一条封顶的路,再多的努力与运气都不可能改变你的选择,而靠着遗传算法这样的交叉与变异,你还有咸鱼翻身的机会,当然你也可能从正确的路上偏移,这就要看你的运气了。回到最初的遗忘的问题,当我的记忆模糊时候,原先清晰的思绪也变得模糊,但是难道不可能原先因为过多的干扰导致的错误的思路因为去伪存真而变得清晰吗?仿佛大浪淘沙一般我的思想经过了风吹雨打的考验存留下来的也许是大自然的真谛,也许“借我一双慧眼把你看得清清楚楚”应该改为“请给我时间让我忘却你的好与坏”,自然当你忘却了一些“应该”忘却的记忆,世界就变得如此的可爱,不是吗?很可惜我无法忘却我现在还没有吃饭,我无法忘记我还是饥寒交迫地生活在异国他乡,哦,不对既然我已经准备入籍了这就是我的家乡,我怎么差点把这忘记了,我应该忘记我曾经在梦中梦想过的我在遥远的中国生活的时候可能会过上的荣华富贵,这样我会感觉好一些的。顺便说一下,我一向认为遗忘是计算机实现抽象的一条可行的办法,你忽略一些属性以后然后再对两个class进行属性比较你会发现它们本质上是一样的,前提是有意识地忽略或者忘记另外一些属性。我能否忽略我的低级神经中枢的对于食物以其他的一些请求呢?我好像就是不能忘记我还没有吃午饭,冰箱里面也没有什么好吃的,为什么我不能忘却应该忘却的?我以前在日记里面说从前的科学家说科学是一个严厉的master,那么在我看来computer science简直是一个冷酷无情的master,我始终无法忘却这辈子我都应该应为这个残酷的master而忍饥挨饿,对于还没有发生的事情我能否忘记呢?


十二月三日 好像早晨在下雪

看网上电视里《我爱我家》总是吃饺子,馋得我央求同屋的捞着一起包饺子吃,吃得撑了就费了很多功夫写这么一个无聊的ID3算法,这个算法很简单但是很有效,恨我一年前的想法很像,因为非常的intuitive,一般人都能想得出来,不过我认为最神奇的inductive的基本原理都无外乎如此,在比较异同的过程中发现变量与常量,实际上人工智能的精髓就在于找出pattern以便减少搜索的范围,当然从哲学的角度来看,我也同意书本的说法,这种所谓的学习真的没有学到什么,因为这些结果都是从原来的knowledge  base可以直接推理得到的,只能算是一种对知识库的refinement而已,然则真的有什么样的天才可以从虚无中悟出真理吗?按照马克思主义哲学来看不可能有先知先觉的圣人,那么人工智能如果要去追求那种超凡的智能很可能是一种失败的尝试,因为我以为所有的结论都是或多或少从从前的基础中获得的,换句话说应该是一个可以从当前知识库中进行resolution-refutation可以得到的,只不过当我们对当前的KR的定义有不同而已,比如在学习数学分析的时候,有不少证明我认为我可能一辈子都无法想到的原因是老师的证明完全跳出了当前的context,比如让你去证明微积分的问题,结果你有一种线性代数或者几何的方法来证明,这算不算是天才的想法,但是仔细一想,其实也没有什么只不过你不会把当前的搜索范围扩展到整个数学的范围罢了,从这里我们可以看出其实你永远不可能想出你没有接触过的方法,只不过是直接或者间接而已。由此我在想象人工智能这样的学科在西方的研究领域里,在没有大的哲学思想的引导下走入歧途时很可能的结果,也许我应该抽空去loyola看看马列毛斯的关于人类认识方面的著作。


十二月四日 晴,干冷

因此,你要问一个人的前途在哪里,一个民族的前途在那里,一个种族的前途在那里,一个星系的前途在那里,一个进化体系的前途在那里吗?在发展中。。。在进化中。


十二月七日 晴,阳光灿烂地让人心醉

写程序也许是治疗失眠的良药。磨蹭了好几个星期来有心情去改正alpha-beta-prune里的一个简单的bug。为什么?也许是觉得有些失败吧?


十二月十三日 早上好像下过雪?我不记得了

《大话西游》实在是很难理清其中的来龙去脉,其中的时空因果的交错完全是一个所谓的无理头,逻辑与时间有着某种深刻的联系,正如同逻辑与几何关系之间某种偶然而又必然的关系一样深不可测,昨天在睡觉前模模糊糊看了半页纸的“数理逻辑”其中说到某些公理其实和其中的wf的具体内容无关,是无条件成立的,由这些“公理”可以沁出无数的新的公理,也就是generalization。我印象中在AI课本里类似的动心叫做"substitution",不知道两者是否是一回事,实际上再说一遍陈词老调:数学的普遍性使得他在各个领域以不同的面貌出现。然而如今我看到的却是比数学更加普遍的“类似于”公理的公理,这实在是一种模模糊糊难以捉摸的感觉。我的记忆力越发地衰退了,以至于我有时候幻想我可以忘却饥饿,忘却我只是一个想成为somebody,想要做something,但是又懒又平凡的凡人。

graphic的project也许是我目前最难以启齿的一个,我的同伴完成了大部分,而我仅仅做了一些似乎是微不足道的工作,无非是飞行控制系统,(比较麻烦的是怎样让飞机总是沿着当前机身的方向前进而不是x或者z轴,我当初的想法被证明是一个错误的尝试,因为我当时想以两个向量加一个坐标来表示飞机的位置及姿态,但是向量的计算是一系列的线性方程组的求解,这是很麻烦的,因为有很多分母为零的问题,并且将来旋转的平滑过渡是很麻烦的问题,最终还是要回到角度定义,因此又何必用向量呢?)现在我回到了角度的方法证明是对的,要描述飞机的位置及姿态,你需要一个坐标和三个角度,不过,三次旋转中的第三次有一点点地技巧,否则会有莫名其妙的效果。碰撞测试的算法其实非常的简单,就是应用两个响亮的内乘积为其夹角的余弦来求解点到直线的垂直距离,我为了定义子弹的飞行用类似飞机的飞行控制参数及一个坐标加三个角度,在家上一个启始时间。爆炸的模拟就更简单了,无非是把碎片当作子弹一样处理了。相比之下我当初的好高骛远的设计想法实在是太好笑了。

刷牙的时候忽然回忆起我以前的想法,世上本无所谓逻辑,逻辑的本质不过是状态中deterministic的表现,因此,我们才会看到逻辑存在于万事万物间,并非是万事万物有逻辑的存在而是万事万物中我们唯一可以认识的就是这种deterministic的模式,因为,知识就是信息的压缩形式,只有deterministic的压缩方式才是可行的方式。由此看来,可以对于道德经的开篇作更深一层的理解:道之为道就在于道存于无形,而任何有形之算法都不是真正的“元”算法,那个可以产生所有算法的算法从来就不是什么真正的算法,因为“元”算法如果可以入普通算法一样的表达他必定不能产生所以的算法,这似乎有一点点Gudel的incomplete theorem的味道;名之为名就在于它不能“名”自己,因为能够命名万事万物的“名”是不能够有形的,否则必然有他所不能命名的“名”。诚所谓“道可道,非常道;名可名,非常名。”

我想我唯一可以有希望成就的是一个哲学家,因为按照《围城》里赵辛楣对于哲学的评价就是:“在我们这些做实际工作的人的眼光看来,学哲学跟什么都不学全没有两样。”正如同中华文化历史中被世人津津乐道的糟粕一样:既无法证明它的正确,也无法证明它的错误,不立文字,意会言传,因为但凡付诸文字就有推敲的可能,有了被反证的机会,所以但凡颠扑不破的真理从来不敢真正写在书里,写在书里的都是从这些所谓公理衍生出来的定理。(以上这一段纯属无理头的胡诌,真正有意思的是“圣经模式”,所谓相信上帝的人都是被耶稣的所谓“奇迹”所说服的,但是这些“奇迹”又都只存在于圣经里,因此,圣经是典型的用圣经来证明圣经本身的正确,和我以前所说的用马列毛斯来证明马列毛斯自己。)


十二月十四日 今天和昨天一样的冷

互联网的技术在改变着人们的生活方式,这几天再看PLU的网上电视直播,实在是一个我当初做梦也没有想到的媒体传播形式,不知道PLU直播是什么吧?星际个人联赛。


十二月十六日 今天一大早醒来以为起雾了,实际是漫天的大雪

今天完成了我负责的部分的报告,我想还是有些价值的,或许对于飞行控制,及碰撞检测的简单算法是有保留价值的。

看PLU联赛的间隙瞄了一下新闻,感觉有两个值得注意的问题,一个是WTO的前途问题,一个是中国对于农民的生存的问题,这看似很遥远的无关的话题实际上是一回事。早在很多年前,我们那位姓朱的总理就采取了长痛不如短痛的办法,预见到了今天无法避免的严重问题,想想看发达国家仅仅百分之几的农民对于GDP贡献不大的农业却要提供巨额的补贴是为什么?是因为这是一个国家的战略利益之所在,中国难道不是供重要吗?想想看好记忆的人口要从土地上,农村里被赶到城市里作贫民,这个社会变革还小吗?当初的英国的资本主义原始积累是让羊吃人,今天不过是换成了美国的棉花,加拿大的土豆之类而已,GATT的存在正在越来越受到怀疑,这个问题是我那时候的毕业论文,当然我和今天的大学生写论文并无二致,只不过摘抄一些别人的观点,加上必要的注释形成自己的看法,拼凑成一篇字数合乎要求的所谓论文,不过其中的引语还记得,所谓GATT(关贸总协定,即WTO的前身)不过是一个富人俱乐部,真正的穷人是来看富人间勾心斗角的热闹的表演的,正好像《围城》里说的洋车夫把客人拉到饭店门口别指望能跟着进里面吃饭,照样回家喝西北风罢了。这也不难理解世界上的区域经济越来越兴旺,各个大洲都是关起门来拉帮结派划地分赃。全球化虽然不可阻挡,但是区域经济组织的发展必定能起到抗衡的作用,甚至最后世界的大战时在不同贸易组织之间进行的。想起什么了吗?《星球大战》不就是这个意思吗?正如《围城》里说的巫医神汉信口开河却往往一语中的。我虽然不信占卜之类的无聊的动心,却也和书里面的张买办一样相信自己有hunch,往往能看到事物的本质与潮流。中国在十年到十五年间将完成资本的原始积累,并且新兴的民族资产阶级将完成本阶级代言人的选择与培养,中国的政体将开始彻底改变,数以亿计的农民将失去土地成为真正的城市无产阶级,而发达国家的经济危机将在一次更加深刻的技术社会革命之后发生,一个对于世界经济严重依赖的中国要么轰然倒下,要么挑战世界的霸主,过程与结果都是无法预料的。


十二月二十日 今天一大早醒来发现我又过了一个庸庸碌碌的一天

对于一个只有starcraft或者diablo这样的任务的凡人是否应该承受空乏其身,行弗乱其所为的折磨呢?答案是对的,因为那只是一个必要条件,平常人都会经历,只不过只有非常人才会动心忍性增益其所不能,我没有增益我所不能充分证明了我不是那种非常人,因为我宁愿挨饿也不愿意费精神询问一下我的贷款为什么没有下来。

关于事物的证明我忽然想起了我在云游期间碰到的两个西班牙人,其中一个应该是学生物方面的,它的一个经典的论断是:当有人问你一个为什么的时候,直接回答他为什么不?这真是一个世人的俗套,因为当我在学computer architecture的时候,那个不学无术的家伙就是这样做的,我问他为什么相对地址在程序里面有着更重要的地位,它的直接的回答就是难道你认为绝对地址更重要吗?这个答案当然间接证明了什么不过这是一个trick,一个不需要有任何先决条件就可以作出的放之四海而皆准的trick。当我们要认识一个事物的时候,最直接的办法反而是认识事物的反面,这真是彻彻底底的irony。难道不是吗?当我们给一个爱问问题的小孩子穷追猛打的时候我们不是常常这样用什么是男人来解释什么是女人,或者什么是大的来解释什么是小的。也许其中深刻的内在是我一时无法体会的,但是也许直接的答案是指一类的概念往往是有某种对称性,如果你把是与不是也成为对称性的话。另一个直接的引申是概念的定义又时候就是内涵的范围划定,那么当我们用否定来定义一个事物的时候无形中就划定了概念的内涵,因为根据the law of excluded middle和the law of excluded contradiction,逻辑就是非此即彼,不能模棱两可,当然我承认这种形式的定义和严格的定义相去甚远,因为真正的recursive definition一定要定义一个terminal的例子,而这类定义是一个mutual recursive definition,即A是由!A定义的,!A又是由A定义的,永远没有一个头。当然骗骗无知的幼童也许是可以的。不过这其中真没有什么深奥的东西吗?在学design and analysis of algorithms的时候,老教授证明A=3是这样做的,证明A<=3 and A>=3,很明显这两个同时成立的解集的交集是A=3,这里面也许有什么数学上的逼近的思想,不过间接地看这个关于证明的问题,就是当你肯定你知道一个事物的全部的时候当且仅当你也知道这个事物的对立面,否则你一定会在这个事物与其对里面的边缘徘徊着不知所措。假如这个时候你被一个恼人的幼童缠着问什么是这个东西的时候,不知所措的或者不以为然的你都有可能回答他这个东西的对立面就是它的否集,不知道你自己的conscience是否会躲在角落里冷笑。


十二月二十二日 又在下雪

现在除了天天盼着PLU的直播就是用骡子下载电影电视剧,又看到了《编辑部的故事》,过了这么多年才发现从前的日子是多么的值得回忆,那个时候的人心里想的是多么的简单,单纯,忽然记起了当年的葛玲曾经是我的偶像,一个知识女性,受过高等教育但又对于世俗时尚充满小市民的憧憬。

上了三年学终于又明白了一个最简单的道理,勤奋刻苦往往是成功的最基本的保障,我现在可能最缺的就是这个。

晚上老张请吃饭,和两位大牛加上一头小猪彻夜长谈,请教计算机中的一些问题,获益良多,很是高兴,比如再次总结性地明白了计算机并行处理的三种模型,线程级,比如Hyperthread,指令级,比如pipeline,向量级,比如MMX。等等。

又明白了一个真理就是我今天肯定是比以前学懂的东西要多得多,而感觉经常碰到比自己强得多的人的原因不是自己越来越笨或者自己越来越谦虚而是越学得多你会知道自己懂得越少,你看到的别人懂的东西越多,比起两三年前什么都不懂的时候自我感觉还最好的时候相比较长进了一些。

下午又开始看从前的课本想要明白怎样判断两个语言是否相同,除了画DFA并化简又没有别的办法呢?并且语言不是regular的怎么办呢?


十二月二十五日 不知道是什么天气

昨天晚上被拉到大教堂看弥撒,坐在那闭着眼睛就想睡觉,因为听唱诗班在巨大的管风琴伴奏下宛如天使般的歌声真是一种美妙的享受,当然我对于音乐的评价一向是以多块让人入睡为标准的,从这点来看教堂的圣歌当属第一,我睡得很香,不过我不认为这是对上帝的亵渎,因为我本来就是一个无神论者,来教堂只不过看看热闹。

今天包饺子请了两三个同学来吃,神聊了一下午,因为我冰箱里什么都没有了,(原来也没有什么可以吃的,哈哈)只好不留大家吃晚饭。这就是我的圣诞节。

Smiley face