Sunday, September 30, 2007

Learning Perl:罗里八嗦的娘娘腔

大约凌晨半点,看完了Learning Perl。唉,真不爽,将近300页的书,讲了点Perl的毛皮,还不停的给Intermediate Perl做广告,整个一本宣传手册。太不hardcore了。另外就是国内的出版社不知道在搞啥,把Learning Perl和Advanced Perl出了,却不出Intermediate Perl-就好像一套书三册,他把1、3册出了,2册却不出,真是不知道咋在想。
感觉饿,就从冰箱里拿了熟肉,也懒得切了,就着喝了几杯老白汾。兴起,边吃边把《水浒》拿出了看,一翻开就是武松打虎,好,比Learning Perl来得痛快多了。当天晚上酣睡。

Saturday, September 29, 2007

一语成谶呐!

知道中国有史以来向外发出的第一封电子邮件是什么内容吗?“Across the Great Wall we can reach every corner in the world.” 翻译过来就是:“要访问世界的每个角落,必须翻过‘长城’牌防火墙”。时间是1987年。20年后回顾这句话,不是一语成谶吗?

Thursday, September 20, 2007

What is made by Krauts? Craps!

我的Braun电动牙刷才用了几个月就死翘翘了。拿到Braun维修站去-嘿,我的牙刷还见到难兄难弟了。承诺更换,今天接到电话去取。维修站从Braun订了两个牙刷,拆开第一个,竟然是坏的!电都充不起!工作人员都郁闷了。幸好另外一个是好的(现在得加个“暂时”修饰了),被我拿走了。我的牙刷的难兄难弟的主人又得等一个星期了。希望现在我手头这枝不要再出问题。奇怪的是生产这些垃圾产品的傻B们还对中国制造频频发难,真够不要脸的。

Saturday, September 15, 2007

史上最小腐败案

最近出了一些比较大的腐败案,比较引人注目,但我对这些事没什么兴趣。我曾经目睹过史上最小腐败案,所以我明白,中国文化的内容没有指导人应当如何使用权力的那一部分,所以任何分配资源的权力都会被用作利己,既便这个权力小到可怜。事情是这样的:在幼儿园上午有加餐,内容是花卷,但是有一个小朋友却吃到糖包子,原因是他的某亲戚是个炊事员(甚至还不是幼儿园的行政人员)。从此事可以看出国人对“以权谋私”的随意态度。

面对现实:我们还是文明的种族吗?

记得中学的历史教课书,满本都写着两个字是“文明”。中华文明最久远,最辉煌,中国是文明礼仪之邦,blah blah,blah blah。这样的教育,使很多不明真相的青少年勿以为我们中华民族还是文明的呐。但是中国的当代史明明记载的是华族的野蛮和残暴,就像历史书喜欢秀古代文明的重大成就,我们也可以秀一下当代文明的重大成就:
  1. 文化大革命。人在这样的时期的所作所为比较准确的反应了其本征文明程度。在文革中闪现出璀璨光芒的包括广西吃人和重庆武斗
  2. 经济建设。为了让一部分人先富起来,人类的尊严可以不要了,自然环境可以牺牲了。如此野蛮的“发展”,和当年蒙古席卷欧亚的方式可有一比,不过蒙古人至少不拿自己人和赖以生存的环境开刀
  3. 公共医疗水平低下。公共医疗水平是公认的衡量文明水平的标准。现在我们民族的情况是穷人的医疗没有国家保障,医疗费用昂贵,医药质量低劣,医疗机构和医疗行政机构腐败,医德败坏
如果要给世界各民族的文明程度排名,我会把中华民族排到仅次于卢旺达的胡图族的位置。如果要解释我们的历史教课书为什么要误导我们,我觉得是为了掩盖近50年文明急剧下降的残酷事实吧。

这个有水平

前一阵的假假包子真是太厉害了。假的都是假的,这叫啥?这已经不是一般的假,这叫meta-fraud。Hungarian notation的发明者,太空游客,Intentional Software的老板Charles Simonyi号称是Anything You Can Do, I Can Do Meta;咱们科技水平虽然低一点,但是Anything you can do, I can do fraud; any fraud you can do, I can do meta,还是够狠。

Friday, September 14, 2007

地图网站统统必须改用SVG

Raster graphics map SUCKS!!!

Monday, September 03, 2007

STL和O-O - 并非完美性伴侣

通過對STL的創造者之一Alexander Stepanov的采訪文章(http://www.stepanovpapers.com/)可以瞭解到,Stepanov對Object-Orientation這種編程paradigm是持懷疑態度的。的確,在生活中,我們能感受到STL在C++与O-O的配合幷非完美,以下是兩個例子:

1.STL container要求它元素必須是assignable的-往contrainer里塞東西的時候,要給insert(或者push_back等,最終都是調用insert的)一個object,然後insert再按照這個對象copy construction一個。如果能直接把ctor的parameters傳給insert,再有insert直接在contrainer的內存里調用ctor構造出一個元素,效率將會更高。比如:
class T
{
public:
T() {...}
T(const T&) {...}
};
要往vector v中插入一個T,必須這樣:
v.push_back(T());
這會帶來兩個copy ctor的額外開銷。理想的方式是這樣:
v.push_back()
可惜這樣的push_back沒有辦法在C++中定義。

2.O-O最主要的工具是class hierarchy,但是一組sub classes却不能直接放入一個STL container,因爲STL container都是homogeneous的。通常的做法是container容納base type的指針,但這樣做有兩個缺點:
  1. 要自己new和delete對象了。人人都知道,干這種事很容易出錯
  2. 竟然放弃STL的內存分配功能不用,如果你看過SGI STL的內存分配代碼的話,你就知道,這就是“暴殄天物”
理想的容器應該是這樣:
class Base {...}
class Sub1 : public Base {...}
class Sub2 : public Base {...}

hierarchy_vector v;
v的iterator在dereference以後還是Base*類型(不是Base*&),因爲hierarchy_vector并不知道每個元素是什麽類型。
插入元素:
v.push_back(x);
v.push_back(y);
有兩點需要注意:
  1. hierarchy_vector必須爲數組的每個元素保留max{sizeof(Sub1), sizeof(Sub2)}的空間,遮意味著一些浪費,在heap中new出一個對象同樣有額外開銷,所以hierachy_vector的效率不一定更低
  2. 可能需要在Base中定義virtual assignment operator
就現在Standard C++中的STL而言,我覺得還是堅持container只容納plain old object為好,特別避免把copy ctor,default ctor,destructor中有side effects和較大開銷的類型的對象裝入container。

Sunday, September 02, 2007

常识也有错

“C和C++编写的程序比高级语言编写的程序速度快”,很多程序员都认为这是一个事实,但它不是。只在程序足够简单的情况下,这个判断成立。“足够简单”的程序就是那些相当于“数据结构与算法”、“数值方法”、“XX内核”教科书中的程序。在这里,C/C++压榨出所有能压榨的CPU cycle,而高级语言程序却带很多额外开销,因此C/C++更快。但是在更复杂的问题领域,用高级语言却可能写出比C/C++更高效的程序。随着问题难度的增长,C/C++程序复杂程度的增加速度快过高级语言。所有会出现以下情况:对某一问题,最高效算法的C/C++程序的编写难度超出人类的能力(或者更可能发生的情况是,超出人的意愿,毕竟工资是有限的),因此如果要用C/C++解决问题,就不得不放弃最高效的方法,转为使用编码较容易但速度较慢的方法。这个时候高级语言的优势就发挥出来了,包括,更抽象、更丰富的表达能力,更多的paradigm,更厉害的是meta-programming能力,包括用meta-programming生成复杂程序、自动优化程序的能力。

最近高级/脚本语言火热,但是很多人的认识还是:CPU已经足够快足够便宜了,而人却很贵,因此用运行速度换编码速度是值得的。但随着人类需要用计算机解决越来越难的问题,高级语言在速度方面的施展空间必将被发掘。

补充一个例子:用Amb写一个state-space search的程序,不用改动程序,只要改动Amb,所有这样的程序就获得了并行能力,免费的并行!