Archives

LinuxCon Japan 2011

我会参加6月1号~3号在横滨举办的LinuxCon Japan 2011。恰逢 Linux 20周年,Linus 本人也要去。

到时我会简单地介绍 kdump 和其它相关的内核诊断工具,参见此处。更多内容可以看这个日程安排

这次开会也可以见到好几个从未谋面的同事。唉,因为预算的问题,现在红帽的开发者只能跑到公司外部的这种会议上去碰面了。

我住过的那些青年旅舍

以前不经常旅行的时候我也是只知道有 hotel,不知道还有 hostel。后来在葡萄牙的时候听 Geroge 说才知道,原来 hostel 就是国际青年旅舍,简称青旅,旨在为年轻人出门旅行提供便宜住宿的地方。我现在出门旅行首选青旅,住过各种各样的很多青旅,在此总结一下和大家分享。

青旅通常有多人间和单间,单间和外面的宾馆相比并不会便宜多少,我从来没住过,这里就不说了。多人间通常有双人间到8人间不等,我住过的国内的青旅大多是男女分开的,但是也有一些是男女混住的,比如阳朔的桂花巷青旅、西安的书院青旅。

住多人间的话,青旅比其它的宾馆要便宜很多,比如在成都梦之旅青年旅舍,四人间的一个床位是40元一天,而如果去外面的像如家这种普通宾馆住的话一天要170元。国际青年旅舍有全球通用的会员卡,只要是在正规的青旅都可以使用(国内也有一些青旅是非正规的),在原价的基础上还会有一些折扣,比如成都梦之旅四人间就可以35元一天。你可以在任何一家正规青旅办理此会员卡,费用50元,可使用一年。

住青旅不光是图便宜,更关键的是青旅旅行气氛浓厚,这是住其它宾馆换不来的。青旅通常住着形形色色的背包客,所以住在这里你可以得到一些很及时很有用的攻略,当然更有机会找到搭伴旅行的驴友。很多青旅门口还有张贴信息的白板,上面贴有各种拼车、征人等信息,尤其是拉萨的那两家知名的青旅,东措和平措。而且青旅都有很大的公共区域,晚上没事大家可以坐一起聊天、喝酒、上网。

说是青年旅舍,但住的未必都是年轻人,经常可以看到一些年长的人入住,我也看到过一些老外携全家入住,我觉得主要还是这种旅行的氛围很吸引人。记得2010年去成都的时候也是住梦之旅,在我下铺住的是一个大叔,退休好几年了,全国包括台湾都走遍了,他就偏不住宾馆,就是喜欢和青旅里我们这样的年轻人在一起。

下面是我住过的那些青旅和客栈,供各位驴友出门旅行参考。

苏州明堂青年旅舍

地址:江苏省苏州市平江区平江路28号
电话:0512-65816869

个人点评:在平江路上,出火车站打车12块钱就能到,离观前街很近。里面的房子很有江南风格。隔壁是那个在豆瓣上很出名的猫的天空之城,再隔壁是这一家的咖啡馆。不足是青旅里面除了前台那个地方没有无线,上网只能去他们家的咖啡馆。听说这家店在上海和杭州都有分店。

成都梦之旅青年旅馆

地址:成都市武侯祠大街242号
电话:028-85570314 、85570315

个人点评:三次去成都两次都住这里。这是我在国内住过的最好的青旅,主要是楼顶有个小花园很不错!无线覆盖也很广,四层都有无线。里面提供饭,价格比外面略高一些。地理位置很好,紧靠武侯祠和锦里,不过周围吃饭的地方都是比较贵的那种,便宜的小饭馆比较远,要自己找。

桂林瓦当青年旅舍

地址:广西省桂林市环城西一路212号(联达广场对面,绿化工程处院内)
电话:0773-2154888 2154999

个人点评:离市中心稍远,地方不是太好找,出租车司机竟然不知道地方。但离火车站汽车站都很近。院子的环境不错,公共区域也挺有气氛。

阳朔桂花巷青年旅馆

地址:广西桂林市阳朔县桂花南巷60号
电话:0773-8814077

个人点评:多人间是男女混住!平时价格还可以,到五一长假的时候八人间的一个床位竟然都80!!公共区域比较小。有自行车可以租。位置不错,在靠近西街的一个小巷子里,晚上不会太吵,门口正对面就有很多吃饭的地方。

海口巴纳纳国际青年旅舍

地址:海口市海甸岛人民大道与三东路交叉口,向北50米,和平城西餐厅后面50米,梨园别墅6号3,4栋
电话:0898-66286780

个人点评:地方不太好找,看上面的地址你就知道。周围有超市,邮局,银行,饭馆,生活很方便,离海南大学也不远。房间里面有独立的卫生间和洗浴间。我去环岛的时候是住的六人间,当天那个房间只有我一个人住。公共区域比较小。

拉萨天文之家主题客栈

地址:西藏自治区拉萨市团结新村南三区87号
电话:0891-6786089

个人点评:这家并非正规青旅。住宿很便宜,可以长住。有很多天文望远镜,里面院子挺大挺不错的,离小昭寺和大昭寺很近。

西安书院青年旅舍

地址:陕西省西安市南门里顺城西巷甲字2号
电话:029-87287720,87287721

个人点评:就在城墙边上,很好找。里面老外很多。男女混住。09年的时候去西安住过,其它的记不太清了。

大理阿弟家

地址:云南大理古城叶榆路171号
电话:0872-8868123

个人点评:这个并非青旅。离大理古城很近,环境不错。可以长住哦。老板人很好,可以开车接送,还可以和他们家人一起吃饭,吃地道的云南菜哦。

厦门海巢青年旅舍

地址:厦门市思明区黄厝溪头下25号(景州乐园对面)
电话:0592-2570277 139500656

个人点评:这家并非正规青年旅舍。它不在鼓浪屿,离海边很近,住宿稍微有些贵,不过貌似厦门这边都不便宜。里面环境不错,也挺干净的,周围都是这种小院子,很安逸。厦门这里住宿很紧俏,来之前记得提前预定。

鼓浪屿宾悦旅社

地址:厦门市思明区鼓浪屿安海路44号,三一教堂对面。

电话:0592-2063520

个人点评:听名字不怎么地,可是里面还不错,如果换一个文艺点儿的名字的话想必会有很多人住。从外面就可以看得出来,这个旅馆比较旧了,毕竟它是鼓浪屿上最早的一家旅社。院子里面有个小花园,房间里有无线。不过多人间隔音效果太差。

几点人生感悟

“做人一定要经得起谎言,受得了敷衍,忍得住欺骗,忘得了诺言,放得下一切,最后用笑来伪装掉下的眼泪,要记住越是忍住泪水,越会变成幸福的良药。”

谎言,人人都说过,即使是再诚实的人也有不得不撒谎的时候。敷衍更是如此。

诺言,尤其是恋人之间的诺言,尤为不可信,因为那多半是一时冲动说出的话,无伤大雅,亦不可斤斤计较。

说到底,人嘛,终究都是自私的,无可厚非。要不怎么有“人不为己,天诛地灭”这句话呢。当然,也有一些真正的好人没有任何自私自利之心,但是这种人毕竟还是太少,可遇不可求。

“道德只宜律己,不宜律人。”

强制律人的那是法律,不是道德。有时候我们可能很奇怪,“如果是我,我一定会毫不犹豫地怎么怎么做,他/她怎么就做不到呢?” 如果别人没有违法,怎么做那是人家的自由,哪怕在你看来好像是“罪大恶极”。自己做到了就足够了,只求一个问心无愧。

关键还是人和人之间有着太多的差异,这是由人的本性决定的。要不庄子怎么会说“圣人不死,大盗不止”呢!

“人这一生其实都是在为别人活着。”

小的时候不懂事,不明白死亡是什么。等长大了明白一些了,你会发现,其实就算是自己想终结自己的生命也不是那么简简单单一走就能了事的,因为身边还有亲人、朋友,以及这样那样的顾虑。

在我们短暂的生命当中,很多时候都在是为别人活着,一个正常的人基本上不太可能完完全全是纯粹为自己活着。从这个角度来看,死亡不是一种坏事,死亡意味着永远解脱。“生命的终结是自然赋予人类的恩典之一。”

如果你也相信人有前生来世的话,那么出生不是起点,死亡也不是终点,人这一辈子只不过是一次短暂的旅行而已。

我认同梵高那句话,“如果生活中不再有某种无限的、深刻的、真实的东西,我将不再眷恋人间……”

精神病人可能比正常人更正常。

这要看你怎么定义“正常”这个词,如果“正常”的定义是“和大多数人一样”的话,那他们确实不正常;而如果“正常”的定义是“无拘无束,做一个更真实的自己”的话,那不正常的应该是正常人才对。

在这个社会上,有太多的法律和道德,有太多的条条框框约束着正常人,因为这些我们才不能更好地做一个真正的自己。比如,在一个公共的正式场合,你自然不能说一些不合时宜的话,哪怕你心里很想很想说出来。而一个精神病人却不受此约束。

做人有时候真的很无奈。“人这东西可真够操蛋的!”

寻人启事

艾青给了我们一个好儿子
他常四处寻找真相

他们害怕他
因为他和真相在一起
他们恐惧他
因为他和人民在一起

为什么他总是和他们作对
因为他爱这国家爱得深沉

有一天他们把他带走
从此我们失去一双眼睛
再也看不到光明

告诉我们
你们在害怕什么
你们为什么要把他带走

如果我们再不站起来呐喊
下一个被带走的人就是你我
因为法律不是挡箭牌

又到愚人节

每年愚人节技术 geek 们都要一本正经的恶搞一次,所以每年的这天我都特别留意有没有一些新的恶搞。今年也没有失望。

1) LKML 上有人发了一个补丁,说引入一个新的布尔类型,除了“真”与“假”之外还定义了一个“或许”,其值为1/2。
[c]
enum _Wool {
w_false = 0,
w_true = 1,
w_maybe = 1 / 2,
};
[/c]

2) 鉴于 IPv6 就要来临,可 IPv6 还是有不少问题,于是有人提出引入 IPv4.1,把原来的4字节IP地址扩展为5字节,而且保证完全向后兼容 IPv4。以后再不够了再扩展 IPv4.2 就可以啦!我觉得这个主意不错,希望贵国早日把这拿来一本正经地搞一搞!再申请个专利什么的!搞啥子 IPv9 哟!

3) StackOverflow 上有人提问,为啥子我这个C++的 Hello world 程序连编译都通不过?我已经把C++标准全部读了两遍。更搞笑的是,底下还有人一本正经地给出解决方法,其中一个最牛逼了:

include <ChuckNorris>

绝对可以解决一切通不过编译的程序!

4) Debain、ArchLinux、Gentoo等将合并为超级发行版Canterbury

我错过了太多

如果当初我勇敢,结局是不是不一样。如果当时你坚持,回忆会不会不一般。最终我还是没说,你还是忽略。这是不是最好的结局,我们都已经不计较。——岩井俊二《情书》
现在才发现,在不知不觉中,我竟然错过了那么的人,那么多的风景……

离开北京之前,有好几个朋友都说要给我介绍对象,我都没怎么答应,答应的也只是因为关系好,其实我还是抱着做朋友的心态,根本就没指望能做恋人。临走之前给我送行的一个姑娘,那天告诉我,如果不是我当初那句开玩笑的“不许流泪也不能反对”,她也许就不会让我走,也许我们还可能会在一起。一句不经意间的话就错过了一个人,或许是一辈子。如果当初我没有执意离开北京,结局会不会不这样?

现在来到西安一个星期了,见到了很多以前的老师。见面之后他们都要问我的一个问题是,你谈对象了吗?看来是真的到了该谈婚论嫁的年纪,可我还是觉得结婚这种事儿离我很远。有个老师还张罗着给我介绍对象,还当着老系主任的面,搞得我很不好意思。我当然也不会答应,因为我不会留在西安。现在一直在路上,漂泊不定,这个问题比以前还要没谱。

今天和小公子一起吃饭,看看他和他女朋友,我发现年龄不是问题。再看看 cocobear 和他那个女朋友,我发现距离也不是问题。可为什么到了我这里什么都是问题了呢?倒不是我把年龄什么的看得太重,而是我觉得人家姑娘会看重这些。我认识的姑娘也不少,可真谈得来的没几个,可在这少有的几个中,可能因为做朋友时间长了都不会去想做恋人,久而久之,我也只能看着姑娘们一个个被别人带走。不过,到现在我们还是很好的朋友,所以这样不也挺好的吗?

而且,我人长得一点儿都不帅,平时还根本不注意外表穿着,用一个哥们的话说是,“一看你这身打扮就知道你是搞计算机的。” 自然不能博得姑娘们的青睐。虽然我平时脾气很好,基本上不会生气,可是一旦我拧巴起来,谁都不拗不过我,性格使然。这也决定了我不能很好地和姑娘相处,尤其是做恋人吵架的时候,所以我也没正儿八经地谈过几次恋爱。可是,还是有姑娘追我的,虽然连我自己都不太相信。对此我感激不尽,感谢姑娘你的赏识,可我这个人没什么好的,不值得你留恋,我和姑娘都这么说,亦是拒人于千里之外。

现在想想,一直到今天都没女朋友,纯属他妈的自己活该。别人给我介绍的我不要,追我的我又不答应,非得是自己认识的、自己喜欢的才行,可是自己又找不到,这不纯属自作自受么?有时候真想自己狠狠抽自己两巴掌……也就是这样,在一错再错的过程中,一步一步地走到了今天,这世界上没有卖后悔药的,对此我没什么可抱怨的,而且抱怨也没有用。

我这个人愤世嫉俗,有时候很拧巴,又喜欢四处漂泊,浪迹天涯,所以我觉得不太可能会有哪个姑娘愿意死心踏地跟着我,而且我总是觉得她跟别人或许会过得更好!如果哪一天她真出现了,真觉得非我不跟了,我一定要告诉她:我给不了你什么车子房子,但我可以帮你实现自己的梦想!我也给不了你一个固定的住所,但我可以给你幸福!因为,我走到哪里,家就在哪里!

API 与 ABI

(本文亦是《C语言编程艺术》中的一部分,所以请勿用于商业用途。)

一些程序员居然对API和ABI这两个概念都不清楚,我感到有些惊讶。这里以 Linux 内核为例简单解释一下。

API,顾名思义,是编程的接口,换句话说也就是你编写“应用程序”时候调用的函数之类的东西。对于内核来说,它的“应用程序”有两种:一种是在它之上的,用户空间的真正的应用程序,内核给它们提供的是系统调用这种接口,比如 read(2),write(2);另一种就是内核模块了,它们和内核处于同一层,内核给它们提供的是导出的内核函数,比如 kmalloc(),printk()。这些接口都是你可以在编写程序的时候直接看到的,可以直接拿来用的。

而 ABI 是另一种形式的接口,二进制接口。除非你直接使用汇编语言,这种接口一般是不能直接拿来用的。比如,内核系统调用用哪些寄存器或者干脆用堆栈来传递参数,返回值又是通过哪个寄存器传递回去,内核里面定义的某个结构体的某个字段偏移是多少等等,这些都是二进制层面上的接口。这些接口是直接给编译好的二进制用的。换句话说,如果 ABI 保持稳定的话,你在之前版本上编译好的二进制应用程序、内核模块,完全可以无须重新编译直接在新版本上运行。另一种比较特殊的 ABI 是像 /proc,/sys 目录下面导出的文件,它们虽然不是直接的二进制形式,但也会影响编译出来的二进制,如果它里面使用到它们的话,因此这些“接口”也是一种 ABI。

你平时看到的什么 POSIX 标准啊,C99 标准啊,都是对 API 的规定。而规定 ABI 的标准就不多,而且也没那么强势,Linux 上面的 ABI 标准似乎只有 Linux Foundation 提供的一些标准

好了,从上面我们可以看出,其实保持一个稳定的 ABI 要比保持稳定的 API 要难得多。比如,在内核中 int register_netdevice(struct net_device *dev) 这个内核函数原型基本上是不会变的,所以保持这个 API 稳定是很简单的,但它的 ABI 就未必了,就算是这个函数定义本身没变,即 API 没变,而 struct net_device 的定义变了,里面多了或者少了某一个字段,它的 ABI 就变了,你之前编译好的二进制模块就很可能会出错了,必须重新编译才行。

你可能会感到意外,上游的 Linux 内核其实不光不保持稳定的 ABI,它就连稳定的 API 都不会保持!而且还牛逼哄哄地写了一个文档,叫 stable_api_nonsense.txt。这么做的道理是,内核一直在向前推进,而且速度很快,内核开发者们并不想因为 API 的限制而阻碍前进的脚步!毕竟我们不想成为下一个 Windows!:-)

所以,你的驱动在不同版本的内核上不经修改直接运行那几乎是不太可能的,就算是你允许重新编译也未必就能不经修改编译成功。即使在同一个大版本的不同发行版上也可能不行。

那你应该怎么办?最好的办法莫过于把你的驱动贡献到社区,汇入内核源代码树中,这样一旦内核的 API 有改动,改动这个 API 的人就有义务替你修改你的驱动的代码,你只需要 review 一下(或者这个也会有人帮你),也省去你不少时间,何乐而不为呢?另一种办法就是基于某个提供稳定 ABI 的内核,比如红帽的 RHEL (认为这是广告的人请使用 CentOS,谢谢!),红帽的企业版内核保证有稳定的 ABI,只要你没有跨大的版本,因为我们的源代码里会检测 ABI 的变化,为此我们实在付出了不少努力。

当然了,如何检查 ABI 变化那就是另一个有意思的话题了,以后有机会慢慢说这个问题。

斯为常识

最近国外不安宁,可国内比国外还热闹,每天看国内各种时政新闻跟娱乐新闻似得。如此下去,人家娱乐圈怎么办?你们再这么演下去,人家演员怎么办?迟早有一天奥斯卡会被你们拿走!

言归正传。梁文道写过一本书,叫《常识》,封面即提到“本书所集,无甚高论,多为常识而已。若觉可怪,是因为此乃一个常识稀缺的时代。”愚以为,我们不是缺常识,而是有太多的混淆常识的论调,使得常识变得不那么显而易见。

列举如下。

1. 人类发展到今天依然是贪婪、自私,否则我们全都实现共产主义了。因此,权力越大的人越有可能滥用权力,尤其是在不受监督的情况下。所以,不管他们把牛逼吹上天,把话说得比唱歌还好听,想要不受约束和监督就能清白,那是不可能的。

2. 我们首先是人,其次才是中国人。所以,如果我们在这个国家连做人最基本的尊严都没有,凭什么还要做中国人?你还有什么更高尚的理由去迫使人家留下来?所以我旗帜鲜明地支持移民。同理,日本地震,如果你连最起码的人的同情心都没有,怎么好意思说自己是中国人?

3. 看一个人交什么样的朋友就能知道他是什么样的人,国家亦如此,看它把什么样的国家视为“老朋友”就知道它想成为一个什么样的国家。其实,那些被我们视为“万恶”的国家大都对我们挺不错的,美国也好,现在的日本也罢,比起那些“老朋友”来说真不知道要好多少倍。

4. 从来都是人民养的政府,没有政府养人民这一说,因为政府的收入是靠每一个公民的纳税。纳税说白了不就是花钱买服务么!只不过这个花钱是一种义务,可得到服务也得是权利才行啊!花钱能买到服务,那是正常社会。花钱买不到服务,那是流氓。不服务还要你花钱,那是土匪。

5. 纵观人类历史,人类社会一直都是向更自由、更平等的方向发展。可有几个国家就是偏偏逆势而行,简直就是展示人类丑陋灵魂的活的博物馆。我都怀疑他们是不是照着《动物庄园》上写的去做的呢?怪不得这书还没被禁啊。

6. 不管他们说得多么好听,多么动人,如果连孩子都不放过,如果连孩子的教育都不舍得投入,那这个国家一定没有希望,毫无疑问。

7. 他们总以为别的国家也像他们一样,做事没有原则,没有价值观,打仗一定是为了利益,其实他们才是这样,为了利益不惜一切手段,更过分的是,还是从自己的人民身上。要知道“虎毒不食子”啊。

民主的国家各有各的民主,独裁的国家却总是相似的。

请勿自觉对号入座!

That is love

“爱不是千言万语,也不是朝朝暮暮。爱是每当午夜梦醒时,发现内心牵挂的依然是远方的你。”

On love

What is love?

That must be love…

(图片选自 9gag.com。这个网站不错,每天都有很多很有意思的图片。)

又开始周游全国了

在家里待了有些日子了,整天过着“饭来张口,衣来伸手”的日子,上周愣是在家里待了六天连门都迈出去一步。其实在家里上班比在办公室都累,以前是八小时办公,回家之后成十二小时了,前些天还经常在夜里一两点回复邮件,估计大家都感觉我移民美国了好像……

现在家里没什么事儿了,爸妈都过得挺好的。我在家也憋不住了,开始收拾行李,准备再次出发远行了。

其实,在此期间我去了一趟杭州,在济南机场和杭州机场候机时我都能专心地看代码,看来我已经能适应这种漂泊的生活。所以万事俱备,只欠东风,周末就动身出发下江南了。

第一站是苏州,都说“烟花三月下扬州”,我说我这是去苏州看丫头!因为还有“南京看坟头,苏州看丫头”一说,去南京的时候确实是看坟头去了,不知道苏州的丫头会不会比杭州的还漂亮?而我路过江南小镇的时候,会不会也惹上一个江南的丫头?

从苏州出发向西行,回到阔别两年的西安,你们谁也阻止不了我去南稍门建基吃牛肉泡馍,你们谁也阻止不了我去小寨吃那家我至爱的米皮!今天的西安已非当年的西安,只是不知道,当年学校里面的那个小吃街的砂锅西施,而今安在哉?

从西安南下就到了四川,吃着火锅还唱着歌。这里山好,水好,妹子好!你看,我走过全国那么多地方,还是最喜欢四川重庆的妹子了!“少不入蜀”大抵就是这个道理。尤其是那个叫雅安的地方,人都说雅安有三雅:雅鱼,是说鱼好吃;雅雨,是说雨水好;雅女,是说那儿的姑娘们漂亮!更何况人家还有打箭炉和理塘这两个地方呢!这次去要看望一下小佳妹子,我说等我到了咱们一起吃一起唱!可是,你也知道,在四川,叫小佳的妹子何止万千!

从四川走就向东了,到了以前从未去过的广西,都说桂林山水甲天下,这个我不清楚,可是我知道它旁边有个地方叫阳朔,和丽江一样出名的地方……

在桂林待到四月中旬,然后就得动身赶往福州参加小林子的婚礼了,途经广州中转,拜见一下老大和他那小女朋友。到了四月底的时候我就能到达厦门了,终于可以去鼓浪屿转一下了。等参加完小林子的婚礼我就该踏上回来的旅途了,如果有机会去一下江西婺源,然后借道南昌就回北京了。

此次回京是为办签证,无意久留。所以等签证一办好就会回家,或者直接去我向往的那个南方小城,漂泊暂时结束,新的旅途等到了七月,到了葡萄牙再开始…… Eu estarei de volta para a Europa!

PS1 上面的图是我闲着无聊的时候手工画的,很坑爹是吧。

PS2 有人说我这样简直就是流窜犯……其实呐,我充其量也就只是个流氓!

PS3 有好几个人诅咒我,说我很快就会回北京的。靠,就冲你们这句话我也不回去……