wpe7.jpg (11495 bytes)

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

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

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

作者:黄教授

二〇〇六


一月四日 天气不算坏,大街上的霓虹灯显示着零下4度

早上去参加所谓的citizenship的考试,再过一个月就算是这个国家的正式公民了,只欠吃饭时候浏览的那些垃圾中文报纸里有一篇文章也是写公民考试,题目是《归顺》,一幅酸溜溜的仿佛天朝大国的臣民跑到从前的附属国当二等公民的心情一样,真是典型的阿Q精神,入乡为何还不随俗,当“白雪枫叶”国家的子民有什么亏待的呢?虽然是穷困潦倒可也算是生活在the most fertile country in the world,这是我在考试完后等待的时候看到的宣传移民的广告上的口号。

去年的这个时候,当我犹豫不决地想着我的年终总结的时候曾经总结出所谓的国际惯例中的那个“惯”字既是习惯的“惯”字,也是惯性的“惯”字,也就是说一件制度的形成往往如这样习惯成自然,从一开始的偶一为之到后来的一发而不可收拾,不过,中间必须经历过一个能否持久地考验期,但愿一个好的习惯能够在朋友的监督下不至于太快地夭折,那么本周么完成,如何?(现在在报告的截止日开始写作似乎成了我最近养成的坏习惯,虽然这也是入乡随俗的一种表现。)

每当我在忙得不亦乐乎的时候总是期待着将来有一段完整的空闲时间来做很多我想做而做不了的事,可是当这个时刻来临的时候我在干什么呢?天知道过去的十几天我是怎么生活的?洗澡的时候想起了从前听说过的希腊神话“奥德赛”,其中希腊英雄乘船返家的时候路过海妖的岛屿,俄底修斯知道没有人能够抵御海妖得歌声就让水手们都塞住耳朵,并把他绑在桅杆上,这样虽然海妖得歌声是那样的令人抗拒航船照样向前驶去,我想连半人半神的希腊英雄也无法抵御一些世俗的诱惑,世上基本上没有什么人能靠个人的毅力坚持自己的信念很多年吧?也许那些真正执着的人都有一些束缚防止自己觅食灵魂吧?


一月五日 又是大雪纷飞的日子

早上去买书又花了两百多刀,心里很有点心疼的意思,不时心疼钱而是心疼自己万一又没有读书才让人心疼。冬季的学期我的运气总是比秋天要好,好比苏联红军总是在夏秋防御而在冬季反共吧。想起了我对于java的一窍不通好比《围城》里说的学旧体诗的干预说自己不懂新体诗,而学写新诗的决不敢说自己看不懂旧体诗,学c++的人总是敢于盛气凌人地宣布说自己不懂java,或者不屑一顾地说我不学,而学java的似乎不太敢这么反过来说,因为java实在是傻瓜化的多余了一点,当然我试着装了一下visual2005也是一样地感觉,程序惊人的庞大笨拙,我得可怜的机器几乎停止了,没办法只有卸载。


一月九日 又是又是大雪纷飞的日子

去年的总结是迟到的,今年的也许该说无可奈何的了

有同学来要AI的资料,让我又勾起了一段伤感,本来都已打算盖棺定论的句号又被临时改成了逗号,不,实际上是顿号,因为仅仅是短暂的停顿而已,并不会从此变成惊叹号,当然在外人看来这一切不过是遗传的问号,明天再结束的军号后面再添加两个中国式的军号就变成了尽在不言中的省略号。。。

晚上终于下决心把去年的衣服全部送到洗衣房去清洗,当然最主要的原因是一个下午的“学生骑士团”浪费了无数的光阴,强迫自己去洗衣房看“组合算法”。这门课看了个开头却总有相见恨晚的感觉,从前我曾经苦思冥想过的种种问题其实都在这其中,甚至我念兹在兹的窝自己眼中的AI的问题也都在这里面可以找到答案。然而我又有些困惑,照教授和作者的说法这方面早就是计算机界的经典领域,自从上个世纪70年代后就已经有了定论,据说此方面的书甚至都只有那以前出版的。我曾经看到一种评论说,天才Erdos所感兴趣的大部分问题都是这个领域的,据说其中很多是死算机科学的奠基石,或许大师把后人的工作都干完了。

《Blade Runner》究竟有多少种结局呢?这部电影是我个人认为的最经典的几部科幻片之一,其成功之处在于电影的音乐与画面,在没有CG制作的时代这个是绝对的经典,其中更有一些时代的痕迹时非常有意思的,那时日本正是如日中天的鼎盛,打油买下整个美利坚的气概,影片中处处露出美国人那种不满又无奈的心情,洛杉矶成了东方人的天下,到处是象形文字的广告和标识牌。

《The Island》(逃出克隆岛)可以说是带着深深的DreamWork的制作痕迹,这几年他做的一系列科幻片几乎如出一辙,《Pay Check》,《Minority Report》,《A.I.》。。。甚至在很多特技上你都可以看到相似的影子,题材的住址(theme)大都是一个:科学进步的成果如果被滥用会怎样?当然西方社会的科幻片绝大多数都是阴暗的调子,充满了对未来的恐惧,《The Day After Tomorrow》,《Water World》看到了人类对气候的影响导致灾难的降临,《The Time Machine》里面反映了人类对自然规律干预所带来的backlash,在六七十年代对于宇宙飞行的热情消退以后,科幻片似乎成了灾难片的代名词了。


一月十日 又是又是大雪纷飞的日子

我想去桂林

组合算法的书实在是比较的艰深,看起来几乎是逐行的证明,当然比起数理逻辑的通篇符号推导还是容易得多,那种书我在图书馆看到几乎都是剑桥的天才写的,这方面还是老牌名校强过美国的名校,因为美国主要是有大公司在背后撑着。好像一个小时就看了三四页。

我整天都在用电驴下载电影,它的图标很有意思,就是一直蒙着眼睛的懒驴。俄底修斯如果没有被绑在桅杆上是过不了海妖统治的海域的,人如果不像驴子一样被蒙住眼睛在这个五色使人目眩,五音使人乱耳的世界里是不可能拉磨的。

在所有的007系列里面我只喜欢一部《The Living Daylight》(黎明杀机),罗杰姆尔太过于老态龙钟,虽然是一个英国绅士的派头,却和间谍的身份不符,皮尔斯虽然有相貌有气质,却过分英俊了些,表演的成份太多,因为间谍的相貌首先是大众化的脸谱,只有提摩西达尔顿让我觉得合适,同时这部戏构思完备,跌宕起伏又不失真实,再加上其中的主线是反对当时前苏联入侵阿富汗的正义之举,因此无论艺术性还是思想性都远在其他剧集之上。当然我在大学的时候喜欢那个女演员,就是那个拉大提琴的莫斯科音乐学院的女学生,多年之后才知道她的名字叫做玛利雅德堡。

下午看大决战很受鼓舞,指挥员的决心和毅力往往是战役胜利的保障,于是下定决心从今天开始每天晚上去图书馆看两个小时的书,就算是在那里睡觉心里也比较踏实。晚上看了一个半小时的书睡着了两次,这本分布式计算设计的书实在是空洞,至少开头部分都是写在纸前网络那门课里面学过的,到最后十分钟才看到比较有趣的RPC,感觉和我那个时候在“正航”做得那种DCOM没有什么区别。回来的路上想到当时教网络的老师,至今我仍然心存感激,在这所名不见经传的三流大学里我还是着实地学到了一点点皮毛的,其中有很多教授都是那样的诲人不倦严谨认真。不小心又看到两个小留学生,门面全部用白粉刷过一遍,妖冶的好似Van Helsing里面吸血鬼的情妇一样。:)


一月十一日 不是大雪纷飞的日子

做了一个很奇怪的梦,忽然糊里糊涂地进了城堡,一个完全陌生的城堡,城堡的主人根本没有见过,也根本没有怎么说过话。看到Java里面的所谓BufferedReader期限完全不理解为什么要这么多此一举看了两三遍说明才恍然大悟原来就是类似于C Language里面的library中fgetc的意思,这个东西在学comp444时候最有体会,还自己写过,这样看来Java也不都是傻子,这样的包裹方式也还是挺有意思的。


一月十五日 终于迎来了严厉的天气

来到加拿大才知道写报告的重要性,似乎中国的大学很不重视这方面,结果我总是在这方面吃大亏,前天comp495的报告差一点就被否定了,因为我那根本就不像是报告,简直是一个小小的summary。反观这里的同学写报告无不非常认真,各是有其重要,而且不管怎样一定要加上一些图标,table index, figure index也很重要。今天被小皱交到实验室学习,还是有一些小小的收获的,有一段时间没有玩c++,编程的时候有些翻来覆去的,想法多了路子多了,考虑得多了,反而变得慢了。以前不知道怎样定义一个数组类型,现在也知道,其实和函数指针类型的定义很像:typedef  unsigned int Set[20]; 以前不知道什么时候留下的概念一直认为short是8个bit,真是好笑,今天才发现是16bits。


一月十六日 天气变得更加严厉

今天冒着严寒去银行把政府退给咱的几块钱存到户头,毕竟对我这样的人来说钱是非常非常重要的,顺便去实验室下载安装MPI/LAM,我实在是搞不懂是否我可以在任何一台服务器上使用MPI?并行处理对我来说好像是天方夜谭,cluster对我而言是圆的还是方的?当然也明白了一个很幼稚的问题,学校服务器上面有一个文件服务器叫做www,在上面的文件时可以webpublishing的,我以前一直以为只有alcor才是唯一可以网络发布的,看来对于网络来说我的知识比普通专业的多不了多少,努力学习吧。为了使自己振作起来,我决定去健身房办一张卡,毕竟一个月40块钱的YMCA会员的消费超过了我的经济能力了。昨天,杨大虾给我讲了一些东西,只觉得非常的清楚,但事后好像忘了很多,什么MPMS,SPMD,SIMD。。。我对这些还是非常的陌生,看看MPI的接口说明感觉很多都好像是同步的东西。handle,communicator从那个函数获得呢?不对称的网络是不是也可以使用MPI呢?PVM是什么碗糕?我现在记忆力下降的速度几乎是exponential,因此把我要做的是倾泻下来吧,我准备这个学期学会emacs或者vi中的一种。(这样的雄心壮志要被所有计算机系的学生笑掉大牙的。但是我确实不会,只会用pico或者nano。)

晚上去图书馆看书的计划只实行了一天,我现在几乎就是hopeless了,那么今天晚上在坚持一天吧。


一月十八日 天气阴沉沉的

学校图书馆的书借了很久都没有看过,书非借不能读也的借字不是从图书馆借的。今天翻了一下design pattern,因为杨大虾说OOP有三种境界,class-->pattern-->??我忘了,反正我现在还是在第一层或者一二层之间也不用关心最高层是什么了。我对于这一类极高的抽象的东东的看法是你绝对不可能跳跃式的学习,不要以为最高层的武功威力最大就从一开始就学最高层的武功,实际上武功都是连贯的,你没有钱一层的基础根本不可能理解上一层的设计,否则只是纸上谈兵是的卖弄名词,这类人可能你每天都能遇到很多,口若悬河实际并不知道怎么去做。我的体会是那些pattern也不是什么天上掉下来的不过是些代码写多了总结出来的,而它的真正意义是在于一种程序员之间的共识,大家能够很快地交流,也就是说有了共同语言可以一点就通,所以这本书说实际上有时候设计这些pattern的名字是一件更难的事情(这也许是我杜撰的,我是这么认为的,携带马的时候我在给方法其名字上画的时间非常的多,有时候为了把心爱名字保留给最合适的方法费了不少心机,也许学过软件工程的知道团队必须有共识,共同的语言,大家有共同的vision,对我个人也是一样,一个月以后我回头看我的代码我感觉如果是看别人的一样那就是失败,但是如果名字起得好,我很多时候甚至重写一遍都写得差不多。)不过,闹笑话的是我看到那些pattern以后很高兴,就拼命去找有没有源代码,后来google了一下觉得我还是没有理解真谛:framework是一个设计好的架构,是别人想好了方法名字流程,数据流,你自己往里面实现具体的代码,当然你是可以找到这个源码的。可是pattern仅仅是一个设计思想,超越了framework你怎么需要真正的源代码呢,他仅仅是一种设计思想,你可以找到范例但是你绝不应该有现成的源代码呀!否则不就成了library了吗?书上说的library和framework的比较很生动,library是更侧重code-reuse这方面,它是尽量地不涉及设计部分,而是一些最基本子常用的底层方法的实现,应该有着最少的assumption从而有着最广泛的重用性。这正好跟framework相对,因为framework是设计好的架构却没有具体的实现,一边又最大限度的设计重用性。写到这里我突然想起来了三种境界是:class-->framework-->pattern,总之我大概就刚从class浮上来的途中吧。但是并不能说这三个东西是迥然分离的,实际上人的思想从来不可能绝对地停留在一个层次,这些最高级的抽象是低级实践的总结,比如classfactory的想法我很早就实践过,那个时候想写一个深度搜索的“套路”,(DFS)就写了一个框架,因为DFS和DFA很像,无非是定义出所有的搜索选项,以及目标条件,然后或者用递归或者用循环去搜索,并输出结果,当时不想把类的名字写死(hardcoding),就用一个指针代替,让后来的人自己定义产生类的方法,当然你可说这是纯粹的继承,但是本身pattern就是一种设计思想,具体用什么实现方法并没有限制啊,也就是实现的设计。不知道这样总结pattern是否正确。

顺便说一下,小时候看的电影《未来世界》之前确实有一部《西部世界》。现在看六七十年代人们对未来的想像很有意思,你可以比较一下那些人们预见的是对的,哪些到现在也还是幻想。


一月二十日 天气暖和的不得了

新闻上说莫斯科遇到几十年不遇的严寒,蒙特利尔确实我来的这几年里最暖和的一个冬天,简直和厦门的冬天感觉一样,下午单单看着那明媚的阳光如果没有注意到地面上的积雪那就是厦门的气候了。整天在下载《古钿任三郎》来看,感觉很是心驰神往。

另外下载了一个<TLS>的另一个结局,是一个皆大欢喜的结尾,两个主人公各自有了新的生活,不过总是觉得还是原本悲剧式的结局更加得艺术化一些,所有的问题都不作解答,观众可以做任何的猜测想像,而这个另类的结局仿佛为了满足观众的好奇心与怜悯心所做的一个安慰剂。一个由这三个句点组成的省略号被导演进行了一番挖掘演绎,一个变成了问号,一个紧接着的惊叹号,其间穿插了若干个逗号,顿号,在一系列的似曾相识的引号过后,(都是一些可能在那里看到过的吧)突然一个破折号引出了一个大大的句号。仿佛两颗原本在各自不想干的轨道上运行的行星在一个偶然而又必然的时间地点不期而遇,在即将擦肩而过的瞬间彼此因为对方的万有引力而被吸引,在俘获对方的同时也被对方俘获,从此变更的轨道在继续近似原本的公转轨道的同时还成为彼此的卫星,在互相的卫星式的旋转的同时多多少少保持原来所剩无几的自转。然而这种混合轨道的旋转的不稳定性导致终于有一天彼此卫星式的旋转的离心力大于彼此间的向心力,其中一个卫星不知是因为原本的惯性还是因为另一颗恰好路过的行星的吸引力脱离了这个不稳定的系统,结局大约有这么一些可能性:1。两颗脱轨的行星彼此都和另外的新的行星组成了一个相对稳定的卫星-行星子系统;2。其中一颗与其他行星组成了新的卫星-行星子系统,另一颗恢复到了最初的轨道继续无休止的绕太阳公转;3。两颗脱轨的行星都恢复到了当初的轨道期待着下一次的捕获与被捕获;我们现在看到的<TLS>的结局应该是第二种,男主人公组成了一个稳定系统,女主人公留下了很多的未知数,然后突然在消失了三年后,三颗行星在大街上相遇了,在短暂的重逢中并没有回答女主人公的结局是什么,一般的猜测是至少目前还是在公转中,然后片尾音乐结束了故事。我看到的下载的这个结局是近似于第一种情况,主要是花了半集的篇幅交待女主人公怎样自觉自愿地重新被另一遇到的行星捕获与被捕获,悬念没有了,味道也淡了很多。大凡情理之中意料之外的事情是本有可能性,智者察之,因势利导之,于无声处听惊雷。

今天吃多了就去了健身房,资本主义残骸劳动人民的办法就是让你穷得顿顿只能吃肉,好像养猪场的饲养员一样的残忍,不要以为我是在说笑话,你只要看看这里的中国人总是买那些特价的食品就知道这实际上等同于用最少的饲料喂肥一头猪一样的功利主义。我不想成为这样的受害者,因此我决定少吃或者不吃。就好像为了避免死读书而拒绝读书一样。

Unique factorial representation.


一月二十三日 天有些阴郁

《古钿任三郎》似乎也走到了它的尽头,那个经典的谜题被揭开:对面走过来一个男人头顶上还顶着一个红脸盆。这是什么意思?我想绝大多数人都猜不出来是什么意思,因为这是一个应该为大多数人所熟悉的问题,那个男人一边小心地循规蹈矩地走着一边又要小心翼翼不让两盆里的水洒出来,为什么不把脸盆放下走路呢?这个红脸盆是编剧手中的《古钿任三郎》,是大多数男人手里的未完成的事业,是不可能放下的,因此虽然编剧也许觉得无法在继续,在观众的要求下,应该也会再次向福尔摩斯的《归来篇》一样让这个侦探复活的。

我的中文名字被google特异地删除了,真不知道这是一种特别的轻蔑的抬举还是一种技术上的垃圾清除,总之,我觉得非常的不可理解,搜索引擎会这么无聊吗?也许他觉得我无聊吧?不过,我再次简单验证了一下,情况是这样的,google是按照这个人的社会地位来决定搜索的人名是否应该被留在索引中,比如我妹妹和我都没有资格上索引,我爸爸就可以,这就是google的商业策略。

晚上玩了一小会儿MPI,感觉不会比socket programming更难,当然这是因为别人作何太多的工作,我只是当了一回傻瓜罢了。如果没法运行,mpiboot,编译mpicc -o target source,运行mpirun -np number exe,本机运行mpirun C exe。我猜想是不是每台机器上都是有这么一个daemon在运行,否则你怎样启动远程的机器呢?

GrayCode a与integer b的转化可以这样a=b^(b<<1);  b=for(int i=1; i<sizeof(int); i++)a^=(b<<i);

下午去实验室睡了一觉很满足的,主要是一个同学要我去给他一点帮助,否则我才懒得去实验室呢。顺便把latin-square的搜索改了一下,也就是说所有的搜索问题都是这样:一个按一定顺序产生所有元素的机制,一个用以检验所有产生的元素的判断机制,其中可以作适当的优化,比如快速跳过不合格的元素的机制,那么你就可以在判断的函数中输出你的结果,这个中心思想就是线形的bruteforce搜索,关键是怎样产生所有的元素的方法。Combinatorial Algorithms可能是我寻找了许久的方向吧,事实上计算机最基本的binary representation里的two's complement, one's complement等等都是来源于这个领域,自然数的表达的本质也是来源于此,可以说就是按照什么顺序排列subset的问题。这个pattern够不够普遍了?!!!

我今天把头剃了,希望头发短一点,见识能够长一点。现在总是振作不起来,比起从前的想得比说得多,说得比做得多还不如,现在干脆不想也不说,更不做,每天活得比猪还幸福。


一月二十六日 天好像下雪了

让C++程序员来写java需要多长时间来学习?我想需要至少四个小时的学习吧?(夸张了吧,前提是你对java一窍不通。)但是有些东西可要小心不然你会怎么也想不出来的。一个class一个文件,package是目录名,import=include不过要换成package,所有的变量名都没有分配内存,java里面没有静态变量,因此,C++程序员总是会忘记用new给变量初始化,constructor你要老老实实地加上空挂号即使没有参数,所有的方法都封装在了一个一个类里面了,因此你要证书转字符Integer.toString(int),在windows里面最好设定环境变量为classpath=你的工作目录,在java里面exception如果忘记catch编译器不会放过你,这一点倒是比较好,C++的const被换成了final,你想要用传出参数int&,对不起primitive type都是传值,你只能用对象,不过在RMI里面的参数你必须要用实现了Serializable interface的类,我因为不知道这个照实地迷惑了半个小时,后来打电话问了两位大虾才有了一个眉目,本想自己去实现,稍微读了一下sun的介绍就赶紧放弃了,没有想象的那么简单,还是用String代替吧。总之,用一句从加拿大学生那里学到的英语就是java sucks。


一月二十八日 天晴了,不下雪了,晒衣服吧

昨天在实验室里耐着性子折腾了一下午,最后发现RMI很傻的,根本没有办法做到remote transparent,而我已开始天真地以为可以在RMI参数里面传引用以便作为传出参数,实际上这是有前提的,第一是一个RemoteObject以便在远程建立一个stub,然后。。。我当时没有写下来现在就全忘了。


一月三十日 天好像又下雪了

不知道为什么心情总是有些沮丧,半夜里从梦中惊醒居然是自己成了电视剧的主角,而那个OL似曾相识,然后开始怀疑自己的记忆,究竟作业的deadling是不是昨天,慌慌张张地提交之后在确认自己是杞人忧天。想起了rmi的registry不仅有些感慨,随便有个名字就可以bind,居然可以把这么复杂的通讯任务简化到只靠媒妁之言的地步,而DCOM里还要用一个唯一可识别的guid,bind 的随意当然也就导致了可以非常容易的rebind,unbind,而且sun.com上说得即便getRegistery了也不代表远程的success,你还是要进一步的验证。

想到和supervisor的appointment,就开始为那些个不可能的任务辗转反侧,仿佛要重新设计新的programming paradigm一般,distributed&parallel是这样的复杂,你却还要在这复杂之上拨云见日理出头绪定下规则,这简直比对没有任何可预测性的人性进行预测规范还要难上加难,因为一件工作如果是绝对不可能,那么反而是一件最简单的任务,反倒是看似不可能实际上又有一丝可能性的任务才是难上加难,因为你不能说不能,可是真的去做实际上比不可能还不可能,人力总是有所不足。昨天一直想把作业贴上,说起来也许没有多少编程的量,可是毕竟是第一次用java些个像样的东西,以前唯一接触过这个语言的是老师给的code,让你填空找错,当然那个也不容易因为是多线程的东东。鉴于是第一次学习一门新的语言,给一颗星星以资鼓励,总的来说也不能说很简单毕竟是用rmi实现一个client-server,自己写一个toy的象征性的database,也考虑一些synchronization的问题,因为rmi是可以multi-thread的,我当时对于java的众多的static method是否thread-safe问题总是将信将疑,得到的信息也有些不一致,当然最后我还是倾向于tutor的意见,只要sun的程序员不是白痴就应该保证这些static method绝对不会用到global variable,那么temporary variable是存在每个thread的自己的独立的stack里的,虽然众多的thread共享一个static method,但只是共享一个code or text of code,没有data,这都是些只读的东西,每个thread仅仅维持一个instruction pointer指向某一个instruction,context switch回来还是一样,不会有什么问题,而我记忆中的Linux的library的没有thread-safe的tempfile,random number之类的函数是因为用到非temporary的变量,可以看作是global的

后来我猜想我的烦恼可能就是别人弃之如敝褛的我却求之而不得。

去学校实验室看到同学用JDBC通过ODBC连接数据库(Access),这里面有一个Java非常强大的东西,就是从class Class的forName方法动态获得类,这个东西好像delphi里面也有就是所有的类可以通过一个“元类”(meta class)来寻找和构造,只要你给出名字,这样像java这样的动态系统才做得到,是的动态链接变得无比的强大,因为这比接口还要广泛,当然比接口还要慢不知道多少,不过这些有一部分是我的想象,应该差不多吧。另外一个就是关于两个thread执行一个synchronized RPC等效于一个thread执行asynchronized RPC的问题,应该是让两个request金可能同时发出以便不让较快的server空等。

 杨大虾提到过的所谓reflexive,我现在也明白了,应该就是利用Class class的forName()方法去获得一个类的指针,然后再利用getInterface方法获得它所实现的接口吧?这个听上去好像是interface unknown的最基本的三个Interface之一啊,我当时实验的时候挺高兴,以为发现了什么新东东,一写下来才觉得这不就是所有接口原本就有的吗?COM里面支持vb的接口调用不就是这样的吗?这应该不算是所谓java所独有的吧?应该是别的什么的利用java动态执行其可以获得类型的特性,也就是RTTI(run-time-type-information)。

MPI看来是没有想象的容易,毕竟这种程序要比socket-programming难一些,因为是SPMD有很多地方的code要写成多个process运行的,虽然没有同步的问题,可是毕竟是远程的。要记住c++的编译器是mpic++。晚上在实验室通过了compilation,当然还有逻辑错误,不过我想溜到明后天吧,晚上回来觉得有些兴奋就写了一个用thread来测试mutual exclusive的测试,用到了一个CyclicBarrier的同步的东东。java好简单啊。

晚上睡不着只好爬起来看《King Arthur》,这部片子当时首映的时候去电影院看过,非常震撼,现在重温以便依然是那样的令人热血沸腾,片子中的女主角也是我喜欢的类型,典型的亚马逊女战士,善于使用弓箭和短兵刃,要知道在整个冷兵器时代英国的长弓是历史上最强的弓箭了,而罗马的重甲骑兵可能是也是最强的骑兵了,(帝国时代里面是拜占庭的骑士),阿瑟作为salvation knight的首领当然是最强的了。


二月一日 天好像不下雪了

晚上睡不着,早晨偏又起得早,爬起来把昨天调试一半的MPI的程序调试了一早上,看来我当初是夸了一点海口,说什么MPI比socket容易,其实虽然说没有同步等等烦人的东西,如果你要写成SPMD,也就是单个的程序,你一定要头脑清楚你的master,slave的区别,写惯了c/c++程序对于变量都很小气的,时常为了少一个变量而处心积虑地反复用,这实在是一个坏习惯,我也一直在改,想想看徐国编译原理的都知道对于c/c++这种静态编译的临时变量来说(函数内变量)都是些stack里的偏移量,除非说是很多循环根本谈不上什么资源浪费,而对于coding,debugging来说临时变量也好看的多,而最要命的就是我花了将近一个小时找到的错误正是我忘记了master/slave区别的地方,结果算法部分都是没有错的,我却始终怀疑,始终没有想到是最后文件输出的错误,(在远程的slave输出了一大堆文件没有报signal11的segment fault才奇怪呢),当然这里面也有一个主要原因是i/o总是滞后并且因为context-switch的关系顺序无规律才让我始终不知道是master还是slave的问题。以后应该明确n#就是指的那一个node的process出的问题。相比之下,java的程序员简直就是花花公子一样的浪费内存。

中午吃的多了,为了帮助消化屈尊到学校救济贫困办公室指出了他们工作人员在我的案子上的一些错误,他们表示政府会很快把上学期的钱给我了,回来的路上高兴的合不拢嘴,下个月的粮草终于又着落了,写完日记高兴地躺倒睡觉。


二月四日 天没有下雪,健身房星期六早上不开

MR.D写email来问combinatorial algorithm这门课好不好,我当时不知道应该怎样回答他,事后想来大致可以猜测他的想法,当我在学习另一门算法课的时候,我认识到了两件事,第一我没有学习算法的天分,被老师骂得都没有信心了;第二无论是什么样的复杂的算法问题也许最终都可以化简为最基本的组合算法,也就是enumeration, generation, searching of combinatorial objects。这个大胆的假设是我自己这么说的,我不指望别人来评判,反正这是我的想法,想想看我们的算法的基础数学实际上是可以完全用形式语言来表达的,而formal language和集合理论有着千丝万缕的联系,直觉上觉得本来就是一回事,比如说逻辑不过是一个集合理的一些特定子序列,(当然我只是这么模糊的感觉,就算是Intuition吧)那么当你为了一些非常非常需要效率的算法而苦恼的时候,你几乎一定会求助于组合算法。我想大多数的计算机的书都不会说所有的算法都来源于组合理论,及其组合算法,我想我不妨大胆地假设这个原因是因为这一类算法非常的抽象和普遍,对于特定问题有时候并不一定是最好的,因为大多数实际问题我们或多或少都有一些额外的信息可以利用来设计更有效率的算法,反而是最普遍的算法成了最没有用的算法,这几乎是计算机领域的大实话,好像很少有人这么说,至少写到纸上就要被大家笑话了,所以我就自己对自己说吧。可是如果你的问题是要去解决最普遍的问题是用于最普遍的领域,缺少最基本的假设,那么你的算法是不是只有组合算法可以用呢?我心中一直想像的这个问题就是意识的朦胧时刻,或者说《2001,A Space Odyssey》的开幕曲里面元人在连最基本的工具还没有发明出来的时候,the dawn of mankind。道可道,则非常道,名可名,则非常名;如果一个算法是基于某种pattern的话就失去了普遍性,然则没有pattern又怎么谈得上算法?java或者delphi里面都有class of class的概念,这其中的玄机有时候是非常的微妙,class可以依据名字让虚拟机在runtime找到产生,然则class Class本身是否也可以或者也许要用名字来产生呢?problem of chicken and egg的问题是能够让人疯狂的,当初关于set可否成为自己的元素的问题就让某些大虾疯掉了,我当然不敢去尝试。本来一直想去读那本国内买的影印版的《logic for mathematician》可是总是想的多做得少,也难怪那本书实在是艰深无比,我自己课本里的Turing的关于program不可知另一个program的证明都没有看懂,怎么可能看懂Godel的incomplete theorem?不过是怅惘一下罢了。

这几天过的乱七八糟的,主要是RMI的莫名其妙的问题,我偶然中运行了两个远程的server,结果我的server端的synchronization就变得一塌糊涂,marker的意见是应该是我的同步的code有问题,我前天测试盗版也似乎也是这样,但是我实在想不出我的semaphore有什么问题,也许我应该做一个简单的test case,我甚至一度怀疑学校lab用的NFS的问题。MPI的小作业也花了我一两天,主要已开始很畏惧这种cluster的程序,很小心翼翼翻来覆去地想,写完了还挺得意,后来和上过这门课的同学聊起来,发现居然连不会写程序的人都知道怎么写,让我很是沮丧,都不太想保存了,不过为了尊重历史还是贴上吧

我以为哲学是一门寻找和研究pattern的学科,形而上学有的时候是必要的,因为广义上说所有的pattern最终都可以找到自然界的应证,致使多寡早晚的问题,于是预先穿凿出的pattern虽然看起来脱离现实未必不是将来的时为普遍的现象,只不过不同时期的人类认识能力与手段的限制不能够意识到那些未发现的pattern。

有一天晚上碰到一个感叹号,一晚上的心情犹如波浪号,思绪万千好似破折号,然而那种冲动只是一个小小的顿号,两三天以后回想起来仿佛是引号,也就是说如同听别人的故事一般陌生。


二月七日 天好像有下过雪吧,至少现在没有

我想15puzzle也许可以尝试着用minimal change of permutation的想法,当然还有很大的一个gap。不过我的idea非常的simple,假如context可以有一个rank函数来linearize的话,搜索问题就可以分割,不过这好像是废话。今天尝试这个idea,去在breca上把generating subset in the order of Gray Code的工作分到11个cluster上,(master不做运算)分的方法非常简单,用rank产生那个subset,然后next一定的次数,master汇总所有slave的时间,这个尝试当然没有什么意义,不过,第一,我尝试着把code写的fancy一点,以便好像学EE的人,结果不得了,&,^,|的操作负的precedence竟然比==,!=等等的逻辑操作负低,结果就出现了一大堆的想不通,比如if (a&(a>>i)!=0)。以后还是写的kiss一些吧,(keep it simple and stupid)第二,cluster单台的计算能力就已经超过了我的想像力,难怪要150k加币呢。气愤之余偷偷地把我以前写的15puzzle放上去run一run,不用白不用。


二月八日 天灰灰的

早上决定去健身房,既然头脑不打算工作,身体就运动吧。8puzzle的事情变味道了,我想去做个试验。


二月十一日 下午的阳光是那么的灿烂,可我还得要去实验室镇是难受

奋战了一个下午也没有把namingcontext搞定,这里就看出java的丑陋之处,明明就是需要指针的地方用了一大堆的看的莫名其妙的东西搞得我晕,namecomponent是个什么东西啊?看上去像是STL里的map一样,总是出错,后来晚上又去才发现了我的错误,binding字串和binding对象是不一样的,比如邦定对象是这样的:NameComponent path[] = bankContext.to_name("Branch"+branchNo);  ncRef.rebind(path, bank);你生成的namecomponent的数组是靠namingcontext的借口方法to_name实现的,可是你邦定一个名字却是这样的:NameComponent hostNode= new NameComponent("my host name", "host"+branchNo);  NameComponent hostDir[]={hostNode};
bankContext.rebind_context(hostDir, bankContext);你先生成一个namecomponent的实体,在生成一个她的数组然后用NamingContext的借口方法rebind_context得方法,rebind可以反复绑定。不过我到现在也不知道怎样制作树状的namingContext。另一个有意思的小实验是这样的,你run若干个server,然后你从client端去调用interface,你甚至根本就不知道有多少server,在哪里,这比较naive地给你一个给你一个启迪怎样去实现老张的load balancing。

昨天忘记说客户端怎样解析namingcontext:BindingListHolder bl=new BindingListHolder();
BindingIteratorHolder bh=new BindingIteratorHolder();  ncRef.list(1000, bl, bh);  Binding bindings[]=bl.value;你最简单地办法就是搜索这个database,for (int i=0; i<bindings.length; i++)
{  //org.omg.CORBA.Object obj = ncRef.resolve(bindings[i].binding_name);   //String objStr = orb.object_to_string(obj);    if (bindings[i].binding_type==BindingType.ncontext)
{     NameComponent nc[]=bindings[i].binding_name;  for (int j=0; j<nc.length; j++)
{ System.out.println("kind="+nc[j].kind+ " id= "+ nc[j].id); }}简而言之,namingcontext给你的事一个数组的数组,每个数组是一个namecomponet的数组,每一个namecomponent是一个map或者说对子。


二月十三日 下午睡得好舒服,可是却只睡着了一小会儿

如果有人自称学过计算机,那么问他一两个组合算法的问题;如果有人号称是大牛,那么让他去解决一些组合算法的问题;如果没有组合算法世界上根本不会有计算机科学,我觉得我在这方面非常的吃力,并不是照着算法写程序,那是一般的猴子都可以训练的出来的,我不是在贬低谁,说到底不过是条件反射,用香蕉训练猴子做算术的方法也适合于培养程序元,但是组合算法确实不可能靠这种低级的条件反射能够培养的起来的。我觉得我也许经过无限长的时间的进化最多就只能进化到猿人一级,要真的变成人可能性是不大的。

Did I re-discovered a well-known vector space?

看百年世界大战,了解了以色列的建国历史,我觉得任何一个稍有同情心的人都会支持以色列的。


二月十四日 天不冷只是灰蒙蒙的

在生活中如果某个话题变得索然无味,你不妨顾左右而言他,在email里我只好选择沉默。


二月十六日 今天有暴风雪

每天坚持去图书馆学习的誓言只执行了一天就无疾而终了,不过坚持每天去健身房倒是完成了80%,看来我的身体要比我的头脑来的听话。今天总算把midterm应付过去了,还是惊出了一身冷汗,组合算法的题目猛一看就懵了,还好是开卷考试并且是可以在家里完成的,于是我就变小程序来解答,因为我现在笨得连数数都不会了,幸好我有先见之明没有去教室里答题,不然就完蛋了。下午去教授那里才明白我自己想的那个revolving-door算法的变形只能适用于集合size为奇数的,不过我想应该是可以解决的,不过我实在是有一点点没有兴趣,因为我知道在算法方面我毫无前途索性不去努力了。最近粮草有些不继,下个月看来还得去学校问问。对了前两天我下载了firefox,虽然我从来就是微软的铁杆支持者,这一次实在是没有办法,看来微软确实是有些病入膏肓了,IE臃肿庞大的以至于我不敢开超过五个窗口,并且一大堆的pop-up广告让我烦不胜烦,我一直猜想是某种hook的机制,可是我实在不知道怎样删除,没有办法微软对不起了,我想这个公司的人也越来越没有朝气了,迟早有一天会遇到危机的,或者现在就是了。


二月十七日 今天雪停了

去实验室,我为什么不能像前辈的留学生一样起早贪黑泡实验室呢?肯定是因为他们没吃饱饭,我还有一口剩饭就不努力了。


二月十八日 今天很冷很冷的

虽然我不算勤奋,但是春假的第一天又是星期六的早上还去实验室的人毕竟没有一两个,当然我是去做我为完成的作业。本来想写一个distributed transaction protocol给tutor替我检查,结果一动笔才发现不是那么回事,正像教授说的那样,你自以为抖动了,一上讲台却发现没有什么可说的,你自以为很明白可是当你准备写下你的想法立刻就暴露了你的错误,写program之所以比写伪代码或者protocol,algorithms之类来得慢的一个原因就在于你的思想是有很多的遗漏与错误,为了帮助我思考不妨把我的想法写下来吧:每一个participant都是决策者与被决策者,也就是说他们要独立判断一个incoming的transaction的request是否和当前的冲突,所谓冲突,意味着source或者destination帐号有重叠,outgoing的destination冲突交给对方处理?(还是应该本机处理吧?)。。。刚开了个头就头疼,脖子疼,试验室里呆了一天还真得挺累的了,不写了。


二月十九日 今天还是很冷很冷的

一大清早去实验室,结果一个早上一直在为filelock交学费,最后才明白最好把filelock当作advisory也就是cooperative instead of manadatory因为这个本来是取决于操作系统,即便是号称平台无关的jvm也不能掩盖所有的问题,下午一觉醒来才证实了自己的一个可怕的怀疑,我真是笨到家了,居然该代码的时候不小心翻下这种低级错误:filePointer.seek(offset,size,toShare); if (filePointer.readFloat()!=UnDefinedData){filePointer.writeFloat(0);}...看到这个问题了吗?我本来已开始的时候小心防范现在还是着了道了。(不明白吗?想想流的特性,就是stream)。一个早上在semaphore加filelock的双重机制间写代码仿佛在惊涛骇浪上耍杂技一般的容易翻船,因为我还要时候是考虑是否exception之后系统仍然robust。

在试验室里呆了快一天,写了一个无比繁杂的近似单线程的服务器组,说是单线程但是因为JVM会对每一个请求都创建一个server instance实际上还是多线程,因此使用了大量的filelock和semaphore,交叉在一起非常的tricky,同时总算弄清楚了一点,java的filelock是mandatory的,而且对于被锁定的区域的写操作不会引起任何的exception。你获取和释放filelock最好使用semaphore来保护因为在你自己写之前也要释放,有可能你已释放立刻就被别人锁定,所以里面类似要注意的问题很多,比如如果一个标有多个线程在访问,其中只有一个会把他从一个状态写为另一个状态,而从另一个状态写回来则有很多线程,那么同布置在一边就够了,你可以节省那个当读的线程的同步开销,而另一种情形在你进入wait()之类的block状态之前一定要记得释放semaphore,否则就死定了。如果你不使用wait之类的函数也就不必notify,因为semaphore应该会自己唤醒等待的队列,java一个比较诱惑很多程序员的地方就是内部的同步机制作的很全面,让很多人舍不得放手。感觉这个程序虽然还只是初步的常识就已经让我几乎把操作系统课堂上所有的同步范例都实践了一遍,从这个角度来看我其实应该要感谢Dr. Probst我那时候无知而又莽撞,对他有很多的不敬与诅咒,实在是不应该。总体上来说我在concordia上的三年学里面,只有computer architecture这门课是外聘的一个完完全全的东郭先生,其他的教授都还是让我学到了不少东西,当然取决于我当时的悟性与态度理解的程度不同,总之,我觉得concordia不见得比其他加拿大大学差多少,网络上称之为“清华”,也就是“清一色华人”也仅仅是针对研究生和某些其他专业,计算机本科没有多少中国人,第一是辛苦,第二是大多数在国内号称学过计算机的人不愿意再上一遍,实际上这些人该不该上他们自己心里清楚。反倒是我反正都是心血乍练,兴趣盎然。不过从一个线性代数的例子我觉得中国学生应该重新审视自己,当时刚入学的时候我发现我的线性代数的基础课(不是linear algebra,而是更基础的矩阵运算),没有被免修,我就去找Dr.Ford理论,他就简单地写了一个向量问我了一个简单的问题,我当时根本就不知道他再问什么,那时候根本就不知道原来线性代数不止是解行列式,立刻没有脾气去上课了,后来意外地被免修了,还恋恋不舍呢,看来东西方的教育的差别有时候比很多中国人心目中的差别要大得多,中国的历史基本上没有任何数理的内容,中国人的思维习惯也投机取巧的成分多很多。


二月二十一日 今天又下雪了

一大清早去实验室,路上明白了一个道理,java让程序员成了傻瓜,我原来写TCP的packet习惯了没有想到java竟然把一个connection包装起来了,也就是说你每次建立一个java的socket连接实际上内部使用匿名的port number使得你可以直接获得回复,我结果傻傻地自己去用类似selector之类的技术实在是多余。另一个我没有想明白的地方现在也明白了,java的filelock是在JVM之上的mandatory的,实际上很好理解,因为不管操作系统的filelock机制如何,你在JVM上的文件都是完全被监控的,这也就是为什么我用两个不同文件指针,其中一个设定了filelock另一个也被锁定了,在感觉上应该是cooperative or advisory的,在应用上看起来是mandatory的。另一个namingcontext的问题还不是很清楚,我使用的是persistent的也就是说先前的namingcontext都被保存在文件里了,我想要unbind总是不成功。目前我对于java server端的multi-thread有了一个初步的认识,我的想法是这样的,在每一个server内部程序员当作单线程来编程,但是每次有一个请求java idl或者java的CORBA会创建一个server的instance来达到multi-thread的,这样就要求你非常小心你的static与非static变量,如果你要做线程同步一定要运用这些static的global variable.同时在联合使用filelock和semaphore上我已经比较有体会了,尽量不要到处乱throw exception,这是一个如同goto或者break的坏习惯因为它会把程序的流程搞乱,最好的做法使用变量来做flag。而exception的原则是你对于不知道什么样的错误才应该使用,对于你知道的类型,你应该处理而不是简单抛出留给别人处理,当然有很多人不同意这个观点,我仅仅是这样建议,因为,exception的效率不是大问题,最主要的是原来应该改作的一些工作有可能没有作,比如semaphore,socket,filelock等等的释放,这是一个主要问题,java虽然号称垃圾回收但是绝不可能做到资源回收,也就是说非内存的管理是无能为力的,我就遇到了不少socket没有释放占用端口的问题,比如我仅仅需要得到localhostname而财大气粗第new一个socket,使用getlocalhost.gethostname之类的方法,结果很随意地把监听端口给了这个临时socket最后又close了结果下次运行这个端口就不能用了。在一个非常intuitive的低级错误就是filelock以后自己要使用也要先release,但是在多线程的环境下有可能被别人抢到这个filelock,因此我必须用一个semaphore去同步tryLock的方法,这里面就埋藏了很多的陷阱。比如从效率的角度看RPC是很慢的如果你获得semaphore之后要去call RPC或者socket,最好用filelock等到rpc或者socket返回以后再来重新获得semaphore。


二月二十二日 今天又下雪了

一大清早去实验室奋战到下午两点才发现了其中的错误,我的filelock,semaphore等等的synchronization都是无懈可击的问题出在我对于sun公司过高的期待,这些白痴让我昨天喜出望外以为socket建立的inputStream,outputStream可以区分“session”,也就是用一个匿名的回电Portnumber,实际上没有这么回事,我还是得自己实现,虽然无比的简单可就是没有人去做,回来后又累又饿,休整了一下午,一锅水的土豆被烧干了,我居然躺在床上看东西方冷战历史的纪录片里睡着了,侥幸没有造成大的灾难只不过在我n次烧糊锅的纪录里加了一次土豆而已,(n>=5/月)。现在继续出击去实验室。有奋战了一个晚上,就吃了一个土豆和同学的一条巧克力棒,不过终于解决了这个问题,其实我花了五六个小时trace仅仅因为我随手一行的错误,真是一个教训,在这种server的tracing实在是痛苦,我只好把三个server上输出的结果拚到一个文件里一条纪录一条记录的比对,实在是辛苦。不过也证实了我刚刚说的是错的,java的socket的确是实现了connection的功能,因此多个thread同时监听一个端口是可以各自得到各自的消息的,我因为怀疑这一点还自己去写了一个实现,其实很简单,就是选择一个portnumber,然后当作参数传给listener,以便他回答得时候用。当然你必须对于这个portnumber的选择进行同步。写完了我发现其实不需要,因为java确实是实现了,否则我的服务器有多个server instance的时候大家都监听同一个portnumber,你怎么能区分回答呢?把这个作业贴出来吧,实在是因为这几天太辛苦了,虽然我知道很多人很早就完成了,我还是对我自己的这个作业情有独钟,毕竟多线程的服务器程序是很不好写的,尤其要防止死锁,还要防止同步问题,等等,就不必说CORBA的技术有多么复杂了。给两颗星吧!


二月二十三日 今天雪停了

一大清早醒来想到为了一个作业花了近一百个小时实在是辛苦,而且有些夸张,我总结原因应该有这么些:1。java没有学过新学乍练,一切都在摸索阶段,比如finally的意义就理解错了看到他跟在try-catch后面就想当然地认为一定是异常的时候才调用,又比如花了好几天才发现java里面根本没有传出参数,虽然所有的对象都是传引用但是是const的引用(当然这个世上一作业花的时间),再比如java虽然没有friend可是你可以把一个类声明在另一类里面,结果外面的类的成员数据都成了嵌套的类的全局变量,这个c++好像也有不过我从来没有这么做过,java不支持default-parameter,这一点让人很烦,我想多加一个参数必须的改动所有的代码。2。很多复杂的技术没有吃透之前就要上到server之上,那后果是不堪设想的,比如sun.com里面对于filelock的解释模棱两可,让我误以为filelock是否为mandatory是由操作系统决定的,实际上它的解释的对象是那些同时使用其它开发工具和java以外的程序的程序员,而对于JVM之上,java有绝对的控制权用得着听操作系统吗?因为这我花了一个早上才发现不释放filelock机便是拥有者也无法写,这一点似乎是很直接了当我想大多数人一定会觉得我很白痴,我很冤枉因为我看到sun.com上写的filelock由platform决定最好是treat as if advisory,何况从效率的角度来看也应该是advisory的快。再比如namingcontext这是个很复杂的东西,我一直没有弄明白她的机制,试验了二三十小时虽然可以写入读出简单的信息,结果后来发现我使用的是新版的persistent的nameserver,数据不像transient仅仅在内存里,重新运行绑定还在,我想先卸载那些先前的binding,总是抱错,后来不敢再试验了,我想这是这个作业里面最大的失误与遗憾。对于socket我始终把它当作纯粹的socketAPI来编程,结果走了不少弯路,因为当时学networking作ftpserver的时候很清楚TCPpacket在逻辑上没有所谓的session概念,当你有多个线程同时监听一个端口通信的时候,你肯定要自己分辨消息,不创建一个全局的static的socket来统一监听,你又更好的办法吗?人人都听,发现不是自己在等的回答怎么办?post到公共的告示板上?这不是更糟糕吗?我当初就是这么做的,一位在服务器端写成多线程的效率高,可是殊不知这未必是最好的模式,因为那个时候还不清楚java是针对每一个incoming的RPC来生成一个server instance以便实现多线程,因此,虽然在以前学delphi听说过这种threading model并没有什么概念,对于程序员来说最好的做法是server内部单线程简化编程,让java自己去实现高效率。当然你必须清楚地意识到server内部那些是必须static那些应该是non-static的,这一点的理解又花了几十个小时的捉摸查找咨询,我感觉sun.com的帮助要比MSDN来的差劲,很多过时的东西依然在那里一直与误导我,甚至是教授自己。关于多个服务器的同步问题在和tutor讨论的时候还是模模糊糊的概念,还想着要使用某种protocol来实现一个total order这本来是一般的想法,后来仔细研读才发现使用filelock就已经解决了同步的问题,因为lock说到底就是同步的工具,而唯一需要解决的是deadlock的问题,那么选择非blocking的tryLock方法就可以了,不过我花了好几个小时才注意到这个方法会抛出异常因为一开始我看帮助的时候说如果不成功就返回null,那么想当然地认为抛出异常实在是sun公司这帮程序员吃饱了撑的,有什么必要呢?仅仅因为没有一个getlasterror的机制只好用异常来告诉调用着失败的原因,是这样吗?现在想来应该是这样当时可是没有想到。这个错误的代价就是几个小时,当然和其它问题混在一起是很misleading的。我其实编程的时候非常的小心翼翼处理这一类异常改变流程的问题,因为我痛恨没有释放的counting semaphore这会使得我的程序在异常之后不能恢复运作而死锁,因此这方面反倒是都正确的,不过我的最严重的失误被一个很迷惑人的错误pattern导致我始终在怀疑filelock的失误。问题是这样的,我用等数量的线程同时从两个帐号对着作transfer,比如一组线程从A帐号到B,另一组从B到A如果文件德读写保护与同步都是正确的话,做后两个帐号应该保持不变,当然前提是两个帐号开始时候balance一样,每个线程的transfer金额一样,可是我的结果是两个帐号总和保持与开始一样,基本上两个帐号不等,我想对于绝大多数程序员来说第一反应就是这时transaction嵌套导致的racing condition,比如线程1读了A的balance,然后被打断,由线程2写了一个值,然后线程一回来再写,这也是我最担心的,从来没有想到还有第二种可能。因此这个debug的好费是惊人的,因为单单是建立一个运行环境就很罗嗦,我因为hardcoding了机器名字,就只能在那几台电脑上测试,最后不得已把三台服务器上的输出结果放到一个文件里逐条记录得比队才发现,这种这种pattern的错误还有另一个简单的解释,那就是一个transfer中,两组thread的transfer成功次数不一样,这听起来很白痴,可是,这时我的一个小小的失误,我在返回之上出了一个错误,导致客户端统计transfer成功次数不对,你想到了这种白痴的结局了吗?你想到了说明你和我一样白痴过,你没有想到说明你连白痴也不算,当然这很好呀。:)另一个关于static和non-static的考虑来自于文件指针,我当初为了保护文件的读写,使用一个global的static的文件指针,(不然你有多个文件指针单靠mutex你能同步吗?在内存建一个当前记录表?我想过这个方法,不过还是需要顺序查找,我不喜欢,并且这表你也要同步保护。)可是当我运用了filelock以后实际上同步问题已经解决了,只要每个server instance内部保证是单线程的你可以不用再对写与读的文件指针作保护,也就是说每个server instance可以有自己的独立的文件指针,同时你还需要一个全局的static的文件指针用来让所有的server instance来lock文件lock,一旦成功你就放心大胆地写文件了。这样才会有最高的效率,发挥多线程的优势,这一点是我最自鸣得意的设计。当然你必须用一个mutex来保护这个全局的用来lockfile的文件指针,因为你释放的时候又可能有被别人锁住,他的高校体现在lock成功以后不必每次读写之前再去抢夺mutex,可以让别人有机会去filelock。当然我的数据库的设计上我觉得也是比较有独特之处,这是有一点点模仿database课堂上学到的很多东西,这作业只要求存balance,于是我用了一个RandomAccessFile把文件定义成一个类似数组的形态,用帐号的index来查找记录,当然这有两个前提,第一可能的帐号数量不大,第二每个记录都是规则大小,这听起来好像限制很多不使用可是你想过没有着这正是database里面index文件的特征,不是吗?也就是说当我这个baby database扩展的时候我可以用这个做index部分,然后每个记录存放真正的记录的地址,(我是不是以前说过这个,我对这个设计太情有独钟了,不由得反复提到。)我这里所说的index实际上也可以是记录的hashtable,其实两者本质上是一致的,都是constant查找时间,不要误会我认为binary search是constant,我的意思是这里的index是randomaccess的index,也就是说给定一个地址,查找时间是固定的(简直是废话,对对,我在说废话,我要去吃早饭了,昨天就吃了两个土豆和一小碟午餐肉当晚饭。)

自吹自擂了这么一上午我也饿了,想到cynthia的一句话听得我非常受用,我都是自己摸索着前进才有这么些心得体会,哈哈骄傲两天吧。说自己的体会,让别人去笑话吧。


二月二十五日 今天好像又下雪了

早上计划去玩健身房直接去实验室,结果发现不知道是什么节日健身房不开,实验室也要登记才能进,花了半个早上仅仅能够把apache server运行起来,其他还是一团雾水。晚上请教了大虾证实了我的一个错误的观念,TCP本来就是connection的通讯,怎样分配port以便reciever回复本来就是协议自己实现的,和java没有关系,是我自己搞糊涂了。晚上心情郁闷,夜不能寐,只有壁橱里仅剩的一点法国红葡萄冲当安眠药了。按照加拿大学生的话说有些东西是用来spicy life的,如果突然没有了连前进的bait都看不到了,那么。。。

我其实非常不喜欢引用别人的东西,当然因为我现在记忆力越来越差,我只要稍微耐心等一等,就会忘记那些使我看来得,哪些是我自己想出来的,这样我会不断地觉得自己好有独特见解啊。那么就把以下的看来得摘抄一下作为批判中国传统文化的一个论据吧:


二月二十七日 今天好像天气不错

从我的家到实验室要经过健身房,因此,每天去实验室和去健身房成为同一件事的两个步骤,有时候我先去健身房后去实验室,有时候我先去实验室后去健身房,不管怎样组合我都不需要走重复的路。哈哈我再和你开玩笑呢,因为这里的生活非常地充实,你完全可以感受到我每天的丰富多彩的生活。中午吃完饭去找导师,他又给我了一个新的选择,我觉得我可能更适合一些吧,总之,这短短的半年里,我已经从我当初所寄托的AI偏移到不知什么地方去了,唉,走一步是一步吧,很多时候曲线救国是必要的。下午,在实验室里看rajago的东西,看来GPU的programming是要接下去打交道的东洞了。不过现在还不很确定吧。同时把自己昨天写的一个不完整的程序发给了Y大虾,我是看了他的程序和essay后受到启发改写了一下,在一些细节上我们还有不同的看法,这有点像软件工程里的design decision类的问题,从不同的角度看问题,会得出不同的结论。我还要再想一想。同时作业快堆成山了,我的webservice的环境设置总是不成功,java的一些帮助早就过时了,很多library版本更新的链结构都变了,根本就对不上号。只是知道这几样是必需的:classpath里面必须包括soap,xml 解释器的路径,java_home必须是java sdk的路径,catalina_home是tomcat的路径,path里面包含tomcat的bin的路径。这样设置后,run “startup”可以运行tomcat server。 然后我就不知道怎么办了。


三月一日 今天天气非常不错

昨天早上我终于发现了我第一个RMI作业里面同步错误的原因,原来是对于“finally”理解错误,以至于多了一次semaphore的release。当然应该还有static的问题,慢着,实际上如果semaphore是唯一的,应该不用担心文件指针有多少个的问题,因为我没有用filelock,每次对于所有的文件读写都是锁死的,也就是说始终只有一个读写。这的确看来很糟糕不过对于第一个作业来说是可以原谅的。

今天发现我很多的想法都是错误的。1。关于socket我已经认识到了自己的错误理解,首先不可能两个process同时侦听同一个端口,因此,我好像有糊涂了,因为TCP的所谓建立连接应该仅仅是概念上的吧,socket API我记得只有accept,send,recv之类,要想让收听方恢复只能在message里面写上自己的hostname,及其portnumber,是这样吗?2。实际上,java RMIi并不需要为每一个RPC request创立一个新的server instance而是直接调用implementation class的method。3。java synchronized的方法实际上是诗的所有的方法都只有一个thread执行,意思就是你生命了method  A, B,C都是synchronized之后,当你的client段去调用不论是A,B或者是C都回被synchronized即使他们是不同的方法。我想他们可能使用同一个global的monitor来实现的吧。


三月四日 今天天气非常不错

昨天的debug也是非常的艰苦,完全可以说是大海捞针,如果你的程序在小的数据里运行正常,当数据达到一定程度出错,十有八九是溢出了,比如我使用以极其愚蠢的办法去跟踪,从(72,8)=11969016345个循环中查找其中的错误,听上去虾仁而已,这主要是我的脑子基本上生锈了,写程序的时候很可能没工作,所以我骂了自己一个中午的白痴,一个愚蠢的错误耗费了将近两个小时的debugging,我差一点没有完成我的MPI的计划。最后还是有点满意的,虽然程序不复杂,也没有多少值得夸耀的地方,可是因为用了一点点MPI来并行处理,总还是可以谅解的。也因为如此,昨天居然没有去健身房,今天一定要补回来。


三月六日 今天天气非常非常不错

昨天,今天都是艰苦的战斗,我累得以至于想不起来我昨天到底写了什么程序了,为了组合算法的作业,我每一个问题都写了一个程序来解答,最后一个问题的最后两个testcase,我的改进的MPI的程序已经跑了两天了,我估计case7应该需要计算三年才行,太夸张了。没时间贴出来,下午还要赶另一个作业webservice的我现在还没有开始呢,后天就要交了,怎么办!


三月八日 今天天气非常非常不错

早晨终于写完了webservice的报告或者说designchoice文档,然后一口气把这几天来写的程序都贴出来吧,实在是太辛苦了。首先是minimal-weight的MPI的改进版,把原来的unrank函数改为Knuth的successor函数应该由在这方面提高两百倍,我这事写了另外一个程序进行比较得出的。这是一系列小程序。昨天饿着肚子干到了快十一点终于把所有的webservice的结果测试完毕,这个程序基本上是在CORBA的架构下不需要多少编程,可是tomcat的配置环境整整折腾了快两个星期,就是昨天我也没有办法正确配置环境而是直接从同学那里全套拷贝的,其中搞明白了一点就是每次server重新编译的时候,一定是有什么部署文件被拷贝到tomcat的什么地方,因为只有重新启动才能看到改变,也因此,你必须在tomcat的webapps/soap下面编译才行,除非你知道怎样部署文件,我其实看到过这些说明,可是我实在是没有多少兴趣研究,在我看来这款免费软件和java一样是一种对付傻瓜的捉迷藏的工具,java的版本不停地变,而这tomcat也是每个版本的配置文件方式都是翻天覆地,纯粹是一帮子无组织的业余软件爱好者的作品,因为每个人都只是为了自己的方便重新设计了一下新的配置方式,要知道在软件工程里面最容易的解决方案有时候就是推倒重来,而困难的事怎样让新的适应旧的。另一件事情就是在webservice里面测试死锁的时候必须把每个thread睡觉的时间加长因为webservice很慢的不这样的话几乎没有机会让远端的请求成功地锁定冲突的纪录。我在前天晚上对于配置仍不成功的时候甚至打算赌气交白卷了,想着我的编程作业的荣誉要被玷污了,昨天当完成了作业的时候心里很高兴,尽管很饿,当时荣誉总是被保持住了,就像在学AI的时候用scheme编程解决cnf问题时候绝望地向别人求援的无奈一样,但是最后我终于还是完全一个人完成了整个team的工作。还有,java愚蠢地不给程序员开放destructor,结果一帮儿童乱丢垃圾以为java阿姨可以清理所有的垃圾,可是对于系统资源怎么释放呢,在servlet内我怎样去call我自己的finalize函数呢?因为webservice里面每一个请求来了,就穿件一个servlet对象,什么时候,怎样释放变成servlet-container的工作。再有,前端的“call”租好不要声明称全局的反复用,应为没有文档我不知道怎样清除参数,结果出了很多奇怪的东西。


三月九日 今天天灰蒙蒙的

昨天晚上上试验课,有个同学提了一个问题,就是servlet的创建与消亡不收我们的控制,那么它定义的一些全局变量能否一直保存在内存中,答案是把它声明成static就行了,至于为什么它不会随着对象的消失而消失,根据c++static的定义,它根本就不是对象的数据成员,当然不会因为对象的产生而产生也不会因为对象的消失而消失了。等一回就要去宣誓效忠加拿大总督了。

去实验室打印大师们的论文,回来去dollar店买文具简直让我难以置信,原来买一支笔的价格现在可以买三支了,原来买一百页的现在可以买一百五十页了,原来的订书机现在变得非常精致了,看来中国货又降价了。


三月十四日 今天天灰蒙蒙的

犹豫了两三天还是决定把最后的一个小小改动的版本贴上,毕竟keep it as it is的原则还是要遵守的。另一个就是没有时间继续的一场讨论,实在是可惜。这两天我为了global-checkpointing想破了头,依然有很多不清楚的地方,其中一个至今无着落得技术难点是monitor module,如果是借用CORBA本身的机制究竟要在哪里去寻找呢?POAManager?可是我能否在指定的机器上run一个server呢?如果checkpointing不是database里面的nonquiscent or non-interfere形式的,那么看起来checkpointing就很简单了,可是recovery如果采用undo,是否已经commit的transaction也要都rollback,应该是一个coordinated rollback否则globalcheckpointing就没有意义了,可是message log里面的message都要replay一遍的话,我究竟是相信log还是相信incoming的message?如果两者顺序不一致的话该采用谁的呢?这就是系统的non-deterministic的大麻烦。

昨天花了两三个小时写一个迪归版的minimal-change-order-of-permutation,应该说不难的,可是我并没办法比别人快,这个也是我所力不能及的地方,参加ACM绝对是对你自信心的打击,看来我还是喜欢那种随心所欲没有时间压力的方式。

告诉你一个北美的公开的秘密,计算机的研究生基本上没有什么用,这一点国内好像都还不知道一样。

不立文字,意会言传的好处就在于一半没有人能够确切地说你错了,包括你自己。中国的历史人物大多谙熟其中的要义,或者把意见时说的空而又空,或者说的细而又细,太空的话你没有办法应用,太细的话你同样没有办法拓广应用。关于recovery的问题向了好几天没有什么眉目,下午去之前,似乎有了一些方向,已经讨论就发现自己错了,讨论结尾似乎又有了新的方案,可是随后和tutor一讨论却更加糊涂了,首先我的所有的假设和架构全被推翻了,旧的想法没了着落,新的想法有不成立。实在是一件头疼的事,请相信我,这绝对不是什么trivial的问题,比如,我一直以为应该采用global checkpointing来实现coordinated rollback,可是tutor说不对。


三月十五日 今天天灰蒙蒙的

这两天学会的大实话。

我想我最善于做的就是想象,不论是算法还是理论,这是我早上吃早饭的时候编出来的,不知道对不对。


三月十八日 今天天好像灰蒙蒙的

庸俗到看《都市男女》,无聊到看《武林外传》。当然看这类恶搞调侃大陆主流传媒的东西的确解气。昨天讨论project一下午还真是有不少收获。另外昨天早上去gym总算想明白了一个问题,就是Mr.M解决的问题,我在exec里面想要另外启动一个process正确的做法是:cmd /c start cmd /c java new_window。原因其实很简单,在windows下长大的人根本就是把很多复杂的东西当作是理所当然,比如在Linux下几乎没有人会问出像我这样的愚蠢的问题:没有shell怎么能够在命令行启动其他程序?command就是dos下的命令行解释程序,也就是shell,只不过在windows下习惯了图形界面没有多少人从命令行运行,或者运行的时候没有了这种体会,我就对与cmd和command的区别完全没有想法。反正command不行,只能cmd。


三月十九日 今天天气很不错的

从本质上说,中国大陆现在的政治体制是封建君主集权制度,经济上采取的制度从效果上看和资本主义制度也没有什么两样,虽然劳动者有选择部工作的权利和自由迁徙的权力,但那也不过是选择被剥削的时间地点方式及其程度的权力而已。有时候,我偷懒整天整天地看那些无聊的网络电视,事后给自己一个堂而皇之的理由,对中国各社会阶层作分析调查,这种所谓的超级跨国界的社会调查并不是我发明的,所谓西方的中国问题专家都是这样,坐在宽敞舒适的办公室里领着政府或者机构的优厚的薪水与资助随便翻阅一些中国的媒体,透过字里行间寻找可以标新立异的视角揣摩当前主流的思潮与民意。这种调查的准确性完全无法证实也无任何必要证实,因为自然会有其他的“立论家”各取所需选取符合自己想象的结论。理论之为实践服务者就在于此,仁者见仁则仁者选取支持仁者之见的理论来支持仁者之见,智者见智则智者选取支持智者的理论来支持智者之见。

从经济上说,中国目前各个行业门类齐全,是成为世界工厂的一个先决条件,因为世界上没有几个大国或者国家经济圈能够提供如此齐全的配套体系,然而各个行业发展程度的相对不平衡导致不同领域的资本家对与中国目前国家机器的要求不一致,比如对于行业发展处于快速上升阶段的对与中目前的经济上的无序是受益者,可以趁乱取势;对于相对成熟行业来说政府对与经济管理的低能成为这些领域的资本家所强烈不满的原因;企业规模的不同对于当前的经济秩序也有不同看法,经济秩序从无序到有序的过程本来就是竞争淘汰的过程,中央政府与地方实力派的割据矛盾有时候会反过来影响这个经济发展进程,大企业与中小企业的矛盾最终会透过各自的政治代言人反映到政治论坛上。民族产业与国际垄断资本的矛盾在经济竞争过程中也会在政治舞台上反映,终究会有一个转折点会让现有的中央政府在两者之间作取舍,而这个决策点的早晚有时候甚至会引发国际间的政治危机。国际垄断资本的代言人在危机发生之前也不排除提前采取措施通过各种手段影响中央政府,这些手段也包括最后的终极手段,战争。世界经济的竞争说到底是资源和市场的竞争,在拥有技术门槛的领域可以简单地透过技术垄断来保持领先者的竞争优势,在资金密集投入的领域可以透过早期的资金积累实现资金门槛实现垄断,对于个别资源密集型领域可以透过先期控制资源实现竞争优势,对于市场密集型领域可以透过先期布局占领市场实现竞争优势。当竞争优势丧失时候,跨领域竞争者可以透过调度不同领域的资源来重新建立竞争优势,这些资源包括政治引导力,这些手段包括动用国家机器的终极手段,战争。

上个世纪的两次世界大战基本上是由于老牌帝国主义依靠早期殖民统治各自垄断殖民地的市场与资源导致新型帝国主义在市场与资源枯竭的时候被迫依靠发动战争要求重新瓜分殖民地引起的,战后随着殖民地的消失,帝国主义主要靠国际垄断资本以自由贸易为掩护进行市场与资源的垄断并以此来获取超额剩余价值,当这个瓜分过程结束的时候,垄断资本进入相对稳定的时期的前提是没有新兴的垄断资本来窥伺霸主地位,假如中国的新兴资本从根本上威胁到了老牌垄断资本的统治地位,也许会引起国际政治的干预并引发战争。这个危机的时刻并不一定会等到中国新兴的垄断资本实际威胁到老牌垄断资本的时刻,因为危机的处理的另一个手段是危机杜绝,因此,提前爆发的战争并不是绝对不可能的。

按照远交近攻的战略,最先引发的垄断资本冲突应该是在中日之间爆发,政治上的仇视绝对不是仅仅因为一个庙宇里面的一些排位所引起的,而是两边的政治家对于长远的经济竞争形势的担忧,美国仍然以拥有全世界的市场及南美的事实上的殖民地而静观其变,欧洲在东欧的新扩与非洲及中东的势力范围也可以维持一段相对较长的发展,唯独世界上唯一的超级强国日本必须立刻面对中国对于自己既有市场及原料的竞争,以日本的狭小国土资源贫乏来看,其大多数的优势集中在制造业相关的技术及市场上,这些本来是欧美与发展中国家间的竞争缓冲区,现在必须立刻面聆新兴经济体的挑战,日本在退无可退的境况下只能铤而走险,利用目前现有的资源优势迅速建立超级强国所必须的政治军事影响力,否则一旦经济优势丧失之日就是日本沦为二流国家之时,因此,日本必须以遏制中国的发展作为自己的发展国策。在五六年前我们讨论问题的时候实际上还没有清醒地意识到中日之间冲突的不可避免性,对于中日必有一战的讨论还只是停留在可能性的问题上,随着时间的推移,人们才开始意识到国际政治上高瞻远瞩者的先见之明,因此今天的有见解的政治预言家更集中地在讨论中日之间的这场即将爆发的战争的发生的时间地点形式与规模,当然对于战争的结果及对双方的影响的预测与分析更是令人感兴趣的问题,总的来说,中美爆发冲突的可能性微乎其微,因为在中国一百年后挑战美国之前必须要先挑战日本,仿佛擂台赛里中国会不会在第一个回合就K.O.了也很难说,大概是50%对50%吧?相比之下,台湾的回归也应当是在中日冲突之后才能做一个彻底的了断。

早上起床看到杯子里面还有昨天没有喝完的一点红酒,就着早点吃喝之际头脑发热胡言乱语了一下下,代表我今天头脑很正常。


三月二十一日 今天天气 非常不错的

我的生活已经平凡到每天都去gym,而且居然到现在也没有怎么开始动手写project,天天看CEG星际,或者就是小资生活《都市男女》。发现了一个完全没有用的事实,latin-square实际上也是一个vectorspace,就是说你做出第一个latin-square然后可以从当前的这个latin-square通过两个操作来span整个vector space的所有latin-square,这两个操作一个row swap,一个是column swap。可是这个事实有什么用呢?几乎毫无用途,我本来想用这个方法来生成sudoku,结果发现它比直接用backtrack还麻烦。看到《都市男女》里的依据陈词滥调,女人是男人的学校,想想看我好像已经毕业好久了。

晚上睡不着就爬起来看下载的《神话》(The Myth),与最近那个“无聊”的馒头比起来有着天壤之别。第一电影必须要有要有个主线或者说故事情节,虽然同样都是神话传奇,但是至少成龙的片子都有一个主题。第二,电影要有观赏性,金喜善的唯美造型比张跛子的狐媚要好看得多,同时成龙的电影最大的特点是真刀真枪的武功与特技,不仅仅是电脑特技,更多的是演员自己的表演,比如金喜善的那一段朝鲜舞就比铁笼子里的马戏表演好看得多吧。第三一般来说电影毕竟是一个教育媒体总要给人一些积极向上的东西,就算是说教,也总比没有强,好像那个馒头到底他要说些什么呢?我不知道,虽然成龙说的很简单,但是保护文物总是好事情吧。第四同样是多国部队的演员阵容,成龙至少让韩国人说的普通话中国人能够听得懂,情节和历史也有一点关系,时空交错式的蒙太奇手法虽然老套,但是总还是在帮助讲故事。相比之下,那个姓陈的简直就是古龙预支了稿费之后随便乱变得武侠小说,可是古龙虽然总喜欢峰回路转,他却有本事自圆其说,而那个土导演明明是个刻板的性格却要去模仿这一类不羁的魔幻,实在是东施效颦,邯郸学步的可笑。

今天下午花了好几十块钱拍照片准备yearbook,虽然说只是一个二流大学的本科毕业在很多人眼里不知钱,可我却知道这一百个学分的来之不易,这三年整整学够了一百个学分,可以说是身经百战,真应该找个时间回忆回忆,想想看我在读本科的时候都没有觉得学习有这么轻松过,反倒识到了研究生发现一大堆中国人在这里凑数真是感到有些愤愤不平,可以说很多中国人根本连加拿大的二流大学的本科都不可能毕业却今天在这里号称在读研究生,实在是让我脸红。


三月二十六日 今天天气 非常不错的

我对于组合算法的作业的评价就是很有趣,也很无聊。有趣的地方是这门课你几乎可以用程序来完成所有的作业,很无聊的事几乎所有的程序都是基于现成的算法来完成的,仿佛是根据菜谱来做饭的厨子的工作。

And this max clique problem.


三月二十八日 多好的天气呀!!!

多好的天气呀,中午吃完午饭和教授争论bounding function的一个小问题,然后我打算去皇家山走走。老赵说春天来了,因为气温已经到零上十度以上了,的确昨天去健身房看到加拿大的小姑娘已经穿裙子了,人说“春江水暖鸭先知”,我说女人对于春天的来临更加的敏感。


三月二十九日 多好的天气呀!!!

昨天半夜居然碰到了停电,这简直就是在文明世界的灾难,你难以想象在加拿大人们对电力的依赖。为了证明我居然能够在这样的灾难事件中生存下来了,把一个非常trivial的东西记录下来,这是作业了。


三月三十日 多好的天气呀!!!

朋友问我怎么玩计算机模式,我完全忘记了,我甚至想不起来怎样运行scheme了。赶快记下来吧。老师告诉我,我的想法其实不对,因为latin-square有着许多互不相关的group,仅仅靠改变顺序,(permutation,relabelling)你不能从一个group到达另外一个,所以总的数量远远大于我的想像。

一个人情高并不代表这个人不会出卖自己,好比古代青楼的名妓的清高一样,不过是对别人说,我可以讨价还价但是是在一个比较高的基数上的。所以,我最近在重新检讨我的清高程度,也许现在我。。。


四月一日 天有些灰蒙蒙的

network的程序的debugging是比较痛苦的,当然我发现我确实是变得有些迟钝了,一个stop-and-wait的UDPSocket的bug找了将近两天,当然是比较低级的错误,这一类的错误一般都是和我的先入为主有关的。比如一开始的时候,错误的信息总是接受方的buffer溢出的症状,随后我就把所有的怀疑都放在了接受方,java的datagramsocket是这样的,它既可以做receiver,也可以做sender,同时也可以是multicast的socket,就是说当它作sender的时候,remote的ip地址,portnumber之类的设定也可以在发送的datagrampacket里设定,当然接受到的datagrampacket里也包含了发送方的地址及端口。因此,socket可以是一个广播的socket,对于datagrampacket来说你必须给他一个buffer(byte[]),从这个buffer读写数据的话最简单的作法是用stream的方式来做生得自己去写数据类型的转换一类无聊的工作,也就是找一个实现了java的datainput,dataoutput接口的类,他们是DataInputStream,DataOutputStream,但是这两个类是建立在stream读写的基础上的,因此从byte[]到stream我去找了一个ByteArrayInput/Stream, ByteArrayOutputStream。这样你就通过实现了datainput,dataoutput接口的类来读写数据了,这是java编程里面常常出现的一类技术,即在一些原始的类质外包装一个实现了某种接口的类,这样一边使用某些接口方法,如我刚开始看到java的时候的bufferedreader之类的情况。不过我在使用bytearrayinputstream的时候脑子可能是停顿状态,因为我当时并不是很理解我在做什么,这一类的stream只不过维护了一个内部指针而已,读了数据之后你要及时把指针重新指向buffer的头,比如调用reset方法,同样的事情发生在bytearrayoutputstream身上,她内部也不过就是一个指针,写完了你同样要reset指针啊,我花了好几个小时明白了第一个reset,居然又花了将近一天明白了第二个reset,真是白痴级的好笑!另外我对于stop-and-wait也望的差不多了,居然没有概念,因为可靠性是依靠自然数的连续性来保障的,就是没一个自然数有一个唯一确定的successor,这个唯一性以及自然数的totalorder导致我们可以实现exactly once也就是说没有遗漏,没有重复。当然另一个作法是同学的建议,是基于UDP packet的生命是有限的,为了保证唯一性,我们可以维护一个序列号的窗口,检查是否有重复,是否有遗漏是有sender来保障的,即每个包都必须确认,从这一点来看,我们的实现有些累赘了。

看《星际之夜》,有一个日本玩家表演TvZ的建造顺序简直是一种艺术的表演,我现在才知道原来星际是可以这样玩的,我当然是一个不折不扣的白痴级的业余参与者,主要是欣赏战略战术过干瘾。然后是一个浙大学生玩家的大学生活独白,中国的大学生活就是这样子的,居然学校机房可以让你随便安装游戏,这简直是难以置信。当然了我想我晚出生几年一定是一模一样地这样生活的,呵呵。  

中日之间的话题总是网络新闻的热点,我常常在想这两个民族的异同,总的来说,两个民族的素质的差别不是可以道里计的。晚上做作业把sudoku的程序整理提交,然后又看《古钿任三郎》,这一类挑战仿佛就是一个积极向上的民族的特质。联想同屋的老赵看的那些中国主流媒体的电视剧感到这个民族实在是不可救药,整天沉迷于那些遗老遗少的陈芝麻烂谷子。我小得时候接触的日本的书,电视等等大多是智力开发类的,仿佛整个日本民族天天都在不停地动脑筋提高智力,憧憬未来,欣赏科学幻想。

本来晚上应该写程序争取完成project的,可是我总是提不起精神,最近这个星期差不多有一半时间没有去健身房了,一方面有些懒惰,另一方面时常被同组的同学抓到实验室,总之我这个人是懒惰成性的,假如我是中华民族的代表的话,中国的确是一个非常懒散的种族,所以才造就了我这种人。上个月政府把半年多的补助一次性发了下来,结果当月的伙食费我就增加了50%。    


四月四日 天又下雪了

今天学到了不少的东西,原来orbd不能正常run的原因是因为他有一个default的port number被占用了,不是ORBInitialPort。对于.net编程环境实在是有些羡慕,非常的周到,非常的强大,不过可惜我的破电脑应该是不太能够跑的动吧,然后花了大量的时间在看PLU的经典回顾,对于super的强的正面攻击力非常的欣赏。最近学习非常的松懈,生活也不是很规律。希望final之后能够恢复一下。 PLU联赛里我另一个喜欢的选手是WyW兔子。


四月五日 今天不下雪了但是也没有太阳

吾尝终日而思也,不如须臾之所学吾尝终日而学也,不如须臾之所思

我家的旁边就是皇家山,循着很陡的公路爬到山脚下还是挺费劲的,至少我觉得比在健身房踩stairmaster要累得多,下山回来的时候在Lincohn小街看着那些古老的建筑,突然听到新买的mp3里梁咏琪那带着磁性的声音心中忽然有一种莫名的震撼,仿佛心底里的振颤。为了捕捉着稍纵即逝的感受,我沿着街道走了两三圈。最后什么也没发现,我想也许是好多天没有去健身房,神经过于敏感吧?或者就是国产货里的通常都有的背景噪音的副作用吧?我想起这个花了150刀的MP3就有些气愤,made in china的东西就是这样令人气愤,功能上几乎应有尽有,价格上几乎无可挑剔,1G=150dollar,但是质量上实在令人发指,比如作为音乐播放器,你总会听到电流的背景噪音,你是什么心情,比如按了两下开关就死机了,你是什么心情,我到futureshop换了一次实在是懒得再跑了,看到背后一个小孔写着reset才恍然大悟,在中国硬件工厂里的软件编制人员对于有bug的程序通常就是这样处理的,大不了你全部清零一下不就行了吗?我想这种做法对于日本或者其它国家的工厂来说几乎是不可接受的选项吧?

重温PLU的经典战役,看到ZZRvsWyW的那一战非常的爽,因为ZzR在野外隐藏了一个兵营,等到进攻的时候,野外的那个兵营加入了30%的兵力,这个欺骗性的战术让兔子上了当。

每次考试之前我都是不务正业地干些别的不相干的事情,比如胡思乱想,东拼西凑,下午又靠看PLU催眠因为晚上要上课。洗澡的时候突然想到我在上个世纪遥远的年代曾经也读过一次大学,那是在一个著名的上海麻将大学里学习了四年的麻将八十分陆战棋围棋桥牌,回到家之后父亲非常的气氛,我却不以为然浑不知有什么了不起,因为当初方鸿渐游学欧洲还不如我拿了一个真的文凭呢,何况那个年代大家都是这样读书的。也许现在国内的大学还是差不多这样吧,只不过时代进步了,玩的东西花样更多了。后来工作以后过了几年之后就开始做恶梦了,内容总是大同小异,因为读大学的时候我基本上在期末的时候老也想不起来课程得名字,书本的名字,当然老师的名字就更是不记得了,一本新新的课本只在学期最后一堂课老师透露考试内容的时候用来画重点。所以,现在我重新读大学的时候特别注意教课老师的名字,虽然有个别课程的书本名字还是记不全但是专业课的老师大体上都记住了,这总算是一个进步吧。大话西游看多的人总是念念不忘那个着名的六段论,就是“当初。。。可惜。。。假如。。。我会。。。如果。。。那么。。。”,我试着往我身上套但是我发现这是不可能的,因为假如把我完全恢复成当初的我,放回到当初的环境,我多半还会做同样的我,因为本性难移,仿佛deterministic一样;退一步来说把一个改变过的我再放回从前的年代,可是环境决定人,我在那个环境下还是多半作大体相同的事情,结论非常的令人气霉,平常人赌咒发誓的所谓上天如果再给我一次机会之类的话完全是自欺欺人的,我从前老是做噩梦后悔也是毫无道理的,因为我当初并没有做错什么,重来一次也还是如此并没有什么可以改变的。唯独今天在一个完全不同的环境里做一个几乎完全不同的事我才有可能有不同的结果。听起来仿佛是宿命,但是这里有一个原因是昨天上课老师讲的系统的determinism我当时不是很同意,老师说的是很多系统的bug是一些timing event造成的,因此有一定的non-determinism所以一个容错的系统如果让所有的replicate运行在一种asynchronized的状态会有更好的容错性因为不会所有的replicate都出错,这个idea其是很不简单的,常人总是以为100%的复制是最好的复制,殊不知这种接近自然的做法有着独特的好处。


四月七日 今天有些冷

晚上时期末考试,这是第一次碰到的在家里进行的,当然难度要稍稍的大一点,不过和“算法分析与设计”的考试比起来容易得多,因为基本上对我来说如果一个问题能够用计算机来解决的话,我就会觉得容易得多,至少我的脑子不够用的时候,我可以求助于电脑。当然我不是说我没脑子,而是我懒得动脑筋,我宁可动脑筋让电脑帮我去解决问题。早上和下午花了将近一天时间企图实现Knuth's dancing link,难度也不是非常非常难,但是绝对不是什么容易得挑战,对于指针这类C程序员的基本功来说不算什么,问题是它那种奇妙的算法非常的高深难懂。等到考完试再玩吧。看录像看得都忘了还有考试。


四月八日 今天实在是太冷了

在没有写日记的日子里我是否和行尸走肉一样呢?因为人的记忆力是有限的而且有欺骗性,过后很可能什么也回忆不起来,那么一段空白的记忆和一种行尸走肉的生活有什么区别呢?今天要继续考试,虽然不难但还是要花一些时间吧,早上去皇家山跑步,感觉实在是太冷了,如果没有强烈的阳光的安慰我实在是没有勇气坚持下去,当然和路边穿超短裙露大腿的女人比起来我实在是太脆弱了。


四月十二日 天气很好可以穿单衣了

这几天实在是太累了,每天都是半夜回家,早晚两顿饭都吃不上,因为project明天就要交了,后天要demo。累得我都懒得睁眼睛了。


四月十三日 天气很热居然有二十多度

好像一开头就是说累,今天总算我们的fault-tolerant project完成了,又上了一课,以后要牢牢记住java里面synchronized的函数是一个同步的大陷阱,据说函数实际上是class级别的同步,意思是说凭直觉你要吃大亏,比如说一个class里面有两个方法A,B都是synchronized那么你在A里面是不能让别人再进B了,因为这个class里面所有的synchronized的方法都被你独占了,这实在是一个大陷阱。突然想到我心里的惆怅,记的老爹说我无病呻吟,可是假如我连呻吟都没有了那肯定就是病了。因为我不久前说我的痛苦就在于有的时候我的自信膨胀到可笑的巅峰,有时候我又感到很沮丧因为当你发现你所得意洋洋的东西在别人眼里不值一提的。不过我安慰自己说这就是一个人再学习,至少认识到了应该学习。我想现在应该把这个huge project的我负责的部分代码保留下来了,当然这个对于非分布式系统领域的人来说是不明其所以然的,我现仅仅是部属这个系统就要解释一大堆,不要说其中primary-backup的逻辑了,对于CORBA的namingservice系统我当初仅仅是浅尝辄止,这部分全部是由HM负责的,这部分差不多是整个系统的一半左右吧,我不能在这里公布,除非你想要,当然如果你想要你就得说,你不说我怎么知道你想要呢?当然我不能公布因为我已经提供了下载的链接。HM这部分作了很多很有意思的工作,包括我负责的部分有不少也是他改过的,比如UDP的server部分,我一开始的时候一直不愿意在里面做一个监听的线程,后来证明他的修改是对的,这样子的做法使大多数监听socket的做法,received不等于delivered,用户仅仅是从buffer里面取而已。又比如他在client端实现的global unique ID是依靠namingservice机制来做的,但是这个network上的同步方法是很普遍的做法,bind,unbind都会有exception,trybind不会,这样所有的client都先去rebind一个标志位,然后访问一个unique ID的发生器,比如一个递增的序列号,然后出来的时候检验unbind,如果没有exception证明你可以放心地使用,否则再取一次。就好像两个人一起去吃饭,留在后面的买单一样简单好用。


四月十四日 下雨了又变冷了

玩玩指针,knuth的dancinglink仿佛是玩杂技一样,我想不会有多少人能够懂得,索性我也不解释了,真想明白其中的玄机,自己去看knuth的paper吧,否则不会明白的。我跟朋友解释的时候说,这和武侠小说里说的一样,功力不够就算拿到了武林秘籍一样没有用,如果贸然强练武功最后非要走火入魔吐血而死。


四月十六日 下雨了又变冷了

今天没什么事情,除了吃了半斤多的猪肉就是把dancinglink写成一个class,因为要解决N-Queen问题。似乎学计算机的学生没有不知道8-queen问题的,不过我一直懒得写程序玩过,因为觉得有些不值得,说到底backtrack,或者DFS都是一回事,除非像今天这样用奇妙的指针玩的backtrack,奉劝想当然的朋友不要急于下结论,其实能够明白knuth的算法的人不会太多的,据教授讲,knuth的这种解决max-clique的方法是很多NP-complete问题中最快的一种办法,因此很多问题都实现转化为max-clique的问题然后再用knuth的这种方法。如果你真明白的话,你应该会惊叹,原来程序还可以这样玩!这就是The Art of Computer Programming。


四月十八日 不下雨可是还是挺冷的

今天断断续续地看了快一天的virtual synchrony,还是不太明白,其中有些关键的东西始终模模糊糊,说是看了快一天,实际上包括早上爬黄家山,下午睡大觉的时间,可能真正看书的时间不超过两个小时吧,不过一个章节居然要让我看两个小时可以想象是多么的困难啊。为了证明今天我有活着,把两个星期前考试的考题贴出来充数。最近质量控制放得比较松,很多程序都给了星星,以资鼓励多写多练。为什么每次看TLS的结尾部分都有那么强烈的震撼感觉呢?而且看到了传说中的alternative ending。

早晨起来天气非常的好,结果还是无心读书,因为不懂,reliable distributed system实在是玄妙的紧,非常的晦涩难懂。只好把星球大战翻出来看。最后决定去理发。昨天在百无聊赖之际胡思乱想想到了一个15puzzle的解决办法,因为我觉得15puzzle绝非普通的max-clique问题可比,或者就是一个非常非常大的max-clique问题,因为他的元素实在是太多了,那么如何trace搜索过程中的重复问题是至关重要的,通常一个排列(permutation)的表达方法就是一个数组,可是这个数组还是有些太大了,何况比较两个数组的异同也是一个遍历数组的过程,而我们仅仅需要知道一个是否一样的信息就足够了,那么这个要求又没有让你想起什么呢?我想如果你和我一样有想过这问题就应该去想象一下所谓电子签名的原理,或者MD5之类的东东,原理应该就是找到一个唯一的映射,这个唯一的映射就是comb-algo里面学到的一个特性,任何一个数x都可以表达为一个unique的序列s.t.他们是i!的系数where 1<=i<n and (n-1)!<=x<n!。这并不是唯一的办法,其实只要你找到这样一个unique的序列就行了,那么至少对于一个长度为25左右的排列64位的长整数十足够了,当然看起来好像减少的内存不过是25-8=17bytes,可是其中比较的时间应该也要考虑进去就觉得核算了,过几天我写一个简单的测试来说明吧,总算能证明我还是能够思考一些简单的问题的。另一个小问题是关于project里面数据正确性的事情,我始终觉得没有把这个问题解释清楚,的确把一个复杂的问题用最朴素的语言来解释往往才能说明你是真正深刻地理解了,否则。。。其实也许可以这样说,这个系统里内部牵涉到三个基本的元素间的状态一致性问题(consistency),primary与backup之间,primary与primary之间,正常运行过程中,因为是一种lockstep的紧密同步操作(closely synchronized),所以你不必担心有什么问题,至少对外是一致的,那么在任何一个操作的开始与结束都是一致的,唯一有问题的是在一个operation的中间,(这里其实就是一个transaction的概念,either all or nothing),借助于log,只要我们能够维护状态与log之间的一致性那么也就可以在failure之后设法恢复三者之间的状态一致性,(写到这里,我觉得我又回到了当初的起点,我怎么可能把这样一个复杂的问题用朴实的语言解释清楚呢?还是放弃吧。)。。。

我还是看看我的羊肉汤怎样了。

为什么我每次去图书馆看书看不上二十分钟就睡着了?

晚上吃得太饱了撑得厉害。slides上说recoverability不等于high-availability,同样recoverability也不等于high avialability。这一点其实就是我的报告理想写而写不清楚的。


四月十九日 天气太好了早上又爬皇家山

今天下午去找教授终于比较清楚virtual synchrony了。


四月二十三日 天下雨了

这几天过得仿佛浑浑噩噩,对于考试一点也不上心,居然无聊的看起组合算法的书了,难道每次只有考完试了我才对一门课开始发生兴趣?再一次提醒一个小东西省得忘了找不到,tracert是windows下的命令。

今天看了新闻不禁感慨万千,中国的领导人实在是一代不如一代,自邓公以后再无一人可以入老夫的法眼。曾几何时,老江屁颠屁颠地一厢情愿地要和小克建立所谓的“协作型战略伙伴关系”,结果被小克冷笑声中放了五颗导弹打在大使馆上,真是热脸贴了一回冷屁股。这一次,小涛又打算一厢情愿地来个所谓和平崛起,还没起来就被小布打了一耳光,先是司仪硬生生地用“中华民国”的称谓来奏国歌,后来又让个轮子功的泼妇出来骂街,你想想看像白宫那样的地方连个耗子都进不去怎么会唱这么一出?可笑的是小涛一心巴望着小布给他个“国事访问”好见见美国主子的尊容,去年来了一趟没见着,今年可好,如此被这么修羞辱了一番,要是换作任何一个其他世界强国的领袖早就找个地洞钻进去了,还有什么脸面一心巴望着让美国人来压制台湾?这些读书人出身的所谓“领袖”就是不明白毛主席当年的斗争策略:越是怕打仗就越有可能被迫开战,反而是豁出去舍得一身剐才能有可能避免战争。大炮没有架在城门口怎么可能奢谈什么不战而屈人之兵?看来十年内这些窝囊废是一定会被逼着和日美打一仗了!


四月二十四日 天下雨了

看离散的书时非常费力气的事情,那么看comb-algo的书就更是费力气了,我几乎就是一个字一个字的反复扫描,一页纸的证明我反反复复的看,每看一遍都发现自己错了,每看一遍都发现自己明白了一些,当然每次看结论都不明白为什么。其实,这个principle of inclusion-exclusion的问题我原来就想过的,而且关于surjective function也就是onto function的个数问题我还专门讨论过一次,可是现在都忘了,只好再翻离散,真是圣贤之书常温常习,圣贤之理时刻在心。(这是《雍正王朝》里老状元被田文镜羞辱之前所说的话。


四月二十六日 天不下雨了,出太阳了

怎样形容一个人的短视呢?我几乎是盲目地相信了一个事实,然后就按照头脑里的印象去做了,发现预期的结果没有出现,于是才开始怀疑头脑里的蓝图不对,回过头来一步一个脚印地检查,最后发现一个最简单的事实,这看上去几乎是白痴般地问题解决办法,可是回过头来说,你有什么更好的办法吗?似乎没有!因为一个人头脑中先入为主的错误几乎无法自己自动地去纠正,惟有实践,所以说实践是检验真理的唯一标准。我前几天想用一个定理来做15puzzle里面的排列数的特征值,结果到了debug阶段才意识到一开始就是错误的,应该有别的办法,不过我的头脑想不出来一个公式,我想用电脑去“想”,也就是trial&error或者说搜索或者说尝试,总之,人脑不如电脑。

DSD的final可以说是我经历的最tough的考试之一了,首先题目非常的tricky很多问题是平常我们不愿意深入探讨的,比如2pc会blocking的状况为什么3pc不会呢?这个问题我原来就是take for granted认为可以就是可以,具体为什么没有想过,当然是因为简单地用脚趾头没有一下子想出来了,现在当然就通过考试题目明白了很多,2pc也不是不能防止只是大多数时候使用2pc的应用都着眼于效率没有人会去考虑fault-tolerance,因此,很少有人会想着用log来解决那种唯一死锁的情况,也就是initiator和其中的一个process一起down掉了,我现在明白为什么3pc可以解决问题了,原来以为blocking是由于2pc不允许vote commit的process abort的原因,现在才明白是因为,那个failed的process有可能已经commit的缘故,因为这个时候其他活着的process不知道是否那个process是否是commit,如果贸然abort会造成inconsistency,3pc增加了一个缓冲时期,使得failed的process最多进入的是一个prepared的phase,即便其他process集体abort也没有造成事实上的inconsistency。那么对于3pc这个状态是否是要用log的方式来解决呢?一开始我觉得不用,因为彼此broadcast了解各自的状况检查是否还有进入prepared的process来决定是否可以commit就可以,可是后来一想对于failed的process一旦recovery之后不是还要查询log来决定是否应该commit吗?这是否说明我们需要log呢?这也许说明我们需要log记录结果,不说明我们需要log来打破这种死锁。另一个特点就是题目的数量非常的多,总共15页纸,几乎每个问题都是要阐述的,很多问题很有可能你不知道他问的是什么,或者你根本就不知道有什么样的问题在问题中,design的课程就是这样,此亦可行彼亦可行,如何取舍?这种论述既要简洁明了全面又要一击要害非常的难,因为时间上的限制就直接防止你东拉西扯式地赚分数,我写的手都发疼了刚刚完成。再次就是实例design的题目非常地贴近实战,一个实例的应用如剥茧抽丝般地一步步深入几乎涵盖了fault-tolerance与high-availability的全部问题与方案,很多的是一个设计思想,如果没有题目的提示,实在不知道怎样答,但也正是提示很明确有时候不知道自己除了重复题目的描述还要写些什么,这是最让我担心的,就是面对一个design无所适从的感觉。

去考试的路上无聊地模仿《围城》里关于葡萄的哲学,比如有人总是说自己考试只能发挥出正常水平的一部分,照例这些人应该觉得乐观因为所有的成绩都有希望提高,可是这些人实际上是悲观的因为他们好笑又一个无形的上限永远无法达到最好成绩。想知道吃葡萄是从好的吃起还是从坏得吃起呢?去看原作吧。


四月二十七日 出太阳了,阳光灿烂的紧

世间的问题大概可以分为三种难度,第一种是用脚趾头都能想明白的,第二种是用手指头都能想明白的,第三种是用大脑才能想明白的。绝大多数人和我一样整天只用脚趾头思考问题,很多有学问的哲人是习惯用手指头思考问题,只有大师才是喜欢用大脑思考问题的。当然我并不是说平常人放着一个脑袋不去使用,不可否认一般人也并非一年之中从不是用手指头和头脑来思考。所谓脚趾头大约是一个人的经历所积累的所谓经验,因为这种经验常常跟一个人走过的路呈正相关,所以我称之为脚趾头的经验,用脚趾头思考大概就是典型的经验主义吧,你从来不太会建立新的模型,只会在固有的模型上加上一个经验验证的权值,你的经验模型被验证的成功率越高,你就越是会习惯地使用它,这种有趣的现象被很多无聊的人称之为性格或者习惯。当然这种模式你往往不是主动地建立一个模型,但是你有可能被动地接受一个模型,如果这个模型足够简单以至于你能参悟到这个模型的话。但是当你固有的模型无法解释的时候,你会怎样做呢?受过教育的人也许会寻求推理假设,然后利用重放类似的输入来检验假设,从而检验新的模型,这种假设推理大多数的工作使用的是手的书写,键盘的输入,你可以建立新的模型,但是这个过程是完全地基于实践的,因而我称之为用手指头思考,因为手本身就是一个实践的产物与工具。真正用头脑思考的人并不多,因为纯粹靠大脑就能建立模型并且检验模型的人只能是大师级的人物,这样的人几百年才能出几个,这样的事对于大多数人来说一辈子也不会发生一两次,比如爱因斯坦据说第一篇论文是关于光电效应的,它在没有实验条件的情况下纯粹是靠头脑中的模型推演出的结果,仿佛今天让某人不在欧洲的高能粒子实验室工作却要总结出一个全新的理论一样的困难,所以这种大师头衔没有几个人堪当。当然你应该明白用手指头思考的人不一定就决不会用大脑思考,只是频度深度的区别罢了。我是习惯于用脚趾头思考的人,偶尔地是用电脑练习用手指头思考。

发完议论,心血来潮决定去拜访远在皇家山另一边的蒙大的WLS,电话约好在山顶的charlie碰头,于是吃完早饭开始了2.5公里的急行军,一路上越过m条马路,n个红绿灯,遭遇了p个牵狗遛弯的老外,终于一分不多一分不少地准时赶到了山顶。等了半天才看到WLS拖着蹒跚的脚步爬了上来,终于两大主力红军胜利会师的激动人心的时刻到了,两位坚持在两个不同的根据地的革命领袖越过了重重的马路的封锁爬上了这座全城最高的皇家山在这里会师了,这次长征是播种机,是宣传队,是。。。(以下略去一千五百字)。来到了蒙大,这座传说中的美女集中营,到处是莺歌燕舞,还有潺潺流水,HEC高处入云端。(其实应该是蒙大的医学院的主楼入云端)来到了学生宿舍,看到了传说中的真正的学生宿舍,里面住的都是传说中的真正的蒙大学生。。。(以下略去废话一千五百字),来到了图书馆,看到了传说中真正的法文书籍和传说中的学生刻苦读书的景象。。。(再略去一千五百字的废话),来到了传说中的学生餐厅看到了传说中的学生认真补充食物的景象。。。(算了不略去了反正都是废话。。。)。总而言之,这是一个真正的大学的样子,设备齐全,秩序良好,学生刻苦努力,实在是让人羡慕,如果这里不说法语该多好啊。


四月二十八日 出太阳了吗?好像是,可是为什么春寒料峭?

在实验室里奋战了整整一天一只搞不明白OpenGL-Extension的环境是怎么样的,稀里糊涂地download好几个extension,到底是SG的还是Nvidia的,或者是说我的显卡是什么就应该用什么?最后比较RG留下的原始环境参照代码好像有了一线方向,其实编程我都不怕,怕的就是这种环境设置的问题,想想上一次为了设置web service的soap的环境花了我将近两个星期还是不行,当然这一次是C不是java没有什么大不了的无非就是努力工作以实验室为家而已,现在才有了一点点昂扬斗志的感觉。加油啊。昨天也终于明白了一个长久以来不明白的地方,我原来的glutObject的问题的确就是depth-test的问题,致使问题并没有解决,因为我一旦enable,立刻就变成乱七八糟了。早上出门的时候再想我所要找的序列应该不至于是“glomb number”吧?


五月二日 出太阳了吗?没有,因为下雨了,很冷的

WLS的project很有意思,一方面是视频捕捉图像识别,当然对于机械专业来说不可能太复杂,可是和camera结合还是很有意思的;另一方面是纯粹的EE,因为你怎样用并口线去操纵一个DC motor呢?如果不是步进电机呢?比如用脉冲宽度来控制(pulse-width),这些是学CS的人很难接触的,又比如怎样和一个实时的系统通信呢?中断或者信号等等都不行吧?这个rtsAPI用一个共享内存和应用程序同信,他自己据说是屏蔽了windows的所有中断,用一个内置的timer制造出了一个脉冲信号通过并口发送给马达,当然你可以传递不同的脉冲带宽来控制马达的快慢,角度等等。还有一小部分当然就是路线的选择,物体的大小,中心的计算,这些在cs的学生看来就相对简单了,不过怎样动手制作组装电机就是机械系学生的本行了。

经过两三天的瞎碰我总算知道是因为我的显卡不支持ARB_fragment_program而不是我下载的OpenGL的extension不对,基本上,如果你使用glew来作扩展,他会自动检测什么样的extension可以用,(至少检测的方法比较容易吧,对这个“自动”我还不是很确定。)也就是我问RG的问题,OpenGL extension是有几方面决定的,一个当然是显卡本身的硬件支持,在一个是厂商的驱动程序支持,当然也要有openGL的extension来发掘应用。所以这不是一个简单的问题。今天瞄了一眼成绩,comb.algo得了一个A,这只能让我叹口气,因为从来没有这么原本容易得到的机会被我给放走了,总是有些不服气,尽管自己有不足之处,可是再次借用项羽的话:那是“非战之罪”。接下来就是集中精力来读RG的code,好好努力吧,星期天顺便把那个sequence number的问题再想一想。顺便说一下,NVIDIA的quosal 8xAGP 64M不支持,Radeon 9800 Pro AGP 128M支持。

macro是非常令人费解的,比如看到#define offsetof(s,m) (size_t)&(((s *)0)->m),你能明白是在取得struct s的成员m离s开头地址的距离吗?我猜想没有多少人明白的,至少我是不懂,如果有人明白,不妨教教在下,先谢过了。


五月五日 出太阳了吗?出了,因为不冷了

偶然听人说到笔记本电脑才忽然想起我自己也有一台的,在斗室里brute-force式地遍历了一遍居然没有找到,一下子开始紧张担心会不会被人偷了,可是在这个路不拾遗夜不闭户的国家里很难想象有犯罪的存在,虽然中国人的论坛里总看到某人被入室行窃了如何如何,总觉得他们有点像是被劫富济贫了,这样说的太损了,如果老天有眼会惩罚我的,当然如果他有的话。再仔细地寻找记忆中的上一个checkpoint,似乎有一个记忆的link指向了我买的那一大堆高高摞起的储藏箱,是不是我把电脑藏在箱子里了?真正使翻箱倒柜式地搜索终于找到了那个熟悉的slim的身影,浅灰色的据说是莱奥娜丽在HP干的唯一一个工作,(我对这个女人的唯一的印象就是他的一张照片上夸张的宛如芭蕾舞演员般的手势的演讲场面,看来这应该是一个善于做秀的女人,难怪HP被她折磨得疯了,就把她赶走了,IT这个行业是个怪圈子,里面的所谓职业经理人都是圈内人士,谁能保证风水总是你家赚?此地不留爷一定要有留爷处,大家彼此性格方便,所以这些头面人物都是走马灯似地轮流转。此间奥妙详见拙文)也就是花大价钱设计的一个logo,多少回忆的盖子被揭开了呢?两年多的陪伴应该有多少故事值得回忆呢?我的喜怒哀乐,我的一举一动从没有离开她的监视,这么亲密的伴侣不妨就给它一个“她”的称谓吧。可是不知从何时起我开始不再使用笔记本了转而天天和那台台式机耳鬓厮磨的缠绵,被冷落的HP渐渐地封存在了尘土之中,慢慢地在斗室间显得更加的多余,不知何时何地在一个完全没有印象的日子里被打入了冷宫,从此在我的生活里消失了,从此虽然就近在咫尺却如参商般隔绝。究竟一段感情能够维持多久呢?相看两不厌,惟有敬亭山,可是在现代的社会里我们对于电脑的态度却是一句口号,“更高更快更强”。

那么就重新拾起独孤大虾在“剑冢”里埋藏的宝剑吧。


五月六日 出太阳了吗?没有,因为下雨了

OpenGL extension实在是只能用诡异二字来形容。我的台式机不支持GL_ARB_fragment_program,我的笔记本呢,干脆连GL_ARB_vertex_program也不支持,断断续续读code好几天了还是不太明白很多东西,尤其shader language要从头学起现在还是一无所知,对于octree也只是明白个大概,几次想重写结果都是刚开头就被阻住,先在写程序越来越慢的一个原因就是思前想后的时候远远多于勇往直前的蛮干。看到RG的程序里面view-transformation的matrix是左乘的非常迷惑,也就是坐标x矩阵而不是矩阵x坐标,是否我记错了呢?或者view与model本来就是这样反着的。

读RG的notes让我感到惭愧,很多人在拼命,而我在飘着,都已经十天了我不知道我都干了些什么!虽然中间有好几天是别的事情打扰了,可是我又没有认真读一读code或者书呢?虽然我自信可以以差不多的速度完成octree的coding,可是那是因为我学过这一类的东西,如果让我和RG一样去摸索,我就不可能像他那样了,也许是该我放弃C++改用纯C的时刻了,graphic的东西和那时候学systemcall差不多都是效率致命攸关的领域,RG比较了一个简单的C++的access function和纯粹的数据访问,fps有三倍的差异!回过头来看这个软件工程的问题,我是否也该保留一些notes给后人呢?如果有的话?可是我的英语没有办法描述那些微妙的想法,这一点就是印度和中国的差异,在写作上我们有质的差异。

在生活中我们有很多MutualExclusive的工作,可是人类社会的所谓semaphore大都是cooperative也就是执行者之间必须有一个最低的rule遵守,比如男女共用的washroom只好用一个牌子或者灯之类的作semaphore,可是如果要实现mandatory的机制就很难了。有一个电影用mobilephone作信号,可是这一类的信号的可靠性变成了分布式系统里讨论的failure-detection的难题,究竟non-response是transient-failure还是别的什么咚咚呢?更复杂的事情是Byzantine General的难题,如果这个failure非常地smart以至于自己能够选择error来误导你的话,比如葛优总是说我们在开会。

RG的code并不复杂可是为什么我总是不能静心读下去呢?究竟是读书困难还是读code困难,或者是读作者的notes困难?若夫心绪不宁,思绪若飞,何当镇定灵台?下个星期应该要申请护照了不然我这样一个黑人怎么像话?PLU的个人联赛不知道什么时候才开始啊!


五月十日 出太阳了吗?出了

幸亏我学聪明了没有贸然问RG他的分布式程序写了没有不然就闹了个大笑话,他用macro来定义本地和并行的程序(比如#ifdef DISTRIBUTED #include "DistMain.cpp" #else  #include "SingleNodeMain.cpp" #endif )(我以前很少用编译期宏指令,看来我要多学一学因为有的时候只能是靠编译宏指令来解决一些问题,淡然也方便不少。),我在Visual的界面里竟然没有注意到,无意中拷贝的时候才发现了“大油田”,我这个人实在是太无知,总把别人想象的和自己一样笨,等到看到了MPI里自定义数据类型才知道困难的地方,刚开始还跟着例子走,不一会儿就迷失了,只是模糊记得Linux里有个系统函数可以打包不连续的地址块可以来实现这个东东(这个只是感觉和当前的MPI无关),但是自定义数据类型之后再定义就迷糊了。还有RG用到了很多OpenGL ARB里面的东西我几乎还是一无所知,比如动态查询处理的pixel个数等等,这些东西在他的本地程序里我都没有看到过,看样子他的distributed部分作了很大改进,因为他的notes我仅仅读到一半就看到他在筹划的很多的东西,看来我又一次低估了别人的工作,高估了自己的能力,想在一个星期内完成别人好几个月的工作首先是对别人的努力的不尊重,其次是对于自己的能力的不尊重,也就是说指望自己做自己不可能做到的事情。昨天说起来丢人,想要试验一个简单的想法结果第一步就卡住了,后来不知道为什么OpenGL一定要加上glFlush才行?可是我以前的程序里都不要的阿。 看notes之所以困难就是说里面的东西都大都是些模糊不清,甚至错误的东西,很多不成熟的想法在这里被记录,一些思考的过程被披露,除非你有相似的经历,并且带着目标去捕捉特定的东西否则只是浪费你的时间。我本来问教授的时候猜测RG可能做了一些visibility testing的工作来culling,教授认为他可能想过但还没有做到,我后来明白他的code在作一个他自己的所谓prefix搜索,也就是找到合适的密度,这一点我倒是凭着脚趾头的逻辑猜到了,这个idea看能不能应用那片octree的paper来做?我好像上个星期想要作一个什么15puzzle的全路径搜索,现在都忘得差不多了,再记录下来吧。不对,我市要先解决一个permutation的signature的设计问题,当时在考试没时间,现在又时间了又忘了。(或者不想玩了。玩别的去了。)看来图形和并行这两大块没有一个不是硬骨头,都是数据与算法密集行业,我真应该用心去学啊。

昨天跑到皇家山上去跑步,气喘如牛,比洋妞都差远了,当然我想大多数的中国人体质就是这个水平,别看中国在奥运会上拿了几块金牌实际上整个民族的身体素质还是没有多大提高,办奥运会纯粹是政治考虑,老百姓在那里瞎掺乎,把那几千个亿的钱搞搞体育设施建设不好吗?主要是人民没有当家作主的权利,连预算的审查都没有参与怎么称得上是当家作主?WLS说他现在明白我当初回国时候的感受,就是仿佛鱼儿离了水,所以他只在北京短暂停留,的确当今的中国早就不是穷人生活的地方了,如果毛泽东还活着,他很可能要再写一篇《中国之当前各阶级之分析》或者是《中国即将到来的农民运动之考察报告》,这种状况其实已经不是什么秘密了,连小胡自己也开始在内部承认自己的党已经变质了,这是一个前兆,我想这个消息是确实的,因为据说他和小布什谈话时候坦白地向美国低头交底的也是这么说的,他说他现在每天大部分时间都是在处理内政也就是国内矛盾根本没精力与美国来较量。什么内政呢?无非是吃饭穿衣看病教育,这些人类最基本的需求。

前几天在大街上碰到Dr.D.F,他总是主动和我打招呼并且和我聊了几句,我心里始终觉得承蒙错爱受宠若惊,心里的感激简直就只能入滔滔江水才能形容。

上午去皇家山跑步,还是气喘如牛连海军陆战队女子分队的要求都达不到。下午去试验室待到快饿晕了,总算是有点成就感了,第一是冲洗安装wmpi应该是很顺利的,第二是重新编译RG的程序,中间遇到一点点地小问题,一个是RG用的openGL extension的版本不太一样,这个还不是主要的,最重要的是我一直不知道我必须把OpenGL32.lib要加入,所以全部的library包括OpenGL32.lib, glu32.lib, glut32.lib,glew32.lib, glew32s.lib,当然其相关的头文件和dll也必须放到适当的位置。编译的时候会产生大量的warning比如说链接不一致等等,不管他反正程序可以run。


五月十一日 出太阳了吗?没有,为什么?因为天上有乌云。(废话)

你知道天空为什么是蓝的吗?你知道为什么一年有四季吗?这是《我的野蛮女友》里的无理头式的问题。答案就是因为我说了算。你知道为什么我的OpenGL的library原来不能工作呢?因为,我设置nearplane时候设为了0。然后为什么就可以了呢?我不知道,我只知道以后再上comp471的话,你不用再编程序写code了,用了我的library保管你比别人编程速度快非常多倍。(夸张!不过我当时的确是把我的直升机程序重新作了一遍,大约只需要半个多小时吧,当然只完成了绝大部分吧。你可以试一试啊,)当然我的程序里面有一个重大的问题,我会慢慢解决的,其实我在我的project里面应该已经解决了吧。我忘了。我现在的记忆里只能维持两个星期,如果有人找我借钱过了一两个星期你看看我还能不能记得,哈哈,因为我压根就不给你借钱的机会,当然我有时候会心血来潮找你借钱的。


五月十五日 出太阳了吗?没有,为什么?因为下雨了。(废话)

我也许知道我为什么现在写程序越来越慢了,因为瞻前顾后太多了,比如昨天就为了定义octree里面各个子结点的enum顺序居然就翻书查看comb.algo是否符合GrayCode的顺序,这实在是太夸张了吧。很多时候我总在想怎样把comb.algo中学到的应用起来,可是好像很不容易,就是一个dancing link我都想了好久,好像除了max-clique这类问题之外都用不上,也许是我脑子装不过弯吧,教授的说法是用一种incremental的方法来记录变迁,我的理解是把深度搜索的context拷贝变成了指针的传递,看来我的看法似乎是太intuitive了,不过怎样incremental我也不是很理解。至于说lookup table的想法倒是比比皆是,比如看到一篇octree的paper说的很有意思是把set的generation应用到了,因为octree无非就是一个8个bit的set表达,那么set的顺序是否应该用order of minimal change呢?似乎要,可是有什么好处呢?realtime的图像变化符合minimal change吗?不知道。另外就是算法中学到的有一个矩阵快速乘法的思想就是化乘为加,因此那一片paper里面也有这么一个idea(好像他们是有实现的),就是把octree的点全部quantizate到中心,然后所有的点实际上都是一个对于上一个点地偏移,在geometry transformation中矩阵的乘法可以变为加法,M*(P+dp)=M*P+M*dp,因为后面两项都可以预先计算的。我的想法是在此之上的发挥,如果不先进行quantization到center,而是把每个点都记录成对于中心的偏移,那么这个思想也可以运用,不过工作量好像太大了吧,因为这成了偏移的偏移。另外想起来了RG说过的实际上我应该不需要链接OpenGL32.dll因为这个是MS的实现,windows默认都有的,一定是我增加了glew.h排斥了gl.h造成的。

常常听从国内来的人老生长谈式地说coding是最容易不过的事情,可是我始终不能苟同,如果这是件容易的事情我应该会感到厌烦的,因为简单重复的工作任何人都回厌烦的。问题的关键是coding的内容,如果有的人把参数设置,事件响应就当作是coding的全部那实在是有些无可奈何了,老实说有很多所谓程序员的工作实际上本身就可以用程序解决,也就是说他们的code本身可以用code产生,现在之所以需要他们仅仅是为了给产生code的code设定参数,一旦产生code的code本身也可以自动被产生,这些程序员就失业了。不明白说什么吗?比如原来我就干过一点点用c产生perl的事情,当然是部分的了,只是为了防止机械重复工作的错误。总之我觉得我现在每写程序的时候空发议论是世界上最容易的事情了,因为我可以安慰自己说我虽然没有coding但是在打字啊。码字工没有高低贵贱之分,只有分工不同。。。


五月十六日 出太阳了吗?没有,为什么?因为天上有乌云。(废话)

今天整理垃圾堆,意外地从里面发现了一张政府半年多前寄给的我的好像支票一样的东西竟然有六百多块,一时不敢相信,经过朋友确认才真的相信那确实是六百多个刀的支票,真是天上掉下来的馅饼,这个月的生活费又有着落了,哈哈。。。


五月十八日 出太阳了吗?没有,为什么?因为下雨了。(废话)

有所失必有所得,然而有所得必有所失,这个看似平常的俗语其实在离散数学里有非常深奥的道理,这个道理甚至于非常多的其他学科的自诩为什么博士硕士的都不明白,然而最深奥的道理有时候往往如哥伦布树立鸡蛋一样明显而又为所有人所忽略,那就是你很难把一个完整的鸡蛋树立在桌面上,可是敲碎了一头的鸡蛋呢?你想过没有呢?正所谓不“破”不“立”,有时候你实在不得不佩服中文的贴切。回过头来说那个浅显而又深奥的道理,在逻辑学上所谓“真”与“假”都是一些常量,在研究这眼里并没有什么区别,因此我们也无需认为“真”就比“假”来得好,因为说到底他们不过是一些记号而已,可以等量齐观。假如我们所有的理论都是建立在deterministic的基础上的,即我们只关心逻辑上的implication,i.e. A ==> B这一类的问题的话,我们完全可以根据对称的原则建立一个“假”逻辑的世界,就是像童话里的“假话国”,凡事都和我们颠倒的,很明显的他们的世界也是确定的或者deterministic的,也就是他们的一切理论的逻辑基础和我们的一样坚固。说了一大桶我也没有说到正题上,那就是所谓“祸福”本身在自然的主宰者看来并没有什么本质上的区别,如同硬币的正反面一样,作为人自己建立了好恶然后“趋利避害之”,然而世界是这样的复杂而广泛联系,牵一发而动全局,趋利避害谈何容易!

作为现身说法,我好像平白无故地捡了一笔原本就属于我的钱,因为加拿大政府是世界上最清廉的政府,支票不领明年也可以领,是你的总是你的。可是昨晚上我就发现我很笨居然忘记注册了,夏天便成了真正的假期了,但然没有想到的事我被推荐当了comp6231的TA和POD,想来也是有意思,上个学期我刚上这门课,现在来辅导别人真是典型的现学现卖。

经过一两个星期的迷茫好像有了一点点地方向,找到了一点点感觉,知道我该做什么了。去实验室吧。


五月十九日 出太阳了吗?没有,为什么?因为有雾。(废话)

关于OpenGL的矩阵的乘法,我一直摇来摆去搞得稀里糊涂,本来挺简单的一件事,我甚至在学comp471的时候就觉得很简单很清楚的事情还自己亲自用过呢,结果却变得糊涂了,真是应了那句话,看着简单的事情如果仔细思考的话也许会有很多的发现,(这句话使我自己临时想出来的,没词了。)总之,明白了一个大道理,就是OpenGL这么做是由大讲究的,很可能是为了装备有vector-register的GPU设计的,(事实上,Fortran的矩阵和C是不一样的,正好就是这样的,因为,作为科学计算工具,矩阵计算是家常便饭,所以。。。)具体是什么我已经详细写在了英文的日记里了。其实这个道理没有多深奥的,作为计算机专业的学生应该都可以想到的,只要你去想过这个问题,当然你要上过类似的基础课,国内叫做“计算机结构”。


五月二十二日 出太阳了吗?好像有。不过只有一小会儿,天很冷。(废话)

花了快一个早上才想明白当初我们在project里面遇到的synchronized的陷阱。原因就是synchronized的方法是atomic的方法,不同的thread是无法重入的。

头发越来越长,脑子越来越慢,我越来越只能思考一些中国国家高级领导人才思考的问题,也就是说拍脑袋的决策问题,反正比扔硬币强不了多少的决策问题,换句话说废物都能干的活了。因为一个简单的octree我磨蹭了一个多星期了,每天只是写两行就停下来了,当然这其中的客观原因是我对我要做的事情始终充满疑虑,究竟我是否应该存储所有的层,究竟我该不该把多个点归结为一个中心点?将来怎么把颜色或者说texture加进去?不知道,因为这个想法实在是太naive了,按照我从computer science学到的经验就是这么trivial的idea一定早在很久很久以前就被别人无数次地尝试过后称为“常识”了,绝对轮不到我了。正如Dr.M所说的graphic令人沮丧的就是每次你以为你想到了一个主义的时候你很快就发现可能上个世纪就有人尝试过你的想法了,这也正是英语里面常说的笑话,也就是只有亚当和夏娃不用担心自己会犯plagerism。很早以前,就是上个学期刚刚开始学java的时候,我曾一直想写一些小小的C++程序员看待java的tips。一直没有动手,总算今天开了个头。java vs. C++.


五月二十四日 出太阳了吗?好像有。天很冷。(废话)

制作了一个小小的slides用来解释synchronization的。今天觉得我这两个星期什么也没有搞明白,根本就不理解octree的用途。


五月二十八日 出太阳了吗?好像有。天很冷。(废话)

郁闷中。。。


五月三十一日 出太阳了吗?好像有。下午午睡热得我受不了了一觉醒来下大雨了。

郁闷了好几天总算meeting的时候有点东西可以交待了,至少我没太过于丢人吧,因为总算是改写了一下octree。实现了RG's paper里面描述的结构,把他的three pass改称了1.5次,当然他是不小心随手多traverse了一次计算boundingbox,但是至少第二次用BFS来traverse tree是不必要的。当然,我得所谓0.5次是说,我在第一次partition space建立octree的时候记录下了点的顺序,让后就是按顺序拷贝而已。有一点可以明确的就是原先设想的viewer-dependent-level-detail是有一些空想的成分了,虽然很多的paper都这么谈节省内存等等,实际上对于rendering用处有限,比如一百万个点一般来说也就是10层左右,可是有很多曾被简化到几十几百个点实在是没有意义,因此没有几层可以用了。另一个idea就是预先计算PVS(potential visible sets)的一类的,在复杂场景(scene)比较有用,(这一点和frustum culling有些类似的),但对于我们这样的单一物体实际上沦为计算backface culling了,二者通常是硬件去处理的。所以这也是一个没戏的想法,归根结底还是要回到parallel上来,或者distributed方向上,两者到底谁先谁后是无所谓了,实际上这两个方向是很难割裂的。另一个当前的头等大事就是GPU programming,RG使用了assembly的shading language,而现在大家都开始用高级语言的shading language了。这是这个星期的头等大事,要记住啊。我现在总是忘记大事,而对于诲人不倦的事情时非常的高兴的在做

现在回过头来看我这一个月都干了些什么呢?实在是有些乏善可陈,后来明白了,因为我已经忘记了我这个月做了些什么,当然就觉得我什么也没有做。比如看半个月前的日记,我得那些想法,我是忘得干干净净,不提醒根本想不起来!当然我对于学术的东西忘得很快对于杂七杂八的事情倒是记得,比如这个月又用政府的钱配了一副眼镜,无意中又从垃圾堆里找到了政府发的支票,第一次当POD和Tutor等等。真正的程序我写过没有呢?我得library改了一个数字号称很大的工作?除此之外居然花了快两个星期来写一个简单的DFS,改code比自己写来的慢吗?当然还是学到了很多,比如,RG用了很多宏命令来设置不同的模式,这和常量的作用异曲同工,可是仔细一想,这至少节约了大量的执行期的if then,反而使变量的一个内存的节省是小case了,会不会我太小气了,以至于在分布式系统里面谈论节省几条汇编指令的优劣?当然另一个我忘记提的就是他设计的project很好,所有的子project都编译成lib有一个主的project进行静态链接,同时,我还发现他居然是设置成了动态链接VC的debug 的dll,这一点我还想不明白,也许是release version和debug version的设置吧,以后留心看看。在一个学到的基本东西就是OpenGL的ext不需要你添加任何的dll,唯一需要的是一个glext.h的头文件,当然你甚至可以自己写调入那些extension的函数,当时用RG搜罗来的extSet实际挺好的,你也不需要用glew32.dll因为总有一些warning说你的ext函数编译部以至之类的东西。对于vertex_buffer_object要这么理解,就是第一次的时候是把数据上传到GPU的内存中,然后你再调用bindbufferobject并传递index作参数就是在refer那一个bufferobject,然后可以像使用vertex_array一样地设定vertexPointer,normalPointer,texturePointer,不同的是现在的pointer地址不是真的地址,而是在bufferobject里面的偏移量,可以想象这节省了从CPU到GPU的上传时间,虽然现在AGP据说能到1G,毕竟节省了很多。当然要注意,vertex_buffer_object和vertex_array是冲突的,同时使用必定down机重起。今天meeting里另一个问题显示了RG所评价的Dr.M的knowledgeable和循循善诱,可以说对graphic这一领域无所不知无所不晓了,借用《The Matrix》里面Morphius对Neo赞扬Oracle的话就是说,Try not think in terms of correct or wrong. Regard it as a guide who can help you to find the path.的确,是否把一个点加上很大的spatting传到pipeline好呢还是你自己定义所有的pixel来的好呢,凭直觉应该是前者好,因为这毕竟是让hardware帮你完成工作了,这个问题不用再想下去了。还有一点就是关于frutum culling的优劣问题,应该要成为一个定论不要再纠缠了,虽然它只对于复杂的scene比较有用,但是当object离得很近的时候也会有用的,同时我们采用octree的一个重要目的就是可以做frustum culling,因为这是一个hierachical结构,从根开始可以很快地判断结果不会占用displaycallback的太多时间,对于occlusion culling就没有这个特点了,所以结论就是frustum culling很便宜应该使用。这个月好像没有什么可以想得起来的了,就到这里吧。


六月二日 出太阳了吗?好像有。朦朦胧胧的。

昨天买了一台暴强的主机知道我现在用的显卡是什么?ATI X1600 PRO 512M,简直就是超酷了,知道pro级的显卡是什么概念吗?那就是巨贵啊,199刀啊!现在我把两台主机叠放起来,使用一个David强力推荐的转换器共用一套键盘鼠标,只要轻桥两下立刻切换到另一台主机上,真正实现了并行,分布式,除了用一个爽字来形容你还能怎么表达呢?

 


六月三日 出太阳了吗?好像没有。因为下雨了。

今天早上混乱地道出搜罗有关GPU得咚咚我现在觉得GPUProgramming不是一个短期可以实现的目标,并且在这上面能出多少结果始终是一个未知数,甚至会被当作intellectually shallow吧?因为毕竟在学术上没有什么价值吧?当然作为game公司的programmer总是好的.因此还是回到并行这一块吧,我想实际上imbalancing的问题只是一个学术上的问题,现在我面对的是一个简单的场景,固定的object,不管怎样最低限度每个node都要完成最低的工作,如果因为物体移出view volume以外,这并不代表说我应该让这个空闲的节点分担别人的工作,因为我们的工作是固定的,没有必要变来变去的。一个稳定的输出哪怕慢也未必比一个不稳定的时块时慢的系统来的好,因为我要欺骗的是人的眼睛。

想起了很早很早以前使用工作组的时候的事情,因为windows只是认user name,所以若你把两台电脑上的administrator的密码设成一样,就可以互相访问共享文件了。当然还有一个前提就是要启用文件共享的服务,这个可以在netsetupwizzard里面做的,实在是很久没有用过网络上的电脑了这些基本的东西都忘了,比如使用netsend之类的命令之前你还是要启用messanger的服务的,当然这里的messanger和windows messanger是两码事了。

饿着肚子漫步在st.catherine大街上,天色阴郁,云飞风紧,小雨点似乎很善解人意似地往你的脖子里钻。总的来说,人的本性正如三字经里说的,人之初,性本惰,如果我吃饱了喝足了决不会为这样一些问题发愁,比如使sort first,还是sort middle,是否应该由master来决定visibility test然后在收集所有data的时候才能正确地写入framebuffer,究竟有多少种buffer呢?colorbuffer, framebuffer,accumulationbuffer,texturebuffer,stencilbuffer,pixelbuffer ect.究竟哪些是概念上的,哪些是实际存在的,还是说和具体的实现硬件相关?究竟应该从那个buffer里面取,究竟应该写回到哪一个buffer里去呢?我在想,世界上像我这样安贫乐道的人还有几个?从物以希为贵的原则来看,我差不多快成为国家级保护动物了。你看,我基本上拒绝一切有可能使我自己堕入荣华富贵的机会,比如我不买彩票(当然我没有闲钱),我不玩股票期货(穷人哪来的本钱),我没有主动去找工作挣钱(我懒,我有错吗?),我基本上不给自己被富婆包养的机会(我倒是想,可哪有呢?),国内凡是招聘CEO的我肯定也不会去(好像还没听说来这里),走路基本上只看天上的云彩和路上的美女决不给自己捡到百万英镑的机会(加拿大的支票你也取不了现金),每每有朋友谈起做生意赚钱的事情我就闭上耳朵(你倒是试试看能不能闭上?再说了,我是明知道他们都不大可能成功的。),总而言之,一个人到了我这种境界了,除了世界局势和PA特价青菜的消息都不能再引起我的注意了,这样的人算不算纯粹的人,高尚的人,一个脱离了低级趣味的人,一个。。。慢着,白求恩塑像前又有一堆中国人在照相,一望便知是公款来旅游的,拍两张照片作为学习成果的证明,然后夹带着连去看table dance的发票一起报销,这种生活实在是令人。。。哎,反正我是没机会了,谁让咱来这插队呢?可是话说回来了,真让我国他们那种生活我一定会很痛苦的,你想整天吃饱了喝足了,除了发愁怎样吃喝玩乐每天腻味死了,连半年吃一次冰激淋得快乐都没有了。又来到了前年夏天吃冰激淋得大教堂前,那时候有两个看上去像是俄罗斯的音乐家在演奏吉他,我就到对面的麦当劳买了一支1.03元的火炬冰激淋,坐在教堂门前的石阶上边听演奏便打瞌睡,那音乐实在是太动听了,听得我只犯困,后来就去Ailes百货店里的真皮沙发上睡觉去了。啊,这样的生活享受,他们能有吗?


六月四日 出太阳了吗?好像不知道啊。

今天花了一个早上被RMI的remoteObject折磨,原因是我想返回一个class,这必须实现Serializable的接口,最简单的就是找一个class来继承,我觉得remoteObject挺好的,就从那里继承,结果总是抱unmarshalling的错误,后来看例子采用普通的类,仅仅声明实现Serializable接口并没有实际实现居然可以实在是玄妙。“rmic”始终有很多末民奇妙的东西,还是仅仅用javac来的安全。我对于RG的paper里面的东西总有些将信将疑,莫非他仅仅是在谈设想?或者他的code另有玄机我还没找到?难道他抄的那几段汇编能有大名堂?不太可能。又或者他还有别的版本?


六月七日 出太阳了吗?好像不知道啊。

没来由地受了一肚子窝囊气。中午会面发现自己像是一个傻瓜,所有的事情都想得不对,下午准备尝试让硬件做visibility test我用color的index来检验,可是readbuffer或者readpixel好像不对啊。后来发现了rasterPos的一个用途,就是随后的glGet(GL_CURRENT_RASTER_POS)可以得到Transformed的坐标。教授叫我看North Carolina的论文,还没有找到。好累啊。晚上心情很不好。


六月九日 出太阳了吗?没有,因为有下雨了。

郁闷了一个下午,最后在小雨中散步了快一个小时。有时候感觉真的如歌里唱得那样无奈与无助,到底为什么郁闷,甚至我自己都不知道,只是觉得很压抑,那种感觉仿佛是带领一支残破的游击队和全副武装的德国最精锐的党卫军装甲师对阵一般的无望。totally clueless,对于一连串的invalid operation我并不是绝对担心我不会最终找到原因,可是,这样的进度实在是比龟步还要慢很多啊。frustum culling的一个小小的bug耽误了好几天,虽然最终找到了我却毫无轻松的感觉,我的意思是说,这仿佛是一个被宣判死刑的囚徒发现审判书上有一两个错别字便要求上诉,结果并不能改变什么,因为本来VFC根本就是只针对复杂场景才有用的,比如早上按图索骥去Dinesh Manocha教授的网站去下载他的录像才体会到像这种power plant之类的才叫做复杂场景或者超巨模型,这时候当然是极其的有用了,而像我种小模型实际上毫无用处,因为为了取出千分之一的点是完全不划算的,(octree如果平均来看搜索不能超过三层,否则就是只有最多百分之几的好处而已。)我的quantization的idea实在是幼稚的可笑,以至于我都不好意思提了,究竟clientside的state和serverside的state有什么区别呢?glEnableClientState?是什么意思呢?我不明白人的一生中可以犹豫多少次,去年的夏天我在最后的一刹那犹豫了,当时以及事后我都不清楚,仿佛在《The eagle has landed》里的男主人公在小说结尾扣动扳机的一刹那致命地犹豫不决了,连当时大义凛然的Winston Churchill德what are you waiting for?也回答不了,的确,totally clueless。作者的解释时Karl Steiner的德国血统的一半要求他不惜一切代价完成使命,哪怕对于目标极度的怀疑,而他的美国血统的一半却在他即将完成的一刹那开始质问那个使命的意义何在?前年夏天我在一种不经意之间虚度了一个宝贵的夏天,你可以说我当时没有条件,毕竟我连Linux的ls的参数都搞不明白,结果几乎是在最后二十天才看到了一些希望,可惜已经太晚了,我真担心这个夏天又要重演悲剧。我并不担心困难,我所担心的是我身上的异化的迹象,一旦失去了最初的热情,所有的一切都是转眼成空。一个丧失了用键盘思考人生的人还有什么。。。对于RG的其他部分代码我也只能一步一步地探索,我当时大言不惭地说已经看到了70-80%现在我不知道怎样对自己解释。


六月十四日 出太阳了吗?阳光灿烂,心情也就好了。

昨天筋疲力尽中(因为本科毕业了,哈哈。。。),毕业典礼古色古香安排的滴水不漏,井井有条,每当屏幕上出现某伟仁兄或者仁姐拥有出名字以外的多个title的时候大家都会热烈鼓掌表示由衷的钦佩,至少计算机系,和软件工程的各位大家都彼此清除整个本可读下来的课程实在不算很轻松,虽然是二流大学,也绝对没有国内的大学那样好混,要拿到高分当然就更不容易了,这里虽然没有什么风气说是一定要排个名次,但是大家对于本系那几个with great distinction的还是钦佩的紧的。

今天持续充电中。。。为了对自己有个交待,过去的一个星期里,我也不是闲着,我在当应答机,回答问题,改作业,(当然看官如果不是中级水平的程序员,或者对于分布式程序设计感兴趣的专业人士还是不要进去看了。)但是对于OpenGL除了去试验了readBuffer里的颜色来测试输入点的visibility之外没有什么进步,不知道要在这个星期的meeting里怎么谈了。。。


六月十六日 出太阳了吗?阳光灿烂,心情也就好了。

Dr. M给我的感觉仿佛是和煦的春风,每次当我对于前方充满迷惑于怀疑的时候,和他谈话之后就又有了信心。我现在还需要了解的就是two-pass的blending的algorithm。然后就可以开始进攻了,不过到底需要不需要创建线程来同步呢?好像很明显的需要。

写到这里突然决定进行一次长途跋涉拜访朱春明,于是沿着atwater大道跑到他家里去和他的两个同学踢了一个半小时的足球,真累啊。晚上吃了好多西瓜和一顿丰盛的晚餐,饭后闲聊了一些关于相对论和进化论的话题,一不留神都已经半夜了赶快做最后一班地铁回家,回来后洗个澡,筋疲力尽的快乐地给今天画了一个句号。真是幸福的一天啊。


六月十九日 出太阳了吗?阳光灿烂,心情也就好了。

改作业改的我是昏天黑地,结果发现这个班级里面高手还是不少,又一两个真的是专业级。顺便在看在线的《编辑部的故事》,又看到了我年轻时候的偶像,戈玲。


六月二十五日 出太阳了吗?阳光灿烂,心情也就好了。

头疼,头疼。昨天发生了什么事情我今天就忘记了。是前天偶然看到的F1赛车,还是大前天,仿佛我收到了两张mr.Y送来的学校的支票,是半个学期的TA的工资,我当时在暗想如果把这个也记录下来被胡一刀看到一定会夸我有大文豪鲁迅的遗风。当年就是他告诉我鲁迅的日记里无非也就是记录一些某年某月某日某人来借钱若干之类的流水帐。那天聊了很久都是关于北美这里的股票操作的,正好我的这个TA里面的程序就是一个股票交易系统,想想看,完全有可能有人去写一个程序自动地进行股票短线炒作,比如一分钟之内就脱手的速炒,风险完全可以控制,盈利基本上是一个很小的固定数,这样一来巨大的交易额来获取利润,有没有想过如果纽约证券有一天统统是这些无生命的程序在炒作的话,这个世界的末日就差不多来了。有没有可能资本真正地从这些无意义的交易中产生新的价值呢?决不可能,经济规律一定会惩罚美帝国主义的这种投机主义的,毕竟资本归根结底还是要靠人的劳动来创造,假如有一天机器人成为劳动的主力,那么意味着世界的主宰就成为了机器人,人类的末日就来了。期待中的PLU比赛又一次的失约了。头疼,头疼。

下午,学习三国演义里的赤壁之战部分,着重于计策的实施细节。昨天的半个西瓜就当作是午饭的一部分了。目前关于我的头疼的另一部分仍然无头绪,也就是从background运行的daemon里面来画得window和我从普通的程序产生的window究竟有什么区别的问题,也就是在main里面怎样用纯得win32api来画window问题,待我找出我的就笔记本的资料再说吧。


六月二十七日 出太阳了吗?阳光灿烂,心情也就好了。

头疼,还是头疼,昨天终于等到了图书馆用email通知我借的那本书由到期了,长就以来这已经成为我的作风,图书馆的书接回来从来没有翻过一页纸然后静静地等待到期归还,如果时亲自去图书馆看书几乎可以肯定在二十分钟之内我确定肯定以及一定会昏昏入睡。我总在发着全世界懒人一样的感慨,假如我能够在努力一点,我肯定就。。。 昨天我有一次发下宏愿,不破楼兰誓不回,可是结果不到九点钟我就从实验室回来了,当然楼兰没有破,不过倒是回来之后发现了楼兰是可以破的,我有一次地犯了一个低级错误,我为了防止自己忘记分配buffer给socket,有意识地县把buffer长度变量初始化为负数,这是我从以前的一次灾难性经验力学到的,可是我的确没有忘记分配buffer,我只是忘记把这个buffer长度变量改回来了,结果折腾了几乎半天时间呐,真是被大虾们笑掉大牙。有时候我在开始回忆当年黄连生所说的他写程序熬不过三十八岁的话,我现在越来越不太敢出手写程序了,竟然开始写一些伪代码了,堕落的和那些写java的人一样了。今天在我在图书馆睡着之前我总算看到了MTU时maximum transmission unit德所写吧。我现在在自己家里睡不着,一到图书馆就睡着,为什么不搬到图书馆去住?

下载了微软拼音2003感觉那简直就是一个飞跃,你可以想象微软中国研究院做了多么了不起的工作,的确这些细微末节的东西在很多人眼里没有什么了不起,可是这是自然语言哪,说明他们的模型现在已经超越了很多教科书里的描述了,至少我是这么认为的。

最可能成功的事情不会使我最想要做的事情,最想要做的事情也绝不是我认为最可能做的事情,最现实的事情和最可能的事情以及最想要做的事情也是无关的事情。突然收到才会意识到也才想到,其实那件事的最佳人选是这个人,虽然并不是我最认同的人,我最认同的人并不是什么最佳的人选,有时候偶尔地想起email的落款上的一对彩翼,只可惜灵犀指却难以跨越太平洋或者是大西洋。究竟Petzold的教程被我存到哪里去了呢?难道是安睡在最早的那台compaq里吗?还是后来的那台韩国造的杂牌笔记本?想到这里我就恼火google desktop  search不能自定义搜索文件的位置害得我只好删除了已经超过了一个G的巨大index文件。晚上吃不吃饭呢?好像只有蜗牛罐头了,这个星期要记得去学校问问看为什么夏天不给我发补贴。


六月二十八日 出太阳了吗?没有,因为下雨了。

昨晚去实验室结果一个人也没有,我还以为我记错了日子了,想想看大家都在考试吧,一个人待着也不敢走,就听在线的音乐吧。今天早上想起昨晚收到的RG的mail总觉得不甘心,可是造化弄人,MPI居然比我用UDP快了十倍还不止!难道。。。听梁咏祺的歌曲居然听出伤感来了,为什么我每次穿短袖的事后天总是比较冷,我穿长袖的时候天比较热呢?非常的沮丧,明天的meeting不知道要说什么?

 


七月三日 出太阳了吗?好像有吧。

搬家了,从一个陋室搬到了另一个陋室。看好莱坞的老电影看的很高兴,江的事美国人嘲笑欧洲人的事情,一家子美国人周游欧洲,遇到的各个国家的笑话,比如嘲笑英国人的酒店房间里没有卫生间,房门没有房号结果晚上统统上错床,租车老是忘记要左行,结果不停地撞人撞车,可是每一个被撞得英国人都是喜笑颜开,还不驻地道谢。原来这是美国人在嘲笑当时有名的“英国病”,也就是高福利带来的问题,比如被撞得车子可以去保险公司索赔正好把以前的小毛病一起修好,被撞的人正好可以带伤休假出去旅游疗养。来到了法国,公共场所法国人的肆无忌惮让美国小孩子看的热血沸腾有样学样很快就学会怎么去夜总会狂欢了。来到了德国,德国人的好客让他们在一对陌生老人家里吃住了一天,临走的时候两个老人还不知道这一大家子是哪里来的。来到了意大利,遍地都是犯罪连换个旅行支票都会遇到打劫绑架。


七月五日 出太阳了吗?好像有吧。

很巧碰到了D君,原来他就住在我隔壁,他聊起了很多一些我闻所未闻的事情,心情也有些郁闷,因为有些事情不知道是不是就是现实的问题。我常常想钱这个东西肯定不是好东西,有了它你就会变懒,但是没有它你也活不下去,最好的解决办法就是刚刚好,但是前提是你不缺钱。矛盾啊。


七月六日 出太阳了吗?好像有吧。

生活中有很多无法解决的难题,比如一块面吃不饱,两块面又太多了,方一个辣椒尝不出味道,两个辣椒又有些太辣了。吃饱了撑得怎么办?去看爵士乐我穿的拖鞋走不了那么远,就近有fantacia的专场电影,我又舍不得花钱,再说了队伍排得无比长,那么还是只好回家了。回来的时候发现以前总是碰到的一个小留学生原来就住在隔壁的大楼里面,可是那又如何呢?


七月八日 出太阳了吗?好像有吧。

郁闷。什么是无稽之谈?所谓阴在阳之内,不在阳之对,结束结束在开始开始之前。获取RGBA之前要记得设置GLUT_RGBA和GLUT_ALPHA模式。


七月九日 出太阳了吗?好像有吧。

OpenGL的pixelbuffer读与写不是对称的,就是说读是可以直接,写却是要经过transformation变换的,看来只能求助于extension了。晚上看LarryKingLive的对布什的专访,感觉美国的民主制度实在是世界上最完美的制度,依靠这种先进的制度美国至少还可以维持繁荣一百年以上,在这之前有一个CNN的一年前的纪录片反映北朝鲜的现状的,当然是应因这两天的北朝鲜导弹危机的,当然那些从隐藏摄像机拍到的纪录片可以有一种震撼的感受,仿佛就是再看一遍《1984》一般。


七月十一日 出太阳了吗?好像有吧。

这些日子里我只会说一个英文单词,clueless。OpenGL没有开放类似于直接写colorbuffer的函数,drawpixels绕了一层,你必须使用一个current rasterPos的object world coordinate来指明当前的colorbuffer的位置,可是这个功能对于别人很有用,对于我却很头疼,我怎么知道当前的colorbuffer的原点对应的物体坐标呢,除非计算MVP的inverse,并且我用的事gluPerspective,不然用glOrtho也没有问题了,可是能够用glOrtho吗?物体太小了根本看不见。而且,另一个好笑的事是rasterPos用的坐标原点是在左下角,通常windows coordinate在左上角,这看样子是OpenGL的规范了,并且如果是float的话数值是在-1与1之间!另外一个讨厌的东西是关于drawPixels,他还需要设定pixel矩阵的内存存放方式,这个市在另一个pixelStore里面的东西,UNPACK_ALIAMENT的设置决定了下一行的地质开始“跳跃值”,这个有时很tricky的东西,因为drawPixel不仅仅是写colorbuffer,也不仅仅就是写RGB,它可以有多种方式,那么每一个group的数据类型也可以多种多样,因此对于32位寻址方式你必学给他一个提示,到第一行完了下一行开始要跳几个byte。如果这近几年使问题的全部我也就谢天谢地了,问题是我总觉得:1. rasterPos是要让整个写入的pixel data都apply transformation matrix的,当然我认为Sushil的说法是对的,仅仅是一个coordinate,不过我还是不放心。2。这样的buffer写来写去太慢了,我想用类似于vertex_buffer_object的东西来直接读写colorbuffer,比较有希望的事pixel_buffer_object,他用的是ARB,可是查询了一下ATI居然没有,看来ATI被收购真是活该,他的那个extension setup的简单的小程序非常的令我费解,我常常怀疑写那些宏命令的人和我哪一个理解问题有困难,仿佛是他写了很多不应该的东西。而且,我怀疑我眼睛看花了,居然vertex_buffer_object没有实现我就能用!肯定是我眼花了。

恍惚之间从睡梦中惊醒,原来该吃午饭了。炒菜的时候忽然想到那些不久之前的梦想与失落,当时的情景就如同大多数人所执著地认为的那样,那是唯一的选择,一旦失去实在让人不知进退,然而时过境迁幡然回首却发现你所谓失去的从来就不该属于你,你得到的也许才是你本该得到的,那种感觉仿佛拖着伤寒病体在饥寒交迫中修铁路的鲍尔科察金忽然看到身穿貂皮大衣一身贵妇打扮的冬妮娅的感觉,你会突然开始质问当年心底里所憧憬得到地理现实与真正的理想有多远。当然如果你以为我所谈的是人,你就太小瞧我了。


七月十四日 出太阳了吗?好像有吧。

郁闷了很多天终于看到了一线曙光,其中一个absurd的问题还是OpenGL的extension的问题,至少我是这么认为的,只要我enable了GL_ARB_vertext_program之类的我写入的point的color就变成了白色这是在世难以捉摸的事情,我也懒得去看OpenGL_ext的文档了,那类文档非常的晦涩,纯粹是开发人员的自问自答,对于原来非扩展的部分不熟悉的话,完全不知道再说些什么。另一个大的调整使我终于决定把显示的终端和输入用户操作的终端分开了,这样省事多了,省得我总是为perspective和orthogonal显示模式发愁,让教授对于我的concern非常的不理解,我也了解他的心情,就是赶快验证一下这种纸上谈兵的可能性,在图形方面的大师对于网络和并行不甚了解当然是非常担心一条路从一开始是否可行的问题,可是这一行很多都是实现的细节,也许看来不可行的实际可行,也许看来可行的实际不可行,我也不知道该怎么说,原本我比教授还没有信心,自从被他打了一极强心针,变得比较有盼头了。不过其实我想记下来的事我现在好像随便一看就知道是有一个同步与异步的问题了,比如一个master和若干个renderer同时要发包给displayer那么你用blocking的MPI_Recv不死机才怪呢,这种问题应该能在一分钟之内想到,当然我是早就怀疑了,只不过为了调试方便采用同步的收发,不然那才是chaoes呢。早上起来看Plu的联赛很过瘾,有一个博士发帖子问还有没有爱玩sc的博士,我谈不上玩,只是喜欢看直播,比那个什么狗皮世界杯好看多了,当然世界杯我是几乎一次也没有看过了,现在我好像越来越与凡人的兴趣爱好不一样了,不知道是好事还是坏事。应该是两分吧。下个星期去学校再去问问钱的事情,现在的政府就是这样不负责任,居然不知道应该主动来问问我们劳动人民有没有钱花,难道总是要我亲自去查询他们是不是犯了错才行?


七月十五日 出太阳了吗?好像有吧。结果又下了暴雨

昨天好热阿,据说有三十多度,惹得受不了了只好违背原则第一次晚上去实验室,因为有空调。当然去实验室之前还是要微服私访体察民情一下,独乐乐不如众乐乐嘛。当然我平常所有的衣服都是微服了,我平常时时刻刻都算是在体察民情了,只不过我这个民比一般的民情特殊一点,大家都有的我不一定有,大家都没有的一般来说我也没有。早上起来去实验室转了一圈,在证实了一下同步传输导致死锁的问题,我敢说同步接受不一定会丢包,就是说先前接受的也许会存在某个内部的buffer里面,但是这一点谁也不敢保证,也没有什么意义去研究,总之只能用异步接受,这样连广播(broadcast)也不能用了,同时明白了一点,ready-send,与non-blocking的异步send是不一样的,前者要求ready-receive或者异步接受已经post了接受的请求,这个看来要求有点高,只好用普通的异步了。就那么几行代码我却懒得写,磨蹭了一下决定再次体察民情去了,反正已经微服了。外面真热闹,整个st.Catharine大街变成了地摊街,连La Bay都开始练摊了。人民欢天喜地地裹着我看不懂得节日,我看了看觉得没有什么我可以买的东西,第一,基本上那些东西我都不需要,第二,没有预算,娱乐开支千年大概就透支了,不知道今年的预算是否已经被预支了,服装的预算去年底一口气买了三条Levis的牛仔裤也已经用完了,至于其他的开支嘛好像今年还没有编列吧,啊,不对是今年又买了一台电脑全部都挪用了,看来这种人回国当领导一定会把文教体卫七七八八的经费都挪用的,危险啊,新奎没有机会当领导不然怎么得了啊。走过一个草台班子的厂子看到免费演出美国百老会似的歌舞,看着很不错劳动人民大都列着大嘴乐个不停,这种形式的文艺活动要多多开展,找个机会让小胡给下面传达一下,明年多拍几批干部来这里学习一下,顺便帮我从国内带点东西过来,当然这个就不用传达了。大概国内过来的人的英语程度可以用一些简单的单词加以测试,比如这个funkyZone里面的funky就是一例,我去年丢的那个带usb memory的手表就被Alex称作funky。视察结束的时候碰上了大雨,我心里在为那些摆地摊的感到难过,好不容易开张清仓处理全都被突如其来的大雨淋个透今天肯定是亏大了。在这里做生意的真难啊。回来后第一件事就是再喝一罐可乐。


七月十六日 出太阳了吗?好像有吧。

今天仍然好热,大约三十多度吧,也许在可以预见的将来,魁北克要变成亚热带了,那个时候我要迁移到北极圈去生活了。吃饱了撑的,就上街溜达,发现了一些表演,比如苏格兰风笛的吹奏完全是一种异步的过程,就是说不断吹起到气囊里,然后就保证了气流的稳定输出与声音的连续,用不着吹奏者有超人的肺活量一口气吹到死。这种独特的方法是所谓的中华文明永远想不到做不到的。西洋鼓乐队的演奏很抢眼,尤其是指挥很风趣有感染力,这是一个相当困难的同步过程,要所有的队员都依照同一个节拍演奏本身就是一个不断调整的过程,当然因为有一个统一的时钟频率问题好办多了,不过指挥大部分时间并不在指挥,因此平时需要队员之间根据彼此的节奏调整,这个过程是实时系统的关键问题。早上去解决了一个小问题,现在系统算是OK了不过好像是lightmaterial没有设置的原因,图像是黑色的,什么时候去试一下,不过最大的问题还是怎么改成多线程的系统,我想先稳定一下,不然一个使用OpenGL的再MPI之上运行的并行的不仅仅是数据分布处理得还包括功能分布处理的实时图形处理系统要在进一步便成多线程恐怕又要一大堆的bug等我去找,这个还不是我最担心的,毕竟问题比较简单,最主要的是OpenGL的extension部分由时候对我来说实在是捉摸不透因为从来没有真正玩过,除一个什么nusance的问题,我又要想破头了,像上一次我是只能把code拆到最最简单才发现是gl_ARB_vertext_program在搞鬼,实在是辛苦。

好莱坞的黑白老片子很有意思,今天看了一部浪漫戏剧,明白了一个道理就是一个粗心大意的愚蠢女人可能比凶猛的虎豹更危险,整个电影里的女主角就不断地在制造麻烦,先是拿错了高尔夫球,然后开错了车子,拿错了钱包,偷开了别人的汽车一边逃避罚单,这一切给男主角,一个当天下午要举行婚礼的博物馆的自然学家造成了巨大的麻烦,一会儿要去从涅狄格州抓豹子,一会儿要被迫冒充别人的名字,最后被投入监狱,丢了未婚妻,丢了捐助人准备捐给博物馆的一百万美元,总之麻烦接着麻烦,笑料连着笑料,我想所有的观众发自内心的唯一的想法就是全男主角赶快离开这个漂亮女人十万八千里才安全。整个电影的一个突出特点就是好莱坞黑白片时代主角对白很快,说话非常的连珠。


七月十七日 出太阳了吗?好像有吧。

早晨起床还是晚了没有看到Plu的八强赛的开头,不过有幸看到韩国留学生pj对阵贝克汉姆的大战,这一场大战实在是经典大气教科书式的pvz,小贝打得不错!打败了韩国职业联赛水准的对手,好。


七月二十日 出太阳了吗?好像有吧。

无一种下载了一部居然是加拿大拍的电影《Decoy》,这不过是证明了我以前听到的说法,加拿大的电影就是sex+horror。现在我每天玩的这个多线程的并行处理几乎每一步都是同步与死锁的问题。

写下我在tutorial上的重复的冬冬。


七月二十一日 出太阳了吗?好像有吧。

每个星期一和星期五早上固定要看plu实况。刚去倒了杯牛奶回来就看到pj打出了gg,难道zerg的7d开局这么可怕吗?刚刚写完就看到F91页gg了,不知道第三局会怎样?估计F91凶多吉少了。昨天忘记汇报了,我把所有的异步接受又改回了同步接受,因为所有的Non-blocking收发方式没办法控制节奏,结果通讯和rendering的速度差很多的情况下整个系统总有很多问题,比如rendering node比master node慢很多。可实际上整个系统必须和frameNo进行同步因此采用asynchronous的send,recv完全没有意义。


七月二十四日 出太阳了吗?好像有吧。

怎么解决死锁问题?最好的方法就是跑步爬山加上充足的睡眠。结果让我发现了这个当初想不到的bug,如果某一个节点没有一个点可见的话,mpi就不在发送,那么我的synchronous的sending,recving就会死锁因为少了一次接受。bug找到了但是performance依旧很差只有大约6fps。不过对于数据很大的model也是一样,所以这也许是一个好现象。

现在人生最大的乐趣就是周一周五的plu的个人联赛,的确能获得plu的总冠军一定是实力的象征,因为从初赛的决赛反反复复,没有实力是不可能获胜的。super实在是当之无愧的霸主。

无意中下载了一部后工业化的科幻电影,导演绝对是一个学现代艺术的电影学院出身的学生,片子中的演员无论从服饰造型,发型举止动作乃至器皿都是超现实主义的作品。比国内那两个土老帽的导演有气派得多了,不过电影的内涵实在是幼稚之极了。


七月二十六日 出太阳了吗?好像有吧。

无意中转到了一个厦门的网站,xmfish,厦门小鱼挺有意思的吧,主要是有一点点想家了吧。好不容易找到了一个glWindowPos结果发现是arb的,而且ATI的显卡不支持,实在是郁闷。联想到下午花了两个多小时也没有把一个简单的问题解决就更加郁闷了,这个问题不过是克隆几个兔子而已阿。


七月二十八日 出太阳了吗?好像有吧。

期待了一个星期的plu比赛变成了群魔乱舞。又重看了一下《古佃任三郎》,相比之下中国的所谓知识分子等等演艺界人士仿佛是打着赤膊两脚沾着稻田里的泥巴就进入教室上课的出身,还需要好几代的熏陶吧,这就是中国和日本的差距。

吃饱了饭撑得就上街溜达,看到一个仿佛满脸酒气的无家可归者向我乞讨,当然我知道他这是出于礼貌性的动作,并不表示他认为我是日本人或者我是中共派出的大款考察团的成员,我对于乞丐对我的高看感到由衷地感激,仿佛自己也突然摇身一变成为有钱人了,慌忙掏出两块另一毛的硬币交给他。路过街头四人室内乐队,又掏了一个两毛五和一个一毛钱的硬币作为我崇尚艺术的证明。想起来明天要冒着生命危险去漂流不禁心潮起伏,浮想联翩,这是一次价值五十个刀的活动,我经同学再三动员再下了决心,为此有专门去zellers买了一双价值20元的凉鞋,顺便买了两袋子价值不到5元一袋的日本大米,想想看现在能够买到的100%made in japan的东西就剩下大米了。在魁北克生活的穷人就是这样幸福,比如我是中就不知道自己有多少钱,反正银行户头里一直都有钱,怎么也化不完,甚至还计划八字收入的5%捐给逼我更穷的人,反正也没有几块钱。现在吃饭我已经每顿都是超市里买的剥好皮煮熟的对虾,连生得我都懒得买了,吃得我实在是腻味死了,按照电影《甲方乙方》里那个土大款的说法就是,顿顿龙虾鲍鱼都给我吃恶心了,反正就是那个意思吧,想想看在这种环境下让我奋发图强找工作挣钱实在是比登天还难啊。小时候听过一个伊索寓言,讲的是知了再下田里自由的歌唱,屎壳郎却辛勤地积攒着宝贵的粪蛋准备过冬,等到冬天来的时候,知了饥寒交迫地找屎壳郎接济过冬的粪蛋,屎壳郎冷冷地问知了,你在夏天的时候干什么呢?知了面露窘迫地说,我在唱歌。屎壳郎说,那么你现在就跳舞吧。我想,我就是那种知了,明知道会冻死还是喜欢过这种无压力生活的知了,左邻右舍的那些辛勤工作的同胞们的生活我怎么也不愿意过。无意中看到年轻时候崇拜的偶像的第二次雌性生命复制体的照片觉得实在是难以理喻,看来雌性动物对于生命简单复制过程的初级产品有着难以理解的快感。


八月一日 出太阳了吗?好像有吧。

看了一个下午的电影,是八十年代美国中学生问题的电影,当然不会比现在的中国严重多少吧,我的意思是这些问题每个国家和地区都有而已,昨天看了一部我小时候,也就是上大学的时候看的老电影《in the heat of night》是一部主题为种族歧视的悬念侦探片,影片的主角是一个在那个时代几乎不可能的角色,一个黑人刑警,这在南方小城市里简直是做梦,想想看在烈日下的棉花田里工作的黑人农民能够不被农场主打死就算是仁慈了,当然我说的事美国二十世纪三十四十年代,那个时候一个星期的工资如果是140块美金那就是超级高的工资了。上个星期六的漂流实在是有些让人精疲力尽,所谓exciting&exhausting,rough&tough,至今我身上还都是划伤,我突然发现学校给我的个人空间可以当作下载网址


八月四日 出太阳了吗?好像有吧。

当初有一点点私心没有把这个记下来现在费了很多时间去找。该死。

Runtime.getRuntime().exec("cmd /c start cmd /c java Test");

晚上很郁闷因为期待中的支票没有受到,虽然我不缺钱,可是心里却很不好受,也许是因为现在昼夜不明,也许是因为突然在睡梦中惊醒发现自己堕落到了无耻的地步,看看现在每天都在干什么?大概一天就工作一两个小时,然后就不知道在干什么了。夏天,每次都是充满遗憾与悔恨的季节。下定决心重装系统,因为那太老电脑的windows实在是被折磨得不成样子了。无聊之于下载了一个QQLive的东西,上面的东东实在是太可怕了,想想看如果现在的年轻人都看的是这些东西那么还有什么希望呢?当然,我不年轻了,随便看一看没有关系吧。记下前两天的想法,就是一部传输的时候,做一个flag来让通讯与图像的线程轮流使用数据,当然,这是原始的同步,如果displaycallback发现MPI在使用数据,那么就直接返回不要重画图像了,这样是不是好呢?


八月五日 出太阳了吗?好像有吧。

忘记了《high anxiety》是关于一群疯子的,我一直以为是另一部希区柯柯式的悬念片。脖子疼得什么也干不了,早上看了一小段世界上最简单的压缩算法,就是fax的压缩,我现在打算用第一个bit代表黑白,当然恰巧地2's complement正好可以用正负来表达,当然如果牵涉到多几个东西,就不能用一个bit来表到了,还有就是在星期一的报告里我要提到用set表达的好处,一是因为避免重复,因为同一个octree node有可能多次被涉及,再一个是顺序,如果以近似BFS的顺序来写入OpenGL pipeline的话,我可以尽量把他们凑成整段的数组用vertex array来提高效率。有时候想到那个电影《devil's advocate》也就是“魔鬼的邀约”,的确每个人都有可能向魔鬼许下心愿,《scorpion king》好像也是一样的意思,好像“死魂灵”里的把灵魂卖给魔鬼的结果,有时候为了得到你必须主动放弃很多。

半夜睡不着,无聊中在线听所谓的最红的超女唱的歌,感觉实在无法理解,因为除了音色中性的近乎男性以外一无是处,夸张一点说,这个什么春的声音比以前任何一个音色中性的男歌手还要男性化,而且很难欣赏那种毫无技巧的干嚎,也许现在的中国酝酿的一代叛逆的暗流随时准备挑战任何的传统与束缚,只要是反权威的产物就是她们的偶像,又或者这个时代艺术行当里中性是某些社会组成的宠爱,比如酷暑中难得的凉风什么的。


八月六日 出太阳了吗?好像有吧。

顶着脖子的剧痛去实验室debug,好累啊,要从MPI的各个节点找bug有多难呢?因为我的节点还都是不一样的code,而visual6的trace只能从0节点,所以我只能改变节点顺序,这有多困难啊。最后花了一个早上只是发现好像是molton-code的错误,不过这个时候我已经精疲力尽了,回来吃饭看wcg的比赛,然后作了一间历史上最无聊的事情,看qq直播的“美人直播”,这简直是堕落吧,在加拿大这种节目是午夜以后的话题,而且目标观众都是中年人感兴趣,可是看来在中国直播的对象大概都是中学生吧。

刚来加拿大的时候不小心唯一买的一本大部头的书就是《C unleashed》,当时应该是快四年前吧,那个时候才刚刚开始学习C/C++,这样的一本书被我翻了两页就当作了无用之物,束之高阁,这两天教授推荐的encode/decode就是其中的范例,我才开始觉得这种从knowledge到master的进阶的东西不是什么人在什么时候都可以看的,也不是所谓的每个字每个章节都看的,大概到了一定阶段,你看的懂得书是因为书里面的内容你大约都已经知道了,而为了或者书里面的知识却又不是通过阅读这本书来获得的,这似乎是一个chicken&egg的难题,其实,仿佛金庸的武侠小说里面的武功一样,有些时候仅仅是为了融会贯通,可是如果你连听都没有听过,或者从来没有任何体会怎么可能去融会,又怎么可能贯通?所以有的时候有的书是蜻蜓点水式阅读的。那么这种书是否值得花钱购买呢?我也不知道,总之,有的时候读一句比读十页还重要,否则还有什么叫做触类旁通举一反三呢?每一页都读了,还触什么通什么举什么反什么?这里再一次感慨几年前看帖子里说C/C++的程序员一般是三年一小成,五年一大成,想想看经常碰到不少人说自己会写C/C++程序,实在是有些无语,因为一套掌发挥熟练地沿联合在实战中应用可能还需要很多年的磨练与体会。去年觉得自己三年有小成回国比划了一下,感觉还是差得远了,看来这个三年一小成和人的资质阅历勤奋都有关系,不是自然而然的,所谓五年一大成可能就和张无忌看九阳神功里面的注释所说的一样,什么第几层需要练几年里指的都是吴学天才在名师指导下心无旁骛勤奋刻苦的修习,普通人可能一辈子都不一定修炼得到。


八月七日 出太阳了吗?好像有吧。

下午一觉醒来一位有时日薄西山,谁知道才两点多,昏昏然踱到实验室继续三天来的trace,终于功夫不负有心人发现了那两个bug。当然这都是些第五个烧饼的故事,前面的两三天里面我已经费了很大劲来排除错误范围,还写了一段简单的code来检验octree的每个节点设者的moltoncode的正确性,今天只不过是顺理成章地发现了问题,我只能允许10层的octree,因为32个bits里面有四个市分配给level了,那么剩下的28个bits只能由九层了,当然第一层没有任何必要存储信息,所以是十层。另一个bug是什么呢?说来好笑,又是数数数错了,在octree的叶子我必须忽略掉一些点,因为根据RG看到的一篇论文没有必要在一个octree节点容纳过多的点,这当然是统计学上的原因吧,因此,在这里我翻了一个小错误,相邻的节点容纳的点重叠了一部分,这在以前的程序里是看不出来的,因为重复至多是重画一遍没有关系的,但现在就是空指针的大问题了。啰里啰唆写这些细节无非是想让自己记住MPI程序里debug的困难,最好是谋定而后动,至于像G教授天真的所谓intelligent的控制就不用去想了,因为实在是太不切实际的困难了。昨天去小岛的沙滩上游泳,回来大吃了一吨,结果今天吃了一天昨天打包的扣肉。记得有时间的话顺便读一读RG另外的paper,可能会有些帮助吧。晚上决定学习怎样使用wincvs不用不行啊。


八月十日 出太阳了吗?好像有吧。

昨晚上我以为我找到了压缩的诀窍,现在看来还是没有用,因为压缩率好像很小的样子,大概只有几倍吧,头疼啊。


八月十二日 出太阳了吗?好像有吧。

今天终于明白了VC++6的debugger中的条件break,这实在是一个大笑话,说出去实在是有些丢人了,想想看用VC6也差不多三年多了居然debugger都没有用到这些基本功能,而且知道今天才开始学习VSS的使用真是让人汗颜,当然值得安慰的是我终于明白了不要去费脑筋去学习wincvs因为VSS的简单功能就足够我用了。另一个好事情就是我现在开始翻看以前买的看不懂得书了,比如MCP的那三本书实在是好东西,只是我以前大部分看不懂,现在总算有些明白了,虽然迟了些,better than nothing,我随鲁顿但是能够不断有所进步就是好的。


八月十三日 出太阳了吗?好像有吧。

今天拿着朋友给的两张女子网球赛的票步行十几个地铁站走过大约七千多门牌号来到了网球场。把一张11.4刀的票以7刀的价格卖给了一个法国女孩,犹豫再三决定也看看网球,当然是另一张票不好卖了。正好那个法国女孩子(当然年纪早已超过女孩子了)成为我的业余解说,当然她的英语不一定就比我好,很多词她也只知道法语,不过室外网球好就好在空气新鲜阳光灿烂。另一个比较有意思的就是网球赛的门票种类繁多,不同的座位,场次,场地,等等价格都不一样,同时我拿到的票又可以去所有的场地看。这才是真正的体育产业化所应该具有的,因为单单为了一场比赛而买票看实在是太不划算了,另外,加拿大的任何一项公共活动的组织管理都是一流的,首先有大量的工作人员在服务,即便是外围的很远的道路岔口都有人指引方向,从这一点来看国内的服务实在是太差劲了,价格也实在是太贵了。回来的路上吃了一个汉堡一杯可乐,花了6刀实在是贵,把我走路省下的车票钱都花完了还不止,当然我走路并不是纯粹为了省钱,更重要的是锻炼并且观光,比如经过petit italia就是“小意大利”社区的时候看到了一场非常好的意大利歌剧,演员虽然是业余的水平实在是高,要不是记者去卖票我都打算一直看下去,回来的时候在小意大利社区又看到了一场高水平的篮球赛,我虽然不是球迷也不会玩篮球,但至少知道这些社区篮球队的水平不必中国国内的专业省队来得差,可能都更强吧,总之,中国东亚病夫的状态从来都不会说因为在奥运会上用钱砸出来的几块牌子而改变,全国劳动人民连吃饭都成问题怎么可能健体强身?黑人和白人的身体素质实在是太好了,三分球也投得太准了。在回来的路上又碰到了一个什么葬礼或者是宗教祭祀活动吧,场面很宏大,路边的居民庄严肃穆虔诚,我内心里很羡慕这里的小孩子从小就能学习一种乐器比如小鼓或者单簧管,小号等等,这才是一个全民健康的社会,因为如果不去培养一些有益的嗜好人肯定就会空虚无聊,这个就是当前中国的现实问题,太多的人无聊的除了吃喝玩乐别无所好。


八月十五日 出太阳了吗?好像有吧。

今天早上去解决给养的问题,一个失去hr部门改地址,不让我永远都收不到我的paycheck,改称direct-deposit省的烦了。另一个去询问了一下为什么政府给我夏天的评估是零,答案是当初我申请的时候没有说我是否需要钱,这个理由很好,下次一定要记住,福利社会有一条就是你有需求你就要说,你不说我们怎么知道你想要,你想要你就说啊。装么作样去图书馆视察了一下因为图书馆和我的我他的直线距离不超过25米,作为邻居当然要多走动走动,胡乱翻了两页就回家做我的“泡椒牛肉”去了,现成的调料配上pa的上等牛肉味道好极了。看看八卦知道今天日本小泉照样我行我素参拜,从另一个角度讲是值得佩服的,因为作为中国人这种行为是不可忍受的,可是反过来对于日本国民也许这是一个信念坚定的领导人的表现,这种事情仿佛刚停火的阿以冲突,就是再过一万年也说不清楚谁错谁对,只有大约美国式的方案才是一劳永逸的,当初美国把小日本大得服服帖帖的又踩上一只脚踩了几十年,所以今天日本和美国之间不再有分歧有争议。昨天花了一两个小时才明白了一条,我又一次在结尾的时候犯了错,找啊找,找到640000个像素的尾巴才发现是最后一段没有加上,不过这个bug并不是致命的,因为现在的错误大都是混合的,今天又花了一两个小时明白是坐标的问题,下午睡醒之后我再做一个艰难的决定,究竟是去实验室还是不去?如果不去那么又没有什么好的有说服力的理由呢?找吧。


八月十七日 出太阳了吗?好像有吧。

你接触美国的媒体越多,你就越觉得美国的伟大,美国的伟大就在于他的制度,这种制度的优越超越了任何的时间与空间,国家与民族,从而能够保证美国作为世界领袖在继续领导世界至少两百年。美国的媒体在讨论布什总统是否是一个白痴,并播放了他大量的所谓“出丑”的电视演讲片断,我感到震惊的不是这是不是白痴的问题,而是在我看来完全超越任何一个中国人和级别领导人水平n倍以上的(n>50)的乔治布什先生竟然在美国的精英眼里被看作白痴,可见美国的精英对自己的要求有多么的高,可见美国主流社会对国家领导的要求有多么的高,可见美国潜在的力量有多么的大,在我眼里布什的英语水平是很高的啊。哈哈(我这是夸他还是贬他,总之布什就是讲话有些直白而已,可是这也比只会照本秘书团拟的讲稿宣读要强一万倍了,而中国绝大多数的所谓领袖都不过是如此,这种差别不可以道里记。)


八月十九日 出太阳了吗?好像有吧。

Battle for WesNoth已经进行了快一个星期了。在一望无际的大草原上人类的骑兵在肆无忌惮的横冲直闯,可怕的重甲骑兵手执着伤害力加倍的长矛在不远处游弋着等待着猎物达到一次冲刺能及的距离后给予致命的一击。年轻而鲁莽的轻骑兵则一次又一次地发起自杀式的冲击试图冲散我们精灵族由精灵武士和精灵射手组成的防线,在密密的齐腰深的茅草中还隐藏着弯腰隐蔽潜行的人类弓箭手,他们虽然没有精灵族弓箭手的准确快速,但是在人类轻骑兵冲击的时候趁机射出的冷箭同样是致命的。草原上的精灵族失去了森林的掩护仿佛成了一群待人宰割的羔羊,没有根据地没有安全的后方,受伤的战事依然要和其他战士一样组成环形防御圈来保护身体更加脆弱的精灵族的法师们。草原上稀稀疏疏的村落远远不足以用来恢复伤员,这时候完全要依靠精灵医生每个回合少量的治疗效能,在每一个医生周围都围满了受伤的战士和射手,而最外面才是一道越来越稀疏的由精灵组冠军战士和少量元帅组成的环形防御圈。在少数面对着人类重甲骑兵窥伺的核心阵地上,还有少量的精灵族宝贵的高级骑士,这些是当年追随精灵族领袖的部分人类骑兵培养起来的,他们和人类的重甲骑兵同出一辙,大家都可以在对方还击之前给与双倍的伤害,但是同样地在以及没有致命的情况下也会得到双倍的还击,所以这些强力的突击部队只有在敌人已经遭受重创之后给与致命一击的时候才能最大限度地发挥作用。

终于找到了那个愚蠢的bug,花了快一个星期,当然这期间基本是断断续续的,我查补短式一步一步地检查的,写了一系列小的测试程序,最后才发现我又是数数数错了,好笑的问题,15个bit究竟能组成多少数字这种问题再上计算机的第一课就在讲,我结果又搞错了,真是无可奈何。

说话间,YP送来了学校发的TA的支票,是三张间隔半个月的各172.75不知道总共应该是多少,上一次是多少也忘了。为什么没有thesis的支票?


八月二十日 出太阳了吗?好像没有吧,因为下雨了,很冷的。

在夏天即将过去的一刻我正遇有了一点点值得自豪的事情,我终于可以编译BatterforWesNoth了,聪早上五点多钟到下午一点多钟的艰苦奋战终于成功编译运行了,去年年底的时候我尝试过一次,但是失败了,现在经过一个夏天的锻炼对于一个有上百个文件的project我不会太惊慌失措了,对于静态链接动态链接总算是不那么陌生了,至少对于编译器爆出的多线程动态库于静态库冲突的错误不至于完全没有方向了,这还是从RG那里学来的,当然你现在用google搜一下可能什么问题都有答案,但是在没有google的日子里自己慢慢捉摸呢就是真的牛鼻了。另一个小问题就是vc6对于typedef的synoniom会当做不同type至少__int32和int会当做不同类型,于是函数参数的选择要小心不然会有编译器爆出ambiguous的错误当做是函数重载,很讨厌,似乎gcc不会这样不同情理,不然为什么那些在linux的人会这么写而不出错呢?对于linux下的动态库如何设置路径部署我始终不明白才导致要使用VC否则单单一个编译也没有什么可夸耀的,仿佛见到一本乘法口诀表照着做了一遍一般而已。


八月二十一日 出太阳了吗?是的,阳光灿烂,下午去皇家山溜达了一圈

操作符重载的时候,vc6对于类型很敏感,对于__int32和int当做是两种类型,但是对于普通函数的参数则检查很松散。


八月二十二日 出太阳了吗?是的,阳光灿烂,上午去皇家山溜达了一圈

其实我已经捉摸了很久了,现在再次读了一下确认是这样子的。很久以前我做了一个试验,结果惊人的我自己都不能相信,就是用mpi发送一个大的数据块居然比我用socket还要快很多,当时可能有什么其他的原因我的socket程序会比较慢,但是有一点要注意的就是wmpi的synchronous-send并不代表返回的时候receiver已经完成了接收,而是代表starts to receive,这一点在MPI的protocol里强调说到底是等到receiving结束还是仅仅是receving开始就返回是由实现方定义的,至少wmpi是这样子的,所以我的数据块还没有发送完,我的程序函数已经返回了,于是看上去比较快吧。这也许可以解释那个现象,at least partially。 Battle for WesNoth拥有我需要的一切,我可以找找看作一个假的main跳过很多部分直接到load and run,这样就可以调试了,第一步是设计一个combat-leader的定义,这个leader必须是级别或者经验值较高的并且在前线的,其次它统帅一个战区及其战区内的所有单位,这样所有的单位的作战策略是一个group为单位来考量的,其战果评价也是基于group的,比如leader是否得到保护,group提升的单位个数,group的威胁系数。不过要解决战区重叠和战区范围划分的问题,这个仿佛和人类社会的实际问题一样,我想还是采用固定的行政划分为好,动态地划分虽然聪明但是很难,电脑需要比人脑聪明吗?我只需要电脑摹仿人脑就可以了吧。当然将来可以再有更高一级的智慧来协调战区的划分,基本上这是一个狼群战术,就是单位的行动是基于group的。这时我的第一个计划。第二步也许是战例分析比较学习,仿佛machine learning一样,WesNoth里面有这完善的replay纪录。实在是我想要得都有了,这不就是我梦寐以求的吗?也许将来服务器上也可以累计更多的战例作为资料来分析。以彼之道还致彼身的乾坤大挪移招数也许是无往而不胜的!人类棋手的学习无非也是如此,从自己和别人的经验里面学习,实战,总结,再学习,再实战,再总结,再再学习。。。


八月二十三日 出太阳了吗?是的,阳光灿烂,今天还没有去皇家山呢

BattleForWesNoth的AI比我所有的想象还要复杂一千倍,我应该对自己感到羞愧。V for Vendetta有着明显的时事政论的痕迹,让人一望而知就是刚从欧洲的某个电影学院毕业出来的,整天在酒精与大麻浸泡的狂欢排队里生活的所谓艺术家的反专制反社会的作品,通篇你都可以看到所谓拾人牙慧的地方,主题(theme也许是更妥帖的种文字)也许是《1984》加上美国的反恐计划也就是home security plan,风格也许是zorro+mask,感觉是说教,因为通篇都是人熟悉的陈词滥调,比如人民不应该害怕政府,政府更不应该害怕人民,再比如911是一个美国当权者的精心策划的阴谋,(这一类的希望耸人听闻的东西在美国多的是,比如有人说登月计划就是摩羯星一号的翻版,又比如有人因为心理障碍愿意承认谋杀了多年前的选美小皇后等等),你可以说整部片子相当的幼稚,因为在好莱坞任何一个投资人是不允许把钱这样扔水里的,观众不喜欢说教,不管你喜欢不喜欢美国的反恐政策,希思罗机场天天都存在炸弹威胁,这一点你怎么也不可否认,当然正好给我一个不再为去欧洲旅行筹措旅费的借口了。哈哈。


八月二十四日 出太阳了吗?是的,阳光灿烂,今天还没有去皇家山呢

昨天的meeting让我有了一些紧张,因为我觉得我是一个彻头彻尾的slacker,早上我有了一些新的idea,当然是在教授的主意上改进了一点,不知道有没有用。看了一部二战盟国战俘越狱的电影,一个感觉就是纳粹在怎么凶残其实还是很人道的,至少没有当着其他战俘的棉区枪杀逃跑的战俘,我想起是一个重要原因是盟军的强大,如果纳粹自己也直到有一天自己会战败受到惩罚,那么自然会比较收敛,当日本侵略中国的时候,从来也不会认为自己会被打败,当然不用顾及这些,事实上没有美苏中国是永远打不垮日本的。战俘的待遇多少反映了实力的强弱,作为弱小的一方就不要想着做了俘虏后悔怎样,所以共产党军队总是教育士兵宁死不当俘虏,也许的确是生不如死吧。

西部牛仔骑马的姿势非常得帅,当然也包括女martial,这是《gunslinger》里我所得到的印象,一个三角恋爱,杀手,警察,和杀手的雇主,也就是一个男人和两个女人的故事。另一点就是美国式的民主的基础来自于司法的民主,在人人都有枪来解决纠纷的时候,人民感觉到了人人生而平等,人人有得到公正审判的权利,同时人民需要一个共同的规则来解决矛盾,司法的权威从人民那里获得,也同时受到人民的监督,实际上在西部拓荒时代的警长大多时兼职的,下班以后和别人没有什么区别,不存在中国式的青天大老爷恩赐的司法。


八月二十六日 出太阳了吗?是的,阳光灿烂,今天还没有去皇家山呢

终于精灵族的队伍到达了大草原的边缘,只要渡过眼前的那条大河在穿过绵延的大山就要回到精灵族的家园了。战士们疲惫的脸上终于露出了一些兴奋的神情,阿拉贡也不禁长吁了一口气,一瞥眼看到身边甘道夫紧皱着眉头不由得心头一紧,问道:“大师,怎么了?”甘道夫两条雪白的长眉紧锁着,神情严峻地说:“这个渡口才是我最担心的地方。。。”。正说话间,一个精灵族的侦察骑兵飞驰而来急急地报告说前面大河的渡口附近有一个人类的据点,而且他们的侦察骑兵也已经发现了我们要渡河的企图正在集合部队冲向渡口呢。阿拉贡顾不上甘道夫的解释立刻传令精灵族机动性最强的圣骑士部队和所有的侦查骑兵迅速抢占渡口旁的小村庄并坚守等待善于防御的精灵族弓箭队的接防,然后阿拉贡把精灵族三个武艺最高超的冠军战士队长召集到面前,让他们做好全军殿后的准备工作,这些精灵族的冠军战士个个精通刀术和箭术并且配备了最好的盔甲盾牌是精灵族防御力最强的部队,并且因为武艺全面,不论是远程攻击还是近身格斗都有着很强的战斗力,不过因为盔甲厚重他们的移动速度也相对较慢,甚至比精灵族最慢的医生法师部队也快不了多少,因此他们正好殿后保护法师部队。然后阿拉贡命令刚才来报信的侦察骑兵去渡口试渡并在河中心的小岛上建立防御阵地,接着命令所有部队以攻击队形向渡口快速前进。直到这时,阿拉贡才松了一口气转身来看甘道夫,只见他凝神望着大河神情非常肃穆,阿拉贡不敢打搅他,于是两个人默默地骑着马跟着队伍向渡口前进。

当精灵族的主力来到渡口旁的村庄时候,坚守在那里的弓箭手和少量先期到达的圣骑士部队刚刚打退人类的第一波的快速骑兵的冲击,这仅仅是一次火力侦察,当人类的重甲步兵和弓箭手也达到的话那才是真正的战斗开始了。精灵族的法师周围又聚集起大量受伤的战士以便获得治疗,能够在森林里隐身的神箭手也悄悄地埋伏在村庄旁边的小树林里面,身披金色铠甲的冠军战士和弓箭手肩并肩地以村庄为核心构筑起了一道防线,这是一条宽大的一字长蛇阵,这个阵型式精灵族在平原作战中经常采用的,他的特点是确保中间的每个战士的两翼都有同伴加以保护,他的弱点在两翼,一旦被高度机动性的人类快速骑兵绕过两翼攻击后方整个防线几乎肯定要崩溃,同时在两翼的部队会有超过一个正面的方向要防御,压力最大,因此这里往往配属最精锐的冠军战士来坚守。今天防线的右翼的奔腾的大河成为天然的屏障,长蛇阵只需要加强左翼就行了。

远处天边涌起一团黑云,黑云上是一片片的黄云,其实那不是黄云,那是人类重甲步兵方阵行进时扬弃的黄土,只见一排排黑灿灿的铁甲从天边慢慢走来,渐渐地都可以听到铠甲兵器碰撞的震耳欲聋的哐啷声。在所有种族中人类的重甲步兵的防御力是最强的因为他们的铁甲最厚从头到脚罩住了全身,而当这些铁甲武士组成方阵彼此依托即便是冲击力最强的人类骑兵也不敢对他们发起冲锋,因为你面对的不是一个人而是整个方阵的战士,精灵族的弓箭在他们面前简直成了火柴棍一样无关痛痒。阿拉贡不禁倒吸了一口凉气,他没有想到在这个渡口人类竟会部署他们最精锐的战士,看来只能冒险让精灵族的法师上阵了,法师们释放的魔法可以完全无视厚重的铠甲直接秒杀铁甲战士,但是这要冒很大的风险就是一旦法师不能一鼓作气全歼方阵,剩余的铁甲战士的反击对于脆弱的法师是致命的,而更危险的是在这些铁甲方阵的背后往往隐藏着人类的长弓手,他们的弓箭同样是对法师的致命威胁。因此进攻时候一定要在最关键的时刻在最恰当的时刻让法师部队出击并且要一击而退,让防御力强的弓箭手和精灵族战士来顶住敌人的反击。更让人担心的是人类冲击力巨大的骑兵部队到现在还没有看到踪影,在这片起伏的丘陵地带人类的快速骑兵往往可以隐藏在山丘后突然发起冲锋,有时候在弓箭手无法完全发挥弓箭防御的情况下冲散精灵族的防线,在防线被突破的时候全部的希望就寄托在精灵族有多少预备队可以冲上去堵住缺口。

战斗开始了,人类部队发起了教科书式的进攻,他们的战术是用重甲步兵配合弓箭手和少量法师部队作阵地进攻式的冲锋,在削弱精灵族的防御之后,大量的快速骑兵部队配和少量的重甲骑兵向防御最薄弱的防线加以冲击首先撕开防线然后各个歼灭孤立的防守部队。精灵族的防御阵地核心是地形很有利的村庄,哪些经验丰富的弓箭手很轻松地顶住了人类第一波的冲击,然后阿拉贡果断地命令法师部队大胆地迅速接近重甲步兵依靠魔法歼灭了大部分的方阵武士,然后冠军战士和少量圣骑士对那些受挫的人类弓箭手和步兵发起了歼灭性的反击,远处小树林里隐藏的神箭手也突如其来地截杀了隐蔽接近的人类骑兵,人类部队被打败了并且开始向他们的城堡撤退,精灵族战士乘胜追击企图一举夺下城堡,这时候突然从城堡吊桥下冲出大量的黑衣战士,只见这些黑衣武士如鬼似魅,完全无视精灵族的弓箭,从箭雨中穿梭冲锋竟然绕过了正面的防线直扑精灵族后方脆弱的法师部队和从前线撤下来的受伤的战士,顷刻间大量的精灵族伤员被斩杀,刚刚大量消耗了魔法还来不及恢复的魔法师被无情的屠杀,阿拉贡情急之下急忙命令全军放弃攻城全面后撤救援,这时重新整顿的人类骑兵又趁势从城堡中冲出一路掩杀,直到精灵族退回到渡口村庄防线才算稳定下来,这一仗打下来精灵族元气大伤,很多经历了草原会战幸存下来的老兵都阵亡了。天黑下来的,大雨也下了下来,河水开始上涨,原本平缓的河水变成了一匹怒吼奔驰的野马。阿拉贡在营帐里召集各个首领商议明天的渡河计划,大家一致认为此地不可久留,一定要在后面的人类追兵赶到形成前后夹击之前渡过河去,渡河的顺序是善于涉水机动性高的侦查骑兵打头阵,然后是少量的神射手,和大量的弓箭手,行动迟缓的法师医生部队和冠军战士殿后。这样一来明天的防御的部队就会减少,面对可能的战斗谁也没有把握。阿拉贡和大家这时候都把目光都集中在始终一言不发的甘道夫身上,面对大家期待的目光,甘道夫陷入了沉思,过了许久才抬起头说到,“正面的敌人固然很难对付,河对岸的虎视眈眈的兽族部队的拦截其实更加的危险,因为我们的战士经过连日的行军打仗非常疲劳,又刚刚涉过大河队形散乱,敌人以逸待劳半渡而击,我们的损失会很大。而这一切还不是我最担心的,我最担心的是那个上古的神话要成为今天的现实。”说到这里,甘道夫缓缓地环视大家,接着说到:“那是记载在法师公会的一个传说,说的是人类的法师有一种强大的召唤术,他召唤的怪物是那样地强大以至于他们自己也不能控制,这些怪物会不分青红皂白地向所有人发起亡命地攻击 ,这种可怕的怪物就是身体巨大的海龙,他们是水上的霸主驰骋在大海上甚至可以掀翻大船,本来是不会出现在河水里,只是受了人类魔法师的魔法召唤才逆流而上来到内河。如果这支人类部队里有法力高深的魔法师使出了这种可怕的召唤术恐怕我们精灵族的部队就要在这条大河里全军覆没了。”听到这里,整个大帐里静悄悄地,人人都摒住呼吸,期待地望着甘道夫。甘道夫深吸了一口气接着说,“今天我想大家也都看到了,这些人族的黑衣武士是人类皇帝的亲兵卫队,轻易不会远赴沙场,他们出现在这里我想很有可能是人族王子波密尔亲自在把守城堡,我想他的魔法老师萨罗曼十之八九也在他的身边,如果人族法师里有人会这种可怕的召唤术的话,那一定就是他了。所以我想我们一定要预作准备,事到如今我也顾不得别的,只好拼死使出我的全部法力召唤人鱼部队来助战了。”说到这里大家都不禁地轻轻地啊了一声,要知道在所有的种族战士中人鱼部队是最美丽的,她们有着纤细的长尾巴,五彩缤纷的鳞甲,一头乌黑的长发配以美丽动人的歌声曾经迷倒了不知多少的船夫和水手,据说凡是看过她们美丽面容的战士都会呆呆地忘记防御目瞪口呆地成为俘虏。(欲知后事如何且听下回分解。)

看到了丁贝莉的确是惊为天人似的绝色佳人啊。早上一直在找modelloader的bug,那是一个恼人的问题,不是所有的点的radius都有定义,因为不是所有的点都有定义face,这个问题实在超过我的能力了,我实在不知道ply文件到底是怎么样的一个意思,我自己的octree也有bug,居然还是有很多点的radius没有定义,即便我强制地给每个point已经定义了radius之后,我的radius市区周围最近邻居的若干个点的最长距离。当然这都是RG的定义,我只是拿来用而已。


八月二十七日 出太阳了吗?没有,因为块十一点了田还是如同早上七点半一样的黑

终于plu联赛总到了春季联赛的末尾,super会不会以2:4失败呢?前景很黯淡。3:3了,super能翻盘吗?期待中。。。


八月三十日 出太阳了吗?有啊,刚刚从皇家山上回来

我想一个人最幸福的时刻无非就是整天不愁吃喝,在蓝天白云下登高远望,在背风朝阳的山坡上舒舒服服地躺在松软的草地上晒太阳打盹。我觉得我没有什么不满足的了。

昨天不小心到intel的网站看到一个编程比赛,当然我知道我其实不善于这种,不过玩玩也无妨,第一个题目是howeasy,不过也不是那么easy吧,我做了一个NFA来写code,结果得分还是只有80%,不知道那里错了。


九月一日 出太阳了吗?有啊,刚刚跑步去要支票

突然想起来学算法课的时候教授讲的所谓heuristic algorithm,各种各样五花八门,结果最后竟然有惊人的一个说法,有时候random的选择甚至比所谓的各种各样的复杂的算法效果一点都不差,这真是出乎大多数人的意外,至少我是这样认为的。想想看我一生中所做得对于我自己的所谓的重大决策几乎都是random的,上大学的时候交给父母做决定,谈恋爱的时候大多数听任对方的决定,后来有想法的时候又听任命运的安排,大多数时候对于一件小到是否出门去人家公司面试都犹豫不决能拖则拖,实在不行了就扔硬币,一次不行再扔一次直到结果是不去为止,反正事后能给自己找到理由就心安理得了。当时来加拿大的决定也许就是一个电话加上所谓半个小时的考虑就决定了,现在想想看实际上是给自己几年时间的无所事事找个理由,今天回忆往事觉得我就是一个随机算法的实践者,一个人用一生的碌碌无为能够检验一个算法的可行性能不能算是一点点成就呢?我现在越来越喜欢克莱德曼的浪漫钢琴,仿佛行云流水的思绪中的飞花落叶,在这个“秋日私语”中的自己给自己打打分数算是一个人生的备份吧,即便明天有什么难以预测的转折也可以从将来的时空轨迹里回头察看这个历史的checkpoint,仿佛visual source safe的历史节点,(我不想解释计算机的问题了,总之,人生其实仿佛一个版本控制的程序,只不过我们不能乘坐时空飞船回到过去创建一个branch。但是至少我可以时时刻刻地设定check-in的结点,以便将来某一天回过头来比较异同。当然每天太阳升起来的时候就是checkout的时刻。)昨天和今天都打算备份数据,不由得有些感触,人生的备份虽然不能时时地load&save但是作为生命的见证总是对当事人有意义的,否则,人生一世草木一秋,究竟有多少异同,难道生物本能驱动的传宗接代就是人这种所谓“高级动物”存在的全部意义?或许现代人早已学乖了只是利用传宗接代的副产品(side-effect)来凡世间走上一遭?早上顺便去看看了看comp6231对TA的评语,大约是有15%左右对我是极度的不满,评语刻薄的超过了我对于最差的TA的曾经有过的最恶毒的评价,当然另外15%可能的是相当的满意,曲线的分布大概是符合正态分布(normal distribution)吧?我被讨厌的程度应该没有超过布什总统吧?

偶尔翻了一下旧书看了看signal的定义,在每天例行的马桶沉思阶段想明白了一个问题。一个函数指针的定义和函数指针的返回类型有着微妙的差别,我当时一直要把两者混淆起来,比如:void (*signal(int signo, void (*func)(int)))(int);究竟函数指针signal的返回类型是什么呢?改写一下比较容易,(以下Steven的定义)typedef void  sigfunc(int); 我们定义了一个类型,不过这并不是指针,我喜欢定义成这样:typedef void (*psigfunc)(int);然后我们在改写原来signal的定义为如下:sigfunc*signal(int, sigfunc*);用汉语来说就是一个函数的原型prototype是这样的,返回值是一个“返回类型为void的带一个int参数的函数”,而他的参数有两个,一个是int,另一个也是一个“返回类型为void的带一个int参数的函数”,这就是signal的定义。需要说明的是一个函数如果定义成这样了就是类似于const的一个函数也就是说不再是函数变量或者函数指针变量了。如果变通一下,我改称typedef void(*mysigfunc)(int);  typedef mysigfunc* (*mysignal)(int, mysigfunc*);那么mysignal就可以作为一个类型来定义函数指针或者说函数变量了,比如mysigfunc myPtr=signal;当然你问我这有什么用,我一时还想不出来,总之我的理解就是linux里面这个signal是一个人家已经定义好的函数,(我私下里给他改名叫作signalRegister,因为它的作用就是register一个handler而已,比如我们有一个default的signal handler组成的函数指针数组,每次你call这个signal的时候顺便把这个数组的里面你要替换的handler的index连同你自己的handler作为参数传进来,signal就帮你改了一下这个数组并且把原来的数组里的值返回给你。我想Linux应该就是这样,虽然我发誓我没有看过源代码,我想不会错的。)那么如果连这个register本身也可以被别人替换,比如我有一个register的register来管理一大队类似于signal这样的register函数,那么有一天,我也想重新register一个我自己的signal的时候,我就会需要这个函数变量或者指针了。好像有一点点虚拟驱动注册的味道,虽然我从来没有接触过这个方面,应该差不多吧。


九月五日 出太阳了吗?有啊,刚刚去皇家山上转了一圈

我想如果我能够平衡节点间的computation&communication,那么这就是有点可以写一篇论文了。我想验证一下OpenGL的clickcount的意义。在《the last samurai》里日本和同时期的中国是那么的相像,同样是皇帝的老师同样的一心侍主,可是仿佛结果是如此的不同,在一个所谓“聪明”的社会里,人们更加明白所谓失败,所谓被征服并不会维持一千年,中原大地从来没有被一个外族侵占一千年因为我们这个民族坚信我们伟大的繁殖力最终会融合我们的敌人或者我们的征服者,因此没有人愿意为了这个提前到来的结果而牺牲短暂的生命,因为那样做很傻,百年之后谁会来祭奠你?就算又有如何?不过是一抔黄土,因此,我们这个民族在世界上算是聪明的民族,常常在苟延残喘之后躲在角落里面窃笑那些所谓献身的蠢货。samurai这个角色绝不可能出现在中国的文明里,因为留得青山在不怕没柴烧,因此,康有为在他的老师最需要他的时候落跑到了日本,苟延了残生比起那些五位牺牲的所谓“六傻子”来的聪明的多,因为死了有如何?多一簇坟茔又有何用?你终于你心中的信念是你自己的事,而这个所谓信念并不像大多数的投资一样回给你等价的回报,那么你何必忠于他?当然当你自己也不相信你自己的信念的时候,相信你的人又何必相信你的信念?在一个没有原则与牺牲的社会里有谁肯去做傻子?就算有个别如我一样鲁钝的偶尔做一回傻瓜,肯定不会有第二个,因为连布什总统都知道这么一个谚语:A fool cannot be fooled again!所以,我们这个民族会被世界征服,但绝不会被征服一千年,因为一千年后我们的后代会比我们的统治者还多一千倍。在历史的长河里有时候,retreat is not an option。


九月五日 出太阳了吗?有啊。

众里寻她千百度,却见那人正在灯火阑珊处。动态地调整computation&communication并不容易,但是MPI的传输过程却直接就反映了这种平衡,也就是我用non-blocking的模式传输不久能够最大地再个节点间平衡computation&communication吗?当然这是在不改变每个节点的工作量的前提下的一种平衡,正如我在我的英文日记里写得那样,仿佛“分布式系统设计”里面的一个个概念在我的生活中被实实在在地检验测试一样,一些事件可以没有顺序,可以用异步传输,但是另一些事件仿佛“逻辑时间”的概念一样有着固有的顺序,我又必须在异步中加入一些同步的点,这种混合的模式又仿佛是“virtualsynchrony”一样的味道,当然,我这些不过是很简单的应证概念而已,但是每次这种调整都伴随着一对得难以寻找的deadlock的bug,明天再找吧,这种debug总是很伤脑筋的。我上一次完成了大部分的异步传输,最后发现太多的同步问题有统统改回了同步传输,现在又要改回去,实在是头疼的事情,但是最讨厌的事情是就算改成了异步传输结果仍然非常的不好,比如目前也仅仅从3到4,当然你可以说这是25%的提高,可是我知道这是没有多大意义的。

昨天看了半天的电影,又一部片子很好看,大约是将律师替穷人打官司的,现在才真正体会到美国司法制度的公正与完美,一个纯粹地市场导向的司法体系奠定了民主的基石,没有司法的民主也就没有政治的民主,不知道是不是所有的人都知道这一点呢?我猜想至少中国的大多数劳动人民还被蒙在鼓里,包括前苏联那些被欺骗了的劳动人民,在没有建立起民主公正的司法体制之前奢谈民主政治结果就是被新的民贼利用来作为他的新独裁统治,这种例子俯首皆是,比如台湾目前的困局也就是一个例证,俄罗斯当年的叶利钦何尝不是一手遮天?选择普京在一定程度上是为了保他自己安度晚年,当然今天台湾的唯一的进步就是陈水扁不能像李登辉一样的随心所欲地决定他的继任者。


九月九日 出太阳了吗?没有啊,因为下雨了。

早晨起来给教授留了一份备忘录,然后就准备义无反顾地向前冲去,虽然我对于这个压缩究竟有多大意义表示怀疑,可是我等不及了。前面的道路似乎是平坦的,无非就是一个机遇字典式的压缩,想想看有什么压缩算法不是基于字典呢?又有什么压缩算法不是基于观察分析到的“重复”的pattern来加以利用呢?把四个byte的颜色压缩成两个byte的index,究竟有多大意义呢?1比2的压缩率有意义吗?当然如果我减少index所占用的bit数,我是可以加大压缩率的,不过。。。快速查找我决定采用static hash table,hash function就用最简单的平易吧。然后这个四级hashtable结构就变得很像是Linux的文件指针inode一样了,至于conflict我就用最简单的linear-probe吧,比较讨厌的是刚才在雨地里走才想到的每个render会有自己的color-index-table因此,这是一个比较浪费内存的解决办法,哎,我的内存啊。写了大概半小时就回来休息休息。


九月十日 出太阳了吗?有啊。

早晨起来改程序,我又犯了错误,对于bit操作我总是出错,比如0xFF右移三位最大的数字是什么呢?这个问题太白痴了。中午吃多了撑得慌,就步行十几公里去Monk取我的支票,一路上蓝天白云风景如画温度适宜实在是赏心悦目。路过superC为了锻炼臂力,专门买了一大堆东西提着回家。


九月十二日 出太阳了吗?有啊。

昨天发现我买的二十个咸鸭蛋其实都是皮蛋,咸鸭蛋外面是黑色的,里面是黄色的,皮蛋外面是黄色的里面却是黑色的,多么奇怪,郁闷啊,这么多的皮蛋要吃到什么时候啊!早上终于解决了color-index的最后一个我认为的bug,就是short int溢出了,我原来假设不超过65535不成立,只好硬性规定hash-table冲突的时候用旧的index,这样等于jpeg里面的index意思吧。昨天又明白了一个常识性的问题,如果没有lighting,glcolor决定颜色,否则,还要看是否colormaterial是否enabled,如果没有,颜色不再由glColor决定,而是material决定,如果colorMaterial有enabled,那么glColor和material一起决定,如果你call glColor的话,否则只有material。你听明白了吗?我想如果你没有接触过OpenGL不会明白,因为自然语言表达实在是太困难了。记住,enable colorMaterial一定要先设定color material,我想lighting之类都是一样的道理。我觉得我写的hash-table很值得我自己佩服一下。到了银行才发现支票找不到了,以为丢了,结果放在家里了,昨天DVDClub又charge了我六十块钱让我买DVD实在是没有什么可买得了,实在是太贵了,一片要三十块,我用电驴子下载不要钱,不过为了保护知识产权宁可我吃糠咽菜也要让那些大牌明星和他们背后的大公司吃的宝宝的,这就是一个人的精神,应该不是一种病。


九月十三日 出太阳了吗?不知道啊。

早上去实验室明白了一个简单的道理,微软的NVIDIA的显卡驱动非常糟糕,更新以后drawArray总算运行正常了,但是采用新的sfc文件格式还有bug,我头昏脑涨回来了,看“凤凰台”的世事批斗会很好看,中国的所谓的自由的言论开始慢慢在发芽,这个趋势大概在十年内会让一个政党完全崩溃。

蒙特利尔出了一件大事,旁边的一个学院就是Dawson发生了一件枪击事件,死了几个学生。下午和教授meeting他就再说这件事,因为门前的St.Catherine大街都被封闭了吧,我不知道,反正我也没有时间去看。教授认为我的想法不太对,因为flat-shading才会有这种颜色分布,不过我随后查了一下OpenGL发现smooth-shading和flat-shading对于point是没有区别的。


九月十四日 出太阳了吗?没有,因为下雨了。

昨天杀人的那个小子经过实验室印度同事确认是印度后裔,当然是有点怪异的了,他是一个射击游戏的狂人,甚至给自己写好了墓志铭,Lived fast, died young, left mangled corpses.早上去实验室又把颜色部分改回了没有index的部分,准备尝试running-length-compression,当然应该先看看数据分布验证一下昨天的假设。在那个小子杀人之前的一天我正好去那个mall里面转悠,还奢侈地买了一个烧开水的小电器,我想我对于奢侈的生活从来就不惧怕,于是又买了一个made in France的平底锅来煎鸡蛋,made in China的质量都是很差劲的,我只要经济上允许肯定不买。Made in Canada的东西虽然大多数都很贵,但是质量一般都很好,就算粗笨也是有理由的,因为能用很多年的东西当然会笨重一些。支持国货,只买made in Canada的。

在连绵的中途山脉里行进着一支精灵族的部队,他们全部身披金色的精灵族锁子甲,这种铠甲虽然不如人族的板甲来的坚固但是相当的轻便更加适合身手敏捷的精灵族战时使用。而这种金色的梭子家有时经过精灵族能工巧匠的淬火锻造可以说是这种铠甲中的极品,除非是精灵族的冠军战士是没有资格披挂的,而这样一支庞大的精灵族冠军战士队伍可以说是极难见到的,要知道这些冠军战士个个都是精灵族的战士中经过五重大比武的佼佼者,弓箭,刀术,防御,进攻,越野各项都是全能,如果能够集中两个营的精灵族战士就可以横扫中土各部落了。如今阿拉贡就是统率着这样两个营的冠军战士去执行一项不可能的任务。。。

两天前的一个黄昏,一个精灵族的白马战士正急速地穿行在中途山脉的羊肠小道上,白马战时满身尘土贝利日报晒得通红的面庞流露出极度的疲惫。终于道路的尽头出现了一座巍峨的城堡,这就是精灵族在中途山脉里的号称擎天玉柱之一的“水边城堡”(Atwater Castle)。阿拉贡和甘道夫正在大殿里焦急地等待着这名信使的到来,这位白马战士带来的精灵族另一位将军拉格勒斯的回信,可是这封回信却让本已经焦急万分的阿拉贡变得更加焦急。甘道夫轻轻地抚摸着白色的禅杖,慢慢地仿佛自言自语道:“如果我们不再三十天内穿越中途山脉,这里几万名跋山涉水九死一生的精灵族战士就要全部困死在这里,可是这里有保皇党的两个重兵把守的关隘,地形险要易守难攻,再加上道路曲折不宜大兵团作战,实在是一个难题。如果拉格莱斯将军的情报是准确的那么问题就更严重了,保皇党的大部队可能已经在向这里进发的路途上了,留给我们的时间就更不多了。”阿拉贡背着双手在大殿里慢慢地踱来踱去,静静地听着甘道夫的述说。“现在唯一的办法就是组织一支精锐的小分队偷袭保皇党的关隘,一旦得手大部队立刻迅速跟进穿越中途山脉,同时留下一支有理的部队坚决阻击保皇党大部队的进攻掩护主力,可是这阻击的部队有可能会全军覆没。”说到这里,甘道夫默默地看着阿拉贡。阿拉贡听了下来默默地取下腰间的长刀,轻轻地抚摸着向这七颗绿宝石的刀鞘,慢慢地抽出宝刀,只见一股寒光慢慢地映在阿拉贡坚毅的脸上。突然霍地一声,阿拉贡宝刀还鞘,坚定地一字一顿地说道:“这些精灵族的战士都是随我们出生入死的兄弟,我们经过这么多的生生死死才走到这里,怎么能够丢下任何一个呢?既然迟早要和保皇党决一死战不如就在这大山里,打赢了缴获的给养绝对不成问题,打输了我们大家就痛痛快快地一起上天堂。”阿拉贡一双如刀锋般的眼睛紧紧盯着甘道夫,甘道夫长吁了一口气:“既然你决心已定,那么就赶快给拉格莱斯回信让他早作准备吧。不过这山林作战部队宜少不宜多,你就把所有的冠军战士集中起来吧。”


九月十八日 出太阳了吗?好像有吧?因为阳光若有若无的样子。

好像source-safe和source-control是两个不同的程序吧?一个是类似于cvs的版本控制数据库,另一个是和visualstudio捆绑在一起的一个程序吧?如果,从两台电脑访问同一个数据库,最好还是用两个user,并且windows是简单的共享文件机制,记得要把写的权限设定共享文件,不过我感到迷惑的是,我指能够checkout一个版本,然后总是有数据库联接只能一个之类的莫名其妙的错误,总之,只能一个user写或者说checkout,但是。。。不明白。

蒙特利尔的秋天同样是天堂般的美丽,气温凉爽,吹面不含的杨柳风荡漾在被毛玻璃板的白云过滤的阳光里,人的心仿佛也像气球一样想要升起来了,(这里套用《围城》里烘托方鸿渐求见苏文纨之前的气氛),我当然觉得没有必要把这样好的天气浪费在女人身上,最好的方式应该是把自己投入到这样的天气里,难得啊,过了这个月就又要白雪纷飞了。中午吃饱了,就徒步去superC买菜当作郊游吧。往日灿烂的阳光如今只是朦胧一片,映衬着教堂钟楼那铜绿色分外分明。这里的楼房都很少有高楼,如果让国内那些依靠市面工程加官晋级的父母官看到一定要摸着肥硕的大肚子耻笑不已,可是,房子矮一点有什么不好,加拿大真正是地大物博,人口稀少,每个人的空间可以大一些多好啊。


九月二十五日 出太阳了吗?好像有吧?因为刚才有看到。

很偶然地用google到了高中同班同学的跟人空间,看到他的生活,听到他的声音,很显然我是看到他的文字会想起这个同学的声音,我想几乎没有什么变化,还是一个率性豪迈的好男儿吧,现在号称“有求必硬”,够YD吧。当然我也可以明显感觉到我们是生活在两个不同的半球,两个不同的世界,我现在头疼的事情是别人所无法感受到的,假如从原则上一个想法是错误的,怎么有可能通过局部的优化来解决呢?仿佛GCD的所谓保鲜技术不过是延缓并非根除。今天看到新闻说是陈良宇被抓起来了,看来海外的新闻并非空穴来风,十有八九比国内的可靠。头疼。。。忽然想所谓的AI也许某一天我们醒来就发现完全实现了,比如现在的google就是这样,所谓AI无非是高级的搜索,所谓的“思索”不过是另类的“搜索”。

如果说我在某个领域里有创造性地话,那一定是在厨艺方面,这两天我为了处理太酸的桃子决定把他们全部当作蔬菜来烹炒,桃子蘑菇豆腐虾仁大锅会真是举世罕见的创举!在实验室里我感觉实在是沮丧,好像我完全忘记了我早上干了些什么,VSS好像丢掉了一些版本,当然也许是我的所谓版本是一样的版本,但是。。。当然我现在知道了checkout的comment是没有用的,只有checkin才会作为版本的一部分保留下来。


九月二十六日 出太阳了吗?好像有吧?因为刚才有看到。

早上终于改成了pipeline,falgun这个机器用的是100M的网卡明显太慢,这样三台render结果却也只有不到2fps,但是当运气好的时候能够达到4fps这说明pipeline是有潜力的,如果每次displayer显示比transmit慢,是否意味着我不用去压缩?如果我能够有更多的cluster就好了。下载了不少蔡依林的mv作为了解无知(物质)的力量有多大而已,ignorance is power,这是真理。桌别林的老片子实在是经典,准备下载circus来看。我在烹饪领域的技能又有了新的突破,现在开始制作八宝饭,日本圆米+中国香肠+绿豆+枸杞,白红绿霎时好看。这个台湾的小骚货唱歌实在是太难听了,当然她应该去当舞娘。


九月二十九日 出太阳了吗?没有,因为下雨了

在这样阴雨的日子里,人的心情更加的阴郁,在阴暗的小屋里关上灯听着克莱德曼的忧伤的钢琴曲睡午觉。所谓pipeline纯粹是一个笑话,我觉得非常的沮丧,虽然多少是预料之中的,但是还是一个沉重的打击。


九月三十日 出太阳了吗?有,因为我出门走了走,阳光灿烂。

下了几天的小雨终于放晴了,出门走了走,本来想走到Antony家里混饭吃,可是我一打电话说明来意,他就吓得赶紧推托要出门打网球,哈哈,上一次吃了一次美味还是让人回味啊,不过我已经忘了吃的是什么了。最近,我发现洋人的pasta很好吃,做起来也简单,微波炉加热一下就好了,当然尺多了就会吃腻了。这一阵子我不断尝试新的烹饪技术,做过剁椒牛肉,水煮牛肉,红焖牛肉,粉蒸肉,爆炒蘑菇桃子,各种各样的罐头,包括蜗牛,午餐肉,红烧鳗鱼等等,中式烹饪吃腻了就改一改西式烹调吧,比如小比萨,pasta,等等,不知道这以后还有什么可以尝试的?沿着运河边走边跑心情很舒畅,赋诗一首


十月一日 又遇阴雨,心情郁郁不欢

噩梦连连,又遭风雨,成诗一首


十月四日 早晨起雾了

computer scicence比所有其他学科来的好的唯一的地方,也是最大的优点就是,如果你发现了什么不合逻辑的事情,只要你深入去探索,你一定能够找到原因,因为任何的程序都是人写的,所有的硬件都是人制造的,所有的环境都是人为的,而所谓的物理化学生物之类的走势有很多的观察到的先贤充满了不可知的因素,偶尔的你找到了一个合乎逻辑的解释,其实很有可能是另一个环觉得结果。当我看到用vertex-buffer-object居然能够让显示时间降到0,我其实就应该想到这是不可能的,可是我当时过分迷信extension的威力了,后来在发现居然读取framebuffer的时间和模型大小成正比简直让我要疯掉了,当然很快地当我使用glFinish就发现了原来一切都是浮云,因为VBO并没有提高一星半点的速度,读取framebuffer的时间是一常量,显示图形的时间是和模型成正比,仅此而已。

前几天我不停地为账户上的化不完的钱而发愁,设想了各种各样迅速花钱的办法,结果计划还没有付诸实施,咱们可爱的政府就来了一封信说多给了我三千块钱,黄粱一梦而已。


十月十一日 晚上又下雨了

从国家公园回来还没有写下什么心得,不过我知道这种对周围环境的淡漠的到来是迟早的事情,正如我刚来蒙特利尔时候预计的那样,如果我不在当时写下当时的所观所想,事后是绝对不会再有那种热情或者说情绪去做了,所谓司空见惯寻常事而已。的确来加拿大好几年了,对于蓝天白云绿水青山的感受是比较淡漠了,抑或是我现在记忆里的极度衰退已经开始如常人般看过即忘了?其实何必要说如常人般呢?我本来不是凡人吗?在已经模糊的记忆里,十多年前来到加拿大的那一次看到的红叶要比这四年来看得都要红得多,那一次去的Ottawa的附近的国家公园里延公路两侧到处是红得刺眼的枫叶,是蓝得如同硫酸铜一样的蓝天,绿得如同氯化铜一般的湖水,当硫酸铜和绿化同混合在一起那就是我俯瞰这些湖水时候的感受:中学的化学实验。这两天来我一只念兹在兹的设想原来又是一个幻觉,在并行处理里面人的思维总是不够的,尤其像我这样有些迟钝的脑子,竟然会对于一个简单的问题想不明白,比如我们的client的程序比server程序快很多,比如快两倍吧,那么每次client都给server发一次信息,自然他有一半的时间都是在等待,那么如果能够在server多开一些buffer每次执行一半的时候接受一次client的请求存下信息,这样client就不用等待了对吧,当然我们假定接受发送信息很快,问题是要多少个buffer?实际上是一个很简单的问题,可是我却想不明白。答案当然是无限多了,如果程序持续运行下去,也就是说类似于openGL的swapbuffer的主意根本不行,实际上OpenGL使用swapbuffer并不是要提高速度,而是为了消除flicker而已,看来我最近总是有幻觉。当然今天晚上还是有收获的,第一是想明白了这个问题,第二是发现了微调sender的各个事件已达到最大的concurrency是很有效果的,其中一个比较讨厌的问题就是一个周而复始的循环的第一次执行顺序和其后最合理的执行顺序是有区别的,仿佛自动机原理中的起始节点和其后的节点是不同的。就到这里吧,昨天改作业改到两点多还是挺累的。


十月十四日 又下雨了

终于蒙特利尔的冬天要来了,经过了一个漫长的夏天我都快要忘记了这里有着地狱般的冬天,世界上的事情大都如此,很多事如果不是真得到了眼前你总是不肯相信,或者根据以往的经验你认为不可能发生,可是的确发生了,怎么解释?是否定眼前还是否定过去?一个唯物主义者绝对不应该否定现象的存在,相反试图用理论解释仅仅一个方面,最重要的还是要去验证这所谓被修正的理论。世界上的事情原本就是easy to be said than done。我总觉得学计算机的人决不可妄自菲薄,因为这是一门科学的科学,从理论到实践,从数据到知识,从知识到理解,从理解到智慧,无所不包,无所不在,绝对不是所谓的一半的工程科学或者一般的自然科学所能匹及,说它是智慧的科学,或者是科学的科学是理所应当的,有什么是比探究科学本身,只是本身更加无可比及的?道可道,则何为道也?名可名,则何为名耶?试想看,计算机科学从诞生到成长发育现在可能还处在少年时期不过几十岁而已,当今社会已经为之翻天覆地,设若他能够发育进入青壮年则明日社会会变成怎样?而从这个层面上来看,他的近亲,所谓“电子工程”说到底不过核物理化学生物一样不过是一门所谓的科学而已,两者根本不是可以相提并论的。

从前看《The battle of wit》的引言说,解码不一定需要疯狂才行,但是毫无疑问地,那是有帮助的。如今换作debugging也一样的适用,昨天我差一点为之疯狂,因为我不能相信原本同步的系统现在突然变得异步起来,我反复地扫描我的code没有一丝地痕迹,这个时候,无神论者容易怀疑这是系统的bug,教条主义者则坚信问题应该出在自己一方,只有疯子会开始怀疑这是一个合理的现象,实验主义者主张实验一个简单的例子来重现现象,本本主义者认为应该重新查阅MPI的protocol,悲观主义者希望通过google找人帮忙,无为主义者想着明天太阳升起来的时候也许一切都有答案了,机会主义者希望跳过这一步直接改换triangle模型。。。

最后的实验给我的启示是也许这真的是现实,我的猜想是test函数只能监测non-blocking-sending逻辑上的结束,而这里我认为如果接受方也采用non-blocking-receiving的话,sending结束的标志不在于receiver是否post了receiving的request,而是receiver背后的接受buffer是否能继续接受,也就是说,sending所能感知到的接受只是实际的socket放入接受缓存队列的过程,是否接受方已经提取了data是一完全无关的问题。所以一个fast-sender是无法与一个slow-receiver同步的,如果大街都用non-blocking的send&recv的话。另一个小问题是关于Macro的,我想每一个c程序员都会在一个时期爱上宏的,不过这段恋爱可长可短。


十月十八日 好像要下雨了

我想一个人喜好的音乐多少反映了一个人的心态吧,这一年来我越来越喜欢理查德克莱德曼的浪漫钢琴,是否是一个时期的结束,或是另一个时代的开始?我越来越觉得实验事实最适合我呆的一个地方,并行处理对我来说只是一个开始,分布式系统我只是一个初学者,图形系统我更是一个门外汉,然而我想这个世界上也许像我这样水平的人多如牛毛,但是如果我能坚持下去必定会有所成就吧,虽然data-paralleling在学者的严重可能不过是intellectually-shallow的哑哑学步,可是我始终认为一个人没有实践一下前人所走过的道路谈何更进一步?轮子不需要在发明一遍,可是不等于说你不可以再制造一遍,虽然不需要任何一个计算机的学生重新象Linux一样重写一个操作系统,可是至少应该有能力有信心说,给我时间我也能做到你所能做到的,虽然那可能是我生命可以延续时间的很多倍时间,然而只要不停歇总是可以做到的吧。当然这听上去愚不可及,不过我确实是这么想来着,那就这么着吧。我找了好几个小时却找不到soft-irg的那个trap代码,学comp444的时候教授演示过sysCall是怎样在linux里实现的,当时没有记下来,现在全忘了,以至于连这个mode-bit是硬件层的保护还是软件层的保护都记不清了,内存访问应该是硬件层吧?记得下一次遇到Mr.Z的时候问一下。我前两天再学习怎样适用office用excel来画chart,用visio来画cause-effect图,其实我是想搞明白在系统中message传递的时间图(timeline),但是我想不明白,因为在同步的信号间又有着异步的传输,所有的通讯都是非阻断的什么时候结束并不能立刻知道,就如同wmpi的技术支持说的,synchronous-send结束是在receiver开始接受的时刻,但是你知道这个情况确实在你invoke一个wait或者test的时候,这并不能真正反映接受方的时间点,因此这就是为什么fast-sender会越飘越远让slow-receiver落得越来越远的原因,所以,我在每一个round的开始要进行一次同步,如果立刻就test那么着和纯粹的blocking-send没有区别,系统会完全的synchronous慢很多,worst-case是把所有的send都变成synchronous-send然后速度慢了整整一倍,那么我用non-blocking-synchronous-sending在frame开始发送,在frame结束test,让整个系统有一种近似virtual-synchrony的模式,也就是non-blocking-send只在下一轮开始的时候test那么这样效果应该是最好,可是我确画不出timeline。人的想象力是有限的,我看不到的东西我大约是想像不出来的吧。

你想过null指针还能干什么吗?一个macro是这样的#define offsetof(s,m) (size_t)&(((s *)0)->m)这个定义多棒啊,我当初还非要声明一个变量来做,却不知道typePtr->member本身就是一个偏移量,当然如果有人异想天开希望member是method那么就大错特错了,应该没有人像我这样想吧,因为c++method是靠另外一个隐含参数来实现的,和struct无关,只有初学者才会想象class是struct+method,不过OOP本来就是教育学生这么想的,难怪吧。

也许斗转星移物是人非之后的一天每个人都会有着相同的结果,这个结果可以看作是一个proof,不论是Erdos似的another roof,another proof还是寻常人的行万里路读万卷书,抑或只是吃喝玩乐,都算是一个吧,本来没有什么重要与不重要之分,讨论的人多起来了,也许我们就认为那个结果重要,没有人问津了,人们就说不重要,凡此种种不一而足,陈词滥调的很,只不过人人选择回答的问题有可能不太一样,有时候根本谈不上人去选择问题而是问题来选择人,你回答也好,不回答也好,都算一种答案,这和Turing Machine有些不同,因为对机器来说否定的回答也必须是一种显式的回答,没有回答不作为否定来说,无声就是默许不成立。所以人生相对于计算机来说相对容易些,如果你做不到,或者你不知道,生活中你可以选择沉默,选择过一种无声无息的生活,没有人会责怪你,因为没有人能够听到你的声音,所以没有人会知道你的答案,这两者到底是因为先有原因才有结果还是因为这是结果也就变成了原因呢?我不知道,我选择沉默。但是在计算机里你必须声明你不知道,否则一个证明就不能继续下去,从这一点来看,完全清醒与理智的头脑往往无法完成一个人生的证明,有人把这称为fault-tolerance,也就是容错性,这可真是有些irony,我不知道这样的叫法对不对,我就选择沉默吧。对于这个社会的大多数成员来说,在他们三十岁的时候他们已经基本丧失了重新学习的能力,原因当然是不需要,原因当然也是不可能,因为即便你这样的傻瓜证明了你有这个能力,然后高兴的向众人宣布只能招徕一种注定的回答:so what?这个证明有意义吗?

忽然间想到了blade runner的结局,短暂但是更加的璀璨,而当replica发现无法延长生命的时候,在生命的最后一刻说的就变成是一种希望,一种希望其它同类能够看到它所看到的vision,这种uncommon的生物的最后的愿望原来也是这样的common。


十月二十三日 好像要下雨了

看这些海外新闻网站的国内新闻,已开始你会觉得国内仿佛还是清朝的统治时期,后来你会觉得是北宋末年,估计在后来就是明朝末年了,因为十几亿的老百姓所喜闻乐见的黄金档的电视剧都是清朝的,去年刚回国的时候不解的很觉得老百姓没文化的紧,后来明白了,因为有情绪没出发泄,借古讽今而已,新闻喉舌不敢说,只好让所谓文艺工作者来让穷百姓出出气。回来这一年来却觉得时政仿佛是小时候看《水浒传》的感觉,因为到处是所谓的官逼民反的味道,当然不一定是真反,其实你看水浒就知道普通人当时就算再穷也不愿落草为寇,实在是林冲走投无路了才不得不去投靠真正的亡命徒,如果遍地都是草寇的话那早就不是什么北宋末年了,应该就成了五代十国了。从point-based改回到了triangle-based仿佛是改邪归正,又仿佛象最早的那批人那样地重走一边探索之路,虽然夸张一点,但是我觉得我会比较真正地体会到其中的优缺点,当然这些道理是粗浅的不能再粗浅的,平常人一般用脑子想一想就够了,只有我比较笨拙只善于用眼睛和手来配合脑子去想,说的粗一点叫做没有预见性,说得细一点叫做来源于实践。当初Dr.M就一针见血地指出了shading-mode是smooth的时候我不可能去压缩pixeldata,后来当然我投机了一下,因为point-based的再OpenGL里没有实现smooth-shading,实际上是flat-shading,因此我得以压缩了pixel,飞了很大的劲,结果不过是压缩了一半,那段时间是最辛苦的时候,因为大部分的bit操作来不得一丁点的错误,否则数据就是一塌糊涂,而错误在那里是非常难以看到,因为面对一个frame的pixel数据无从找起。现在改回到了triangle-based我突然有一种被欺骗的感觉,因为ply文件里单单用point来显示实在是骗人的快,因为以这些点为定点的三角形可以组成好多倍的,速度当然不是一个数量级的,我不禁对我的前人的测试比较的结果有些不安了。前天一起去吃饭,我学到了一条,也许我对于操作系统的理解还都是286,386时代的概念,至少我就没有意识到虚拟内存地指现在是有好几级的mapping了,那么在这种前提下自然不再是传统的经典的操作系统内存保护模式里说得用base,offset两个寄存器进行硬件保护了,由此推广,所谓的mode-bit也不应该是直接的硬件保护,反正user根本接触不到硬中断,软中断全都是在os监控之下的,monitor模式其实更多的是一个概念而已,所谓进了一个们自然就是一家人,那个看门的就应该是int80的trap式的softirq了。你既然一定要过这个门,我自然不怕你侵略了,所以也才有所谓的黑客的buffer-overflow的诡计,否则都是硬件保护那里还有漏洞可言,不过我想实际的物理上的低端地址应该还是user的禁区吧,因为bootstrap-loader顺理成章地从那里开始。


十月二十三日 好像要下雨了

究竟哪一个更容易懂一些呢?是比利时大侦探剥落的法语加英语,还是“豆豆先生”在“blackadder”里面的中世纪英语?哈哈不是炫耀我的品位有多高,而是对于那些看美国儿童片,比如“friends”的同学们的一点点bs。


十月二十五日 天好像也不是很冷

很久很久以前,我曾经为这个问题所困扰,就是从WMPI创建出来的window除了主节点外,其他节点上只是显示成一个小图标,于是每次运行的时候我都要在实验室里跑来跑去的点一下这个图标让他正常显示,我甚至于想抛开glut自己直接用win32API去创建window,不过一则没有时间去搞这些旁门左道,另一方面想还是兼容的好,因为OpenGL本来唯一值得称道的就是跨平台,我自己这么搞一个简单的东西哪还不如去学习directX去直接提高效率呢。摒弃这就是我当时的最大的错误,一个EE学生常常会犯的而computer-science学生决不应该犯的错误---只见树木不见森林,在细微末节上追求所谓的效率却忘记了最大的性能提高来自于合理的设计,优化之能提高非常有限的效率绝对不能本质上改变运行效率,否则就不叫优化,应该叫做改进了。
当中与我不得不想办法解决这个问题来临的时候,我只有最后的选择,那就是去改glut,简单的创建glut一个工程然后几分钟的trace就明白原来问题就是这么简单:正常情况下,如果一个child-window他的window-style除非创建者指定是不会线式地设定为visible的,因为很有可能创建他的parent-window正在做什么工作。所以我所要做的就是强制这个child-window为visible。为什么openGL创建的window会成为child-window呢?因为在mpi主节点以外都是从一个所谓的wmpi-deamon或者说service创建出来的,所以除了主节点外当然都是child-window了。
Hacker原本的意思就是指一些程序员跑到人家的系统里随心所欲的乱改一通,多数情况对于一个成熟的设计系统任何的改动大多数都是糟糕的,(否则也不叫成熟的系统了)我想我不算什么Hacker只不过做了一个大家都能做的事情hacking了一些glut,改动了一个参数,当然这个改动很糟糕,可是没有办法呀,实验室里电脑不够用,(当然要首先保障那一个只会到实验室里测试游戏的XX小XX了),我的supervisor只好问我能不能把三楼的实验室电脑加到我在九楼的实验室的系统?Concordia sucks!两年前购买的8台高性能的图形cluster到现在还不能让我使用,一年半前订购的Nvidia的高端显卡现在才到,已经跟我家里的电脑的显卡差不多了,实验室里的图形工作站的1G的网卡坏了,我请求更换,订单一个月前就下到了tiger-direct.com到现在还没踪影!
发了一通牢骚才想起来主席的教导:牢骚太盛防肠断,风物长宜放眼光。
就到这里该做饭了。


十月二十六日 天好像也不是很冷,本来背起书包下定决心去gym,结果发现倒闭了

Concordia是一所没有围墙的没有自己的gym的大学,(夸张一点,北美的大学百分之八九十都是没有围墙的,concordia的loyalo也是有一个gym的,downtown这个虽然连旁边的matropolis中学都不如,可是严格地说也不能算没有,同时新的EVbuilding的basement也在改建一个,所以。。。)可是目前我还是没有gym可以去。

难与易有时是正如探们本身一样很难定义,有时候很容易定义,有时候很难定义,请注意这里本事就是一个循环定义,当我们试图定义“难与易”本身的时候有用他们自己做了定义的一部分,我绝对不是第一个犯这样错误的人,我也绝对不是第一个故意犯这样“错误”的人,(同样地在定义错误的时候,很多人是这样的定义的:凡是不是正确的就是错误的,当然正确的定义也是类似的,即凡是不是错误的就是正确的。这个好像在编译原理里面提到过,同样是recursive definition)许多大思想家哲学家以及所谓伟人的很多理论就是这样定义的,当然不会这么明显的一望而知,大多数时候罩了一层面纱,所谓“绝对真理无需证明也不必证明”,所谓“所有的神迹的来源是圣经,神迹的叙述证明了上帝的存在与万能,上帝的主宰意味着必须相信圣经。”一切的一切假如不能重现,不论他的来源提供者有着多么高的可信度都是值得怀疑的。而让人信服是一个巨大而艰辛的过程,证明一个理论是错误的也许是最容易不过的,最简单的就是给出一个反例,而证明一个理论是正确的即便你给出几千几万个符合的例子也是不充分的,而一个完全依循纯粹逻辑生活的人是很难生活在这个世界上的,因为完全相信一件事几乎是不可能的,除非给出严格地证明,单单靠例证是不足为信的。我想这并非完全是空对空的空发议论,看看中国人一直为之自豪的所谓“中医”吧,连带的一大堆的所谓“易经,八卦”之类的糟粕,至今还有人准备用所谓的以上所说的“例证”来证明其存在的价值。我在这一点上很赞同鲁迅对待中医的态度,正如《笑傲江湖》里“杀人名医”平一指所说得那样,每天庸医杀人的案例远远超过江湖上斗杀身亡的案例,翻译成现代语言就是也许每天中医误人杀人的案例超过了中东战火纷飞的杀人个数。因为所谓个案的证明是不足为信的,比如一个患感冒的人依靠正常的抵抗力也许一周时间正常就康复了,可是很凑巧的确成为支持中医者的佐证:星期一,感冒开始了,可是要上班没时间,多喝开水也许就行了;星期三,感冒加重了,也许是加班太累了,今晚不加班了吧;星期四早上头疼欲裂感冒达到了最严重的程度,(当然这个时候也许就是康复的开始),实在受不了了,办公室里整天研究“易经”的博士生白督殊推荐了一个老中医下班去看看吧。下班了话了一百块钱买了一包中药,回家煎了吃,晚上睡觉出了一身汗;星期五,好像感冒开始好了,老中医真神了!(天知道你自身的抵抗力正常也会让你在一个星期内自然康复,即便老中医给你吃的是一包他们家的香灰你也会好的。)从此你成为“白督殊”的义务广告员,从此再打着发扬民族文化传统的旗帜下让老中医混口饭吃。

我注册mpi-errhandler总是不成功,索性就用atexit来做好了,反正是一个进程。

十月二十 九日  天好像也不是很冷,也就是四五度的样子了

昨天折腾了一个早上一直对于java的wait,notify有些不解,原因就是原本的观念是synchronized的函数在同一时间只能被一个线程调用,也就是说一个线程没有走出这个函数前不可能有另一个函数进来,可是在里面调用了wait就不同了,原因是这个wait不单单是检查信号量把当前线程置为等待组里面(wait-set,从这个set就可以看出不是用queue之类的FIFO模式,所以才能在notifyall的时候不分先后),还同时要让他放弃monitor的ownership,这个所谓的ownership相当的抽象,应该和win32里的mutex的ownership差不多吧,也许就是在所谓monitor结构里面放着线程的id吧,anyway那个所谓的synchronized和wait应该本质上是一回事,就是都是monitor ownership的争夺,没有就自然被放到wait-set里面睡觉了。唯一让我觉得比较好的就是如果没有没有ownership而去call-wait会有异常抛出,这一点至少是manditory的,不过好像String的+=不是线程安全的,实际上我也没有找到这些操作符的定义,不知道是在什么级别上实现的。又看了看COM感觉还是难,我现在大概就刚刚会用dll的水平。


十月三十日 天好像也不是很冷,也就是四五度的样子了

折腾了快一天才搞明白了remote-wakeup或者叫做wakeOnLAN(WOL),写了一个历史上最简单的小程序实现了从九楼遥控启动休眠状态电脑的功能,搜索的时候还看到有人在网上卖10美金这样的小程序,当然它的功能要全一些,无非就是做了一个用户界面而已。多少还有一些自豪的。


十月三十一日 天好像也不是很冷,也就是四五度的样子了

昨天忽然把自己以前拍过的一些风景照片又重新浏览了一遍,觉得很伤感因为很多照片记录了当时的心情,后来因为这里的空间不够大都删除了,现在把一部分纯风景放在这里,算是给他们一个永久的归宿,仿佛这样心里才有了一种寄托与安慰。正如我在相册的描述里说得那样,在纯粹的风景中,人是多余的。

十一月二日 天好像也不是很冷,也就是四五度的样子了

下载了老电影《佐罗》因为喜欢开篇介绍阿兰德龙的话,他可能是欧洲最好的剑客。

闪电战:如果从南向北进攻的话,在城堡的左翼是众多的城镇,在南北边界处是一个险要的山口,这个方向对于北方防御是有利的,因为第一,山口离北方城堡较近,可以先于南方占领有利地形以逸待劳,第二,北方在山口的后面有防御纵深,因为是丛林加山丘,万一山口失守还可以建立第二条防线,第三,南方在接近山口的地方是一条横着的河,只有一条小桥可以通过,北方只要布置少量的人鱼部队就可以协助步兵防御山口。这里显然应该是北方重点进攻的方向,因为这一侧对于南方是他的经济命脉因为这一侧的城堡比另一侧多不少,因此作为南方是一定要防御的,于是这个方向成为兵家必争之地。在第一场战斗中我发现对方是一个少有的谨慎小心的对手,一个决不主动出击,一个稳扎稳打的硬角色,他的进攻从来都是在兵力,地形,兵种搭配占优,时机有利的时候才进行,并且进攻的次序天衣无缝,比如先用法师这种攻强防弱的特种兵撕开我军防线的缺口,随后可能用骑兵冲击消灭我负重伤的防御部队,随后再用防御力强而且便宜的枪兵巩固阵地保护好受伤的进攻部队,以便让我的反击无效。在我抱怨闪击战这张地图对保皇党过于有利之后,它示强地选择了兵种随机。这一次他是兽族,我决定孤注一掷,实行一场真正的闪击战!首先,放弃表面上容易防守的右翼,因为容易防守所以我的对手一定不敢孤军深入,索性我就放空城计,仅仅招募一个侦察骑兵占领城镇。第二,放弃所谓的精兵政策,改为招募便宜的战士以便用量取胜。于是我除了一个侦察骑兵以外 只再招募一个人鱼部队作为辅助进攻,然后持续大量暴兵用人海一般的丛林战士冲击对方易守难攻的山口,诚所谓出其不意,攻其不备。果然对方没有准备,第一他既没有及时把右翼防守的部队调往左边,也没有大胆命令他们突进对我进行骚扰,而是原地防御;第二他居然招募了三个人鱼部队防守中路的水面,第三他的部队数量不足对于我的疯狂进攻没有准备,再加上我的出奇好的运气,居然几次反击都奇迹般的挡住了,于是胜利的天平向我方倾斜,我方主帅坚持每个回合暴一个战士补充前线的损失,并及时把受伤的部队撤下来休整,在取得了优势之后,我非常谨慎的放慢进攻节奏以休整部队为主,并没有持续进攻,这样在他的主帅亲自上阵的时候依然没有挽回败局。最后在我方绝对优势兵力的情况下取得的完全的胜利。这就是战略的胜利。


十一月四日 天其实已经很冷了, 当然比起往年来说还是暖和的

最好的防御就是进攻,这句话的真正意义在于说如果你能够持续进攻一直让敌人根本无法对你进攻,那么你也就无需防御。但是战争实践是你往往不可能在一轮持续的进攻中彻底消灭敌人,当进攻的矛头顿挫的时候也往往是敌人开始反击的时候,这时候如何进行防御呢?正确的做法是在进攻的后期就要着手转入防御,而只有纸上谈兵的书呆子才会真正相信字面上的所谓“最好的进攻就是防御”。因为,如果你能够在一次闪击中彻底消灭敌人你的确是不需要防御的,可是这超出了军事战略的范畴了,大概世界上只有美军打击不成比例的伊拉克之类的才是这样。

在进行阵地式的防御的时候,最基本的是利用有利的地形,但是还有显而易见但又并非为所有人所明白的一些军事常识,一个是防御的纵深,一个是反击的实力。

世界上没有绝对坚不可摧的防线,但是世界上常常有让敌人望而生畏的防线,那是因为在敌人攻防转换的时刻也就是我军反击的时候,敌人在进攻态势下必然是难于组织完美的防御,如果在我军反击时对敌人造成的伤害远远大于我军防御的损失时候,敌人是不敢贸然进攻的。这就是反击的威慑作用,比如我们常常在一线防御阵地配置一些价格低廉的丛林战士,他们可以有效地损耗敌人精锐的突击力量,而在后方我军配属一部分精锐的高低结合的突击兵种,当我军反击的时候,先用高级兵种重创敌方突破防线的精锐部队,然后适时地用低级兵种消灭他们以便达到升级部队的效果,同时在反击的后期重新用建制完整的低级防御部队建立新的防线保护我军反击时受创的精锐部队。因此决定防线稳固的根本条件还是整体的反击实力,这是一种积极的防御完全不同于被动的自杀式的消极防御。

防御的纵深同样是保证反击战成功的一条,如果防线单薄,一点突破导致全线崩溃的话就根本谈不上反击了,防御纵深并不是简单地累积兵力,如果是这样我军应该在兵力上占优势又何必采取守势?因此,防御的支撑点的选择至关重要,在关键的位置配置关键的兵力是防御的关键。最根本的就是利用地形与ZOC(zone of control)使得我方防御部队的防御面最少,防御方向最有利。对于至关重要的防线支撑点要不惜一切代价坚决防御,这些点往往是所谓失而不可得,得而不可失的防御阵地,也就是从任何方向来说都是易守难攻的坚固的点,因此它必然是敌我必争的焦点。有时候为确保核心阵地的牢不可失,必要时有可能要采取违背防御原则的措施在核心阵地前集结兵力消耗敌人进攻核心阵地的精锐突击力量。要记住对于防线的稳固来说多大的牺牲都是值得的,因为在我军有足够反击实力的情况下坚守防御的支撑点可以最大限度地扩大我军的反击战果从而从根本上杜绝敌人对于我军防线的进攻,也从而最大限度地减少了我军的损失,所谓不战而屈人之兵。

有时候最好的进攻是防御,在正面坚固设防的敌人阵地面前主动露出破绽诱敌来攻,然后趁势发动反攻一举突破敌人防线,这也常被称为钓鱼战术。或者在我坚固设防的阵地前故意部署若干孤立但是防御坚固的部队诱敌,在敌人大量消耗有生力量或者不利防御的阵型暴露在我突击部队面前时候以雷霆一击之势将其消灭来攻达到牺牲局部取胜全局的目的。在兵力补充时,有时要切忌采用添油战术,所谓添油战术就是逐步将兵力投入到主战场,因为这样无法在战场上形成优势兵力达到打歼灭战的效果。因此一般来说突然性的暴兵可以达到迅雷不及掩耳盗铃之势不给敌人喘息补充的时机,但是在战争焦灼我方持续进攻时又要讲究每个回合都有部队补充不停歇地向前线输送,切不可耽误任何一轮因为前线的部队在受到重创时及时撤换新部队进行防御进攻至为重要,不但可以让受伤的部队及时休整来节约资源,更重要的是这些受创伤的部队往往是已经获得经验值得部队,他们的价值远远大于那些没有任何战斗经验的全新部队,因为升级后的部队将成为敌消我长的关键,在资源与战斗力上都有着不可估量的价值,从心理上说可以严重挫败敌人进攻的信心进而达到攻无不克,守无不胜的境地。

长夜漫漫,网络无边,不知胜负手可愿手谈一局?

最长的一天:这是在“霍洛岛”上的三人对战地图,三个英雄出生在对称的三个角落,地图的中央是一个由六个村庄拍成蜂窝型的战场,这里成为兵家必争之地。我遵循我的一贯原则在小地图上坚决只招募最便宜的森林战士,因为在平原与村庄防御中这是性能价格比最高的选择。这个战略是二次大战中苏德战场上德国人用血的教训学到的,当时德国人追求坦克的精良选择制造少而精的虎式豹式坦克,而苏联则是选择大量建造便宜的T34坦克,在战场上形势焦灼的时候部队没有形成数量之前就实行精兵策略是一种注定失败的例子,因为高级兵种耗费大量资源,对于我军要大量防御的阵地要点来说是不够的,兵力不足就导致无法及时用补充的部队替换已经负伤的部队,同时高级兵种升级的空间要小很多,因此从理论上说大量招募低级兵种有着更大的性能价格比,这也就是为什么我坚决只招募丛林战士的根本原因。

在战争的初期,我立刻就意识到在我的西面的对手是一个菜鸟级的玩家,因为它雇用侦查骑兵,在小地图上这种耗费18金子的兵种相对于14金子的丛林战是绝对是属于华而不实。我开始时决定不理会西侧这个菜鸟 而是专心对付北方的矮人玩家,因为如果我和西侧的菜鸟拼个你死我活北方的这个矮人一定会大占便宜的,消灭了菜鸟不会赢得整场战斗的胜利,而消灭了北方的劲敌确多半可以获胜。于是我首先用我的英雄对于矮人的先头部队进行杀伤以便当我的丛林部队赶到时候可以更加容易地消灭它。一般来说让主力英雄孤军深入是异常危险的,一不小心就会被敌人狙杀英雄,但是我知道矮人是个老玩家不大可能向菜鸟一样招募更多的快速部队,我的英雄应该会在矮人的主力部队攻击范围之外。就在我准备给矮人先头部队致命一击的时候,一个意想不到的情况发生了,西面的菜鸟的主力英雄突然杀到了我的大本营前,他这样做是愚蠢的,没有事先侦查就直接用主力英雄这么深入敌人防御纵深是异常危险的。我抑制住内心的激动,调兵遣将将原来准备包围矮人的部队掉过头来对菜鸟的主力英雄发动猛攻,果然在我的三面包围下,他的主力英雄受到了重创,我决定冒险一击,把我的主力英雄也调上去给他最后一次打击,成功了,西面玩家被消灭了,为了防止他剩余的部队对我得英雄的疯狂报复,我立刻派战士挡在了我得英雄的前面,这样可以保证不会有危险。随后这个沦为电脑的玩家的剩余部队开始发动自杀似的攻击,我的主力迅速调整补充,在我重新招募的丛林战士的合力进攻下,这部分残兵败将被我消灭了,这个时候我才得以喘口气重新开始向中央挺进,可是就在我忙于剿灭突入我后方的这些残兵败将的时候,北方的矮人已经占据了所有的中央村落并且开始由此向西南突击准备收复被消灭的玩家的城池,如果我不能在此之前抢占那些资源,我将陷入极大的被动。于是我调集我所有的部队奋力向中央进攻希望能够控制这个交通枢纽阻止敌人抢占西南的资源,同时我的主力英雄不再呆在东南侧我方 城堡里招募部队而是星夜抄小路赶往西南准备占领敌人的城堡就地招募部队就地组织防线,因为我得丛林战士行动力较低,同时目前我得资金补充较慢只能一个回合招募一个战士,与其坐等不如赶快冲锋。结果我的主力部队正好撞在了北方矮人在中央以逸待劳组成的坚固防线上,大部分的部队都被分割包围围而歼之了,不过也正是矮人族集中精力在消灭我得进攻部队的时候,我的主力英雄却顺利地到达了西南城堡,与此同时我积累下来的金子足够我一轮招募半队的部队。这时候成了战役最黑暗的时刻,敌强我弱,此时我为了抢占西南,完全放弃了原来的基地,进攻中央的主力也消耗殆尽,北方的玩家此时踌躇满志抛出了劝降书,我沉着地应道,I will take my chances。

与此同时我新招募得半队主力在战争弥雾散尽之后让我得对手颇为吃惊,当然它还是坚信胜利在望这些不过是延缓他的胜利而已,这时候他的策略是导致他日后失败的最根本原因,从兵力上说他暂时占有优势,但是从资源上说我们不过是旗鼓相当,因为它虽然占有中央,我却把西南一角和我原来的东南一角占据了,应该说他并没有绝对的资源优势,何况中央地带的村落实属战争争夺的焦点,仿佛三国时的荆州很难说会持续提供资源远不如角落的村落易守难攻,同时从恢复受伤战士的角度来看中央的村落完全是无用的,这样看来我也许在资源上还略略领先,可是我的对手这时候却改采用精兵政策招募30gold一个的昂贵的火枪兵,要知道这个火枪兵在进攻上也许可以以一当二,甚至是三,可是在防御上并不比一个普通的矮人族战士强多少,资源上却是昂贵一倍,于是这种战略注定了他的部队补充数量不足,在后期他为了应付兵力的不足只好开始招募攻防都很差的刺客部队,这种部队完全忽视ZOC可以长驱直入我得后方在屠杀伤员方面简直像一个屠夫,但是它不是主力作战部队而且非常的昂贵,于是在后期的作战中他的刺客虽然有几次突入我得腹地占了一些便宜,但是随后就是有来无回地被消灭了,从资源上说这并不核算,因为每次我也不过是消耗了一个14g的普通战士,而且是受过伤的也就是已经参与战斗给敌人重创之后的完成了人生的价值的战士,他却派遣她的24g的全新的刺客来突破防线消灭伤员,如果是使用在突破防线的关键时刻,那它的价值是无可估量的,因为很多时候战争的胜负就决定于最后的一击,仿佛千钧重担悬于一发,很多时候这最后的一击成为胜负的转折,攻防的转换,对于这种可以在敌方各个阵地任意游走的刺客来说他经常成为防御方的噩梦。然而他的孤军深入经常让我得后方的主力英雄得以施展,这从作战效能上说是大便宜,因为双方的主力英雄除非迫不得已绝不敢轻易上战场,而主力英雄的作战能力远非一般单位所能匹敌,现在变成我得主力英雄在后方毫无危险地发挥强大的战斗力然后从容地恢复,招募,而他的主力英雄除了招募无所事事,这本身就是一个绝大的便宜,这应该也是胜利天平倾斜的一个重要因素。

话说战场上当时又出现了另一个潜在的威胁,我现在是占据了西南向中央进攻,但是我得旧基地东南角因为上一轮的全力进攻主力损失殆尽实际上已成为空城,如果这时候对手拼死守住中央同时派遣少量部队占据东南将会取得决定性的优势,形势依然十分危急,于是我又采用同样的策略,主力全力猛攻中央,主力英雄凭借能够在丛林隐形的特殊技能潜伏着向东南挺进,然后突如其来地出现在我得旧基地附近,这的确让对手吃了一惊,因为当战争弥雾刚刚散去我可以看到东南角虽然村落都被对手占据可是防守部队仅仅是一个脆弱的弓箭手,对手显然没有料想到我得英雄会潜行至此,同时他也看出了我要就地招募士兵的策略,于是命令弓箭手不惜一切地抢占主城 试图拖延我招募的时间以便给她中央主力进攻赢得时间,不过这时我西南主力的进攻已经让他在中央的主力腾不出手来增援东南,于是我得主力英雄配合一个贴身的侍卫合力向弓箭手发起冲锋,只一个回合就让弓箭手重创,撤退,于是我得主力英雄迅速占领主城 然后招募了半队的丛林战士。此时中央的战场呈现出焦灼的态势,北方的部队质量数量上虽然都有一定优势但是因为经过两轮我方的全力进攻大部分都是负伤的单位,同时在战斗中我得一个丛林战士升格为英雄牢牢地把守住了通向西南的大门,敌方一时间也无法纠集部队向西南挺进,因为我在东南的部队正在向中央蜂拥而至,此时对手依然采用精兵政策,招募了昂贵的狮鹫部队,事实证明这还是一个不错的策略因为狮鹫部队在沼泽地带惊人的机动力大量的屠杀了我得伤员,然后又惊人地撤退回他的后方远比刺客来的有效的多。这时候他的精兵政策的缺陷暴露无遗,他始终无法突然暴出一波兵来持续扩大他在中央战场上已经取得的巨大优势,而那些受伤的精锐突击部队因为没有后方新的防御部队的接替全部被迫就地转入防御与恢复,这就给了我可乘之机,我的新的一波主力于是像潮水一样向中央冲去。我得对手看到了潜在的危机,主力英雄御驾亲征,这威力的确不小,他的刺客部队以及狮鹫部队在我得后方肆虐横行,我也不顾一切地向前线补兵,我知道只要我坚持住我得资源优势就会显现出来,对手的后劲不足只是最后的回光返照,但是目前绝不能让他大量歼灭我得主力,只要能够做到和他拼消耗就行,于是我得主力英雄在最危急的时刻也亲临前线,两家的 主力英雄一度是只有两步之遥,矮人英雄在看着我得英雄消灭了他的忠实的为队长之后咬牙切齿地在地图上我得主力英雄头上贴上了一张标签“dead king”,这当然是他的愤怒,我及时地在英雄周围部署了一道防御圈,最终我得英雄全身而退,经过这一轮的较量矮人的主力精华尽失而他的补充部队再也没有质量的优势,而同时我得两个英勇善战的战士升级为了英雄,从此人民解放军开始了战略大反攻,因为我方第一次开始在质量和数量上超过对手了。

然而反攻并非一帆风顺,他的目前最精锐的已经升级的狮鹫部队和杀伤力惊人的火枪兵对我得威胁极大,我派遣我的一个刚刚从战士升级来的英雄和他的卫兵去剿灭这股凶残的敌人,我的轻敌让我付出了惨重的代价,英雄和他的卫兵以及随后增援的一个战士全部阵亡了,这是一次惨烈的损失,虽然在正面战场上我军已经牢牢地把握住了主动权占据了中央战场,可是如果不及时消灭这两个逃入我方东南腹地的顽敌我方将有极大的隐患,一旦让他们恢复元气我得中央主力不但会腹背受敌,我方的资源优势也会不复存在,于是我派我得主力英雄连同中央部队建立一条牢固的防线,同时抽调出我最大限度的机动兵力向东南展开围剿战,这一次我方部队有着绝对的优势,一个升格的英雄带领三个丛林战士,而敌方的火枪手刚才侥幸逃脱厄运却也奄奄一息,胜利是确定无疑的,问题是有多 快,要知道我方在中央战场上存在着巨大的压力,虽然敌方处于劣势,但是由于我方分兵同时由于东南方资源的暂时易手,在短时间内矮人部队爆发了一波主力向中央平推了过来,这才是关键的大决战,如果我方能够迅速消灭东南流寇收复失地以及正面的敌方的进攻,那么胜利就指日可待了。但是如果东南的绞杀战成为旷日持久的追击战,又或者正面之敌对我造成重大杀伤,胜利的天平也许又会重新摇摆不定,这将成为这场战役的又一个关键的转折点。在这个紧要关头我得对手明显信心不足,对于受伤极重的火枪手机动灵活的狮鹫部队决定单独逃逸,于是在一场围杀中这个血债累累的火枪手成了丛林战士的刀下鬼,而那个侥幸逃脱的狮鹫也被重创暂时失去了作战能力被迫逃回敌人后方休整。在正面战场我得对手同样显得信心不足,没有采取集中兵力进攻的方式反而分兵企图在侧翼的沼泽地的进攻中占一些小便宜。这里不会成为决定性的战场因为它不可能改变战斗的主动权,只是局部的战斗,因为如果矮人取胜了,对于精灵族主力无妨而同时并不解决丝毫问题因为矮人的正面战场依旧需要防御否则他的主力城堡就会暴露在精灵族的进攻之下,因此这时一个在次要战场上发生的一个次要的战斗,他的输赢注定改变不了矮人族失败的命运,可是如果是一个优秀的战略家应当明白他在不利的局势下唯一的改变命运的战场应该是在中央,虽然这几乎是不可能的,但是这确实是唯一的机会。矮人族失去了唯一的机会之后就只有负隅顽抗了,首先在沼泽地的争夺上虽然他的机动灵活的狮鹫部队占到了一点点便宜,但很快在我方的反击下连他目前唯一的精锐狮鹫部队也覆灭了,我也终于实现了一定要消灭它的誓言,全军军心为之大振,全部主力向矮人族的腹地前的天然屏障护城河挺进,在这里矮人族的主力英雄以及最后的主力全部发动了自杀似的疯狂反击, 矮人族甚至还出动了他的独一无二的防线突破者--敢死队,这些矮人族狂战士是所有种族中最可怕的兵种之一,他们一旦投入战斗决不退缩一直疯狂缠斗直到一方阵亡,这种玩命似的攻击堪称神风特攻,在所有种族中绝无仅有,对于敌方坚固设防正面狭小的战场敢死队的攻击是可怕的,可以说只要有足够的数量世界上任何坚固的防御阵地都会顷刻间在他们疯狂的前赴后继的自杀冲击下土崩瓦解,甚至很多主力英雄都对他望而生畏,因为也许敢死队不能一击而杀,但是重创之下的主力英雄往往被随后赶到的敌人所屠杀,这种战术对于攻坚来说可说是矮人族独一无二的法宝。果然在敢死队和火枪手的配合下,我的进攻的英雄损失了两个,不过这时候我得资源已经足够允许我立刻招募高级兵种补充前线,损失的英雄立刻被招募了出来,同时我还招募了精灵族的攻击力最强的神箭手,这些命中率高而且稳定的远程攻击兵种实在是随后攻城战所不可缺少的。

这一切都在转瞬之间,当我得后续高级兵种赶到城下的时候,矮人族的主力英雄已经伤痕累累,身边仅仅剩下一个刚刚升级来的忠实的卫队长,对手这时发出了一声长叹:精灵族的进攻之波真是不可阻挡啊。在这一声长叹时候,他的卫队长被我的三个英雄以及一个士兵围杀而死,另外一个精灵族英雄带领一个战士围住了矮人主力英雄将他打的奄奄一息,这时一个精灵族老战士冲到了矮人王面前举起了长刀,矮人王手里端着已经打光了子弹的火枪最后看了一眼满是血泊的矮人城堡,低沉地说道:来吧,让这一切结束吧。我打出了一行消息给我得对手:我会让你死得像一个战士的。手起刀落,一切化为尘埃。。。

一场持续了将近四个小时的激烈战斗结束了,随后我对我的的法国对手说,我总算可以有一顿快乐的晚餐了,祝我好胃口吧。他说,bon appetit。


十一月七日 天其实已经很冷了, 当然比起往年来说还是暖和的

折腾了一个下午都搞不明白为什么我得网络连接是正常的,但是就是上不了网,后来打电话一问Mr.Z,他立刻就告诉我说是DNS服务器的问题,果然牛。很久没有用breca的cluster了结果统统都忘记了。mpic++, mpicc是分别为c++/c的编译命令,运行时候mpirun -np <number> program,但是第一次运行的时候必须要lamroot。另一个不明白的东西就是我用non-blocking的recv的时候好像会丢失,也许是我没有初始化MPI_Request吧,再试一试吧。下个月应该要搬家了,明天签约,月底记得要把我得无线网卡要回来。还要记得去办护照,不管有没有钱旅游,先把护照办了吧。


十一月八日 天其实已经很冷了, 当然比起往年来说还是暖和的

写了一个简单的MPI排序的小程序,所谓regular-sampling-quick-sorting。说白了,不过是external-sort或者merge-sort的变种,主要是用cluster来分段quick-sort然后再分段merge。根据我得简单的测试,大概只有当属组长度超过7000000的时候才快过单机速度。


十一月十日 天其实已经很冷了, 当然比起往年来说还是暖和的

晚上又要去TA不想再做饭了,想去买几个包子吃,没想到竟然如传说中的那样又关门了,饥肠辘辘中决定去PA去买熟食来吃,所谓熟食不过是烤鸡。烤记者东西其实也如《围城》中形容古典小说中偷情男女的感觉的比喻,就是烤红薯,闻的比吃得香,吃不着比吃着还香。顺便去看了一下“有求必硬”的博客,感觉挺有意思的,他们初中一个班的一波男女居然还能凑在一起搏饼,挺好的。


十一月十一日 天其实已经很冷了, 当然比起往年来说还是暖和的

Roommate说电脑中毒了因为下载了3721的杀毒程序,我实在是无语,像3721这样臭名昭著的流氓软件提供的杀毒程序你也敢用?仿佛是找一个强盗去讨教怎样防盗?

有时候,我觉得在最困难的领域里探索的人可能都是两种人,最聪明的与最愚笨的。最聪明的因为他们一方面要挑战这个人类的极限,另一方面仿佛这是他们的使命感决定了,他们不去还有谁可以去?可是最愚笨的人呢?第一,他们愚笨到以至于不知道这是最没有希望的领域闯入了一个一般稍有头脑都知道规避的领域,第二,他们愚笨是因为他们不知道自己愚笨以为自己和世界上所有的聪明人一样的聪明,以至于无数聪明人用无数的方法向这些蠢人示范也无法使得他们认识到自己的愚笨。另一方面这个领域的特点决定了这两种人可以共存,首先这个领域很可能都是一些无法解决的问题,对于这样的结果天才和蠢才来说是一视同仁的,结果面对一无所获的结局蠢才肯定比天才来的高兴的多,谁也不比谁强多少,对吧?所以,如果你知道你是一个天才,你也许注定应该去挑战不可能的任务因为这才能体现你的人生价值,同样如果你知道你是一个白痴,你也应该挑选那些不可能的任务,因为这也是最能实现你的人生价值的地方。

看了《迷失东京》(Lost in Translation)这样的垃圾片,我简直都要呕吐了,是谁曾经向我推荐的?简直是超级的浪费时间,一部比“无稽”还要滑稽,一部比“无极”还要无际的无聊的电影!从头到尾我都不知道在干什么,一个故作呆傻的滑稽演员,一个无病呻吟的迷失在东西方物化差异的低级看图说话教学片,一个初次来到日本对于文化艺术有着电影学院导演系刚毕业的本科生的毕业设计作品。反正我觉得自己被骗得很惨。对于《Da Vinci Code》来说,我更加喜欢男女主人公,男主角Tom Hanks自然不用说了表演的角色都有一定的深度,装白痴也比一般的白痴有内涵,当然我从一开始到结束也没认出他来,只是觉得这个人看上去很眼熟,仿佛小时候我家隔壁卖酱油的老头那样的亲切但是又想不起来他的长相的感觉;女主人公从她一出场我就怀疑她是Audrey  Tautou,最后果然是她,她一出场就是如同她在Amelie里面一样的耍花招骗人,自称什么法国情报局的cryptalist,真是亏她想得出来,看来女人的魅力大都是和她们的欺骗形成正相关,否则也就不叫魅力了,应该叫做媚力了。


十一月十四日 天其实已经很冷了, 当然比起往年来说还是暖和的

昨天听了图灵奖得主的报告,写了一点点笔记


十一月十六日 天其实已经很冷了, 当然比起往年来说还是暖和的

要申请护照还要像赶集一样起个大早,反正睡不着干脆天没亮就排队去吧,去之前看了一段“郭德刚”的所谓电台不让播的响声,我的感觉是现在的社会已经越来越变得脱节了,GCD已经越来越走向他当初的对立面,可能某一天醒来发现中国整个社会开始酝酿着一场新的革命,这些变化是潜移默化水到渠成的。另一件事情实际上是有关电视节目的,大体上你看过北美的所谓讨论节目尤其是清一色的所谓女嘉宾的节目,你会有一种感觉,只有一种,那就是进了大陆的菜市场了,所有的女嘉宾都在同事大声争辩着说着自己的观点,计算机通讯上可能叫做multiplux吧,反正就是几千只鸭子的呱呱声而已,看一次觉得新鲜,第二次就觉得恶心头晕了,这也许就是所谓的“善于沟通”的技巧吧,让我想起了改作业里那些software engineering的学生的分布式的程序代码,极其华丽,可是效率极低,一个remote-transaction居然要传递四五轮以上的message,绝对把通讯当作免费来用,他们只是片面的被告知说计算机硬件的发展导致软件的成本越来越变成人力维护的成本,可是这又一个基本的前提就是你的程序基本上要有一个最低的效率底限,否则一堆垃圾再怎样也不知的维护。当然我对于java的reflect这种强大的动态语言的威力使敬而远之的,这无论如何是一种大趋势,也许这是c/c++唯一不足的地方。昨天听了一个使用Knuth的dancing-link的讲座,觉得非常的感触,我当初怎么也想不出要怎样去使用者一个有些振聋发聩的技巧,昨天的讲座可以说是一个完美的演绎,如果我能够把它改写成当初的DFS的模板的话,将来我就可以找到他的应用了。


十一月十七日 天其实并不是很冷,比起往年来说还是暖和的

今天想着要把我的程序移植到Linux,结果第一步就是怎样mount我的usb闪存,这完全是一个历史的循环,同样的问题在也许一年多前就是我的疑问,现在又来一遍,我的记忆越来越成问题了,我甚至开始怀疑我回国的时间了,是一年前还是两年前,很显然答案是一年半以前,哈哈。。。 偶然的读自己的当时的札记,感觉那时候还是一个有为青年的样子,仿佛真的是lxd所说的愤青的样子,现在好像全然不是了。重新再装一遍fedora,不知道还是否会发生同样的问题?早上打电话去问sympatico怎样在linux下连接到adsl,电话那一端的technique support的声音好小啊,仿佛是从印度传来的一样,谁敢说不是呢?叫我等了半天然后明确地告诉我说不支持linux,这才叫做干脆,于是我也只好下定决心把昨天买的14块钱的switch换成29块钱的router不然这个问题就大了。另一个小小的发现就是,在安装linux的时候bootstrap-loader的设置你可以选择放在哪一个操作系统的分区里,这就是为什么学校实验室里有的机器的double-loader的菜单是windows的,有的是linux的,当然等我装好了就可以验证一下了。总之,我觉得现在看我以前的东西仿佛是又一点点看天书的味道,几乎完全是新鲜的东西,仿佛需要total recall一样。最近看新闻才明白什么叫做web2.0,比尔盖茨认为这是概念炒作,因为仅仅一个用户自己添加维护内容的特点就要算作是一个新的互联网时代有一些夸张,我也部分同意,毕竟教主总是对的,(我自己封他为我的教主),如此算来我的这个札记加故纸堆岂不是web20的元老级的呢?看看很多人现在写博客的热情,这些也都算是我当年玩剩下的?


十一月十八日 天其实并不是很冷,比起往年来说还是暖和的

台湾的所谓民主实践说明了一个朴素的道理,就是在温饱问题没有解决的时候,政治民主也是一种奢侈,也就是说你和所谓贩夫走卒之流谈国计民生是徒劳的,你所谓的辩论证据也是徒劳的,因为信者恒信,不信者恒不信。比如在中国儒教文化的社会里,包括香港新加坡等等,99%的暴民(mob)都坚信当官就是吃香喝辣的,然而一个可笑的马英九先生非要把自己树立成一个完人,一个不贪财的清官,普通的老百姓不怀疑才怪。正所谓禽有禽言,兽有兽语,和一些社会底层的阿公阿妈去讲什么民主法制也是无异于对牛弹琴,因为正如奴隶社会里鞭子是奴隶主与奴隶对话的工具一样,洋枪是殖民者与土著的唯一的共同语言一样,在台湾的中下层劳动人民唯一听懂的语言也无非是一日三餐升官发财(还必须要用当地的土话来讲才行)。为什么美国可以实践所谓的真正的民主?因为美国人口的大多数是中产阶级,生活在社会底层的本来也不会关心政治,因为没饭吃哪里会去投票?远水解不了近渴。一个社会如果廉耻都没有了又何谈什么民主法制?要知道强盗杀手都讲究行规,何况一个社会的领袖?因为有些社会行为的准则是无强制约束的,完全是执行者本人自觉遵守的。比如《kill bill》里面杀手bill就反对暗杀一个处于昏迷状态的敌人,因为这样做虽然有很大危险留有后患,可是如果这样下流地谋杀一个对手会lower us,将来自己内部的杀手成员也许也会丧失最低的道德准绳,反过来不择手段地对待自己同伙,这就是所谓盗亦有道。假如一个政治家完全不顾及长远利益树立一个反面典型,可以想象自己的对手以及同伙也会不择手段无所不用其极地来对付自己,到头来是一个一损俱损的局面,因此稍有理智的人不会愿意看到这样的结果,除非它本身就是暴民,亡命徒,光脚不怕穿鞋的。我想一个从社会最底层爬上来的政治家往往会有这样的勇气去做这样的对决(比如这个陈姓瘪三),所以选择社会领袖并非不看他的出身,并非是白手起家的政治家就是对社会有益的选择,这其间的风险就是台湾今天政治僵局的集中体现。出身贵族未必就是坏事,美国的政治家大都有背景,这不是坏事,因为至少他们有所忌惮不可能会穷途末路亡命狂奔不顾一切地不择手段似的穷凶极恶。

最近看到所谓的中日关系在缓和,很多人不理解,看了好几篇中日甲午战争前中日政治军事经济对比的文章,深切地感受到中日之间的实力对比是不可相提并论的,因为当时据这些文章的分析中国无论在武器数量质量上都是旗鼓相当的,甚至在经济上洋务运动还是让中国的新经济略微领先,在人员上清朝的留学生不少都是舰队的管带,士兵也很勇敢,可是结果还是输了,而且输得一塌糊涂说明中日之间的实力对比绝对不是简单的数据可以看出来的,也许制度仅仅是一种民族精神的体现并不是力量的根本源泉,所谓是果不是因,因此MR.Z的一句制度使然是一言以蔽之了。因此,如果一个清醒的头脑和一双睁开看世界的眼睛应该清楚地得出一个结论,中日不可交战,再战中国会败得更惨,因此这就是锦涛低头的根本原因。


十一月二十二日 天其实并不是很冷,比起往年来说还是暖和的

我新买了一个无线的路由器,是trendnet,去年圣诞boxingday的时候大减价十块钱外送一个无线USB的网卡,可是现在急着要买,就要三十块钱了,还要rebate。设置来设置去,很花了心思,逼得我不得不去研究局域网的设置。antony说不用router,bell公司的adsl modem有一个内置的router,网址是192.168.2.1下次试一下。这个router比去年的问题多的地方时总是重新启动,并且默认的设置是connect on demand,于是我总要不停地重新连接。另外我的电驴emule不能通过防火墙了,我看到可以设置NAT转换,但是毕竟麻烦,我自己的router为什么要那样麻烦,于是去下载最新的firmware更新之后多了很多新的菜单,可是选择不要connect on demand,并且我发现默认的emule的端口4662时被屏蔽的,并且我改不掉,看来这家公司够坏的,我之后改变emule的端口,结果才可以通过firewall,奇怪的是同时屏蔽emule的设置也不见了,难道说这个router会智能化到以至于检测特定的程序?我猜想应该不会,也许是我无意中设置的?可是为什么我自己也不能改变?另一个常识性的东西是假如我的笔记本同时有无限网卡和内置的网卡,那么我就应该针对各自的连接设置两个不同的ip,如果我需要设定固定ip的话。

今天偶然看了看国内的几个视频网站,觉得根本无法和youtube相比,真是叫做没有金刚钻就不要揽瓷器活,根本带宽没有解决谈什么在线视频?这一行当全是烧钱的活。


十一月二十四日 天其实并不是很冷,比起往年来说还是暖和的

对于我来说,偷懒的结果就是夜夜失眠,在没有写程序的日子里,我才感到度日如年,晚上用红酒催眠也无济于事,现在总是怀念那些无梦的日子,虽然我现在也是无梦的过着,可是晚上睡不着,白天一过中午有昏昏欲睡。


十一月二十七日 天其实并不是很冷,比起往年来说还是暖和的

为了正确配置三个router,我费了九牛二虎之力还是不行,其实我想这可能就是我的无知,voip的phone-adaptor不会让我改动他的lan-ip地址,有意思的是我发现居然可以用电话键盘来设置他的ip,mask,gateway等等,很有趣,这种程序便起来应该就是一个DFA,想到这里我对于国内的硬件编程就是一肚子气,基本上国内的小电子产品都会有一个reset键也就是说程序员根本不敢保证它的程序会怎样被用户搞乱了,反正就是恢复成原厂设置,我就是按了那个trendnet的reset键结果什么都练不上了,只好去futureshop换一个,原来买的那个mp3也是如此,一旦reset就全废了。mokhov写的那个什么作业我总觉得是非要把一个简单的问题复杂化,为什么不能让学生集中精力再synchronization&deadlock监测上呢?问那些个无聊的问题干什么?还得我花了半个多小时读他的废话,发现问题和操作系统完全无关。今天,我觉得M教授的眼光还是非我所能想象的,同样是直觉他的就是正确的,我总是对于hierarchical-depth-buffer-algorithm嗤之以鼻一位没有什么用,实际上真正去看那些depth-buffer才体会到他的巨大也才体会到其中有大量的重复的数据,如果不采用这种snapshot的idea才真叫作浪费,好笑的是我已开始就先入为主,以看到初始的结果就急急忙忙的写报告说要证明自己的观点,后来改了该发现自己的采样有问题,数据的coherence一般是方块的,我用row来采样当然不对,后来又发现对于空数据我应该过滤掉,这样发现hit-rate还是蛮高的,所以,don't jump to conclusion too fast。Becky帮助我认识到了我多年以前的一个重大的错误。哈哈


十一月二十八日 天其实已经开始变冷 了

早晨花了好几个小时找到那个stupid bug,原来又是老一套,我总是忘记我的triangle的顶点是要乘以三的,这种白痴错误实在是白痴,因为大部分图片也都在,可是怎么看都不像,而事情变得更加混淆的是,obj文件的顶点是从1开始的,结果我的图形一场神奇让我百思不得其解,一个错误也许很容易发现,但是当两个三个甚至几十个错误放在一起,你能够理解吗?事实上目前很多领域里貌似复杂的问题只不过是多个问题纠缠在一起而已,比如金融,气象,人工智能等等。当人们无法理解的问题出现时候,无非是两种态度,正确的,不正确的,(这种说话的口气是不是很熟悉阿,对了就是伟大领袖的著作里的口吻)不正确的态度包括胡说什么有些现象不可能用科学来解释,最典型的就是在当前医学手段还有局限的情况下一帮江湖骗子会跳出来说什么中医八卦之类的东西。正确的态度则是抽丝剥茧逐步分离,这是唯一的正选方案。月底又要搬家了,哎,越搬越贵越搬越小,现在觉得好像越来越奢侈,比如我现在吃的面包已经没有低于两块钱的了,经常吃三块钱的面包,目前又养成了吃酸奶的坏习惯,还有什么要检讨的呢?整整一个学期没有一天晚上看过一页书!这个学期没有上课生活散漫,不知道年底总结要怎么写?


十一月三十日 天其实已经开始变冷 了

早晨见到了价值4million的cluster,还趁机摸了一把,仿佛那只手就沾了金一样不想再洗了,哈哈。下午搬家又是一番战斗。马上搬家拆网收电脑。


十二月四日 前两天下雪了

早晨去拿护照路上想到mr.Z的说法,其实这个身份对于很多穷人来说可能一辈子也用不上一次,很多时候人们期待的东西其实仅仅是水中月镜中花,你期待仅仅是因为别人都有二你没有,如果你一旦有了你也不觉得有什么了不起,有时候甚至像这种渴望最明显的就是对于一个残疾人羡慕一个大多数人都有而不觉得有什么了不起的东西,这个比喻我感觉有一点不厚道,不过意思如此。搬家以后的感觉真好,感觉就是一个我的天堂了,哈哈我的要求很低的,无非就是像领导一样单独使一个卫生间,办公室而已。早上回来打电话去sympatico抱怨了一桶,他们又像小偷一样偷偷地charge我的钱,每个月多收我十块钱,下午去把预定的微波炉搬了回来,还打算买一个脚踏垫,昨天买的浴帘觉得很满意,当然这一切都要花钱,最近可能花钱如流水一样了。哎,有时候在想一个人如果在物质上得到了满足也许在精神上就是空虚的了,看来我现在是精神空虚到了很高的程度了。

这是一个2v2的战役,战场地形复杂,有丘陵,有山地,有森林,有湖泊。我还是统领着我熟悉的精灵族,我的盟友是矮人族,我的对面是矮人族,盟友的对面是龙族。鉴于地图相当的大,我决定招募两个侦查骑兵一边端占村庄,同时利用他们超远的视野来及早发现敌人,其余的兵种我决定全部为丛林战士,因为从性能价格比来看他们比弓箭手要便宜很多,虽然远程攻击较弱,但是近身格斗的防御却还不错,最主要的是我一向主张群殴,也就是贯彻毛主席的集中五倍甚至六倍的兵力打歼灭战,这样在局部要形成兵力优势只能靠招募便宜的兵种。我的盟友是一个急躁冒进的新手,他招募了很多的狮鹫,这种昂贵的兵种固然有着机动性与攻击性的巨大优势,可是在防御上有着致命的弱点,也就是没有远程攻击,我一向对于这种精兵政策抱怀疑态度,因为其中运气成分太大。在我和盟友的中间地带是一个开阔的平原,这里零零散散地分布着一些村落,属于典型的易攻难守的地区,而我的正前方则是一眼望不到边的大森林,这里才是精灵族的大展手段的地区,可是鉴于盟友的邀请,我不得不把我的主力向中原进发以便配合他夺取这里的资源,本来我是准备我的两队主力一前一后同时进发,以便在中原和敌人遭遇的时候形成兵力优势以多打少给敌人一个下马威,因为根据经验,一般新手容易分兵多路轻率冒进,我集中兵力打他的先头部队可以站到不少便宜。可是,我因为贪图多占两座城池,指挥官回到大本营晚了两个回合,结果前后两队的距离拉大到了两轮的距离,结果导致在初期的遭遇战中没有兵力优势,而两个侦查骑兵又属于非常脆弱的防御部队,首战没有占到太大的便宜,而我的盟友在集中兵力向中原挺进的时候发现她前面的森林冲过来了大群的龙族部队,本来他有主场优势,只要稳守待援以逸待劳很快可以取得兵力优势,可是偏偏他是那种乱冲乱打的莽撞之士,很快不但丢失了河对岸的阵地还被人逼到了家门口。同时我的中原派遣军在山地作战中损失巨大基本陷入了消耗战中,受伤的部队撤不下来,后方的援军迟迟不能赶到,战又战不得,守又守不住,退也退不成,后方部队的补充还低不上前方的消耗,而敌方的部队则不断因为消灭我军战士而得到升级,这样打下去必败无疑了。我这时候果断地决定在中原采取战略防御,主动放弃无法防御的村庄,集中全力从正面的森林向北进攻。战斗在森林边的河岸上展开,这里有几个连环的村庄,可以说是我消敌长的关键所在,也就是所谓兵家必争之地,我决定派我的丛林战士对这里的几个矮人弓箭手发起冲锋,这时候那些在中原战场屠杀了我很多战士的狮鹫部队长着他们惊人的机动里赶来增援了,我进攻部队受到了不小的损失,因为这些狮鹫部队已经升级为二级了,在攻击力上有着巨大的优势,我决定不惜一切代价要消灭这些狮鹫部队,于是我调集我仅存的丛林战士对这群敌人进行了战略包围,因为我的源源不断地后援部队在不停地赶来,只要能够拖住敌人就可以歼灭他们,对方也看到了其中的威胁,拼命地派部队来解围,我那些深入敌后负责阻击的战士腹背受敌死伤惨重,最后依靠一个侦查骑兵的惊人的机动性成功地在付出巨大代价的情况下拖住了敌人的升级后的精锐的狮鹫部队,同时这场局部争夺战也演变成为一个巨大的战役,因为双方不断投入重兵,杀的是天昏地暗,中原战场则变得静悄悄的,我在这一战役中取得了较大的战果,因为第一消灭了敌人精锐的机动部队很多的二级狮鹫部队,第二,这里好似成为一个磨盘,敌人的增援部队不停地投入,不停地被我阻援的部队消耗,而此消彼长的是我有三个丛林战士升级为了丛林英雄,那个光荣的侦察骑兵还意外地升级为了白马骑士,可以说基本上挽回了初期的一些失利。可是,就在同时,对方凭借占据中原的有利态势,派遣大量的爱人战士从中原的平原经过绵绵的山脉向森林边上的河边战场增援过来了,为了挡住这股敌人我被迫派遣少量的战士在山地和爱人交锋,要知道爱人可是山地作战的专家,同时敌人数量占优,我的一个新升级的英雄及其所属的战士大部分战死了。可是,这样的损失也为我赢得了歼灭河边敌人主力的时间,总的来说,我方损失较大,但是占据主动,敌人虽然有部分收益但是失去的主动进攻的时机,应该还是一个势均力敌的态势。


十二月七日 天有一点点冷,不过出太阳了

昨天听同事的论文答辩预演,今天是正式的,很不容易啊。我现在知道做这种理论研究实在是太困难了,我经常没有耐心读简单操作手册就不用说论文了,Dr.G告诉我我们做的大部分都是别人做过的,的确我读得很多paper都是十年以前的,为什么不是呢?很混乱,我也不知道怎么办,有一个算法甚至于xbox都已经做到硬件里啦,我是不是应该多读paper呢?碰到论文里的偏微分方程我的脑子就停止了,curvature等于零的曲线是什么呢?听别人的论文答辩的确像视听天书。这两天开始折腾remote-displayer的之类的软件,我连名字也记不住,还是不明白要怎样用,打印了一百多页的手册然后看了一分钟就人在一边了,这就是concordia学生最典型的特征,因为我们很怕自己的打印quota用不完所以就为了打印而打印。完全hopeless。


十二月八日 天有点冷,不过出太阳了

整天看凤凰卫视,人都快变傻了,当然本来就差不多是这样吧。我这么说的原因是因为我看到还有很多人比我更傻,看看台湾的所谓民主政治就是这样的傻,什么民主?very cheap,大概台南的阿公阿妈早就给出了民主的价格,一千块台币而已,相当于加拿大穷人区chinatown吃顿饭的价钱,所以你可以知道在做官可以有很大回报率,而人民群众很穷的地方,民主只不过是一场闹剧。在加拿大要花钱买票?太贵,而且又投资的意义吗?或者向谁去买?老百姓知道自己纳的税只是交给一个看门狗管理,谁还关心政治?

以前看到一句比较尖刻的话,大意是大多数男人根本谈不上有什么事业,那只不过是在家庭主妇面前摆谱的面子话,所谓的事业就是职业,也许大多数人听了心里都不是滋味,可是这基本上是大实话,说得难听而已。可是如果连职业都没有怎么办?哈哈,这样也许就可以说你有事业了,或者说失业了,反正听上去差不多吧。


十二月十日 天有点冷,还没出太阳了

今天要出行了,去看看西半球唯一的社会主义国家,古巴。当然,我想卡斯特洛不久于人世了,再不去恐怕他撒手一去后后继者肯定会改变古巴的颜色,因为美国人几十年来的梦想就是拔掉这个家门口的钉子,所谓卧榻之侧其容他人喘气?

看国内新闻最感到恶心的几件事就是看所谓的体育金牌的“面子工程”。在我看来那都是些劳民伤财的急功近利的长官意志,在媒体上的东亚病夫的意淫,试想十几亿人口连饭都吃不饱谈什么体育强国?每年投入那么多的潜在国际上烧钱都是冷战时代东欧国家在东西方竞争过程中充门面的面子工程,如今也成为所谓麻痹普通老百姓的精神鸦片,这功能和中央电视台每天晚上八点钟的电视连续剧如出一辙,所谓宣传引导的功能无非是让贫民百姓接受现实生活,在痛苦生活中的一针吗啡。

看到台湾的选举其实慢慢地我开始明白为什么民进党仍然有这么多的选民支持,你不能把所有投票给民进党的人都当作脑筋秀斗的阿公阿妈是的老农民,后来我想明白了这种看法很肤浅,为什么?因为你要知道国民党有多么腐败?你又知道目前的国民党里有多少是权贵子弟?所谓连战士台湾最大的地主家庭出身,所谓现在的台北候选人也有一个当年国民党国防部长的老爸,所以这样看来民进党还是要清廉一些,至少出身清白一些,从这里你就知道谢长亭那句话有多么大的感召力,国民党现在是代表着权贵的第二代!

最近我感觉一个人堕落是非常容易的,一个人四体不勤,头脑不清地活着是世界上最容易的事情。这也是我理解为什么崔永元回环抑郁症,因为你保持一个清醒地头脑,一双始终睁开看现实的双眼那是一件多么痛苦的事?另外一件事也堪称我的“重大发现”,一个人什么都不做这是一个最容易的事,但凡做一件事都是不容易的,这也是为什么绝大多数人总是憧憬着党国家领导人这个位置,因为这是除了非洲部落酋长以外最容易做的位置。


十二月十日 天晴,但是古巴是windyday

从蒙特利尔乘坐air transat的航班飞行三个半小时左右来到了古巴的cayo coco,刚到海关的时候感觉有些紧张因为海关人员都是穿着军绿色的制服好似部队一样,而且一个个面无表情仿佛机器人一样,安全检查的时候听说不得携带电话,步话机等等通讯设备又是紧张了一些,知道乘坐酒店巴士的时候才感觉比较亲切因为酒店导游的美国腔的英语很重也比较风趣,说是这里是古巴最好的旅游点,我们的酒带粘液是最好的酒店,司机是旅行社里最好的司机,我有些将信将疑,但是到了酒店之后我觉得她说得最好的酒店可能是真的,这的确是一个非常好的度假酒店,NH Krystal。大堂虽然不大但是很有特色,几乎是纯木结构,一道苍穹给人古朴自然的亲切感。房间都是一幢幢三层楼的别墅式建筑,房间内的设备很不错,甚至有位残疾人准备的坐便器,一张藤制的小圆桌给人一种写意的感觉。时间是晚上十点多了有一点点饿,就去找饭店,找到一个buffet餐厅,服务员很热情,一个叫做Juan的侍者一见面就和我拍肩膀套磁。因为我买的旅行套餐所有的吃住都包了,所以想吃什么就吃什么,当然这是废话,本来buffet就是你想吃什么就吃什么,当然你还可点一些红酒。吃完了我听到远处传来音乐声就循着声音找去,原来是一个音乐quiz,主持人是一个男扮女装的小丑,他的主持风趣而不粗俗,问题难易搭配,有很多简单的问题是留给儿童的。每答对一个问题可以获得若干小球,最后根据得到的小球的个数来发奖,奖品是一瓶酒。晚会结束我沿着海边的栈道散步,这种木质栈道建在浅浅的海滩上,蜿蜒悠长通向黑漆漆的大海给人无尽的遐想。栈道两旁排列着一抹一样的很多高脚小木屋,房子的基础是建在浅浅的海滩上的水泥墩,故居都是雷同的一屋两户型,一开始我还以为是什么海边游戏的经营场所,后来看到一个个窗户都挂着厚厚的窗帘才明白这也是酒店的客房,因为每个门梁上都有号码的,在栈道的连接处还设有保安值班的小亭子。电视节目大部分是西班牙语,居然有西班牙语版的CNN。第一个晚上由于红酒的催眠作用很快就进入梦想了。


十二月十一日 一睁眼第一件事就是看天气,透过落地窗帘看到风中摇摆的棕榈树

还是一个windy day,看来那个导游是信口开河地说今天会有好天气,当然这也是游客想听到的。看来我把我的NIKE跑鞋带来是对的,总算可以户外jogging了,顺便带上照相机拍下我的双眼看到的。现在白天的时候终于能够比较清晰地看看住的地方了,据说这就是殖民时代的建筑风格,三层小楼很多的房间可以给客人和佣人住,这纯粹是我的想像。气温不高也不低大约25,26度,正好穿一件T恤真舒服。沿着幽静的小路跑步,看着两旁的树丛,一幢幢的小楼不是地从花丛和棕榈树的掩蔽中跃出,沿着海边的栈道跑步更是一种享受,小木屋与小木屋之间的海滩上还长着很多的水生树木正好掩蔽着给人不少的privacy。这里的沙滩实在是太漂亮了,很长很白很平,不像厦门早已退化到没有了,那都是当年挖沙建楼的后果,沿着沙滩跑步那种感觉更加的舒畅,天风海涛仿佛人间仙境。沙滩旁都是大片的灌木与棕榈树来防风同时也把海边的小别墅楼都遮掩住了给人更多的想象。在沙滩上跑了很长的路穿过灌木丛来到了有一片的酒店小楼才明白这里并不是一家酒店,所有的酒店都是在一大片沙滩上,彼此连在一起,其间有蜿蜒在树丛中的小径相连,各家酒店的建筑风格都不太相同,如此看来并没有多少差异,甚至我觉得这些酒店风格更加的吸引人,看来导游确实是夸大其词了。看了看纪念品的价格,实在是不便宜,大约和加拿大的价格一样了,当地的比索价值比美元面值都要大,所以我想著名的哈瓦那雪茄肯定不便宜。我住在一楼朝向游泳池干脆打开落地窗享受海风的同时写我的见闻。

跑步的时候还看到了类似于厦门的白鹭的水鸟,腿长嘴长,只是全身灰褐色,肯定不是火鸡。椰子都金黄了偶然可以看到一两个掉在草地上的,穿过酒店跑到外面的公路上,道路两旁到处是牛粪,是不是有很多人喜欢bullshit啊?想起来做晚上在餐厅里和服务员聊天的时候提到卡斯特罗似乎他们都不倒以为然,甚至还有一个人开玩笑地说卡斯特罗是他爸爸,看来古巴并不是像我们想象的那样的社会主义。看电视里的节目除了语言不通,MTV里的性感女郎并不比加拿大少,或许南美风情的桑巴舞本来如此,我个人认为说西班牙语的女郎都更加的火辣风情,和什么主义没有关系,大凡宗教都是首先从控制性欲入手,共产主义作为一大宗教也无非如此,就比如当年的太平天国洪秀全对人民实行禁欲主义,对己则是荒淫无度到极点,因为禁欲主义本是为了维护他的统治,纵欲极乐则是体现了他的本性,和什么宗教什么主义毫无关系。社会主义本是一个空泛的理想,不同社会的投机分子竞相对他做出自己的解释目的和中世纪的政教合一的封建统治本质上并无两样,无非是给教民描绘一幅美好的前途然后加以利用达到个人穷奢极欲的目的,古巴中国北朝鲜都是如此。

中午吃完自助餐坐在靠窗的座位静静地想用我的冰牛奶,看着窗外来来去去的游客,那种悠闲才让我真正感觉到了什么是度假的感觉。回到房间发现原来电视节目挺多的,CNN也有英文节目说明并没有新闻封锁,至少在这个死刑酒店里没有,当然也没有必要。很快就睡着了。一觉醒来想去游泳就穿上游泳裤来到海滩,风浪还是很大,比厦门的大风的日子还要大一些,所幸这里的风浪岁大但是海滩很平你不会被卷到外海区,可能另一个原因是这里没有落潮吧,不像厦门等地方是半日潮,每天都有一涨一落。另一个有意思的现象是这里仿佛空气中盐分很重,我摸了摸铝制的护栏,总是有一种湿乎乎的仿佛是腐蚀的溶液,这也许是为什么房子大多用木材建造的原因吧。在风浪中挣扎了快一个小时,我决定回到游泳池,池边的人都在晒着看不见的太阳,只有几个小孩子在玩耍,游泳池的尽头是一个水上酒吧,凳子都在水里,你可以边游泳边泡吧,点一杯饮料真是写意。


十二月十二日 一睁眼第一件事就是看天气,透过落地窗帘看到阳光

有些 细节反倒要反过来提起来,第一个晚上checkin的时候总台小姐在每个人的手腕上套上一个软圈,一开始我还怀疑这是古巴政府的高科技技术防止外国游客刺探军情的追踪器呢,当我问这是什么东西的时候,总台小姐面带羞涩地解释说这是识别游客的标志,或者我这个愚蠢的问题embarrass她了?或者我自己?另一个愚蠢的问题就是房间内的safetybox,我虽然在国内用过但是在这里我看不到任何说明不知道如何使用,后来问了总台之后才觉得有时候涉及太人性化了反而让我难以使用,因为在我心里始终认为要启动一个系统需要输入某个特定组合,因为国内的safetybox都是要额外charge的,酒店会设置启动密码,也许目的不同吧,这里的目的是减少麻烦,一旦出现什么东西不见了酒店的名声的损害更大,trouble更多,而国内则是霸王开酒店想尽办法收钱。简单说来就是随便选四个数字再按*,可是世界上的巧事就是多,我自己摸索的时候恰巧选择的一个数字组合总是无效,保险柜总是关而复开,然我很费解,后来听了总台介绍在选择别的任何数字都可以,让我吃惊不小,难道说我的favourite的密码和保险柜的特别组合号码正好重合?这种概率是多少呢?万分之一而已,也就是我们常说的不怕一万就怕万一的万一。早上起床就绕着酒店跑了一大圈,回来看了一部老电影,讲的是六十年代的英国中学教育,为什么我知道是六十年代?因为电影的主题曲和插曲都是六十年代beatles的风格,男主角是一个黑人青年,也就是In the Heat of Night里的年轻警官,fast,intelligent,characteristic的一个桀骜不驯的黑人青年,挑战种族歧视,努力改变人们对于黑人的看法。

另一件让人高兴的事就是在这里吃饭不要钱,大大小的饭店酒吧随处都有,你天天时时可以去几乎所有的餐厅吃吃喝喝,当然有几个正规的有service的饭店你必须预订,也就是比较正式的餐厅,如意大利餐,海鲜餐厅,牛排馆,古巴餐厅,其他的各式各样buffet只要有空位你就去吃,任何酒吧只要你喝得下,你就去喝。可惜我孤身一人也没就没有兴趣去泡酒吧,几乎这么大的一个酒店就我一个东方面孔,这个时间来这里的中国人,来这个四星半酒店的就我一个。哈哈。去吃饭吧。在这里担心的是吃不下,喝不下。这里也有网球场,健身房还可以打乒乓球,方正你想干什么都行吧。当然最容易的就是躺在沙滩椅上晒太阳。


十二月十三日 一睁眼第一件事就是看天气,透过落地窗帘看到阳光也看到摇曳的棕榈

早上起来看电视里介绍联合国秘书长安南在任的事迹,实在是举步维艰,这个世界实在是不平静,从来没有一位秘书长经历过像他这么多的战争和危机,美国看样子是已经开始陷入又一场越南战争,就算占领伊拉克能够获得宝贵的石油资源,可是巨额的军费开始是否能够支撑呢?我没有数字不敢说是否,但是这样的风险十分的大。去跑步吧。

跑完步又去海里面游泳,海浪比较小,沙滩非常的好,很平,很白,很细。晒了一会太阳,回来洗澡再去健身房,感觉现在身上除了赘肉什么都没了,哈哈,惨不忍睹,当然我记忆中几乎没有多少时间是全身有肌肉,连幻象都几乎没有。想想看,大多数女人如果愿意可以去隆胸,男人要长肌肉却实在是不容易,需要长时间地艰苦锻炼,这之间的难易程度好大呀。回来看电视广告又再一次应证了我以前的一个猜想,在北美制药公司的一个很大收入是来自于各种各样的止疼药,这个断言很惊人吧?知道为什么会看到铺天盖地的止疼药的广告?因为这种药不但很少有什么法律纠纷,因为治不死人,当然也不解决什么问题,最大的好处是长期使用会上瘾,产生依赖性,这才是制药公司的生财之道。这两天天天都是吃的撑得受不了,真是应证了那句老话,好像吃方不要钱一样,成天除了吃饭还能干什么呢?运动,晒太阳,看电视,早上突然有一个新奇的想法,这种生活好像动物园里的动物一样,就如同《matrix》里面所说的人类虚拟世界的第一代程序,一切太美好了,结果那些成为电池的人类都觉醒过来了,因为人类认为现实生活应该是悲惨的,一旦发现过于完美就会像在美梦中人们的潜意识会提醒自己这是假的一样。美梦很快就会醒过来的,因为今天已经是星期三了。

下午醒来去游泳池去游泳前预订了明天去镇上一日游。古巴的钱真贵啊!一日游要75比索,换算成加币差不多要将近一百元了,同样这里卖的纪念品等等的价钱都贵得惊人可能比加拿大街头的价格还贵,我记得飞机上的落地签证上有一些住解说的事来古巴的外国游客每天必须花费50比索以上,这样看来古巴的外汇主要来源可能都是这些外国游客吧。看到小孩子喝得好像奶昔一样的饮料很想尝一下,可是又不知道是什么职能假装说给小孩子order的拿回房间一喝原来是椰奶,虽然持buffet的时候到处都有冰淇淋可是我已经一年多没有吃过了,今天终于尝了一下,这种东西对于健康毫无好处也没有什么营养可是心底里还是很馋得。晚上去吃预订的意大利餐,拿到菜单不知道要点什么,只好pizza,pasta都点,还要了一份厨师推荐的东西,据说是牛肉米饭,拿到以后才知道以我现在的饭凉吃完他们真是困难,我吃啊吃啊,拼命增加唾液分泌量希望能够加快消化过程,可是结果pizza是吃完了,味道觉得还不如学校旁边的好,pasta实在是吃不完剩了一点点,正当我暗自庆幸的时候那个不知名的什么牛肉米饭上来了,真好似last straw让我的信心完全崩溃了,这中间服务生非常地殷勤不停地为我添white wine,我刚喝完一点又添一点,最后我实在是感觉不行了,吃也吃不下,喝也喝不完,只好拿着酒杯看饭店的拉丁演唱小组唱歌。吃完了感觉有点轻飘飘破例来到lobby bar坐在吧台上要了一杯冰水,像我这样一个东方面孔又是孤身一人实在是有一点点不合常理,因为看看来度假的几乎没有一个人的,直到现在我在饭店吃饭游泳也没有看到超过一个东方面孔,饭桌上总要问我几个人,我经常不小心把I am alone说成I am single真是有点点那个。今天也总算知道晚上旁边特别吵闹的原因了,原来是传说中的Disco舞厅就在离我不远的地方。明天去Moron镇记得要戴上护照啊,真是难以置信,这个镇的名字绝不是我起的,相信讲西班牙语的人不大理会moron的意思吧。


十二月十四日 今天的天气据说是这个星期最好的天气了

早上要参加一日游,旅行车行驶在一天海堤上,这是专门用来连接这个旅游胜地小岛和大陆的通道,在长达26公里的尽头是一个检查站,所有进入的古巴人必须要有专门的证明或者是在这里工作的人员。首先我们来到一个制糖厂,可惜今年榨季推迟了我们看不到它实际运作了,难以置信的是这个工厂居然有八百工人,一年的产量也就是六万吨粗糖而已,我不知道粗糖的价格,可是精糖业不值钱,就可以想象为什么工厂的机器设备这么陈旧。古巴的街头很少有汽车,而且非常的陈旧,很多古董车都可以在这里找到。镇上的住宅非常的破旧,比福建的乡下还要差很多,商店很少,商品也不多,据说这里一般人的工资只有大约十美元一个月,但是要正常地生活起码要十倍的钱,所以几乎人人都要赚外快,这里的一切都让我想起了二十几年前的中国,那个时候也是这样外国人必须消费外汇券,就像这里的所谓convertable比索,只不过这里的外汇券和本国币的比率多大二十几倍,所以你可以想象当外国游客要求用超过二十几倍的价格购买当地的物品是多么大的不合理了,所以我实在是难以下决心购买那些手工艺品。小镇上可以看得景观实在是没有,当我们坐在马车上,仅仅会这几个英文字的马车夫不停地告诉我们,这里是邮局,这里是电影院,警察局,学校。。。仿佛当地人担心外国游客误解他们还没有进化,导游的介绍里面也有不少这样的情调,当然这也许也是我自己的解读,比如他总是反复强调那个近乎原始的制糖厂是环保的,那个镇中心用从古巴革命时期从富人家里收缴来的股东组成的博物馆是多元文化的代表,当然我可以明显地看到里面的古董代表了西班牙殖民时期的殖民者又多么的富有,你可以看到他们很多外国装饰品,比如日本中国的奢侈品,这在当时应该是非常昂贵的,但是这能代表多元文化的氛围吗?不过,我觉得我越来越习惯与戴着有色眼镜看问题了,比如古巴也有很好的一面,所有的学校一律免费,还提供一支铅笔,可是看看当地的居民住房你就知道这里有多么贫困,可是古巴几乎有着得天独厚的自然条件,气候适宜,土地肥沃,到处都是绿荫,完全没有贫困的理由,除了美国的封锁那就是政治上的制度了。


十二月十六日 今天的天气据说是这个星期最好的天气了

昨天在我的记忆里几乎是空白,我没有去跑步没有游泳,一整天都在wesnoth里战斗,晚上又去吃了一顿所谓海鲜,地点居然和前天的古巴餐厅在一起因为新的餐厅还在建造中,这三天我几乎天天就惦记着那一顿晚餐,一个人每天的生活就是等待晚饭,这让我想起了猪圈里的猪就是这样。今天我决定不去游泳而是去gym,这个简单的gym也比concordia的好,这真是一种凄凉。在gym里的一个工作人员非常主动地和我聊天,从他的介绍中我了解了一些原本就可以猜得到的“真相”,这里的工作人员的一个月工资大约只有18可转换比索折合美元大约二十左右,当然古巴的计划经济体制每个人需要的粮食房租等等在配额内是很便宜的,勉强生活应该是没有问题吧。这里不能有电脑,internet,等等奢侈品,你可以在黑市上买但那是超过一般人的购买力的。这个叫做Alfredo的家伙对于中国非常的熟悉,一开始就在问我是否带着我的笔记本,是否来自门特里尔,是否学计算机,当然他没有想到的是我都这把年纪了还没有结婚还在读书,当然他对于我的年龄的估计也是非常的准,是受过相当教育对象有体制非常不满的所谓知识分子,但是他还是很小心地转换敏感话题,而我是非常的笨拙的阐述我的不合时宜的议论,很明显他对于我的空谈不感兴趣。的确我就算在中国也是一个不合时宜的人,在古巴也一样的不合时宜,我在想这就是我这个人在中国无法生存下去的原因之一吧?

昨天晚上喝了两杯的白葡萄酒,回来的路上脚步虚浮,听着蝉鸣蛙叫心里有种别样的感觉。孤独在大多数时候你可以说是享受,可是总有很多时候你实际上是在忍受。我想起了很多过去国内的人和事,谈不上好与坏因为他们对于我的遥远不亚于古巴和加拿大的差距,很多回忆与思绪如同王朔小说里主人公内心独白一般,仿佛有千军万马从你身旁驶过可是转眼间你却两手空空,这也许就是人到中年的无奈?这种无言的境遇最贴切的形容无过于那句天凉好个秋。不管是否愿意承认这就是一个你无法避免的事实,很多时候人都是无奈地活着,但是不管你有多么的不幸,只要你睁眼看看世界你就知道,借用一起旅行的一位白人来太太的话来说,就是这次旅行It makes us realize how lucky we are!

晚上吃steak,看到隔壁一桌上大概是两个家庭的大人和孩子,其中一个小男孩不知什么原因打了隔壁的小女孩一下,小女孩当然也还击了一下,当时坐在对面的母亲非常严肃,严厉的走到对面拉着小男孩来到墙角严肃地给他讲道理然后让小男孩蹲在地上反省,然后母亲回到餐桌在对对面的小女孩讲道理,过了很久母亲才让小女孩去墙角和小男孩讲和,并且一点都不迁就小男孩的敷衍,又反复地在餐桌下和他讲道理。看到这一幕我非常地感动,我也再次明白我为什么对儿童深恶痛绝,尤其是中国的孩子,因为中国的年轻父母99.99%都是不及格的,只要看看中国的小孩子的恶行就知道按照中国古人的说法就是都是父母之过,推及源头这一代父母之所以无行其根源是他们的父母的无教养,或者他们父母的父母的无教养。培养一个儿童到成人是一个比驯化黑猩猩复杂几百倍的工程,绝大多数的中国父母都没有具备起码的资格来做一个驯化师,这是整个误国误民的错误。


十二月十七日 今天的天气应该是不热也不冷,蒙特利尔就不同了

今天要回家了,早上看CNN感觉美国的媒体是一个严肃的媒体因为他们的观众是严肃的观众,至少CNN的观众是如此,他们的编辑导播时时刻刻在追踪预测时代的发展与走向,其中有很严肃很有深度的辩论,我说有深度是因为经常我听不太懂,哈哈。。。我个人对于音乐的好坏的标准也是多快的速度可以让我入睡。玩笑归玩笑,有一点很有意思,就是一个嘉宾的观点,就是当布什总统责备媒体对于伊拉克暴力连篇累牍的报道误导了美国人民对于形势的判断时候指出这种指责已经是一种所谓的陈词滥调,当然我们有一种所谓的problem并不是problem而是对于problem的关注成为了problem,可使绝大多数的媒体对于伊拉克现实的报道是惊人的准确。我想这是对的,想想看美国要在这样一个小国家投入那么巨大的财力人力物力,这难道不是第二个越南战争吗?在越战并不是什么正式的战争,甚至美军也没有打过什么类似二战的硬仗,可是美国却总是处在一种骑虎难下欲罢不能的泥沼里,不论美军使用多少绝招愿意付出多大代价最终的结果还是撤退,究竟是长痛不如短痛的撤退还是再坚持一下就可以爬上胜利的巅峰?如今的伊拉克战争在这一点上不是一样吗?昨晚CNN第一个揭幕了时代杂志的年度人物的谜底,这真是让所有的预测都始料不及的结果,不是金正日,不是萨达姆,不是拉姆斯菲尔德,也不是胡锦涛,而是你自己,有意思的使者一起的时代杂志的封面是一面镜子能够让你一眼就看到今年的人物是谁?为什么是你呢?想想看今年的youtube的收购就是反映了一种所谓web2.0的趋势,媒体不再是单向的灌输,internet的力量在逐步显现,观众慢慢地成为编辑,看看中国的所谓超女选秀,观众变成了裁判,看看现在的网络商业,大公司的垄断慢慢被打破,而这股力量就是消费者要自己作主,信息的畅通导致很多传统商业模式在迅速的没落,在加拿大可能购买机票,外出旅行已经越来越成为一种网络DIY模式了,难道这一切不是在说明社会的消费个体正在成为当今商业社会的主宰?不论这种潮流在每个国家的发展有多么的不平衡,可是只要你蔑视这种潮流,你注定如同那些漠视全球化而被全球化的大潮所淹没的保守主义者。世界潮流浩浩荡荡,顺之者昌,逆之者亡,卡斯特罗的去世已经是以天来计了,他的继任者还要抗逆世界潮流多久?金正日呢?难道萨达姆的今天就是他们的明天?可是美国在伊拉克的失败是否会延长这个结局的到来呢?


十二月十八日 昨晚上到达蒙特利尔的时候气温居然有5度,飞机上的魁北瓜都惊呼了

mpi的c++编译器叫做mpiCC,当然如果你只用mpicc他好像会根据文件名的后缀名来决定编译器。今天总算可以用remote-graphic-client端了,不过我只能连接一个client端,第二个就没有登陆界面了,我想我以前遇到这样的情况很可能是当时服务器上的没有关闭的server成为了zombie。那个client端需要运行/encs/bin/rgreceiver.sh脚本,我还没有很清楚学校的文件服务器是怎么工作的,一个是nfs,一个是sfs两个好像不搭界的。要正确的关闭remote-graphic的服务器端,要运行squeue来查看pid,然后用scancel pid来关闭,但是有时候不知道什么原因还是有些变成了zombie,就必须手动查看pid来kill了。要运行mpi,需要先module load mpi,今天找到了一个运行的办法但是有安全性的限制不成功,就是类似于wmpi一样写一个文件名列表文件appfile,然后mpirun -f appfile,这个文件里就是-h hostname filename arglist等等,但是n81等等要我登陆密码,然后又deny了permission,不明白怎么办。plu开始了中国星际第一人的争霸赛。准备吃饭了。


十二月十九日 早晨开始下雪了,后来又停了

我应该下定决心取出所有的macro,不然迟早我自己会被这些code害死的!


十二月二十一日 早晨破天荒去跑步,气温居然是2度,真不可思议

我悟出了一个简单的道理,据说很多动物对于静止的物体不能识别,只能发现易懂的物体,这个现象其实很简单,对于一个没有任何物体识别库的智能系统来说,他的视觉系统当然不能识别任何物体,但是它可以对于连续变化的图像进行比较于是就可以识别移动的物体,这时候需要的记忆体是短期记忆,所以,一个致力发展处于幼稚期的系统当然只能识别移动物体了。这一点可以看出生物的进化和智能的进化是一致的,所以我们完全可以假设恐龙是这样的,这也是我所听来的,是符合道理的。

去古巴的时候发现骄傲的古巴人民拒收美元,现在发现伊朗人民也开始抵制美元了,如果全世界人民都不用美元美国肯定就变成了前苏联了。当然这是不可能的。天天看《凤凰资讯》感觉耳目一新,这才是真正的媒体,这才是社会的精英应该做的,精辟的点评,一针见血的论点,高瞻远瞩的眼光不但透视事件还看到新闻的核心,这就是精彩的头脑的给你的思想的洗礼。哈哈我正在看他们的广告就把他们自己宣传自己的话写上去,但是这些并非自我吹嘘,我觉得名至实归。也许有一天中国大陆的独立媒体也可以这样地引导社会的思想,如果这一天到来了中国就有希望了。


十二月二十二日 好像比昨天冷了一点点

凤凰资讯的自身争论评论员阮次山真是言语犀利观点深入,听他那抽丝剥茧似的分析实在是一种享受,这才使资讯节目啊!我从小自从幼儿园就开始阅读《参考消息》也算是资深的国际时事政治观察员了,可是和他老人家比起来真是自叹不如。


十二月二十三日 好像比昨天冷了一点点

程序写不下去了,很多时候直觉不再管用,比如“comparison”这个关系“不”是一个“transitive”的关系,i.e. (A and B) is in; and (B and C) is also in; Then (A and C) may NOT be in. 这个好像没有什么,问题是对于我来说我还需要一个状态来代表每个元素,比如这里面ABC究竟是什么状态呢?都是在comparison对吗?这是正确的答案,而我一开始认为Eliminated比Comparison优先级大,比如(A and B) are in comparison; A<C then A is Eliminated; but A is STILL in Comparison;这就是我后来认识到的,就是说只要给元素和任何一个其它元素处于comparison的状态,他就只能处在comparison状态。Dr.M说这个简单的算法已经被集成在了Xbox里面了,什么时候看一看去吧。别忘了啊,现在总是忘记,或者是懒得做事。

看来世界上的职业里面夸夸其谈是一个比较容易的职业,比如整天没事就对这世界政治关系发表议论。我个人认为朝核刘方会谈是注定会失败的,因为现在看来金正日的决策时有逻辑的,这完全是布什政府自己发出了错误的讯息所致,比如他同意和印度签署核能合作协议,这说明什么?只要拥有了核武器美国就对你另眼看待,这也就是为什么朝鲜反反复复强调自己是有核国家应当受到区别对待的原因,想想看伊朗呢?制裁也许只是限制某些商业行为,对于真正想搞原子弹的国家有多大作用呢?摆明了不过是美国受不了中国和俄罗斯单独和伊朗的石油合作开发,中俄对此有什么办法呢?敢怒不敢言而已。从这点来看,我认为金正日的决定是唯一正确的决定,正如当年老毛的决定,就算是砸锅卖铁也要把原子弹造出来,如果像戈尔巴乔夫或者萨达姆一样自动解除武装,归顺西方的结果就是阶下囚。帝国主义都是纸老虎!

这是一场2v2的战斗,地图是Charge。如同其名,在这片广柔的平原丘陵地带很多玩家都可以采用闪击战的战术。我的同伴是一个在餐馆工作过的小伙子,他不停地和对手谈论各种各样的食物调料,我没有兴趣听就边看《凤凰资讯》便作战,这种回合制的网上战役有时候是很枯燥的,首先每一个回合可能都很长,网络与服务器又经常不稳定,更不稳定的是你的对手,很多人打到一半就逃跑,让你没辙。因为起始资金是300相当的多,我招募了一些侦查骑兵,一则开视野,二则我坚持认为战争是社会资源与智慧运气的对决,其中资源大多数时候是决定性的,因此我坚决地在初期抢占村庄。我的另一个观点是“爆”兵,注意这个“爆”字非常的形象,它说明了一点就是你的部队需要在和敌人对决的时候处于兵力优势,这样子并不需要你在所有的时间里都拥有优势兵力,这在及时战略里更加的明显,所以星际里面很多高手是先造大量兵营然后在极短时间内极限爆兵,突然杀出一大股部队消灭对方。在回合制里面也是如此,每个单位都有消耗,如果你过早地招募部队你可能会白白消耗很多资源,因为资源变负数与零资源时等同的,于是突然爆兵是最节省资源的方法。同时对于一般情况来说敌人的第一波部队之后往往会有一个间隔期,这一方面是因为他们分散部署,另一方面是后续资源消耗还没有及时补充招募不了同等数量的部队,于是我方以逸待劳防守反击。

当然这种设想也有很大的危险性,比如这次战斗中我在初期部队太少,仅仅靠不擅长防守的侦察骑兵死守村庄,并且抽不出兵力互相救援导致一个个被敌人击破;同时另一个更糟糕的事情是我没有办法配合同伴导致敌人两方夹击他的闪电战术,结果我只能眼睁睁地看着他最后功败垂成。当时他告诉我说它是第一次使用龙族,这个种族机动性很好不受地形限制,但是防御上也就没有优势了,同时比较昂贵属于攻强防弱的种族,他在短期内极限爆兵连同主力英雄一直推进到敌人的城门下,这时候我的正面的敌人派出了他的高机动骑兵去援救他的同伴,而那个死守的敌人也利用城门前的护城河依靠人族优秀的人鱼部队非常有效地阻击了龙族的冲击,我的盟友在耗费了几乎所有的精锐部队后终于攻击到了对手的主力英雄,他的两个完整的龙族战士配合主力英雄把敌方的主力英雄杀到只剩下几滴血了,仿佛1941年底进攻莫斯科的德军装甲部队已经可以看到克里姆林宫的金顶一样接近胜利,但是这时候已经是强弩之末势不能穿鲁缟,同时敌人的盟友的骑兵援兵大量地赶到不计代价地冲杀,我的同伴眼看深陷重围也没有可能再狙杀敌方的主力英雄,只好含恨作自杀式地冲锋连同他的随身龙族护卫全部战死在敌人的城楼下。这场惊心动魄的闪击战的失败我应当负有一定的责任,因为我的经济型打法导致初期没有给我的对手以足够的压力,导致它可以把大量的骑兵回援他的盟友,同时对于闪击战我没有派出任何的支援部队,另外就是我的盟友最后一击的运气太差。尽管他在闪击失败之后还有逃生的可能,可是这时候一方面它已经失去了胜利的信心,另一方面它的突击部队又一次地运气不佳没有打开缺口导致他彻底被陷重围,仿佛莫斯科会战时候的救援德军只差几公里就可以会合,却最后被苏联红军紧紧地封住了口袋。此后他的少数残兵败将在护城河附近的湖上打起了游击战,可是这些散兵游勇早已斗志丧尽几次不听我的指挥只是坐以待毙被缓过元气的敌人悉数剿灭了。不过虽然我的盟友失败了,我却在同时依靠大量的精灵族弓箭手强攻对面的地方部队,一个回合内最多歼灭地方六个单位,当时我的盟友在临死前向我统计他的战报说歼敌10个,而我告诉他我的战绩是24个!当两个敌人还沉浸在暂时的胜利庆祝时候,我的精灵族部队长驱直入以排山倒海之势压了过去,我对面的保皇党人在派出大量主力骑兵去援救盟友之后早已兵力空虚了,在被我全歼他的前线兵团之后已经无力防守了,竟然用明码发报向他的盟友求援可见有多么惊慌失措。而此时我的主力英雄在用尽所有金子招募部队后带着部分伤员向我的前盟友的废弃的城堡前进,因为我现在要接收他所有的废弃的村庄并且利用它的资源就地招募部队,而这也是敌方的战略意图,只不过我离得近有地利优势,同时两个敌人都还在喘息中无力排除有力部队来抢夺资源,果然我只发现了一个敌人的受重伤的骑兵在占领村庄,他那里是我的主力英雄和新招募的弓箭手的对手,三下五除二就干掉了。这时候我的前线的部队获得了大量的升级机会,我的部队有两个隐身弓箭手,一个神射手,还有一个精灵族英雄战士,而敌方此时只能各自依托城堡前的有利地形负隅顽抗,完全无法互相救援,而我的主力分为两个进攻集团分别强攻敌方的桥头堡和沼泽地的防御阵地,在付出极小代价的情况下敌方阵地崩溃了,与此同时两个敌人的信心也都垮了,全部退出了战斗,我实在心有不甘只得用AI代替打完了这一场战斗。

当然《凤凰资讯》也是会做一些广告,比如看到一个所谓的“新世界纺织服装城”的地产项目落户在无锡,采访那个土老貌和他那个老婆完全是赤裸裸的骗人的玩意,这简直就是摆明了骗钱的,你听听他说什么狗皮话,他说只要在我们这个服装城里采购的任何东西只要你发现在世界上其他地方找到便宜的价格了,我赔你两倍,这简直片小孩子的伎俩,除了大陆受了回扣的银行信贷科长谁会贷款给他?你可以保证你的商场建筑质量,你卖给了商户店面你还能管到人家的经营?这只有TMD政府领导才相信。还有他说的话简直就是胡说八道,说什么你来采购受了损失我替你报销差旅费,你坐飞机来的我给你报飞机票,你坐火箭来的我给你火箭票,你坐宇宙飞船的我给你飞船票。不要以为我在胡说八道我这可是原话照记下来的!你又听说过这样的混账话吗?我有!是几年前莱蒙特里尔的时候政治魁北克闹独立公投,当地的大公司统统跑到多伦多了,当地商业无比萧条,我的经理去futureshop买摄像机那个推销员简直是疯了看到一个有钱的主就死活要卖给我们,直接就说If you can find a cheaper price, we can beat it.当然现在futureshop也有类似的条款,可是那是第一他们基本上在加拿大处于垄断地位,第二那只局限于个别产品,第三那是因为那时他们自己的商品他们自己定价,大不了损失几个钱买个信誉。可是如今这种地产骗子要在无锡那个小地方搞什么“世界”服装城简直就是那个黄子找银行圈地片贷款!联想起《凤凰资讯》介绍香港索斯比拍卖行里工作人员对中国买家西方人买家那个更有钱的评论,当时这个自身董事说他们在纽约伦敦的同时聊起这个话题说,到底谁更有钱我们不知道,不过我们知道西方的投资家可能只会拿出总资产的5%来买古董,而中国大陆的买家可能会拿出自己资产的50%,甚至100%,200%!哈哈,这个婉转的回答可以说明中国目前的浮靡甚嚣的气氛了吧。比如我本人居然会把自己三个月的TA的收入拿出来去古巴度假,这是很多有房有车有工作的人都不舍得的,看来我和中国的某些“富豪”在这方面是类似的,说的含糊一点,我已经在某种程度上接近富豪的某种特质了。哈哈。bs bc bt.

看《凤凰资讯》的拍卖艺术品的片断才明白为什么富人喜欢这个行当。第一,这个行当赚钱比买房炒股票炒期货还容易,(搞什么实业,商业的那都是长工的活,不在讨论范围。)因为那一类的东西还是挣得一份辛苦钱,时时刻刻都的关心,而且总归你得费心思,而这个艺术品基本上东个大概就可以了,无非就是出的起价钱,熬得过时间,很傻瓜化的;第二这个玩意是露富最快的,想想看西晋富豪斗富的时候还要去对方家里去,还得找一大堆自己的宝贝来炫耀,比如杀两三个漂亮仕女来劝酒,杀一个就少一个多让人心疼啊,(那时我心疼,哈哈)而且每次你只能和一个富豪比富消息传的也不快,人的虚荣心满足得太慢了,可是如果去索斯比拍马行,错了,是拍卖行,那么多富豪来自全世界大家都比一下,多风光,又有品位,咱玩的是艺术,不是布头麻袋片什么的。再者说了别的形式的斗富都会有消耗,就算买一个极品汽车那也是会消耗啊,过几年车子不就没用了,除非是古董车。所以,作为富人要让别人知道咱是真的有钱,那就去索斯比拍卖行,哈哈。。。身份!(你看我每天就捉摸这作为一个富豪应该怎样生活是不是很白吃?可是全世界的小老百姓都喜欢这行当,不信看看中国八点党的电视剧,就知道有多少人在为当皇帝,阿哥,格格的烦恼而烦恼。)作为一个人来说,写程序是最难得,因为只要你有丝毫的头脑不清楚就是错的;写程序也是最容易的,因为你只要老老实实认认真真地区做就行了,什么也不用考虑。我如今发现我原来觉得最容易的事情越来越难了,究竟是我变得聪明了还是笨了?总之,我现在不写程序,只有不停地写这些乱七八糟的东西给自己找借口,forgive me.


十二月二十六日 今天是boxingday结果下起了鹅毛大雪

人生无非是一串串回忆,没有办法留在脑海里就只有记在纸面上,否则人生的长度感觉起来就被缩短了,为了“长寿”就把琐事都记录下了。这两天吃吃喝喝感觉分外的无聊,仿佛热闹过后孤寂的反差特别的大反而更让人感觉到这些活动的不必要。现在我尝试srun -N3 myprog.exe会出现libmpi.so.1找不到的问题,即使我自己在env上加上LD_LIBRARY_PATH =... :/opt/hpmpi/lib/linux_amd64依然不行。还要继续读手册。

今天不行将近三个小时走到了St. Laruance河边去同学家吃饭,当时天下着鹅毛大雪,河水静静地流淌,河面雾气蒙蒙的在远处融合到了天空里仿佛一幅寒江残雪图,河心的一小丛小树灌木影影绰绰仿佛又神仙人家游弋其间给人无限地遐想,难道这就是传说中的蓬莱仙境?向河的上游走去只见河面被河底的礁石刻画出一片片地浪花,仿佛绸缎字上绣出了一丛丛的花边。真是可惜没有带相机。

把去古巴的照片上传到了这里

这是一个四国大战,四个玩家出生在一个环形战场,中央是一个有若干小岛的湖,环形战场的周围是大片的水面。非常快的战争变成了三国演义,原因是其中的那个菜鸟很快被我西边的那个玩家消灭了而他所在的村庄被那个玩家占领后导致它成为最强大的一方,可是这一切因为战争之雾我和我北边的玩家在当时看不到,同时我因为这个玩家在上一场战胜过我,我对此一直耿耿于怀,于是在我的基地两边防御中侧重于向他的进攻,北方万家是一个不死族在对抗我的精灵族时候有相当大的优势,因为那些讨厌的ghost对于刀剑的攻击几乎是免疫的一样,那可恶的山丘鬼在攻击的时候会释放毒素往往交手一个回合就让我的精灵战士丧失战斗力。就在我和北方不死族死拼得时候,西边那个最强大的不死族派出了他的快升级的ghost在中央的湖面上和我的人鱼部队争夺小岛上的那几个村庄,因为我的主力是地面上的精灵战士,所以仅有的两三个人鱼部队根本顶不住西方的不死族的鬼加上吸血蝙蝠的进攻,眼看着湖面上的村庄全部被占领了我的人鱼部队全部阵亡,更可怕的是这些鬼升级为了更加可怕的wrath,这对于精灵族绝对是恶梦一样,我只有招募昂贵而脆弱的法师部队才能对抗他们。我在我的北方前线用三个并排的精灵族战士已妥善地丛林与村庄一字排开组成了第一道防御阵地,在其后部署了同样数量的法师部队和少量的弓箭手,在陆地两侧部署了仅存的两个人鱼部队辅助防御,这几乎是一个难以突破的马奇诺防线,我的北方不死族对手同样用它的骷髅战士,骷髅弓箭手配合鬼和吸血蝙蝠和山丘鬼和我对峙着。终于握在这个方向上的后续部队到达了,我忍不住开始发起进攻,首先用对不死族攻击有特效的法师重逢试图消灭前排的骷髅战士,然后再用我的坚韧的精灵战士占领新阵地防御脆弱的法师等待下一轮的进攻,这样如波浪般的梯次进攻防御在两三个回合后就基本突破了北方的防御,这个时候我看到北方的后院部队已经不再向他的西方防线增兵而是全部向我这个方向杀过来了,同时我的部队因为进攻中的损耗已经没有了当初的锋锐,北方的万家开始抱怨说我和西方的万家同时向他施加压力,并且提醒我说西方已经成为最强大的一方,的确随着我的人鱼部队在中央湖的失利,西方不死族向我发动进攻只是一个时间问题,我想北方玩家解释我为什么不顾一切地向他进攻是因为要为上一场战斗复仇。“复仇?”北方的万家颇感意外地说道,“根据孙子兵法,你绝不应该让情绪控制你得战略!”鉴于我们的老祖宗被这个老外挂在嘴上我决定听从他的劝导和他结成暂时的联盟共同对抗强大的西方,为了表示我的诚意我在我开始的回合里主动撤退所有的部队然后转进增援我的已经被突破的西部防线。西方的部队非常的强大,同时随着它占有大量的村庄,他的优势随着时间变得更大了。因为我可以在北方不设防,因此我可以集中所有的地面部队奔赴西方防御,于是我可以有资源重新招募人鱼部队来夺回中央湖的村庄,哪里是一个此消彼长的地区,同时我想我的北方盟友发出了请求,告诉他为了我们的共同利益在西方万家向我发动进攻的时候尽量在北方给他增加压力,他答应了并且投入了他的有生力量。三国演义似的战斗就是这样,每当胜利的天平向某一个玩家倾斜的时候,另外两个玩家就会结成暂时的同盟来共同对抗他,于是天平有可能又恢复平衡,在wesnoth的战场上生存的唯一保障出了你的实力就是正确的战略。果然,仅仅两个回合形势就发生了变化,我的北方进攻集团边休整边开进,配合原本西方的溃败的残存部队稳定了西方陆定上的防线,我的新增的人鱼部队在付出重大代价之后总算消灭了西方的四个wrath中的一个,这算是一个不小的胜利了,因为这证明面对强大的对手两家联手还是有机会的。

终于搞明白了一点点。系统使用slurm来run的,因为首先必须依靠它来分配运行的资源,以及访问限制等等。比如我现在就要这样来做,第一,load相应的module,这种做法是为了防止不同版本,不同系统之间的冲突,比如module load mpi,这样default的HP-MPI被load了。第二,编译程序,这个和说明文档不太一样,应该是mpicc或者mpiCC,后者是c++版的编译器。第三部署任务,必须要通过srun来做,如果是运行单个人物或者所谓serial appliaction,你可以srun -n# myprog.exe,这里的#代表一个数字,-n是多少个process,如果用-N代表多少个node。如果是运行并行程序,要这样mpirun -srun -N# myprog.exe,可是如果你这样做的话,srun -N# mpirun myprog.exe那么意义就是完全不一样了,恐怕只有我才会这样异想天开地运行#个完全一样的parallel program,这样子完全没有意义。


十二月三十日 昨天晚上散步看到大街上的气温表显示-8度,今天早上下起了鹅毛大雪

萨达姆被处死了,不过我认为没有必要在所谓的穆斯林的“宰牲节”处死他,也许这个决定本身是布什政府内部基督教教义派释放出的信号。我本身对于所谓的穆斯林没有多少好感,比如梵蒂冈的教宗虽然是一个不称职的宗教领袖,但是他所谓的穆斯林是一个暴力的宗教的言论多少是有点道理的,你看看现在这个世界上凡是有暴力恐怖袭击的几乎都有穆斯林的身影,形象地说就是一手握着古兰经,一手握宝剑。在古代,这两样东西是传教的基本工具,如果我不能说服你皈依那就只能从肉体上将你消灭了,所以,我当初和becky讨论那个puzzle的时候说我很高兴可以说服对方,否则。。。哈哈哈。(不过我很担心懂中文的穆斯林读了以上亵渎的言论会向德黑兰的霍梅尼报告,那样他再如对待《撒旦诗篇》的作者一样对付我来一个全球追杀令我可就惨了。但愿穆斯林读古兰经之余不要学汉语了。

现在写程序好像挤牙膏,一天就写几行实在是可笑,我当然知道这主要是算法太复杂心里没有一个明确的图画,每次碰到未预料的问题便很胆怯,不敢继续写下去,因为这种mpi程序的调试实在是困难当初在局域网的windows-mpi还算是容易的,如果到了真正的服务器去脸看都看不到实在是不知道怎么办,所以只能保证正确优先了。下午如果不写程序就写年终总结吧。

Smiley face