123
 123

Tip: 看不到本站引用 Flickr 的图片? 下载 Firefox Access Flickr 插件 | AD: 订阅 DBA notes --

2008-09-08 Mon

06:31 阿里巴巴(中国)网络技术有限公司招聘运维架构师 (2752 Bytes) » 知道分子
全球领先的网上贸易市场和商人社区

* 你是谁?

1. 五年以上系统管理经验,或从事系统架构师/运维架构师相关职业三年以上
2. 对于操作系统、网络、存储、监控、数据库乃至程序开发都熟悉,而且至少掌握其中两项
3. 精于容量规划、架构设计、性能优化
4. 了解电子商务
5. 热爱技术、热爱生活


* 我们是谁?

1. 全球领先的网上贸易市场和商人社区 Alibaba.com
2. 香港联合交易所上市公司 1688.HK
3. 我们的办公场所位于风景如画的西子湖畔、钱江两岸


* 我们可以为你提供什么?

1. 世界瞩目的舞台
2. 明确的职业发展路线
3. 有竞争力的待遇


有意者请将简历发送至: fengliang[a]zhidaofenzi.com (合则约见)

06:31 通过即时消息掌握豆瓣小组更新动态 (8339 Bytes) » 知道分子
如果你和我一样,是个豆瓣迷的话,一定会时不时上豆瓣刷一下页面,看看组里有什么新人加入、有什么好玩的新话题、自己下的饵有没有人咬钓上钩...而结果往往事与愿违,十之八九既没有新人加入、也没有好玩的新话题、更没有人咬你的饵上你的钩。怎么办?

这种重复劳动还是让程序自动帮你去做吧。当且仅当有新人加入、有好玩的新话题、有人咬钓上钩时,才告诉你——最好是通过即时消息——“打雷啦,下雨啦,快回组里收衣服啊!”这样岂不是很make sense?哈哈。

我在豆瓣上建了一个杭州书虫小组,组里有700来号人,每天组员人数、讨论帖、小组收藏总计的变化次数在20-30次左右,人工反复去查看实在浪费时间。于是就想到利用脚本,实现通过即时消息告知小组页面更新的功能。具体思路是这样的,每隔3分钟用"lynx --source http://www.douban.com/group/hzbookworm/"命令抓取杭州书虫小组页面源码,再用md5sum命令生成MD5校验值,与前次保存的MD5校验值比对,若一致,则不做任何动作,若不一致,则通过python脚本发送Google Talk即时消息给我,通知页面更新。

首先下载Jabber协议的Python库:xmpppy,并在Linux系统里安装:

localhost ~ # wget http://nchc.dl.sourceforge.net/sourceforge/xmpppy/xmpppy-0.4.0.tar.gz

localhost ~ # tar xvfz xmpppy-0.4.0.tar.gz

localhost ~ # cd xmpppy-0.4.0

localhost xmpppy-0.4.0 # python setup.py install


然后在你的普通用户目录里存放一个用于发送Google Talk即时消息的Python脚本(需要调用前面下载的xmpppy库):

#!/usr/bin/python

# FILENAME: sendgoogletalk.py


import xmpp

login = 'loginID' # @gmail.com
pwd = 'password'

cnx = xmpp.Client('gmail.com')
cnx.connect( server=('talk.google.com',5223) )
cnx.auth(login,pwd, 'botty')

cnx.send( xmpp.Message( "loginID@gmail.com" ,"http://www.douban.com/group/hzbookworm/ updated" ) )


请将代码中的 loginID 改为你的Google帐号ID,password 改为你的Google帐号密码,发送消息改成“打雷啦,下雨啦,快回组里收衣服啊!”

最后用"crontab -e"命令编辑你的用户定时任务,加入一段:

*/3 * * * * ( if [ `lynx --source http://www.douban.com/group/hzbookworm/ | md5sum -c /tmp/md5sum-douban | grep OK | wc -l` != '1' ]; then lynx --source http://www.douban.com/group/hzbookworm/ | md5sum > /tmp/md5sum-douban ; /usr/bin/python /home/hutuworm/douban/sendgoogletalk.py > /dev/null 2>&1 ; fi )


大功告成!从此,每当杭州书虫小组有任何风吹草动,我都会即时收到Google Talk跳出来的消息了。

06:31 通过 Google App Engine 查看墙外的 FeedCount (5181 Bytes) » 知道分子
出于众所周知的原因,大墙内多数尚未熟练掌握翻墙技能的孩子们,都看不到 FeedBurner 提供的 FeedCount()。很多租用国外主机的博客,比如 Fenng 兄的 DBA Notes,则是通过在服务器端抓取静态图片的办法解决:http://www.dbanotes.net/feed.gif。那么,租不起国外主机的穷孩子咋办?

Google App Engine 这时候就能派上用场了。写个图片转发小程序,把墙外的 FeedCount 图片转发进来展示即可。步骤如下:

1. 编辑 app.yaml,在 handlers: 后面添加以下两行:

handlers:
- url: /feedcount
script: feedcount.py


2. 新建 feedcount.py:

from google.appengine.api import urlfetch

url = "http://feeds.feedburner.com/~fc/hutuworm?bg=99CCFF&fg=444444&anim=0"
result = urlfetch.fetch(url)
if result.status_code == 200:
print 'Content-Type: image/gif'
print ''
print result.content


3. 更新 App Engine,然后你就可以通过 http://hutux.appspot.com/feedcount 查看墙外的 FeedCount 了。

Google App Engine 允许每个 app 每天免费进出 20 GB 流量,该干啥干啥吧。

06:31 读余英时《未尽的才情》 (6778 Bytes) » 知道分子
余英时先生近几年雅好以书为序。原本只是给人家捉刀写序,提起 笔来却飞流直下三千尺,收也收不住,把一篇序生生写成了一部书。自2003年起,《朱熹的历史世界》(标点本《朱子文集》序),《重寻胡适的历程》(《胡 适日记全集》序),到今年《未尽的才情》(《顾颉刚日记》序),余先生接连出版了三部书序,创造了文体上的奇迹。

《未尽的才情——从 <顾颉刚日记>看顾颉刚的内心世界》为联经版十二卷《顾颉刚日记》而著,承此前两部之余绪,深入挖掘又一位已故大师的历史世界和内心世界。全 书分五节,从顾颉刚与傅斯年、胡适、国民党、新政府、谭慕愚五个角度,分述顾颉刚的事业、学术、立场、遭遇和情感。然脂暝写费搜寻,从六百余万字的《顾颉 刚日记》中爬梳出一个鲜活的顾颉刚,撰六万字长序,使读者于《古史辨》之外,对记忆中的史学大师产生全新的认识。此番辛苦,可谓功不唐捐。

说 起顾颉刚,第一想到的便是其名震江湖的煌煌巨编《古史辨》,“层累地造成的中国古史”说,与“鲧是一条鱼,禹是一条虫”之奇谈妙论。上个世纪二三十年代, 顾颉刚挟史学界疑古之风潮,发表《与钱玄同先生论古史书》,重新考辨上古史诸问题,引起学界内外极大震动。遂发起古史辨运动,与罗根泽、吕思勉、童书业等 先生,陆续整理编纂七大册中国上古史论辩丛书,亦即《古史辨》。顾颉刚的主要学术观点,就是“层累地造成的中国古史”说。他通过分析、考辨各种史籍而得出 结论,“时代越后,知道的古史越前;文籍越无徵,知道的古史越多”,我们如今知道的上古史,乃是历代颇具想象力的祖先们,旁征博引异族神话、结合本土实际 发挥,不断层叠累积创作出来的伪上古史。因此,他主张利用辨伪的方法,去伪存真以重建信史。当然,顾颉刚的想象力也不亚于历代祖师,他以训诂得出“鲧是一 条鱼,禹是一条虫”之奇谈妙论,颇受鲁迅的冷嘲热讽。

顾颉刚不只是作为史学家的顾颉刚。除了整日与之为伍的古籍外,他也有事业心,也有不 幸的遭遇,也有常人的七情六欲,甚至还有激荡以至浪漫的情感。这些都是以往读者所全然不知的。顾颉刚身后幸存这部六百余万字的日记,虽经劫灰,多有删削, 我们还是能从中一窥其内心世界。余英时先生的序言题为《未尽的才情》,其中“才”与“情”分指顾颉刚学术和事业的长才,及其与谭慕愚女士之间的一段未了情 缘。所谓“千古文章未尽才”,说的是顾颉刚早年以《古史辨》暴得大名,四九鼎革之后却屡遭冷落和不幸,晚年企慕王国维的学问境界,恨无以施展其学术事业之 长才,壮志难酬。所谓“堪叹古今情不尽”,说的是顾颉刚与谭慕愚女士之间,缠绵逾半个世纪那一段“柏拉图式的精神恋爱”,却无果而终。

通 观全序,余英时先生取《胡适日记全集》、《吴宓日记》及各种史料文字与《顾颉刚日记》相互印证、补正、参证,颇见功力。如第二节末尾(P49-P51), 余先生考证顾颉刚与胡适关系一段,说到“1957年,胡适大病之后在寓所休养,偶然读到俞平伯《红楼梦辨》的原版(1923年)。勾起旧情,他写了一篇两 千多字的跋文,回顾他在1921-23两年中和顾、俞两人考辨《红楼梦》的往事。”余先生进而“为好奇心所驱遣”,“想知道顾先生在同一天在做什么。恰巧 他也在青岛养病,却正在苦读《历史唯物主义》(《顾颉刚日记》1957年7月23日)”。又为了弄清楚顾先生为何非读此书不可,找到了《吴宓日记续编》 (北京:三联,2006)1956年9月10日所记,原来当时他们都在参加政治学习,进行思想改造,顾先生“虽在养病,仍不得不捧着这部‘文字累赘、不易 通晓’的译本苦苦挣扎”。如此一波三折,令人拍案叫绝。余英时先生此序通过提炼组织六百万字《日记》中主要的传记材料,概括了顾颉刚一生活动的主要范畴, 为我等终日营营碌碌、无暇读书之辈,提供了快速进入顾颉刚内心世界的捷径。另外,随处可见的印证、补正、参证,不仅对《顾颉刚日记》本身进行了一番“辨 伪”,真实还原了顾颉刚的历史境遇和当时心理,也在方法论上于读者多有启迪。

“千古文章未尽才”、“堪叹古今情不尽”,读罢全序,掩卷回想顾颉刚,唯有一声叹息。

(《未尽的才情——从<顾颉刚日记>看顾颉刚的内心世界》,余英时 著,联经出版公司,2007年3月初版)

06:31 行走在消逝中 · 致友人 (3977 Bytes) » 知道分子
佛问诸沙门,人命在几间。
对曰,在数日间。
佛言,子未能为道。
复问一沙门,人命在几间。
对曰,在饭食间。
佛言,子未能为道。
复问一沙门,人命在几间。
对曰,呼吸之间。
佛言,善哉,子可谓为道者矣。

——《四十二章经》

都说人生如戏。人生就像拍电影,逝去的岁月,一颦一笑,一举手一投足,已在摄影机里不停转动的胶片中定格。亦说人生如梦。当我们追忆往昔,倒转胶片回看过去,虽历历在目,却如梦似幻,伸手而不可及。

《四十二章经》里佛与诸沙门那一段问答,道出了人生的另一个秘密。人命在几间?呼吸之间。再好看的戏,再美妙的梦,终有落幕梦醒的时候。何时落幕,何时梦 醒,全然不由你我掌握。若一口气上不来或者下不去,则就此封镜杀青。好不好看自有他人评说,而你和你的过去,将在时间的胶片中成为一帧帧永恒的画面,不再 有回头删改的机会。

有人以为,中国人平均寿命72岁,自己还有大量时间可以随便挥霍。殊不知,这平均寿命72岁乃是对过去一段时间内死者寿命进行算术平均的结果,最多只能作 为社会老龄化程度的衡量指标,或是反映我国人民卫生保健和社会保障水平的指标,并不能依此预测你我的寿命。天灾人祸随时可能降临,呼吸之间,世界像关灯一 样瞬时寂灭。

庄子说,吾生也有涯,而知也无涯,以有涯随无涯,殆矣。求知固然重要,而人生有限,若没有目标,只是一味地学这学那,浅尝辄止,在前人的窠臼里打滚,重复 发明轮子,却不抓紧时间利用现有的知识、经验和技能,改变一点东西,创造一点东西,终究如宗杲禅师所谓,弄一车兵器不是杀人手段——到头来一事无成,于世 无益。

行走在消逝中,人生的春天转眼就历夏而秋。希望你,我的朋友,珍惜眼前的时光,在即将到来的夏天,绽放你的绚烂,生如夏花。

06:31 系统管理员道德准则 (6590 Bytes) » 知道分子
---------------------------------------------------------------------------------------------------
PDF suitable for framing: Poster version (vertical) or Diploma version (horizontal).

USENIX grants permission to reproduce this Code in any format, provided that thewording is not changed in any way, that signatories LOPSA, USENIX, and SAGE areincluded, and that no other signatory or logo is added without explicit permission from the copyright holders.

---------------------------------------------------------------------------------------------------

@Copyleft 2007 Translated by: hutuworm AT gmail DOT com
---------------------------------------------------------------------------------------------------

我们作为专业的系统管理员,应使自己符合最高标准的道德规范和专业精神,接受本道德准则的指导,并且努力促进所有系统管理员均照此行事。

专业精神:
  • 我要在工作中力求保持专业,不允许受个人情感或信念左右,从而导致不公平或不专业地对待他人。

自身正直:
  • 我要在我的专业工作中恪守诚信,对于我具备的才干和我所犯错误的影响,均坦白面对。当需要时,我会寻求他人的帮助。
  • 无论如何,我都要努力避免由兴趣和成见所导致的抵触情绪。当被征询意见时,如果我有此类抵触情绪,我会在合适的时机声明,若有必要的话则要求撤换自己。

保护隐私:
  • 我只在技术工作的必要过程中访问电脑系统里的私有信息。无论通过何种方式知道了那些我可访问的任何信息,我会对此保守机密。

守法合规:
  • 我要以实际行动教育自己和他人遵守相关法律、法规与政策。

保持沟通:
  • 我要与管理层、用户及同事就技术问题和共同利益保持沟通。我会努力倾听和了解各方需求。

系统完整:
  • 我要努力保证我所负责系统的完整性、可靠性和可用性。
  • 我会设计并维持每个系统各自实现该系统之于整体的价值。

教学相长:
  • 我要不断更新和增强我的技术知识,以及与工作相关的技能。我会将我的知识和经验与他人分享。

行业责任:
  • 我会与更大的行业团体合作,以保持网络和计算资源的完整性。

社会责任:
  • 作为消息灵通的专业人士,我会推动与这些道德准则诉求一致的相关政策和法律得以起草并颁行。

道德责任:
  • 我要努力创建和维护一个安全、健康及富有生产力的工作场所。
  • 我会尽全力作出与保障社区和公众的安全性、隐密性与舒适性等价值诉求相一致的决定,随时揭露那些貌似未经检查确认的风险和危险因素。
  • 我会恰如其分地针对技术工作接受或提出富有诚意的批评意见,并将他人的贡献完全归功于他人。
  • 我要以身作则,在全部工作实践中维持高标准的道德规范和专业精神。我会支持全体同仁遵循本道德准则。

---------------------------------------------------------------------------------------------------

Draft of September 12, 2003, approved September 18, 2003, by the SAGE Executive Committee and September 30, 2003, by the Ethics Working Group.

Co-signed by LOPSA, USENIX, and SAGE 2006.

---------------------------------------------------------------------------------------------------

06:31 用 xmpppy 和 Google Talk bot 制作命令行翻译机器人 (19527 Bytes) » 知道分子
命令行偏执狂们都喜欢用字符命令搞定一切,当然应该包括翻译在内。最近兄弟我在翻译 Django 1.0 的 zh_CN locale 文件时,颇为那一大堆国名地名所困扰。为了准确翻译,要把这些名词逐一在 PoeditPidgin(我用的是 Google Talk en2zh bot: en2zh@bot.talk.google.com)两个窗口之间来回反复拷贝粘贴。拷贝原文,粘贴原文,回车,拷贝译文,粘贴译文——翻译一个地名至少需要耗费五步操作,翻译两百个地名就是一千次操作,怎么不头晕呢?

于是就想到利用 xmpppy 来制作一个 en2zh 命令行工具,实现自动翻译。好在 xmpppy 已经提供了 xtalk.py 代码样例,只要略作修改即可:

--- xtalk.py 2006-10-06 20:30:42.000000000 +0800
+++ en2zh.py 2008-09-07 08:37:22.000000000 +0800
@@ -1,4 +1,6 @@
#!/usr/bin/python
+# en2zh.py = xtalk.py + en2zh@bot.talk.google.com
+# @Copyleft 2008 hutuworm (http://hutuworm.blogspot.com)
# $Id: xtalk.py,v 1.2 2006/10/06 12:30:42 normanr Exp $
import sys,os,xmpp,time,select

@@ -15,7 +17,8 @@
type = event.getType()
fromjid = event.getFrom().getStripped()
if type in ['message', 'chat', None] and fromjid == self.remotejid:
- sys.stdout.write(event.getBody() + '\n')
+ sys.stdout.write(event.getBody().encode('utf8') + '\n' )
+ sys.exit(0)

def stdio_message(self, message):
m = xmpp.protocol.Message(to=self.remotejid,body=message,typ='chat')
@@ -27,22 +30,23 @@
if not con:
sys.stderr.write('could not connect!\n')
return False
- sys.stderr.write('connected with %s\n'%con)
+ #sys.stderr.write('connected with %s\n'%con)
auth=self.jabber.auth(jid.getNode(),jidparams['password'],resource=jid.getResource())
if not auth:
sys.stderr.write('could not authenticate!\n')
return False
- sys.stderr.write('authenticated using %s\n'%auth)
+ #sys.stderr.write('authenticated using %s\n'%auth)
self.register_handlers()
return con

if __name__ == '__main__':

if len(sys.argv) < 2:
- print "Syntax: xtalk JID"
+ print "Syntax: en2zh text"
sys.exit(0)

- tojid=sys.argv[1]
+ tojid='en2zh@bot.talk.google.com'
+ text=sys.argv[1]

jidparams={}
if os.access(os.environ['HOME']+'/.xtalk',os.R_OK):
@@ -66,6 +70,8 @@
sys.exit(1)

#cl.SendInitPresence(requestRoster=0) # you may need to uncomment this for old server
+
+ bot.stdio_message(text)

socketlist = {cl.Connection._sock:'xmpp',sys.stdin:'stdio'}
online = 1


或者直接下载修改后的 en2zh.py: http://github.com/hutuworm/minitrue/tree/master/en2zh.py

然后按以下步骤设置并使用:

0. 安装 xmpppy: $ easy_install xmpppy

1. 在 home 目录中创建 .xtalk 配置文件,设定你的 Google Talk 用户名和密码,为了安全起见,必须将该文件权限设为 0600:

$ cat .xtalk

#Uncomment fields before use and type in correct credentials. #JID=romeo@montague.net/resource (/resource is optional) #PASSWORD=juliet

JID=your-id@gmail.com

PASSWORD=your-password

$ chmod 0600 .xtalk



2. 测试翻译:

$ python en2zh.py "Bosnia and Herzegovina"

波斯尼亚和黑塞哥维那



3. 自行编写任意命令代码,调用 en2zh.py 完成自动翻译工作。(注意:Google Talk en2zh bot 比较适合翻译名词、短语,翻译完毕之后无论如何一定要检查一遍。)

06:31 古今之变 (7392 Bytes) » 知道分子
刚刚了结《丧家狗》之争,正循着当年孔子周游列国的足迹,沿途拍摄纪录片“重走孔子路”的 李零 教授,在路上忽然又抛出一本新书:《铄古铸今——考古发现和复古艺术》。如果只看封面,那正方形的开本,装帧设计近乎 査建英《八十年代》,若同样也有四五百页的厚度,简直非超人莫为。待拿到手里,方知这本书其实只是 零公数年前的一篇长文。如今再版,加上大量图例、脚注,又将原先文末长注打散,以【案】的形式分别遣入正文相应段落末尾,才有了这本150页不到的薄薄小书。

李零从小就喜欢书法、绘画、篆刻,家人都认为他是个美术坯子,期望他长大后成为一位画家。而人生往往事与愿违,如其前言所述,后来并没有走上画家之路,却阴差阳错地成了考古学家。辗转多年,现在又供职于北京大学中文系。五年前应邀赴香港中文大学艺术系担任客座教授,终于以这份研究成果圆了艺术研究之梦。当然,这篇长文并非仅仅是作者个人的圆梦之作,就“复古艺术”这个主题而言,作者收集资料之完备、展示图例之丰富、立论逻辑之谨严、创获见解之精辟,令人不得不由衷钦佩。

记得 包伟民先生曾在一次讲座中偶然提及,中国古代建筑多为木结构或砖木结构,核心架构均是木制构件。受制于木料本身的脆弱,火焚、水浸、风蚀、虫蛀都会使木构件损毁,难以延续千年。自古以来,在古建筑修复中有一种最高级的方法,便是“落架大修”。所谓“落架大修”,是将原古建筑所有构件逐一编号落架,用新材料复制毁损构件之后,再按原样组装整座古建筑的复杂过程。我们如今见到的不少古建筑,原来均为历代“落架大修”所得的假古董。比如岳阳楼,始建于唐玄宗开元四年(716),北宋庆历六年(1046)滕子京重修,明崇祯十一年(1639)毁于战火,翌年重修,清光绪六年(1880)大修,本朝三十五年(1983)落架大修,五十九年(2007)又由地方政府斥资3.2亿元大修。忆及此处,心中顿生疑窦:即便依照“修旧如旧”的原则来进行落架大修,以岳阳楼为例,今年这次大修究竟该“如”哪个“旧”,唐、宋、明、清,还是本朝三十五年的“旧”?历朝历代的多次大修、重修、落架大修,已篡改甚至消灭了唐代岳阳楼原建筑中的太多细节。仔细想想,我们眼前这座焕然一新的“古建筑”,其合法性真的十分可疑。
此书题旨,便是要研究中国艺术史上的复古问题,用考古发现来解析复古艺术的审美趣味,分析其间托古、悖古、法古、作古的成分,以及人们怎样接受和认可这种审美标准的过程。作者发现,复古艺术的典型个案一般包含三个步骤:考古、仿古和变古。前二者有时不太明显,变古则是必不可少的——“借尸还魂的目的,是要突出新意”。此外,穿凿附会的古迹、张冠李戴的坟冢,亦如吴带当风的美女、慈眉善目的偶像,都是为了满足人类想像的代用品。地不爱宝,古已不存,后人只能依据古代遗留的片鳞只爪,用当代的材料和技术,反复描摹对古代的想像。何况仿古制品,就算假古迹,流传千年,也会变成真古迹。回看焕然一新的岳阳楼,与其指摘主事者“形象工程、政绩工程”,毋宁说“古已如此,于今为烈”罢了。

接下来作者分别以“王莽时期的文物古迹”、“宋代金石学”与“宋以来的文人艺术(以篆刻为例)”为标本,举例分析。王莽托古改制,以“古”为名,朝代却是以“新”为号。反映到王莽时代的遗址遗物:半据礼书想像,却又半考式盘、博局而设的明堂;货币以西汉五铢钱为基础,却又模仿战国的刀币和布币;度量衡器除嘉量出于复古想像,其余皆为汉代风格。可见王莽难以摆脱他身处其中的“现代性”和先天承受的现实遗产,与梦想中的周公渐行渐远。宋代金石学亦复如是:用于铭文考释的《汗简》,以东汉隶书记录的战国文字读法为基础,释读更早的文字,过程基本靠摸;而据以制器的《三礼图》,因名图器,器形完全从礼文揣测,跟真实器物差距很大,更无异于盲人摸象。后来虽有《考古图》、《博古图》等因器定名的金石图录,但无式可遵时,宋人还是会依据《三礼图》,利用铜、玉、陶、瓷等材质和当时工艺,孜孜不倦地制作仿古器物,以对古代的想像填补知识上的空白。宋以来的文人艺术虽与以往的复古艺术有所不同,但还是逃不出古人的规矩和传统:诗文必法汉唐,书翰之推钟王,篆刻追摹汉晋,凡此种种,复古的结果却往往是去古甚远。

由是观之,古今之变繁复如斯,岂是太史公一句话,说“通古今之变”就能“通”的。矛盾在于,“人们总是希望复原古代,但古代却不可复原”。学者吹毛求疵,苛求细节,不过是五十步笑百步。复古艺术说到底,毕竟还是艺术。“了解之同情”,或曰“温情与敬意”,以普通人的平常心看待“铄古铸今”,才是解毒良剂。

(《铄古铸今——考古发现和复古艺术》 李零 著,生活·读书·新知 三联书店,2007年8月)

06:31 冯象讲座侧记 (6531 Bytes) » 知道分子
冯象先生来了,身穿厚厚的羽绒衣,头戴一顶棉帽,肩挎一个Wiley出版社的黑底广告布袋。仿佛一位刚从书店淘书归来的老先生,瞥见这儿会堂里学生众多,就顺便拐进来跟大家扯几段掌故似的。坐上讲台,除下棉帽,头发稀疏而花白,展开讲稿,戴上老花镜,恍然已不是相片里那位英气勃发的青年学者了。

话题挺有趣。第一天晚上讲的是“剽窃与版权”,事起王天成诉周叶中剽窃案。北京市第二中级人民法院一审判决书,把界定的标准不断放松,将涉及抄袭的范围不断缩小,最后竟全盘推翻抄袭指控,原告败诉,几视著作权法为一纸具文。而具文,又何尝不是我国法律的一大特点呢?冯先生举出最高人民法院应用法学研究所编纂的《人民法院案例选》中两则案例,一则是死者家属诉酒厂出品酒瓶上无显著标识导致受害人饮酒过量致死案,一则为家长诉LG电子有限公司广告画面出现恐怖形象导致受害儿童精神损失赔偿案。两案依据地方法院的判决,酒厂遵守了国家有关技术标准,法院也无权判断国家技术标准;LG广告符合广告法规定,法院亦无权定义“恐怖”,因此均判被告无罪,原告败诉。而《人民法院案例选》的责任编辑杨洪逵先生(已故)却另有见解,虽就法律条文论,地方法院的判决都正确合法,但出于社会公义考虑,此类案件有公益诉讼的性质,因此法官完全可以且应当走价值判断的路子,为弱势一方争取权益,并由此推动法律和司法的发展。同样,周叶中的案子也应参考公益诉讼的办法,一个符合公义的判决,有利于推动当下的大学改革、教育改革,有利于惩治学术科研腐败、净化学界环境,更有利于展现法律的生命力,推动法制自身前进。冯先生指出,法律条文永远不可能完善,我们不能把所有责任和问题都推给立法,改革开放之所以走到今天,主要就在于不断解放思想,突破既有的条条框框,不断超越僵化而机械的固有体制。价值判断应先于法理判断,让有违公义、有害公理的问题得到处理(不一定能立刻解决),追求实现作为公平的正义,则善莫大焉。

第二天晚上从西溪校区转到了紫金港校区。这次的题目更好玩,“宪法也是个好东西”,呼应俞可平《民主是个好东西》一文(《学习时报》第367期)。开场首先提到了北大巩献田教授此前撰公开信反对《物权法》草案,直指该法案违宪,而随即得到有关部门甚至中央领导的高度重视,召集国内法学家七次开会讨论修订草案一事。时至今日,宪法终于“也是个好东西”了,中国历史上似乎从未有人把违宪当回事,如今竟然因学者指责违宪而导致一部法律草案接连修改七次才正式出台,说明中国社会确实有了一点进步。冯先生引述德州大学Austin分校 Paul Woodruff 教授的新著 First Democracy - The Challenge of an Ancient Idea (Oxford Press,2006)中,关于雅典民主的七项要素:自由(Freedom from Tyranny)、和谐(Harmony)、法制(Rule of Law)、平等(Natural Equality)、民智(Citizen Wisdom)、辩论(Reasoning without Knowledge)、教育(Education)。只有具备了这七项要素,才有可能培育出“雅典公民”,也只有当出现一大批“雅典公民”时,社会才有可能孕育出好的民主体制。环顾全球,当今世界多数国家是民主国家,而其中多数民主国家是社会混乱、多数民众受苦的国家,民主并不是万灵药。回到开场的话题,现在允许学者公开辩论、公开指责某法律草案违宪,并且领导同志会因担心该法案违宪而推迟法案出台,召集法学家反复讨论修订,才慎重推出定稿。在这里,《物权法》草案违宪与否并非问题要点,关键在于,宪法的权威得到了维护,法制的力量得到了彰显,价值层面的判断高于技术层面的操作,这是走向好的民主体制的开端。

冯象先生颇有大家风范,语调温和,娓娓道来,又不乏针砭时弊,间或点缀几句妙语,引起满场共鸣,不时爆出笑声和掌声。虽然我更希望听他讲尘土亚当、译经故事,但两个晚上到浙大赶场子听他讲法律,还是觉得大有收获。他深厚的学养、优雅的风度、精微的思辨、深刻的洞察,为后学晚辈树立了学习进取的路标。而那种淡定超然的心态,恐怕一时半会儿学也学不来的。惟愿冯象先生身体健康,一切安好。

06:31 公司要系统管理员干嘛? (4894 Bytes) » 知道分子
这几日重读冯象《政法笔记》,见有小文一篇《中国要律师干嘛?》, 由此而不禁生发联想:公司要系统管理员干嘛?抄鲁爷一句话,系统管理员是本无所谓有,也无所谓无的。想当年读书时,在软件公司里兼职做小网站,谁不是一身 数职。从架服务器、装系统、搭环境,到数据库设计、编代码、写SQL,甚至部分美工,更别提什么系统管理、数据库管理,都一勺烩了。谁好意思说我只会系统 管理、数据库管理,就那么两三台服务器、十几二十张表,人家可养不起你专职的SA、DBA。如今,专职的SA已做了四年有余,虽然离七年之痒还有些距离, 却已存了不少对这份职业的心得和感悟。

所谓系统管理员,第一要务当然是保证所维护系统安全可靠地稳定运行。如果系统不稳定,三天两头要么当机,要么被骇客随意进出,可用性不是若干个9而是若干个8,那这位系统管理员现在不滚,又更待何时。系统管理员日常处理的事务既多且杂,一定要有良好的时间管理习 惯,根据事项的轻重缓急区分不同优先级,安排时间一一落实。系统管理员在系统中具有至高无上的权力,在虚拟世界里,系统管理员就是上帝,谁要敢说用户是上 帝,系统管理员(俗称网管)一脚就可以把他踹出系统外面去。系统管理员所接触的设备和数据对于公司来说,都至关重要,稍有闪失,恐怕会危及公司命脉,因 此,系统管理员必须具备良好的道德修养, 自身正直、保护隐私、守法合规,处处体现专业精神。所以前述视“客户第一”如狗屁的系统管理员,应该自觉卷铺盖回家。系统管理员直接面对真实世界、复杂系 统里的诸多复杂问题,需要系统管理员不仅具有精湛的技术、广博的知识、沉稳的心理素质,细致严谨、随机应变,更要有敏锐的嗅觉、前瞻的意识,以及架构设计、容量规划、性能分 析、故障排查等多种综合能力。

真的猛士,除了要敢于正视淋漓的鲜血之外,还要敢于直面惨淡的人生。系统管理员实施网络切换、系统调整、 IDC搬迁等重大项目,一般都在深夜或者国定长假期间。别人休息的时候,系统管理员在拼命工作。而别人工作时,看到系统管理员要么面对黑底绿字的终端窗 口,神神鬼鬼地不知捣鼓什么东东,要么干脆连个人影都不见,大白天不来上班,都在家睡大觉。古来圣贤皆寂寞,唯有饮者留其名。系统管理员连个饮者都算不 上,系统稳定运转的时候没有人知道,出了问题便首先想到找系统管理员,系统管理员的辛酸,谁人知晓。

说到这里,公司要系统管理员干嘛,还用问么?

06:31 与 史景迁 相遇 (7079 Bytes) » 知道分子
若问 降落伞·斯彭斯 先生是何许人也?你多半不会知道。要说美国历史学会主席是哪位大仙,你可能还要去Google一下,才有答案。可说起 史景迁,即便没有读过他的书,你也一定见过这个名字。就好比没吃过猪肉,也该见过猪跑,不是么?

这些年来,耶鲁大学历史系教授、美国历史学会前主席 史景迁(Jonathan Spence),已成为两岸出版界热捧的明星历史学家。上海远东出版社自2001年始,接连出版了“史景迁中国研究系列”丛书九种。此外,加上中央编译、北京大学、三联书店各出一种,史景迁教授在大陆出版的著作总计有十二种之多。台湾方面则由时报出版公司掌旗,陆续印行了史景迁著作的系列台湾译本。出于众所周知的原因,史景迁著作大陆译本都有不同程度的删节,如时报出版《追寻现代中国》三卷本,其相应的上海远东译本只有一册,近一半内容删节,堪称阉本中的阉本。可是,自诩“不读洁本、不读阉本、少读译本”如我,也忍不住买来几本“洁阉译”俱全的史景迁作品拜读。

为何两岸如此热衷于出版史景迁著作,即使删节一半,还有出版社硬是要出,还有傻读者愣是要读?令人不禁惶惑。王海龙先生新作《遭遇史景迁》对此提供了一种解答。史景迁少年时代便钟情于研究中国文明,先后转益多师,跟随耶鲁大学莱特教授夫妇、哈佛大学费正清教授、澳洲国立大学房兆楹教授夫妇学习汉学。“这些导师的言传身教,潜移默化中陶冶了史景迁的性情,使他对遥远东方的这个有五千年历史的国度产生了景仰和憧憬之心。” (p.5)特别是房兆楹教授对他的严格指导,让史景迁终身难忘:“有一次房教授读他写的文章后深觉满意,给他批回时用打字机留言批道:‘看上去有了很大的进步’,批完以后房教授斟酌再三,觉得这次批得太过慷慨,于是他又仔细用墨笔将‘很大的’几字划去,换上了‘不小的’几个字。这件事让史景迁感触至深,使他深知做学问的不易。学无止境,应该严谨再严谨。”(p.6)在诸位汉学名家门下多年求学的经历,给史景迁打下了扎实的学术基础。

此后,史景迁不断拓展其治学领域,“他古今兼治,中西双擅;以治明清思想史和文化史为经,以治西方汉学史为纬,纵横交错,东西兼顾,从而在这宏观的背景上编织出深远的、富史诗般意境的中西文化交流的新篇章。”(p.8)“除了是深刻的思想家和历史学家以外,史景迁还是一位十分杰出、流行的作家型学者,他的文笔十分波俏优雅,富有英国式的幽默和美国式的清新开朗。他力图把古老、枯燥的汉学带入当代社会。他文采斐然,妙笔生花,在西方社会一般层面上极大地拓宽了汉学的视野和影响力,开掘了读者群。”(p.9)当然,从“信史不文”的中国传统史学眼光来看,史景迁的生花妙笔不啻为“历史小说”。可是别忘了,子曾经曰过:“言之无文,行而不远”(《左传·襄公二十五年》)——说话写字没有文采,跑都跑不远,更别指望流传百世了。而且子曾经还曰过:“质胜文则野,文胜质则史”(《论语·雍也第六》)——有人说史景迁这种写法是“野路子”,却忘了孔夫子的教诲:“文胜质”才是“史”啊!“景”仰司马“迁”的史景迁教授,所承袭的正是自司马迁以降的中国古典史传文学传统。

不过话说回来,作者指出:“史景迁的汉语根底不如一般中国学人,甚至不如程度好一些的中文系师生。史景迁的中国史学基础强不过中国一般综合性大学历史专业的本科生。史景迁写高头讲章的功力比中国一般大学的一般的副教授也过硬不了多少。”(p.49)那么,史景迁到底凭什么在中国这么热门?作者认为,史景迁一是凭其“隔”,从洋人眼中看我们烂熟于胸的中国史,别有一番异国情调;二是缘自“时下中国读者的好奇、跟风和附庸风雅”,看老外写中国史,与看西洋镜、听大山说相声是一个意思。

《遭遇史景迁》,为陆灏策划的上海书店“悦读”小丛书之一种。作者王海龙先生是哥大东亚语言文化系教授,与史景迁多有过从。全书由三部分组成:第一部分 “遭遇史景迁”,为史景迁所受“历史小说家”之讥评而正名、声辩;第二部分“史景迁五章”,作者获赠史景迁的一份演讲稿版权(封面背景即为王海龙致史景迁,确认受赠《To Change Europe: The First Chinese in France, 1680 - 1735》版权的信函),遂拟史氏笔法,译成故事五章,载入本书;第三部分“汉学的悲剧”,则是一篇长文,介绍西方汉学史上的中国,由“想像的异邦”一步步沦为“怪物公司”的屈辱历程。书中间或展示多幅插图、漫画,为文字作注脚。

(《遭遇史景迁》,王海龙 著,上海书店出版社,2007年6月)

06:31 一个犬儒主义者的自白——读 李零《丧家狗》 (6731 Bytes) » 知道分子
早在古希腊,愤世疾俗、特立独行的哲学家,人们称之为“犬”(cynic)。他们视金钱如粪土,睹名位若浮云,爱好争辩,不鸟权贵。最出名的那一个,成天蹲在木桶里晒太阳。春节期间,国王特地下乡去看望他,送温暖、献爱心。他却不识抬举,打发叫花子一样打发国王滚远点,别给老子挡着桶外的阳光。这段不甚和谐的花絮,被当时在旁的粉丝笔录了下来,发表在博客上,流传千年。后人景仰他们的嘉言懿行,于“犬”后面加了个“儒”字,尊为狗大师。千载以还,遂成流派,谓之“犬儒主义”(Cynicism)。

最近,北大李零教授出了一本新书,题为《丧家狗——我读<论语 >》。读了才知道,原来犬儒主义的发祥地并非古希腊,而是在我们伟大的祖国。这一流派的大宗师,便是身为万世师表的大成至圣文宣王——孔仲尼先生。该书封面顶头三行红字,写得清清楚楚:“任何怀抱理想,在现实世界找不到精神家园的人,都是丧家狗。”名为儒,实为狗,外儒内狗,儒与狗乃是一体之两面。封面底部还引述了《史记·孔子世家》里的一段八卦:“孔子适郑,与弟子相失,孔子独立郭东门。郑人或谓子贡曰:‘东门有人,其颡似尧,其项类皋陶,其肩类子产,然自要(腰)以下不及禹三寸,累累若丧家之狗。’子贡以实告孔子。孔子欣然笑曰:‘形状,末也。而谓似丧家之狗,然哉!然哉!’”孔子既自承“丧家之狗”,那么由此推论,其徒子徒孙继承道统,自然都是“犬”儒了。

从李零的视角出发再读《论语》,顿觉孔夫子所论所语,怎么看都像是一个犬儒主义者的自白。子曰:“饭疏食,饮水,曲肱而枕之,乐亦在其中矣。不义而富且贵,于我如浮云。”(《述而第七》)孔子安贫乐道,摈弃不义之财。子曰: “居处恭,执事敬,与人忠。虽之夷狄,不可弃也。”(《子路第十三》)孔子洁身自好,勤奋敬业,待人忠诚。子曰:“巧言令色,鲜矣仁。”(《学而第一》)孔子最讨厌谄媚的人。子曰:“何以报德?以直报怨,以德报德。”(《宪问第十四》)孔子主张直来直去。子曰:“已矣乎!吾未见好德如好色者也。”(《卫灵公第十五》)孔子喜欢实话实说。子曰:“有教无类。”(《卫灵公第十五》)孔子对待学生一视同仁。子曰:“躬自厚而薄责于人,则远怨矣。”(《卫灵公第十五》)孔子提倡严于律己、宽以待人。子曰:“由,知德者鲜矣。”(《卫灵公第十五》)孔子也常常感到孤独。这些话,与当时(甚至现在)的社会都是格格不入的。

古希腊早期的犬儒主义者颇类孔子及其门人:生活简朴,“一箪食,一瓢饮,在陋巷,人不堪其忧,回也不改其乐”(《雍也第六》);约束自我,追求道德理想, “克己复礼为仁”(《颜渊第十二》);抨击权贵,“八佾舞于庭,是可忍也,孰不可忍也”(《八佾第三》);批评社会,揭穿世间的一切伪善,“乡原(愿),德之贼也”(《阳货第十七》)。同样,《论语》里的孔子,依据自己的道德准则,抨击当时礼崩乐坏的世俗社会,希望回到古圣先贤统治的时代。正如李零在其序中所言:“孔子不是圣,只是人,一个出身卑贱,却以古代贵族(真君子)为立身标准的人;一个好古敏求,学而不厌、诲人不倦,传递古代文化,教人阅读经典的人;一个有道德学问,却无权无势,敢于批评当世权贵的人;一个四处游说,替统治者操心,拼命劝他们改邪归正的人;一个古道热肠,梦想恢复周公之治,安定天下百姓的人。他很栖惶,也很无奈,唇焦口燥,颠沛流离,像条无家可归的流浪狗。”于是就出现了郑国都城东门的那一幕。

人有智、愚、贤、不肖之分,狗也有忠、谄、义、媚惑之别,犬儒亦复如是。余英时先生与陆扬论及国内时兴的“《论语》热”,特别提到有人把“民无信不立”一句,“信”字居然解作“信仰”,历史之何其惊人相似也!当年在台湾,徐复观先生就曾痛斥那些将“信”字解作“信仰”之人为无耻。而李零此番重读《论语》,读原典,“用孔子本人的话来讲话——不跟知识分子起哄,也不给人民群众拍马屁”,不啻给时下的“《论语》热”来了一针清醒剂。同时也给那些无耻妄解《论语》的人,特别是那些挂羊头卖狗肉的不肖“犬儒”们,当头泼了一盆冷水。

(《丧家狗——我读<论语>》,李零 著,山西人民出版社,2007年5月)

06:31 Linux问答:平均负载是怎样炼成的? (12515 Bytes) » 知道分子
谷歌拼音盗用搜狗拼音词库事件,前段时间可谓闹得沸沸扬扬。搜狗拼音开发工程师那一篇《搜狗拼音输入法词库是怎样炼成的》写得深入浅出、荡气回肠,令我等搜狗拼音粉丝们深感搜狗词库来之不易,谷歌窃桃之举可鄙之极。为了表示对搜狗拼音的一贯支持,本文还是照例用搜狗拼音撰写。

言归正传。最近某个应用产品团队突然提出要增加数十台服务器,让兄弟我大出了一身冷汗。现在机架空间紧张的很,我们预算也有限,怎么能你说加几十台服务器 就给加几十台?为什么?凭什么?给个理由先?对方回答,说是根据最近一段时间对其应用集群平均负载的观察结果,以及运营方面预估的访问量增长趋势数据,得 出要加几十台服务器的结论。那么问题来了,且不论运营方面怎么预估访问量增长,用当前的平均负载作为基数来估算服务器增长,靠谱么?

我们首先来看看平均负载(Load Average)到底是什么?这个问题似乎从未有人清楚地阐释过,我也只知道所谓平均负载,就是指当前Running和Runnable队列里的任务总数 摊到每个逻辑CPU的平均数。貌似多数UNIX/Linux教材、书籍里谈到平均负载这个概念时,都是这么忽悠人的,甚至讲的比前面这句更为含糊。幸好 Linux Kernel开放源码,我们既然碰到了问题,就不妨做个愣头青,直接去源码里找找答案。

仔细一找,果然发现 kernel/timer.c 里这段疑似代码:


/*
* calc_load - given tick count, update the avenrun load estimates.
* This is called while holding a write_lock on xtime_lock.
*/

static inline void calc_load(unsigned long ticks)
{
unsigned long active_tasks; /* fixed-point */
static int count = LOAD_FREQ;

count -= ticks;
if (unlikely(count < 0)) {
active_tasks = count_active_tasks();
do {
CALC_LOAD(avenrun[0], EXP_1, active_tasks);
CALC_LOAD(avenrun[1], EXP_5, active_tasks);
CALC_LOAD(avenrun[2], EXP_15, active_tasks);
count += LOAD_FREQ;
} while (count < 0);
}
}


又在 include/linux/sched.h 里找到了 CALC_LOAD 宏定义:

#define FSHIFT 11 /* nr of bits of precision */
#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */
#define LOAD_FREQ (5*HZ) /* 5 sec intervals */
#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5 2014 /* 1/exp(5sec/5min) */
#define EXP_15 2037 /* 1/exp(5sec/15min) */

#define CALC_LOAD(load,exp,n) \
load *= exp; \
load += n*(FIXED_1-exp); \
load >>= FSHIFT;


看不懂了。本着“内事不决问老婆,外事不决问Google”的原则,还是Google一下。果然有位大仙,法号 Dr. Gunther ,曾专门撰写了一系列文章来研究这个 Load Average 的算法,及其背后的险恶用心:

1. The "LA Triplets" Quiz

2. UNIX® Load Average Part 1: How It Works

3. UNIX® Load Average: An Addendum

4. UNIX® Load Average Part 2: Not Your Average Average

5. UNIX® Load Average Reweighed

略过各篇文章前面深深浅浅的描述和数学公式,只看最后的Summary或者Conclusion,我们就可以发现:

所谓负载(load),并非如我们想像的那样,表示系统的利用率,而只是反映CPU run_queue 的长度。这三个数字(1/5/15-min LA)只是三个不同时间序列的时点抽样,还是经指数阻尼平滑的平均数,而且它们是在以错误的顺序反映趋势信息。

既然平均负载(Load Average)的算法都不靠谱,那么以此为基数的估算又怎么可能不是扯淡呢?

06:31 Linux问答:如何消灭状态为D或Z的进程? (6502 Bytes) » 知道分子
长期生活在 Linux 环境里,渐渐地就有一种环保意识油然而生。比如,我们会在登录提示里写上“悟空,我跟你说过叫你不要乱扔东西,乱扔东西是不对的。哎呀我话没说完你怎么把 棍子扔掉了?月光宝盒是宝物,乱扔它会污染环境,要是砸到小朋友怎么办?就算砸不到小朋友,砸到了花花草草也不好嘛...”;在用户缺省目录里放一个题为 “自觉保护环境 请勿堆放垃圾”的空文件,并用 chattr +i 设为不可修改;看到垃圾文件就立即扫入 /tmp 目录,然后发广播通知垃圾制造者自己去 /tmp 认领,且警告其下不为例...我们深知,系统环境的整洁有利于系统管理员保持良好的心情、清晰的思路和稳定的工作状态。

有一类垃圾却并非 这么容易打扫,那就是我们常见的状态为 D (Uninterruptible sleep) ,以及状态为 Z (Zombie) 的垃圾进程。这些垃圾进程要么是求而不得,像怨妇一般等待资源(D),要么是僵而不死,像冤魂一样等待超度(Z),它们在 CPU run_queue 里滞留不去,把 Load Average 弄的老高老高,没看过我前一篇blog的国际友人还以为这儿民怨沸腾又出了什么大事呢。怎么办?开枪!kill -9!看你们走是不走。但这两种垃圾进程偏偏是刀枪不入的,不管换哪种枪法都杀不掉它们。无奈,只好reboot,像剿灭禽流感那样不分青红皂白地一律扑 杀!

悟空,我们所运维的可是24*7全天候对外部客户服务的系统,怎么能动不动就 reboot ?我们的考核指标可是4个9(99.99%,全年计划外当机时间不得超过52分钟34秒),又不是4个8,你稍微遇到点事就reboot,还要不要可用性 了?再说,现在社会都开始奔和谐去了,我们对于 D 和 Z 这两种垃圾进程,也该尽可能采取慈悲手段,能解决其困难的,就创造条件,解决其实际困难,能消除其冤结的,就诵经烧纸,消除其前世冤结,具体问题应具体分析具 体解决,滥杀无辜只会导致冤冤相报因果循环...$^#$%#%^@#

贫僧还是回来说正题。怨妇 D,往往是由于 I/O 资源得不到满足,而引发等待,在内核源码 fs/proc/array.c 里,其文字定义为“ "D (disk sleep)", /* 2 */ ”(由此可知 D 原是Disk的打头字母),对应着 include/linux/sched.h 里的“ #define TASK_UNINTERRUPTIBLE 2 ”。举个例子,当 NFS 服务端关闭之时,若未事先 umount 相关目录,在 NFS 客户端执行 df 就会挂住整个登录会话,按 Ctrl+C 、Ctrl+Z 都无济于事。断开连接再登录,执行 ps axf 则看到刚才的 df 进程状态位已变成了 D ,kill -9 无法杀灭。正确的处理方式,是马上恢复 NFS 服务端,再度提供服务,刚才挂起的 df 进程发现了其苦苦等待的资源,便完成任务,自动消亡。若 NFS 服务端无法恢复服务,在 reboot 之前也应将 /etc/mtab 里的相关 NFS mount 项删除,以免 reboot 过程例行调用 netfs stop 时再次发生等待资源,导致系统重启过程挂起。

冤魂 Z 之所以杀不死,是因为它已经死了,否则怎么叫 Zombie(僵尸)呢?冤魂不散,自然是生前有结未解之故。在UNIX/Linux中,每个进程都有一个父进程,进程号叫PID(Process ID),相应地,父进程号就叫PPID(Parent PID)。当进程死亡时,它会自动关闭已打开的文件,舍弃已占用的内存、交换空间等等系统资源,然后向其父进程返回一个退出状态值,报告死讯。如果程序有 bug,就会在这最后一步出问题。儿子说我死了,老子却没听见,没有及时收棺入殓,儿子便成了僵尸。在UNIX/Linux中消灭僵尸的手段比较残忍,执 行 ps axjf 找出僵尸进程的父进程号(PPID,第一列),先杀其父,然后再由进程天子 init(其PID为1,PPID为0) 来一起收拾父子僵尸,超度亡魂,往生极乐。注意,子进程变成僵尸只是碍眼而已,并不碍事,如果僵尸的父进程当前有要务在身,则千万不可贸然杀之。

这篇写出鬼气来了,就此打住。阿米豆腐,善哉善哉!

06:31 Linux问答:如何挑选适合服务器的OS发行版? (5695 Bytes) » 知道分子
RHEL对于我们来说最大的好处是,Red Hat有较为完整严格的QA测试过程,可以保证发行版质量;与硬件厂商有紧密的合作关系,可以保证硬件兼容性;有一批内核Hacker,可以保证新问题不 断得到解决。自从用了RHEL,腰不酸了,腿不疼了,一口气能上机房五楼——相比2003年那时候用的Red Hat Linux 6.2/7.3,现在OS层面的问题已经很少让我们头痛了,不是么?

至于选择服务器Linux发行版的替代品,我认为,首先得明确我们的 标准。当下Linux发行版种类繁多,就像满地奔走的plmm们,你选哪一个做gf比较合适,总得有个标准才好筛选。若是随便抓一个来,难保将来不会后患 无穷。:P 言归正传,作为理想的服务器操作系统,我们究竟需要它具备哪些素质呢?

1. 稳定性。服务器上跑应用,OS首先要稳定。考核运维的指标动辄4个9、5个9,应用稳不稳定有QA管着,OS不稳定,SA都得去跳楼。

2. 可靠性。开源软件的下载页面为什么要列出那么多MD5SUM、SHASUM校验码,而微软的下载页面上从来看不到这些东西,就是因为开放了源代码,万一不 小心被人从CVS里钻进去放个后门、rootkit之类的,不加验证地装上之后,服务器集群就成别人的僵尸军团了。

3. 兼容性。硬件更新换代速度越来越快,双核才刚出来没多久,四核、八核之争又开始锣鼓喧天地热闹上演,如果OS不能保持与新硬件兼容,那么我们也会很痛苦。

4. 高效率。机架空间越来越少,运维费用越来越高,我们只有榨干服务器的每一点性能,来节约成本。服务器操作系统是否能充分发挥硬件的性能优势,是需要考量的重要指标。

5. 可持续。如果依赖于某个发行版,而这个发行版的支持公司政策/社区支持不太稳定,要么像Red Hat、Novell那样张开血盆大口,随时准备吃人;要么像某些小发行版,只靠那么几个人,没有严密的组织,高兴起来搞一搞,不高兴就突然散伙,对我们 也是很大的威胁。

依据以上五项标准,我们就可以对当下流行的十大发行版进行筛选:Ubuntu、Mandriva、Xandros Desktop均专注于桌面应用;Knoppix和MEPIS Linux是Live CD;Fedora和Gentoo属于Linux玩家操作系统,稳定性欠佳。因此值得推荐的是:

1. CentOS:完全基于RHEL相应版本的源码包build而成,Red Hat毕竟受制于GPL,万一哪天开始拿不到二进制ISO了,Red Hat还是要乖乖拿出完整的SRPM,经CentOS组织重新build、测试、打包后,我们便可安心使用。

2. openSUSE:既有德国人的严谨、又有Novell的赞助,该组织的生态环境较适宜高质量Linux发行版出产,据说腾讯近来也在用这个发行版。

3. Slackware:最古老的Linux发行版,多年的制作经验,以高稳定性、低bug率著称,腾讯一直在用。

4. Debian:完全由自由软件组织运作的Linux发布版,只比Slackware年轻一岁,Linus Torvalds推荐。比较稳定,只是更新速度较慢。时下流行的网络虚拟世界Second Life就运行在Debian上。

5. FreeBSD:虽然不是Linux,但是该发行版组织十分严密,又有Yahoo、新浪等成功使用经验,最近几年来在效率方面有很大的提升,是一款又稳又快的优秀操作系统。

06:31 Linux问答:你究竟有几颗芯? (5580 Bytes) » 知道分子
朋友来信,说起最近装了一台双核双CPU服务器,Linux版本用的是 RHEL 3 update 8,启动后执行 top 命令一看,居然只能看到四个CPU。照理说,每颗物理CPU有两个核(Dual core),每个核有两个超线程(Hyper thread),如此算来,2颗物理CPU * 2个核 * 2个超线程,应该能在系统里看到8个逻辑CPU才对。这儿只有4个CPU,那么另外4个难道被JS匿下了不成?大惑不解,故来信询问。

远程登录那台服务器,执行`dmesg | grep CPU`,发现启动时确实只能探测到4个CPU:

CPU0: Intel(R) Xeon(R) CPU 5110 @ 1.60GHz stepping 06
CPU1: Intel(R) Xeon(R) CPU 5110 @ 1.60GHz stepping 06
CPU2: Intel(R) Xeon(R) CPU 5110 @ 1.60GHz stepping 06
CPU3: Intel(R) Xeon(R) CPU 5110 @ 1.60GHz stepping 06
Brought up 4 CPUs

再执行`cat /proc/cpuinfo`,也同样只能看到4个CPU,并且每个CPU的信息里都有:

siblings : 2
cpu cores : 2
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm pni monitor ds_cpl tm2 xtpr

双核CPU,支持超线程(ht),没错啊。还不放心,再执行`dmidecode | grep -A 40 Processor`,赫然显示:

Flags:
HTT (Hyper-threading technology)

没天理了,现在的JS连这种双核CPU都能使猫腻,良心都被狗吃了么?且慢,为了抓个确证,再到Intel官方网站上查查这种CPU的spec:http://processorfinder.intel.com/details.aspx?sSpec=SL9RZ 怪了,这种CPU的 Support features 里居然没有 Hyper-Threading Technology。那么前面 cpuinfo 里看到的 "ht" 和 dmidecode 里看到的 “HTT (Hyper-threading technology)” 是怎么回事呢?

无奈只好写信给Kernel List求教,随即,著名Kernel Hacker,Arjan van de Ven(原Red Hat Linux Kernel项目负责人,去年跳槽到Intel,这个问题他最有发言权)就回信说:

the "ht" flag there ONLY means "we support reporting the number of
threads/cores/etc via the MSRs". It does not mean that you actually have
hyperthreading, only that your cpu knows how to report what it
supports...

原来如此,这些 flag 只是说明CPU支持通过 MSRs(Model Specific Register) 报告这些东东的数量,并非说它支持 Hyper-threading ,实在是太诡异了。这么算下来,看到 2颗物理CPU * 2个核 = 4 个逻辑CPU,是正常的。

为什么双核CPU不支持超线程呢?8个逻辑CPU总比4个跑得快吧,再说超线程也是Intel比较成熟的技术了,应该不会有什么问题。于是又去查资料,发 现双核技术与超线程技术之间并非 2 * 2 = 4 的关系。以前在单核CPU上跑超线程,确实可以带来并发性能的提升,但由于超线程追根究底还是跑在一个物理CPU上,因此两个超线程之间需要共享同一份资 源,而对于共享资源的争用,正是超线程在高负载环境下不仅不能提升性能,反而会导致CPU性能严重下降的原因。由此才出现了双核技术,两个物理的核封装在同一个物理CPU内,各吃各碗里的,友好合作,互不争抢,和谐双赢,使得CPU性能在高负载下表现得更好。因此,双核技术是超线程技术的替代者,不用超线程,服务器跑得更快。

06:31 Linux发行版的世界有了一些变化 (5364 Bytes) » 知道分子
Linux发行版的世界有了一些变化。

前两天Red Hat的销售从北京打来电话,问我一个月前从Red Hat网站下载的RHEL 4 update 4用的可好,该版本试用期已过,是否有意准备购买?我说,你们卖的是服务Subscription,而我下载该软件完全用于自娱自乐,无需你们的任何服 务,blahblah。电话那边的销售估计也没怎么仔细研究过他们美国主站上那些语意含糊的协议条款,或者是懒得跟我这样毫无购买意愿的客户浪费口舌,就 挂了电话。

这几天,Red Hat终于开始发售最新版的RHEL 5。除了XEN这种不太新的旧闻和RHX这种不太旧的新闻之外,比较有趣的发现是(引自其Release Notes):

In order to ensure that the components offered are in sync with the subscription, Red Hat Enterprise Linux 5 requires entering an