2008年4月24日星期四

无条件的爱国和无聊的自尊

实话说,这个文章不好写,标题更不好起,尤其是在这种爱国情绪异常高涨的敏感时期。不过我还是得说说,关于某些中国人无聊的自尊和奇怪的爱国主义观点。
大家知道,我是个程序员,因为工作的关系,经常得和人讨论一些计算机上的问题。几年前我就和一个人讨论过关于中国是否需要自己的芯片,自己的系统,等等等等的问题。我的意见是,中国不需要自己的芯片产品和系统产品,但是必须拥有自己的芯片技术储备和系统产品储备。因为掌握一个技术系统是一回事情,而投资研发生产就是另外一回了,后者是需要成本的,亏了你负责还是我负责?而对方的观点是,我们必须拥有自己的芯片产品,拥有自己的系统产品,因为我们是中国。关于这个我就很奇怪,英法德意奥这些八国联军,除了美国,也没有多少芯片产品阿(其实是有的,不过多数是专用芯片)。如果说系统,世界上的商用级别系统基本就三个,Windows,MacOSX,Unix,全是美国的。至于要说其他国家开发的系统有没有,一个必须是商用级别的,像我当年自己写的哪种“操作系统”就请免谈,还有一个要和Unix没有派生关系,否则还不是老美的根?按照这两个条件来说,可以说世界上的系统只有美国一家。即使是按照经营公司(注意不是基金会)来算,也是美国大头。至少我只知道一个Novell的SuSE不是美国的,其他商用系统,Microsoft的Windows,Apple的MaxOSX,Redhat,Sun的Solaris,HPUX,IBM的AIX,全是美国的。如果说我们担心技术受制于人,担心后门担心漏洞,而在保密领域采用自主操作系统,并且将这个过程作为国家的操作系统技术储备的过程的话,我是完全理解和支持的。可是自己开发一套芯片产品和系统产品,而且原因仅仅是“我们是中国”。我没有感觉到说话掷地有声的自豪感,反而清晰的感觉到了某些人头上的两个大字“傻X”。
仅仅因为我们是中国,就开发一套自己的系统,因为作为一个大国,不能没有系统。我不知道是不是这个逻辑。这个逻辑看上去到也没错,不过开发以后呢?没人用呢?再号召大家爱国一回,每个人都使用这个国产系统?不说别的,那位兄台当时还在请教我关于Windows安装的某些问题,不知道他会不会因为爱国去弄套银河(据说也是Unix内核),然后装上去写文档。如果我们陷入无条件的爱国中,那就会发生无数傻事,产生无数傻瓜,例如这种号召做操作系统的,还有下面要说的血狮,佳乐福等等。
至于血狮,经历过那个事情的都会觉得,那就是个爱国主义的大笑话。当年血狮打着爱国主义的大旗做了N多宣传,结果呢?一塌糊涂。此后我就一直对所谓的“爱国主义”抱有一定的戒心,因为这个东西实在太容易被人利用了,谁能定义清楚什么是爱国呢?买外国的产品爱不爱国?如果买外国产品就是不爱国,那么东莞为全世界每人生产了一双皮鞋,号称世界工厂的值得我们骄傲的事实,就会变成东莞诱使全世界每人叛国一次了。可能又有人要和我争辩情况不同,可是,不知道大家看没看过公平论。只有当你抛开你是谁的时候,才可能公平。我们暂时抛开中国人的身份,单论买外国货是否就算背叛,那么无论如何是得不到这个结论的。我的观点是,当质量,性价比相近,或者说有的比较的时候,我会选择国货,因为让国内厂商赚钱就是让中国人赚钱,让中国人赚钱就是让我赚钱。但是当国货是个垃圾,或者我很讨厌。我并不介意外国产品,尤其是日本产品。不得不说,虽然我挺讨厌日本的一些东西,然而却不得不佩服日本的另外一些东西。
说到这里,我还准备说一下所谓的“公平论”。我是不知道在哪里看到的简介的,没有拜读过原文,不过我觉得他讲的很有意思。很多时候,我们睁眼说瞎话,就是因为我们是“既得利益者”。只有在你根本不知道你会是谁的时候,你才能真正的说公平。例如一个老板和一个员工,老板希望少发钱多干事,员工希望多发钱少干事。支持谁呢?只有你不知道你会成为谁,你才能公平对待。如果你讲支持老板,可将来做了员工,不要懊悔到心痛么?如果你讲支持员工,偏偏做了老板,不要伤心到白发么?很多事情我们只有抽离开我们是谁,抛弃固有的立场,才能公平对待和评价,当然,前提是你打算做出公平的评价。在这点上,我到是喜欢真小人胜过伪君子。事实是对我有利,我就说,虽然不公平,可世界何尝公平,我就是要这么做,因为对我有利。而不是摆出一堆的道理,站在看似公平的立场上说着冠冕堂皇的东西。北京高考分数线低,要不要改?问我,我说不改,为啥,因为我在北京。
OK,有了上面的一堆爱国和公平,我们现在看看我们今天的重头,佳乐福。这超市也算倒霉,就因为生来带有法国基因,又因为法国政府无聊的支持了下藏独,就被一群群的中国人鄙视。实话说,我觉得实在有不够理智和不够解决问题。首先我们就说说法国政府的言论吧。我一直有一个观点(但是很难做到阿),即使你说的是对的,也应当允许别人说错的,尤其在政治,思想等等这种无法立刻明辩是非的领域。认为自己是正确的,而禁止别人说错误的,我感觉仿佛回到了文化大革命时代。当然,你可以尽力宣传自己的观点,尽力说服对方。但是如果我们坚持我们是对的,而禁止别人说错的,那么就会陷入随大流的怪圈中,你不敢,或者无法说出正确的东西。而我们知道,真理往往掌握在少数人手中。当然,我们会努力表达我们的意见,上层也会(好吧,是至少大多时候会)按照大部分人的意见行为。然而禁止其他人的言论,绝对不是一个好的行为。也许,我的话会被某些人解读为支持藏独,我相信这些人的逻辑一定是零蛋。我说即使我们说的对的,也应当允许别人说错的,那么推论下来的潜台词就是藏独是错的,不过世界上就有些逻辑零蛋的傻瓜。
其次,有人说西藏问题是中国的内政,谢绝国外的讨论和干预。诚然,我支持西藏问题是中国的内政,支持谢绝国外干预。不过评论?我看说这话的人没少对美国指手画脚,至少,他们说西藏问题是西方世界的阴谋。这算不算个悖论?你要说西藏问题谢绝国外评论,就不能说西藏问题是西方世界的阴谋。你要说西藏问题是西方世界遏制中国的阴谋,就不能说谢绝国外评论。否则,你又有什么资格对美国的做法指手画脚大加评论?当然,可能有人会说一个是内政,一个是国际事务。不过,我们就真的没有评论过人家的内政么?如果非洲某个军权国家大肆屠杀贫民,你会闭口不言呢?还是跳出来说话?如果闭口不言,你缺乏人类基本的同情心,如果跳出来说话,凭什么?这不是评论内政么?对于西方的评论,我们只能认为其中有利益集团为了利益而歪曲报道(当然,其中还有中国媒体控制的“功劳”)。然而拒绝国外评论内政,拒绝所有得罪过自己的国家的所有企业……这是否有点小家子气呢?
而后,法国政府支持藏独,关佳乐福什么事情?抛开所谓双赢的理论,抛开所谓是非,如果仅仅因为法国政府支持藏独,佳乐福就要倒霉。那么中国政府干点啥不地道的,是否每个人都要跟着倒霉呢?不要说我们是正义的,伟大的什么狗屁理论,我相信我们是伟大的,然而谁都不能排除政府里有败类(前两天刚审的不就一个,虽然那未必是因败类受审),如果这些人做了什么事情,你是否情愿接受你的倒霉命运?
最后,我们看这次的佳乐福事件,是否觉得有种阴谋的味道?包括将佳乐福设定为反法的典型,包括说佳乐福5.1降价打算让中国人自食其果(原谅我没有使用原文)。佛祖在上(似乎也有点崇洋,要不要改老君?),有多少商家5.1节没有规划降价促销的?这个关于降价的说法一出来,就逼得佳乐福很难做。如果不降价促销,恢复人气,那么可能佳乐福在中国就要受到重创。更不用说竞争对手们一定会趁机降价,甚至打出爱国的招牌。可降价的话,会让大家觉得这个事情真有其事。最可笑的是我收到的一个版本里面,说法国政府斥资让佳乐福降价一成。拜托,以佳乐福现在的状态,降价一成基本只是和当前持平而已(要考虑到不降价的库存成本),最多加上小亏,再加上考虑到将来的人气因素等等,应当是佳乐福主动去做才对。哪里有政府捧钱上门要求降价的说法,何况这笔钱怎么出?法国可不像中国,如果发现有这种钱出来,那基本就是某人或者某些人辞职的结局。我固然不喜欢成为“可能的”法国政府对付中国人民的棋子,但是也讨厌成为某些人对付竞争对手的棋子。
我觉得,我们很多人都陷入了谵妄的爱国主义情绪中。凡是反对中国的,就是反对我的。凡是反对我的,就要被打倒。这种理论反过来用的可以说是疯子也可以说是天才,然而如果正着用只能说是傻瓜。个人不代表国家,国家也只能部分代表个人,其代表的程度和国家的民主程度呈正比。诚然我反对分裂西藏分裂台湾,不过理由说起来可能不怎么冠冕堂皇,因为我有利,其次才是国家有利,西藏人民有利。而且我欢迎别人评论,无论你说好也好,说势利也好,说卖国也好,总之你说你的吧。大国之所以能成为大国,就是要有这么种气度和耐性。如果自尊过剩,别人刚一评论便跳起来让人闭嘴,甚至出口谩骂以致动手(不论谩骂的理由是什么),那最多也就是街头小混混的等级。这种情况下,更像是因为自卑,所以自傲。

2008年4月15日星期二

语言造就人

学汇编的是硬件,学C的是指针,学C++的是模版,学Matlab的是矩阵,学Lisp的是图灵机,学Java的是模型,学Awk的是字符串,学SQL的是数据集。

2008年4月13日星期日

关于上飞机的问题

在blog前,贝壳先问大家一个问题,一个人坐飞机要提前多少时间到机场?
相信我们很多人都坐过飞机,但是很少有人关心过准确的手续时间问题。根据国家的标准,乘客应当在飞机起飞前90分钟到达机场。登机牌是在飞机起飞前90分钟开始办理,直到起飞前30分钟停止办理。机票的停止发票时间也差不多,如果临时到机场,可以在航空公司柜台(票务柜台,不是登机柜台)办理机票,而后在对面的登机柜台直接更换登机牌上飞机,不过这种情况下多数就是全票了。在柜台停止办理登机手续后,紧急柜台(特殊柜台)会开放特殊票(贝壳的特殊折扣票就是这种)。同时,候机室会开放登机口,旅客开始登机。在飞机起飞前5分钟,登机口关闭,辅助系统撤离,等待塔台指令起飞。当然,以上是理想流程。
不过我们中的多数人都不会把上面的时间当回事情,一般情况下,我们会提前一个小时到机场。然后直接拿票,5分钟搞定问题。再直接过安检,10分钟就差不多了。等个5分钟上下,登机口就开放了。上飞机后20分钟,飞机起飞。一切都很不错。但是今早,贝壳遇到了一个诡异的事情,和上次在首都机场跑两次安检,在虹桥机场连等12小时差不多经典。
贝壳今天要乘坐东航的MU5545次航班去烟台(没错,就是那架起飞后机舱内有汽油味返航的,大家可以GG),飞机7:50在虹桥机场起飞,贝壳以前坐过一次。按照前次经验,从家出租过去是18分钟,所以贝壳这次6:20起床,6:30上出租,7:00到,7:50起飞。当然,是这么预计的拉。
实际是,贝壳6:20起床,6:30上的出租,出租到离机场差1公里的时候是6:55,但是这1公里足足走了20分钟。最后贝壳实在等不及,直接下来坐摩托到了候机楼(还花了20大洋)。7:15分到候机楼一看,里外三层的人。贝壳赶紧找保安,"我是急客"。保安说OK,这里外三层全是急客。贝壳没办法,安生排队吧,排到一半,保安说不用排了,肯定关柜台了。贝壳冲到票务柜台,要求改签,结果只有晚上八点的飞机,然后发现两个同事也没办上。这次去6个,只走成一半,有一个7点到的还没排上呢。话说一半,发现对面柜台空了,全冲到东航柜台前面来改签了。据赶上的说,他们是8点上的飞机,安检过的特别慢,上去后空了一堆的位子(完全可以想像)。
如果说过错的话,到说不出东航什么过错,毕竟他们是按照国家规定的时间表走的。可这次早上大规模的滞留,总不会是我们突然都不会坐飞机了吧。也不知道是哪里出了错,这种情况,真的能应对奥运么?

2008年4月7日星期一

python的非经典错误

def comp_tuple_file (tuple_file1, tuple_file2):
for i in tuple_file1:
if i in tuple_file2:
tuple_file1.remove(i);
tuple_file2.remove(i);
if __name__=="__main__":
t1=[(1,"1"),(2,"2"),(3,"3")];
t2=[(1,"1"),(3,"3"),(2,"2"),(4,"2")];
comp_tuple_file (t1, t2);
print t1;
print t2;
错在哪里?
头一次循环,i=(1,"1")被正确移除了。但是接下来,i=(3,"3")?
这个叠代器的行为很有意思哦,貌似叠代器内存储的是集合的索引。
def comp_tuple_file (tuple_file1, tuple_file2):
collection=tuple_file1[:];
for i in collection:
if i in tuple_file2:
tuple_file1.remove(i);
tuple_file2.remove(i);
if __name__=="__main__":
t1=[(1,"1"),(2,"2"),(3,"3")];
t2=[(1,"1"),(3,"3"),(2,"2"),(4,"2")];
comp_tuple_file (t1, t2);
print t1;
print t2;
这才是正确的代码。

链接上的问题

贝壳最近在用库上吃了不少苦头,先是crypto++5.52。编译后怎么也链接不上。后来发现需要用/MT参数编译为多线程。后来又在STLport上又吃一次苦头,可见VC2003的默认单线程模式确实不得人心。
下面说一下STL的编译手记。下载STLport,解压。运行vcvars32.bat设置环境变量,去build/lib下面,运行 configuare -c msvc71(如果你是2003,否则按configuare --help察看你的编译器类型)。然后运行nmake -f msvc.mak install。可以看到有两个目录被建立了,bin和lib。把bin的复制到windows/system32下面,把lib的复制到系统目录下面。 安装就OK了。
上述和boost都差不多,然而和boost不一样的是,编写程序的时候,需要手工指定stlport的头文件路径。boost的可以以<>来引入,因此boost的头可以复制到系统里面去。然而stlport的必须以手工方式指定,否则就要覆盖默认的stl 了。