难忘波尔图

生活就像一盒巧克力:你永远不知道你会得到什么。——《阿甘正传》
周末的波尔图阳光倾城。

教堂,河岸,黄昏,美不胜收;

邂逅,相识,离别,天各一方。

你永远不知道下一刻等待你的会是什么,这就是生活的意义,也是旅行的意义。

法蒂玛

上周末去了趟传说中的法蒂玛,一个以宗教闻名的小城。

我满怀信心地坐火车到了法蒂玛站,下了车才发现,我靠,这哪里是城市啊,整个一荒郊野外,周围全是山……摸索着试着走了走,发现几乎不可能走出去,于是回到车站去问那里的管理员,他用半生不熟的英语告诉我:这里离法蒂玛有25km!!你可以坐公交,不过它下午五点多才来……你还可以打的,不过至少22E……我差点当场吐血……天呐,这里离法蒂玛那么远怎么还叫法蒂玛站?!疯了……

我前思后想,发现只能打的,忍痛打了26E的的终于到了法蒂玛市中心。这里人很多,可见宗教这东西多么狂热。市中心有个大教堂,里面人更多,有烧香的(烧的东西和香类似,不过很粗很长),有祈祷的,有参观的。我跟着人群去教堂里面转了一圈,真正地感受了一下宗教气氛。总之,里面的气氛很肃静,估计我万一一不留神做了什么不对的举动那些人都能把我给吃了……

出来后我发现我面临着一个重大的问题:怎么回去?我转了转,跑到路边一个小店里去买当地的明信片,随便问了一下店主,她们告诉我可以坐汽车,而且汽车站离这很近。最后,我终于坐汽车回到了Coimbra!好幸运啊!这次差点儿把自己掉了……

教训:叫某个名字的火车站不一定就在那个城市,甚至可能离得很远!

照片:在这里

查汉字拼音的程序

马克同学是我们公司的活宝,更是一个喜欢学习汉语的好青年!他自己琢磨着装上了scim,现在还可以用拼音输入法在skype上用汉语向我问好了。说起来比较囧的是,我教他的第一个汉字就是“囧”……因为这是个典型的象形字!我还郑重地告诉他,其实不少中国人自己也不知道怎么念这个字!

有一天喝咖啡时,马克同学问我知道了一个汉字怎么查它的拼音?问得好!在我们看来知道拼音是理所当然的,但对老外们来说确实是个问题。我搜了一下,扔给他一个供小学生使用的查拼音的在线网站。后来想想这样不太好,因为那个网站本身就是中文的……于是我用Python编了这么个小程序,打算下周上班时送给马克同学。

[python]

!/usr/bin/env python

import os,sys
import string
import urllib2
import zipfile

def find_it(x, lines):
ret = []
for line in lines:
if line.find(x)!=-1:
ret.append(line.split(“:”)[0].strip())
return ret

if name == ‘main‘:

if len(sys.argv) != 2:
    print "Ni hao! Chu cuo le!"
    sys.exit(1)

if os.getenv("LANG").upper().find("UTF8") == -1:
    print "Please use UTF-8 locale!"
    sys.exit(2)

try:
    f = open('/tmp/pinyinsfssafd.zip', 'r+')
except IOError:
    req = urllib2.Request('http://blogimg.chinaunix.net/blog/upfile2/080906001029.zip')
    resp = urllib2.urlopen(req)
    zfile = resp.read()
    f = open('/tmp/pinyinsfssafd.zip', 'w')
    f.write(zfile)
    f.close()
finally:
    z = zipfile.ZipFile("/tmp/pinyinsfssafd.zip", "r")
    bytes = z.read('pinyin.txt')
    lines = bytes.split('rn')

    x = sys.argv[1]
    for c in x.decode('utf-8'):
        if c == u'-':
            continue
        if c in string.letters:
            continue
        if c in string.digits:
            continue
        ret = find_it(c.encode('utf-8'), lines)
        if ret:
            print c+" can be read as : "+'/'.join(ret)
    z.close()

[/python]

UNIX 文学

这里有一篇非常精彩的文章,论述了为什么UNIX才是真正能给你自由的操作系统,UNIX的“文学性”,“道”,艺术等等,里面的很多观点说出了我的心里话!强烈推荐!

特摘取几句我喜欢的:

UNIX programmers express themselves in a rich vocabulary of system
utilities and command-line arguments, along with a flexible, varied
grammar and syntax.

The one-size-fits-all, point-and-click,
we've-already-anticipated-all-your-needs world of NT had me yearning
for those obscure command-line flags and man -k.

I wanted to craft my own solutions from my own toolbox, not have my
ideas slammed into the visually homogenous, prepackaged, Soviet world
of Microsoft Foundation Classes.

In a literary light, if UNIX is the Great Novel, Perl is the
Cliffs Notes.

Mastery of UNIX, like mastery of language, offers real freedom. The
price of freedom is always dear, but there's no
substitute. Personally, I'd rather pay for my freedom than live in a
bitmapped, pop-up-happy dungeon like NT.

她们的眼神

上周周末基本上就做了两件事:参加了因度假高峰而中止的beer lifting;去了趟Aveiro。这两件事给我印象最深刻的是两个baby的眼神!

事情是这样的:

1. 周五的beer lifting和往常一样,边喝酒边和同事们扯淡 (我和安东尼奥甚至谈到了XZ问题,看来西方人对XZ的误解不是一般深啊,我郑重地告诉他XZ在二三百年前就是中国的一部分。:-) 后来,突然来了一个老汉,我们都不认识,然后就坐下来和我们聊起来了,然后就开始唱起来了!因为我听不懂他们说什么,后来另一个同事告诉我那个老汉看到我们有吉他却不唱歌感到很不满,于是自己主动过来要求伴唱。他唱的是Coimbra本地的一首历史很悠久的民歌,听起来还不错,看来这人果然有两把刷子。再后来,一个同事的老婆带着她的女朋友来了,更关键的是那女的还推着一个baby,于是这个baby就成焦点了,安东尼奥对她连比带划地说了一通,结果她就始终用一个好奇的眼神看着他。这还没完,估计是那老汉的歌声吸引了这个baby的注意,她干脆就不听安东尼奥的话了,直接用一双很具有杀伤力的好奇眼神盯着那个老汉!嘴里还不忘咀嚼着她的奶嘴,仿佛在说:“小样,唱嘛呢?”我在旁边偷偷地看,快把我乐坏了!

2. 周日坐火车去了期待已久的Aveiro,那个城市不大,出了车站一直走就是市中心,那里有条河,虽然明显不如Coimbra的Mondego大,但那里的人倒是很会利用,在河上有很多游船供观光使用。我正想着在哪里可以坐上船呢,一个女导游过来了,用熟练的英语告诉我坐船都可以看到什么,问我坐不坐,我很爽快地就答应了。刚上船还没坐稳,一家人过来了,爸妈带着两个女儿,小的那个还是个baby。就是这个baby,天呐,不知道这娃有啥伤心事儿,一上船就愁眉苦脸的,而且还一副极不情愿的样子,仿佛被带上船来有多么委屈!于是她就一直低着头,不知道在想什么心事,而且还时不时地撇撇嘴。她爸妈和她姐姐叫她时才很不情愿地抬起头应付应付,要她照相时她也不给面子,撇着嘴并摆出一副很无奈的样子。那眼神太可怜人了,我在旁边看着哭笑不得。

这里的baby太可爱了,看到老外(比如我)时通常还会盯着你使劲看,这时你不要介意,向他们摆摆手,说一声:Olá! :-)

P.S. 在Aveiro拍的照片在这里

梦回明朝

最近读完了《明朝那些事儿》,感慨良多,记之。

读当年明月先生的文章是一件很有趣的事情,其文笔很是幽默。读到牛人的牛事时佩服得五体投地;读到奸人的恶事时咬牙切齿。时而开怀大笑,因为牛人不拘一格的光荣事迹;时而又感动不已,因为那些刚正不阿,或大义不屈的英勇故事。历史能写到这个份儿上,想不喜欢都难。

我怀疑如果当初我们的历史教科书如果也能写得这么精彩,我今天就不会是学计算机的了,早改行学历史了。无奈我们的历史教科书是无比得烂,我们的历史教育更是错得一塌糊涂,才使得当初我学历史时基本上没任何兴趣,除了听历史老师偶尔带出的一些历史故事。究竟学历史的目的是什么?在我看来,无非有两点:一是培养历史学家,继续探索某些未知的历史,纠正前人记载错误的历史,保证历史的公正;二是,为了让其他不致力于历史专业的同学了解历史,并从中吸取前人的教训。而我们的历史教育,无论从哪一点来说都是很失败的。在我的印象中,历史课基本上等于背年代,地点,人物,意义(意义还通常列出一个一二三四,而且通常是某一节最后几段每段的第一句,或者最后一段全部),这也导致了我到现在只记住了抗日战争的起始结束年代和新中国成立的时间,其它一概都忘了。

彻远了,打住,回到书评。

明朝,是一个备受争议的朝代。它是一个混乱的朝代,同时也是一个先进的朝代。它是一个牛人辈出的朝代,同时又是昏君当过道,恶人当过权的朝代。但毫无疑问,这是一个精彩的朝代!

明朝有意思的事情实在太多了,这里不可能全部列举,只能挑几个给我印象深刻的来总结一下。缅怀明朝那些牛人们!

明朝最牛的皇帝:毫无疑问,众望所归,此荣誉应当归于明朝的创业者朱元璋先生。他从朱重八变成明太祖,其奋斗经历值得每个人好好学习。更重要的是,他用牛一般的事实像我们证明了:真理还真往往掌握在少数人手中。除此之外还有,他一手设立的制度,比如言官制度,对整个明朝产生了深远的影响,虽然有些到后来成了负面的。

明朝牛人中的牛人:此荣誉应该归于王守仁先生,在其有生之年,他向世人证明了正德年间的一大定理:千万不能得罪王守仁先生。更关键的是,他是一个好人,更更关键的是,他死后他的学生或追随者中也是牛人辈出。他的头衔有很多,最著名的应该是哲学家,历史书上也是如是说,这也是他对后世影响最深刻的。其实他还又一个很牛的头衔——军事家。我之所以称其为牛人中的牛人是有原因的,一是普通的牛人也就自己牛,而他的很多学生也很牛;二是,普通的牛人一般只在一个领域很牛,而他是跨领域。如果你看了他打仗的事迹,肯定会说:王先生,您军事太牛了!王先生会摆摆手说:别提了,那只是我的副业!这,就是牛人中的牛人!

明朝最牛的言官:纵观历史,明朝无疑处于封建主义的衰落期,但是明朝的一个制度还真闪烁着民主的光芒,这就是内阁和言官制度。按理说,在封建社会,皇帝想干嘛干嘛,也就是一句话的事儿,而在明朝,这句话不一定成立(当然伟大的朱重八同志例外)。皇帝想干的事,如果内阁不同意,可以顶回,皇帝也无奈;更无奈的是,皇帝还会招骂,言官骂不说(这是人家的职业嘛),其它官也跟着骂,因国家大事骂不说,因为皇帝人家夫妻间的事他们都骂;更更无奈的是,在某个时期(万历年间),因为骂皇帝而被贬回家竟然成为一种荣耀,众官争先恐后,皇帝越贬骂得越凶……连我看着都无奈了。。。而在骂人这个行业里,欧阳一敬无疑是最杰出的一位,引用书中原话总结其骂人功绩:“在欧阳一敬不到十年的弹劾生涯中,倒在他脚下的三品以上部级文武官员合计超过二十人,并附侯爵一人,伯爵两人。”(附注:言官只有七品。)骂人不说,还能骂倒那么多领导,着实不容易!要知道,这种事,搁到今天也不可能!而明朝就有!

明朝最牛的清官:这个大家恐怕也都知道,肯定非海瑞莫属。正解!海瑞是清官不假,关键是他还不是一般的清。他清官清到了凡是他要去上任的地方,人还没到那里的官员就开始恐惧了。而且此人当时有很多粉丝,据说有个铁杆粉丝不远千里来到他上任的地方,只为了能见他一面!还有很多粉丝是把他的画像都贴到家里,除了仰慕之外估计还能辟邪……更另人敬畏的是他死的时候“为他送葬的人排了上百里,整整一日,无人离去。”忒牛了!在整个中国历史上他绝对也是能排到前列的大清官!

明朝最牛的首辅:他不能算是一个好人,也不是坏人,但他的政治能力无疑是最猛的,他独揽大权,他大胆进行改革,他打击那些对他不利的人,甚至,他和太后据说还有一腿……总之,他是一位杰出的政客!

明朝最牛的太监:凡是先想到是魏忠贤或者刘瑾的同学先去面壁思过。;-) 此荣誉应该归于郑和,我想大家没意见。不管郑和下西洋的目的到底是不是炫耀,但从结果来看,他是很伟大的。他手里有绝对的优势兵力,但他不但没有欺负那些小国,反而赠送礼物,与之友好相处(甚至还帮他们打击海盗),充分展现了一个大国应该有的素质。这也导致了后来一些小国纷纷组团去明朝进贡,一些国王甚至选择死后安葬在明朝!

再拜以上牛人们!有机会一定去庙里好好给牛人们上柱香!

《瓦力》——无剧透的剧情介绍

恩哼~!我想看过的同学都能理解下面的介绍。

Wall-E: …
Wall-E: …
Wall-E: …

Wall-E: …
Eve: …
Wall-E: Wall-E.
Eve: Eve.
Eve: Wall-E!
Wall-E: Eve!

Wall-E: Eve?
Wall-E: Eve?
Wall-E: Eve…

Wall-E: Eve!!
Eve: Wall-E!!
Wall-E: Eve!!
Eve: Wall-E!
Eve: Wall-E!

Eve: Wall-E?
Eve: Wall-E…

Eve: Wall-E!
Wall-E: ???
Wall-E: Eve!!
Eve: Wall-E!!

Wall-E: …
Eve: …

结束。

在电影院看完之后因为爆米花还没吃完,顺便也把片尾字幕啥的看了,结果发现幸亏没走,片尾同样精彩!所以在此提醒一下去电影院看的同学:一定别错过片尾!

DNS漏洞

最近DNS漏洞狠火啊!!搞得沸沸扬扬,鸡犬不宁的~

我仔细看了一下这个漏洞的原理,发现其实很简单。我这里说简单并不是事后诸葛,而是指相对于其它互联网协议的漏洞,比如 SYN Flood,它早在1994年就被发现了。我觉得这个DNS漏洞也应该被发现得更早才对,没想到直到现在才暴露出来。

说到底,这个DNS漏洞的成因是因为QID计算过于简单,只是简单地加一,这导致猜解很容易,可“屋漏偏逢连夜雨”,偏偏DNS server的实现中发送DNS请求的UDP端口又是不变的,这就造成了本次“全球DNS变暖”的问题。而且,不光光是BIND,其它很多实现都是这样,恩哼,那么这个问题就很严重了。解决方法也很简单,随机QID和UDP端口,注意,光随机QID似乎仍然是不够的。

好了,现在我们反思一下为啥这个DNS漏洞这么简单却到现在才暴露出来?我觉得(停顿),是因为DNS太普通以至于几乎没人重视它了(too to 结构)。想想啊,我们似乎都觉得敲入一个域名就理应得到相应的主机,以至于连其IP是什么都看不到,也没必要看到(绝大多数情况)。这不光是普通用户的心态,连很多程序员也是,因为gethostbyname(3)替我们完成了这个工作。总之,几乎人人觉得这是理所应当的,所以几乎没人重视DNS问题,除了DNS服务器管理员和某些geek到家的人,而Dan Kaminsky就是后者中的一个。当然了,Dan的人品也是很好的,他充分估计到了这件事的严重性,不光自己没利用它做啥坏事,而且最初的保密工作也做得很好!

这件事再次提醒我们,不管什么事情做得很细了都很可怕。牛人就是这样炼成的!

快打上补丁吧,哼哼哈兮~!