没想好放哪


翻译时经常遇到的一些词语和结构,译者往往会用固定的办法来翻译。后果之一就是,译文中“翻译体的特征”很明显,许多时候我们都可以透过译文,“看出”原文,这样的译文,难说地道。when的翻译,就是一个很好的例子。
when,在多数译文中,都“约定俗成”翻译为“当……的时候(时)”,这样做本身不算错,但某些时候,稍加处理会让译文更加地道,譬如这两个句子:

当规则不够清晰,或者不是每个人都清楚这一情境是什么,或者当人们不同意规则应该被应用在某一特定场景下时……
当我询问我性别课上的女性,为什么她们会做这样一件古怪的事情时,她们回答说……

看到“当”,一般人会条件反射地想起when,知道这是“当……的时候(时)”的结构,再接下去阅读。但是,中文里较少出现“当……”而没有“的时候(时)”的情况(“当我想你的时候”比“当我想你”更普通更流行)。所以,无论是翻译还是阅读“当……的时候(时)”结构,都会惦记着最后的小尾巴——“的时候(时)”,如果中间部分足够长(譬如上述第一个例句),就露出尾大不掉的毛病:当 + 一个近乎完整的长句 + 的时候(时)。
要改变这种情况,可以从两方面入手:

一,准确理解when的含义。
查询词典我们知道,when主要有两个意思:(1)at or during the time that;(2)in the event that, if。前者与时间的意义紧密相关,也就是“当……的时候(时)”的“原型”,后者则与情境相关,对应汉语中的“如果”、“假若”。如果when的意思是后者,则可以抛弃“当……的时候(时)”的译法,直接采用“如果”、“假若”来翻译。因此,第一个例句就可以改为:

如果规则不够清晰,或者不是每个人都清楚此情境,或如果人们不同意规则应该应用于某一特定场景……

这种说法足够地道,相信不少人都还记得中学数学的解题步骤:若 X>Y,则……若 X<Y,则……。

二,掐头去尾。
以“当……的时候(时)”来翻译的弊端之一就是尾大不掉,后面总有个“的时候(时)”。如果能斩断这个结构,不修改意思,却只留下头或尾,问题就解决了。来看这几个例子:

当我心情好一点的时候,就给你打电话 -> 等我心情好一点,就给你打电话
当要下雨的时候,我们出门了 -> 要下雨的时候,我们出门了

当然,有时候也可以更进一步,把头尾都去掉,来看这个例子:

当他忙的时候,他就顾不上其它的事情了 -> 他忙起来就顾不上其他事情了。

同样道理,开头的第二个例句,就可以修改为:

我询问自己性别课上的女学员为什么要做这件古怪的事情,她们回答说……(她们的回答,必然是针对你的提问,这是不言自明的)

老话说“业精于勤,而荒于嬉”,这是非常对的。许多朋友认为我写正则表达式很有经验,其实不然,我虽然翻译《精通正则表达式》,其实自己写正则表达式的机会并不多,充其量是帮朋友写写一些“够用就好”的表达式,在“精于勤”的朋友面前,是不值一提的。

相反,2010年1月11日晚我在上海龙阳路地铁站附近见到的两位朋友rexcnhacktnt,都是“精于勤”的榜样:因为工作的原因,他们几乎每天都需要用到正则表达式,所以他们几乎是“全方位地”精通正则表达式:对语法的精确把握,对未知情况的处理,对匹配效率的要求……或许平时我们不需要注意这么多的方面,但多了解一点经验以供借鉴,总不是坏事。
举例来说吧:撰写高效率的正则表达式,需要注意哪些方面?更极端一点:正则表达式怎样匹配“0…1…”但‘0’和‘1’出现次数相同的字符串?这样的问题,对正则表达式没有相当研究和经验的人,是无法回答的。而答案和讨论,也让我这种半瓶醋看得眼花缭乱,大呼过瘾。
目前,国内已经有大量专业的开发论坛和社区,但是正则表达式这种“关键时候要命”的匕首式应用,总没有专门的场合讨论,这不能不说是一大遗憾。有鉴于此,rex同学开设了专门的正则表达式论坛 http://www.regex.me,大家有任何关于正则表达式的疑惑,都可以提问讨论,对《精通正则表达式》有什么意见,也可以自由发问,我会尽力解答。

正则表达式论坛

1月17日,给小切做了最后的检查,更换了稍微有点漏的水泵,检查了五油三水(汽油、机油、变速箱油、刹车油、转向助力油;水箱水、电瓶水、玻璃水)都没问题,新换了四条邓禄普数码AT2轮胎,全车电气正常,于是信心满满。

1月18日
5:00 出发就不顺,钥匙孔堵住了,想了想应该是昨天洗车留下的水被冻住导致,从副驾一侧开门,去加油站,油箱盖又被冻住了,加油站也没热水,只能打电话给一路回家的师妹小杏,让她准备开水。
5:30 到小杏那里,看她东西也不少,我便把放在后座的笔记本包拿出来背上,趁她往车上装行李的空档,用开水淋油箱盖,因为嫌弃笔记本包碍事,就摘下来放在路边。油箱盖的冰很快就化了,我见她的行李已经装完,人已经上车,于是上车出发。
6:30 已经进入京珠高速,在第一个服务区把油加满,天很黑,雾气比较重,进京的车很多,出京的车很少,新换的小糸(Koito)H4灯泡远光非常亮,不需要雾灯也完全够用。
8:30 离开北京两百公里,进入服务区休息,我忽然觉得少了什么,仔细一看,自己的笔记本包不见了,找遍了全车都没有,回想了一下,里面有笔记本电脑、相机、所有的银行卡、手机电池和日记本(更糟糕的是现在手机快没电了)。确认包不在车上,我想了想,首先挂失了信用卡(不用密码的),其它的损失无法挽回,只能说背运了。我侥幸地想,如果确认包丢了,明天再挂失其它卡不迟。再仔细回忆回忆,应当是化开油箱盖的冰时把包放在了路边,小杏电话朋友回去找,我没抱多大期望。
9:00 决定继续上路,此时折返北京又要两三个小时,而且多半找不到,只能按下不安的心情继续向南——这真是令人沮丧的事情,无比重要的东西遗失在两百多公里的身后,我却要以一百公里的时速向南开进。
9:20 北京的朋友来电话说,笔记本包找到了——一位不知名的快递员在路边发现了我的包,把它送到了附近的邮局,朋友说出丢失时间、包的颜色和内装物品等等之后,就顺利拿回了包,电话两边比对之后,发现什么也没少。这可真是意外的惊喜,请朋友立即用快递把包送回家。打完电话,虽然小切仍然穿行在雾气弥漫的高速上,我却觉得天气明朗了不少。
21:00 终于抵达武汉,可以打开窗户大口呼吸南方湿润的空气。照GPS的指引,先把小杏送到汉口,我再去武昌找博文视点借宿。在武汉市内小心谨慎行车,还是走了不少弯路,而且发现发动机低速运转的声音有些不对,也不敢多想。到目的地已经是十点多了,我用手机最后剩下的一点电联系上了徐定翔同学,他深夜赶来,我被领到安排好的宿舍,倒头就睡。

1月19日
7:00 我已经习惯了早起,起来之后首先想解决的是发动机的问题。仔细想了想,车况一直很好,不应该出问题,唯一可能的变量就是北京之外的地区都加的乙醇汽油,油气混合比必须调整,于是取出随车工具调整混合比,果然问题减轻了一些,再仔细检查,发现有一根真空管因为长期颠簸已经漏气,重新插好之后,挪用博文视点的固定资产——一个晒衣夹子夹住,于是一切正常。
9:40 徐定翔同学带我参观了博文视点的办公环境,很开放,视野也很好,白板上的任务列表,又清楚地标明这里紧张的工作进度。据说我是作译者里少数有机会来武汉博文参观的幸运者之一,确实很幸运。
10:00 在徐定翔同学和杨小勤同学陪同下参观了武大,上次我到武大只是自己走马观花,这次有人介绍,收获不少,参观了武大的老图书馆,气氛很不错(当然,樱园路的女生宿舍也给人很深印象)。徐定翔同学是武汉博文视点的策划编辑,业务水平很不错,为我的《正则表达式傻瓜书》草稿提的建议非常精当中肯,他自己还在翻译《97 Things Every Software Architect Should Know》;杨小勤同学设计了许多技术书籍的封面,风格各异但都别具匠心,这些年来技艺日趋精进,封面的感觉也越来越好。他们上午陪我参观武大,心里非常感激。
15:50 大概是我运气好,本来没打算看《阿凡达》的,却赶上武汉博文视点的观影活动,于是蹭了张票,在光谷的电影院看了3D版的阿凡达,效果无与伦比,不过最有意思的还是编剧——类似的故事已经有许多电影讲过,我本以为《阿凡达》难免会“类型”,但剧本的设定却巧妙而高明,有几处超过了我的想象。
19:20 在武汉的一家湖南米粉店吃了晚餐。店子是正对马路的,只是高出几个台阶而已,在桌边吃饭,看人行道上路人来往,听不远处车辆穿梭,熟悉的感觉瞬间就穿透了时空的障碍,仿佛找到了自己成长的烙印。
21:30 蹭博文视点周筠老师的卡,在小区的按摩店享受了一把,放松放松我整日驾车的肌肉。按摩师说:除了颈部和腰部的肌肉比较紧张,身上其它部分肌肉的状态都很不错。心里很是宽慰:每天锻炼,虽然时间不长,到底还是有效果的

1月20日
6:30 再次出发,先去汉口,再上武汉三环(似乎全国各个城市都有x环),奔京珠高速,天气很好,很暖和。
10:00 通过湘鄂省界,进入湖南境内,能见度依然不好,路旁密密的樟树,和脚下的红土地,是家乡的标志。
12:05 从株洲北收费站下京珠高速,进入株洲大道,满眼看去都是“湘B”牌照的车,终于到家了。

1月22日
中午,从外面吃饭回来,发现家里多了一个宅急送的大纸箱子,急忙打开,发现笔记本、相机、手机电池、银行卡,全都在里面。谢天谢地,什么也没丢,只是晚到了几天!

后记:
我已经许久不写个人生活了,回忆起这几天的经历,我总是想起胡适先生提过的一句话:人心曲曲弯弯水,世事重重叠叠山。曲曲弯弯、重重叠叠,或许并非不着边际的苦闷,也可能是失而复得的惊喜;这种惊喜的曲曲弯弯的源头,就叫做“善良”。
再次感谢这位不知名的快递员(抱歉,根据取包那位朋友的描述,这位快递员没有留下名字和联系方式)。

我曾写过《稀释》,也一直认为,世上许多事情的道理,就是“不讲道理”:你做了十万分的努力,对方可能“只能”感觉到十分;若觉得这不够公平,而只做九万九千九百九十九分努力,对方就很可能连一分都感觉不到。

所以,我在第一时间发布了《技术领导之路》的勘误。惭愧之余,也希望各位读者,如果发现更多错误,一定来信指正。

《技术领导之路》(中英文对照版)勘误:
http://www.luanxiang.org/blog/batl_errata

另:《精通正则表达式》(第三版)勘误列表也已单独列出,烦请大家移步
http://www.luanxiang.org/blog/mre_errata

有个故事是这样说的:一群傻子,每人得了一笔钱,纷纷去开加油站,因为他们傻,所以加油站如天女散花一般开得到处都是,高山上有,峡谷里有,池塘边有,平地旁也有;也因为他们傻,所以咬定青山不放松,坚持不换地方;结果,过了几年,只有平地旁的加油站存活下来,其它地方的加油站都销声匿迹了。
故事的道理很简单,所以如果听到“傻子那么傻,他开的加油站怎么可能维持下来呢,肯定是冥冥之中有神灵帮助”的说法,许多人多半会笑出声来。是的,这故事很简单,其中的道理也不难明白。那么,换一种形式呢?
同一个物种的生活,因为变异(Variation)而出现不同的个体,这些差异又被后代继承(Inheritance)下来,经过自然环境的选择(Selection),最终有一些个体表现出适应环境(Adaption)的特性,生存下来。本来毫无方向的随机变异,与自然条件较量之后,最合适的个体存留下来,表面看来竟然是“被定向选择”的结果。达尔文的学说,大致就是这么回事,更简洁点说,就是Darwin’s VISA
尽管“傻子开加油站”的例子很容易想明白,达尔文的学说却没那么容易被所有人接受,姑且不说那些坚持神创论之类观点的人士(参考鄙人翻译的《对神创论呓语的15点回复》(一)(二)(三)(四)(五)),即便是“相信”进化论的人,也多半“都以为自己懂进化论,其实只是一知半解”。故而,把达尔文的理论梳理清楚、阐述明白,是一件非常有意义的事情,也正是本周日(11月15日)松鼠会组织的“达尔文与达尔文革命”讲座的目的。

本次的主讲人是王道还先生,王先生来自海峡对岸(现任台湾中央研究院历史语言研究所人类学组助理研究员),讲座的当然也不同于我们常见的风格,他能恰到好处地把每个“知识点”后面的故事娓娓道来,颇有令人耳目一新的感觉:

  • 达尔文虽然身为科学家,却是不同于当代的职业科学家,而是一名绅士科学家,对职业科学家来说,科学是工作(job),而对绅士科学家来说,科学是召唤(vocation),当然,这也与19世纪的社会环境有关;
  • 达尔文身世煊赫,外祖父是Royal Potter,祖父是Royal Doctor,仅凭此,他其实不需有所作为,也可以过上殷实的生活,也不会是默默无名的小辈;
  • 达尔文先在爱丁堡大学念了两年医学,又在剑桥大学念了三年神学,真正有兴趣的,却是自然史,所谓自然史(Natural History),更确切的说法是“自然誌”,因为在古希腊语中,history的含义乃是inquiry。
  • 达尔文能登上小猎犬号进行环球航行,是因为小猎犬号的船长费兹罗(Robert FitzRoy)需要一名随从,当时英国海军的船长不容许与船员有私交,所以费氏报告要求一名随从陪同航行,“可进行自然史研究”的招牌,通过费氏父亲所在的剑桥大学校友圈子,吸引到了达尔文;
  • 达尔文登上小猎犬号,收到费兹罗的礼物——赖瑞的《地质学原理(第一卷)》,依靠这本书,他完成了关于自然史的训练;到了南美,尤其在智利,先后见识到火山爆发和地震,他由此开始想到,五花八门的自然奇景,可能并非上帝的创造,或许也是大自然伟力的结果;

……

仅仅讲述这样的小故事,也就难免沦为《你可能不知道的xx点》之类的轶事文章;可如果把这些小故事一一对应到达尔文的学说,再把来龙去脉梳理明白,就是需要兴趣和功力的事情了。而且,王先生更上升一个高度,说明演化乃是永恒的过程:生物要生存,就必然对环境有所影响,而受其影响的环境,又要重新“选择”生物,这种动态平衡的过程,就是“演化”。他纵横捭阖达尔文理论的劲头,让我想起 James W. Loewen讲美国历史 时提到Helen Keller的情形,当时Loewen从Helen Keller是一个社会主义者的故事讲起,联系到社会大环境,讲出一片新天地,同样让人大呼过瘾。
不过,Loewen的课只能听录音,王先生的讲座就可以去现场了。现场的好处就是,讲座听完还有提问的环节,我有机会说了一点自己的看法,王先生也热情回应(还收获科普赠书一本)。这里再加上自己的一点想法,列在这里,权当结尾:

  • 王先生认为,达尔文的理论应该是“演化”而不是“进化”,“进化”应当是Progression,有明确的标准和方向的,这一点我很赞同。但是中文的“天择”就难免误导:在中文里,“天”并不对应物质自然,而更多带有人格特性、道德色彩,所以“天择”的说法难免让人误解为“苍天(上天)在选择”;
  • 王先生也提到哈耶克与达尔文思想的相似性,恰好,我也稍微读过一点哈耶克(国内出版的译本几乎全部读过,英文原版也稍有涉猎),这确实是一个有意思的问题,哈耶克也提到,货币之类文明产物,并非“智慧设计”的结果,而是在人类历史中不断选择、淘汰的结果(所以统一计划经济必然导致文明的灭绝),但是,达尔文研究的是自然问题,哈耶克研究的是人类社会问题(王先生也说,自然选择的问题,与意志和动机无关),二者虽有相似之处,但是否可以互为佐证,在我看来,还没有确切成立的论证。

2009年3月的一天下午,我在某家饭馆静候各位已知未知朋友来相聚。七点多,进来一位文静白皙的理工男,虽然不认识,但听他打探的口气,我确认他是来这桌吃饭的。打过招呼,才知道是松鼠会的大掌柜姬十三(想起来真荣幸呀),我连忙说“我知道你们我知道你们,德国之声评选十佳中文博客的时候我就知道你们了……”。
一下子,陌生感就卸去了大半,我们就开始像熟人热切地攀谈起来:从我印象深刻的《第一推动》丛书,到科普先驱站点三思科学,再到妙趣横生的博闻网,都成了我们的共同话题;最后我还说起了自己幼年的奇思妙想:既然我们能看到几千万光年外的星球“几千万年前”的样子,那么,距离我们几千万光年外的外星人(如果有的话),是否可以看到地球上的恐龙是为什么灭绝的,用录像带记录下来,再发送回地球(如此一来,几千万年后我们就“可以”看到恐龙究竟是怎么灭绝的)?这个“异想天开”的想法,姬十三丝毫也没嫌弃,反而正经地跟我讨论了一番可能性——这样的“待遇”,对我这种“科学票友”来说,算非常非常难得咯。
从那个晚上开始,我知道,松鼠会的口号“让科学流行起来”不会仅仅是一个口号。所以,前些天知道松鼠会要举办“科学嘉年华”大型科普活动,我就非常有兴趣参加了。

(more…)

beta技术沙龙越办越有意思了,上次错过了阙宏宇的mod_cache(还有关于线程进程的讨论)就很可惜,这次关于Lucene的演讲,是无论如何不应该错过了。

到目前为止,全文检索已经完全不算高技术门槛了,记得以前看过一本书里面写:“今天,任何程序员,都可以很容易地构造一个全文检索应用”。是的,全文检索的基本原理大家都知道差不多了,剩下的只是实践。我见过纯粹自己开发的,具有AS(Advanced Search)、BS(Basic Search)、DI(Digest)等结构,“像模像样”的全文检索架构,不过应用更多的,却是在开源项目上完善、定制而来的,Apache的Lucene就是众多开源全文检索项目中,名气最大、资格最老、应用也最广泛的一个。本期beta技术沙龙,讲的就是大型网站中lucene的应用,主讲人是手机之家团队的唐福林(“手机之家”总是有些东东来共享,比如上次的DAL,这真是不错)。

众所周知,用Lucene构造一个“索引-查询”的应用是非常简单的,搭好环境,参照(修改)示范代码,很容易就可以成功。但是,要构造一个真正大规模、稳定、可靠的应用,就不说这么简单。程序的编写、模块的分布、架构的设计,都有许多费心思的讲究。按照PPT提供的数据,手机之家目前的Lucene应用,采用的是Lucene 2.4.1 + JDK 1.6(64 bit)的组合,运行在8 CPU, 32G内存的机器上,数据量超过3300万条,原始数据文件超过14G,每天需要支持超过35万次的查询,高峰时期QPS超过20。单看这些数据可能并没有大的亮点,但它的重建和更新都是自动化完成,而且两项任务可以同时运行,另一方面,在不影响服务可靠性的前提下,尽可能快地更新数据(如果两者发生冲突,则优先保证可用性,延迟更新),其中的工作量还是非常大的。

演讲的主要内容都PPT里,非常丰富,我就不再赘述了。要补充的是,这份PPT做得非常清楚,需求-目标-进度-设计-上线-测试-上线,整个流程非常清楚,给出的数据同样非常精当,我想,这也反映了手机之家团队的开发规范。

因为对Lucene的使用稍微有些经验,我在这里补充几句,权当狗尾续貂:

  1. 在大规模的应用中,Lucene更适合用于狭义的“搜索”,而不应当负责数据的存储。我们看看Lucene的源代码也可以知道,Document和Field的存储效率是不够好看的。手机之家的团队也发现了这一点,他们的办法是,用Lucene存放索引,用Memcache + Berkeley DB(Java Edition)负责存储。这样有两个好处,一是减小了Lucene的数据规模,提高了程序的效率;另一方面,这套系统也可以提供某些类似SQL的查询功能。实际上,Lucene Project自己似乎也注意到了这个问题,在Store中新增了一个db选项,其实也是利用的Berkeley DB。如果仅仅用Lucene存放索引,而不存放Document,并且合理配置,一台机器可以支持几十G甚至上百G的索引;如果需要用Lucene存放索引,最好在读取时使用FieldSelector,只读取需要的Field,如果使用恰当,性能会有10%左右的提升。
  2. 在大规模应用中,Cache是非常重要的。PPT中也提到,可以在程序提供服务之前,进行几次”预热“搜索,填充Searcher的Cache。据我们(银杏搜索)的经验,也可以在应用程序中,再提供针对Document的Cache,这样对性能有较大的改善(同一个JVM内部的Cache,速度更快一些)。Lucene自己似乎也注意到了这个问题,在2.4版本中提供了Cache,并提供了一个LRU Cache实现。不过据我们测试,在极端情况下,这个Cache可能会突破大小限制,一路膨胀最后吃光内存,甚至从网络上找的许多LRU Cache实现在极端条件下都有可能出现这样的问题(这也是我们百思不得其解的地方:反复检查程序的逻辑都没有问题),最终自己写了一个LRU Cache,并修改多次,目前来看是稳定的。
  3. 在编写Java服务程序的时候,记得设置退出的钩子函数(RunTime.getRunTime.addShutdownHook)是一个非常好的习惯。许多Java程序员都没有这种意识,或者有,也只是写一个finalize函数,结果程序非正常退出时,可能造成某些外部资源的状态不稳定。拿Lucene来说,之前的IndexWriter是默认autoCommit的,这样每添加一条记录,就提交一次,好处是如果中断,则之前添加的记录都是可用的,坏处则是,索引的速度非常低。在新版本中autoCommit默认为False,速度提升明显(我们测试的结果是,提高了大约8倍),但如果中途异常退出,则前功尽弃。如果我们添加了退出的钩子函数,捕获到退出信号则自动调用writer.close()方法,就可以避免这个问题。
  4. 目前的Lucene是兼容JDK 1.4的,它的binary版本也是JDK1.4编译的,如果对性能要求比较高,可以自行下载Lucene Source Code,用更新版本的JDK编译出.jar文件,据我测试,速度大约有30%的提升。
  5. 如果对并发的要求较高,可以考虑采用多IndexSearcher的技术,也就是在一个应用服务中,开启多个IndexReader(可以对同样的索引开启多个),每个IndexReader再生成一个IndexSearcher,将这些Searcher放在一个“池”里头,给搜索请求调用。这样可以大幅度提高并发的性能,代价是在写程序的时候就要考虑到这一点,进行相应的调整。

P.S. 据我观察,国内公司内部的项目,一般取的名字都中规中矩,以’er’结尾的比较多,多是Indexer, Crawler, Layer之类。好像很少有外国那种“天马行空”的奇特名字,譬如Hadoop(这是一个“没来由”的名字)、Lucene(这是个少见的姓)。国内我接触过不多,以前抓虾有个重要的DB叫tudui(“土堆”),目前银杏有个项目叫LaserTank,都是跟实际用途毫不相关的,印象反而深刻。

2009年4月25日,周六。受李笑来老师检出糖尿病的消息影响,我来到新街口的慈铭做体检。虽然有一年多没做体检了,我还是很有些信心的,也一直坚持锻炼,历次检查都是正常,“不可能有问题吧”。
果然,事情不出我的所料,除去那些不能现场出结果的项目,其它都是一次通过,毫无问题。不多长时间,就只剩胸透没做了。
“照完就完事”,我这么想着,走进了检查室,像其他人一样,站好。不料,检查的过程似乎要更长一点;更让人不解的是,年轻的检查员起身,到旁边叫来一位年长的大夫。隔着玻璃,我听不到他们说了什么,只看到他们在屏幕上指指点点,一旁的父亲也凑上去询问,脸色隐约有变。
终于结束了,我忐忑不安地走出来,只见体检单上写着:左上肺叶有不规则片状阴影,建议确证。大夫说:看症状像肺结核,不过我们只管体检,要确诊,请去大医院,或者专业医院。
我连忙对父亲说,没事,没事,还不知道呢,等明天去医院看看再说。心里却收得有些紧:肺结核,就是古代说的“痨病”吧,是不是还得吃“人血馒头”~~。

  • 背景:肺结核是一种常见的疾病,在发展中国家,发病率尤其高。空气中到处都有结核杆菌,在个人免疫力下降,或者过度劳累时,病菌容易趁虚而入。患病之后可能并不会长期咳嗽,低热(尤其是午后或傍晚)、盗汗(睡觉醒来全身湿透)、精力严重下降,也是肺结核病的症状(在我身上,这三点体现的很明显,尤其是精力,我有时候百思不得其解:为什么我早上锻炼了,全天的精神反而更差了,也有朋友抱怨“你总是很累”)。

4月27日,周一。早上来到新街口的北京市结核病防治医院,医生问了问状况,让去拍个片子。看了看,确实有阴影,但还不能确诊,需要进行痰检、皮试(检查血液是否感染),才能确认。血检是当时就能出结果,痰检必须连续三天送样本。

  • 背景:在确诊之前,需要检查血液、痰液里是否存在结核杆菌。血液状态可以通过皮试检查,若发红,则表示已感染。痰液检验结果若呈阳性,则处于开放期(也就是可能传染他人),应隔离治疗。痰检必须是每天清晨漱口之后马上采样送检,涂片结果当时可出,培养的结果则要两个月之后才可见到。另外,在采样时,一定注意牙龈不要出血,否则容易被认定为血痰,影响结果。

4月30日,周四。最后一次送痰样本。医生检查了皮试结果,确认已经感染结核杆菌。因为五一劳动节医院休息,痰检结果要等五一之后才能知道。

5月6日,周三。再次去医院,挂了号,医生说,你这个情况真奇怪,看片子是有,皮试也是阳性,但怎么痰检都是阴性(也就是不传染他人),再去做血液抗体检查,看看是否有抗体。等了半个小时,结果出来了,没有抗体。“这个情况确实比较少见,你等等吧,我们研究研究,你过一周再来好了。”

5月13日,周三。去医院取了会诊结果,医生说,已经开会研究过了,判断还是感染了肺结核,就是不排菌,不传染,开始服药治疗吧。于是登记了相关信息,签了一份“同意治疗”的文件,领了药。医生嘱咐说:一定要注意休息,晚上不能睡太晚(我习惯12点睡觉),11点之前,必须睡觉。

  • 背景:按照政府规定,对于肺结核病人,采取免费治疗政策。据我所知,“免费”的范围包括:在治疗周期内(一般为半年到九个月),免费提供抗结核病药物,两次免费胸片(分别在治疗的第二个月和第六个月),而且,这项政策不受户口所在地的影响,在当地发现,就可以在当地享受免费待遇。
    一般来说,治疗结核病常用的药物有:利福平、异烟肼、乙胺丁醇、吡嗪酰胺和链霉素。这五种药物都属于抗生素,其中的每一种都可以杀死几乎所有细菌,但因为患者体内可能有大量细菌,单独用药总可能要留下死角(产生抗药性之后情况会非常麻烦),所以一般采取混合使用的办法,并至少治疗六个月,这样可以保证不复发。
    利福平、异烟肼和吡嗪酰胺,这三种药可能导致恶心和呕吐,并对肝功能有影响,作为辅助,可以服用保肝药(西药有肌苷片,辅助治疗肝炎的,便宜而且效果好,如果想吃中成药,一般服用护肝片,注意,保肝药不在免费范围之内),外加维生素B和维生素C。另外,服用利福平之后,汗液、尿液等可能呈橘红色,并有特殊气味,这是正常反应,不必惊慌。
    乙胺丁醇一般在治疗初期大剂量服用(剂量是其它药物的两倍),效果明显,但两个月后应减少,因为它会影响视力。链霉素是最先发现的能够治疗结核的药物,一般在结核病晚期注射使用,它会影响听力和人体平衡。

6月11日,周四。到现在为止,已经治疗了一个月了。按照规定,必须检查肝功能,并查痰。因为来了才知道要查肝功能,早上又吃了饭,只能下周二再来。医生并且嘱咐:查痰前三天,必须停药。
回想起来,治疗第一个月的反应真是很大,视力、精力都受到很大影响。眼睛特别容易疲劳,人也特别容易累——本身患病精神就不好,吃药以后更加厉害了,许多时候在公司就呼呼大睡起来,而且有好几天,我下班的时候感觉人要虚脱了,都不知道自己怎么骑车回去的(我一直觉得,在北京,除非下雨雪,否则上下班开车不如骑车),手上的许多工作更是搁置下来,包括年初制定的写书计划,答应帮派朋友做的事情,等等,外出活动更是难得了(只有一个周末去国图看了书,而且只看了半天左右)。

6月16日,周二。去医院查肝功能,并送了查痰样本。上班的时候,有个电话没接到,看号码,是医院打来的,打回去,因为是总机,只得作罢。

6月17日,周三。再次去医院,被告知,查痰样本仍然是阴性,只是转氨酶水平高了一些,超过了正常限度,暂时不用中断治疗,过两周再来查。

  • 背景:在治疗初期,因为服用抗生素的剂量比较大,副作用明显,肝功能的某些指标可能出现异常,这有可能是正常反应,不必紧张,应当判明原因之后再做决定。

7月2日,周四。去医院查血常规、肝功能。血常规的结果一切正常,肝功能显示转氨酶水平已经降下来了,但还是超过正常水平一点点,负责通知的医生说:你改天再来医院找大夫看看吧,到底要怎么办。

7月7日,周二(读者可能注意到了,我一般在周二或者周四去医院,因为该院只有周二和周四才能做血液检查,为了免除多跑一趟的可能,我尽量选择这两天去)。我又一次来到医院,医生说,转氨酶水平已经降下来了,目前稍微高一点,不是问题。从开始治疗到现在,已经两个月了,需要拍片比较(这一次是免费的)。把两张X光片放在一起比较,可以看出病灶处的阴影已经减少了很多,效果比较明显。“从现在的状况看,可以停用乙胺丁醇和吡嗪酰胺了,你只需要坚持服用异烟肼和利福平,坚持四个月,应该就可以痊愈了。”
这真是一个好消息!

总结这几个月的经历,有几条经验:

  1. 定期体检是一个好的习惯。有人觉得自己“身体好”,也有人怕检出问题心慌,但是,这都不应该成为拒绝体检的理由。许多时候,细密客观的医学指标,比笼统的生理感觉可靠得多。
  2. 多了解一些疾病的早期症状是非常有利的。李笑来老师曾说,如果他明白自己的许多反应是糖尿病的“征兆”,就会更早地发现问题所在。我自己的情况也是,虽然我发现的时候不算晚,但如果知道盗汗、低热和精力下降可能是肺结核的反应,我也会更早地开始治疗。这方面,我想到的一个好办法是阅读医学手册,看过一遍,就能大致知道什么病有什么症状。推荐默沙东制药《默克家庭诊疗手册》《默克诊疗手册》,有纸版书,默沙东中国网站还可心地提供了中文版在线阅读和查询
  3. 治病的道理,同其它许多事情一样。如今医学已经非常昌明了,对许多疾病都有可靠的疗法,但这并不是说患者就可以高枕无忧:一方面要充分了解、摆正心态,既不能恐慌,也不能无视;另一方面,也需要遵照医嘱,配合治疗,定时定量服药。有句老话说:“持之以恒,万事必成”。治病也是这样。
  4. 结核病治疗期间,应当尽量保证营养(肉类、蛋类、蔬菜类),并注意休息。照中医的说法,必须“静养”,而且身边人确实有“静养”之后迅速康复的例子,但照我的经验,减少劳作,按时作息,也可以保证疗效。
  5. 生病期间,心态难免会有变化,这时候,亲人和朋友的支持是很重要的;如果自己生病了,应当感激他们的每一点支持和关爱,如果亲人或朋友生病了,不妨多尽一份力量去关爱他们吧。

出版两年之后,《精通正则表达式》马上要第四次重印了,这个消息很是让我兴奋。

我读大学的时候,有幸接触到侯捷老师的许多文章,尤其是他谈关于选择技术书籍的言论,感觉受益匪浅——正是从此,我深刻认识到,“学习”的宾语不应该是“教材”,而是“知识”。认识到这一点,就豁然开朗了;当然,也无比真切地知道了好的书籍是多么重要。

另一方面,我也深信,总的来说,知识的价值是在传播中实现的。我经历过“有了新的收获自己保密,一人独享”,也经历过众人把自己的心得拿出来分享、彼此协作的环境,两厢对比,后者提供的满足感远远超越前者。因此,有更多的人迅速学会“卑之无甚高论”的正则表达式,不需要重走我自己当初学习的弯路,对我来说,也是一种不小的满足(相比之下,帮人写各种表达式所得到的满足,实在是“很小很小”)。

在这里还要感谢博文视点的编辑许莹,她细心地把目前勘误列表列出的所有错误都做了订正。因为《精通》一书中存在的错误,始终是我的一块心病。

另外,要兑现我年初的计划,今年要写一本关于正则表达式的书,正好在这里征集大家的意见:你们是期望它更加“下里巴人”,包括Word, EditPlus等等常用软件的应用例子,以应付更广泛的工作呢;还是希望更加“阳春白雪”,与狭义的“IT行业”(也就是开发)靠的更近呢? 或者有什么别的想法,还请不吝赐教。

虽然医生嘱咐要静养,可谁让“小姬看片会”那么好玩呢?周六下午两点钟,我顶着大太阳来到微软亚洲研究院地下一层的会议厅,加入了第9期小姬看片会。

本次看片会的主题是“人工智能如何改变世界”,选的影片是BBC的VISIONS OF THE FUTURE。这样“科技含量高”(用松鼠的行话说,就是“高级”),又比较偏IT的主题,放在这里举办(尤其还有免费饮料提供),真是再合适也没有了。
参加的人很多,看来大家热情都比较高,我首先找了个僻静地方“潜伏”下来,过会儿居然有人来打招呼,一看居然是刘未鹏,不久又遇到图灵的刘江老师。寒暄一阵,眼看影片要开始了,我提议搬三把椅子坐到中间的过道里,这样比较靠前,大家一致同意,于是搬了三把椅子,在过道里前后排成一列,影片正好开始。

影片分好几个方面,介绍了广义上的“人工智能”:模拟人类行为、虚拟现实、机器与生物的结合等等。关于狭义的“人工智能”,也就是与“智慧”相关的内容,并没有占太多的比重。我觉得,作为科普影片,这样的安排,是没有错的。
影片结束之后,照例是嘉宾与观众的互动环节,这次的嘉宾都很“高级”,几乎都是IT专业人士,即便有研究科幻非IT人士,来头也相当大。难能可贵的是,他们回答起问题来,丝毫没有普通人想象中的“死板”,而是妙趣横生,许多时候台上台下笑成一片,这正好应了松鼠会的口号:让科学变得有趣。另一方面,它也说明,活动办得非常成功。

我不是研究人工智能的,只是以前稍微看过一点点资料,参加完这次活动,也有两点想法,可惜小姬没给我当场提问的机会(观众实在是太热情了),写在自己blog上吧。
关于“人工智能”,我想大概可以分为好几个方面,之一就是“仿真”(也就是模拟生物体的机能),在片中我们可以看到,现在已经有机器人可以惟妙惟肖地模仿人类的许多行为,譬如会走路的机器人Asimo;换句话说,神秘而简单的生物行为,可以通过物理模型、数学公式来分解,加以实现。人类“潜意识”里的某些“感性”动作,譬如“向前走五步”,可以转化为一系列精妙的指令,以另一种方式来“理性”实现。当然,这个方面也存在困难,譬如王启宁博士所说,用电气元件模拟生物行为,总是存在若干困难,因而有时候,“电气元件–生物”混合的方式,反而效率更高。这一点在影片中也有提及,研究人员记录了小白鼠脑内的海马区(与短期记忆相关的区域)在不同情况下的电流脉冲,再照这些规则制造出芯片,植入小白鼠体内,据称“反应速度提高了40%左右”。我对这个例子很有兴趣,可惜,它在影片中只是一带而过。
另一个方面,也是大家非常感兴趣的方面,就是“机器能否具有智慧”,或者说“机器能否像人一样思维”。这个问题,关于这个问题,前面有过著名的图灵检验,后来塞尔教授又提出过“中文屋子”问题,于是产生了“强人工智能/弱人工智能”的分野。按照程序的逻辑,我们关心的是“接口”,而不是“实现”。也就是说,不管我们面对的“其实”是机器,还是人,只要我们无法做出区分,就可以认定,对方“就是”人,虽然就其“本质”上来说仍然是机器。我之所以对那个小白鼠的例子感兴趣,原因也在这里:如果我们不去关心这些脉冲所“承载”的意义,而只是在“黑屋子”外,模拟我们观察到的一切,能产生完全相同的结果,那么或许可以说,电脑模拟的这些信号,本身也“承载”了同样的意义?
关于这个问题,现场的毛老师也提到,关于“什么是人(智慧)”,我们目前可能很难给出一个确定的定义,而只能通过多个特征加以描述和归纳,如果机器实现了这些特征,我们仍然“愿意”觉得,这还是与人有区别的,或者说,大家心中,其实多少还有一点对“人类本质”的偏执。在我看来,这有点类似波普尔所说的“本质论”和“标签论”的关系,通过“贴标签”而不是“追求本质”的方式(譬如把某种现象定义为“重力”而不是研究“重力的本质是什么”),科学已经取得了长足的进展,未来有一天,如果我们彻底无法区分面对的是人还是机器,我们是认定“这就是人”,还是心智紊乱,或者苦心积虑地找到另一种“定义”,把对方排除出“人”的范畴?这是个有意思的问题。
另说一点,在看片的时候,我忽然想到象棋与围棋,机器“深蓝”已经可以在国际象棋上打败人类世界冠军,但是对于围棋,目前人工智能却束手无策,最好的围棋程序,也敌不过一般的围棋爱好者。大家认为,主要原因是围棋的可能性太多,决策树太过复杂,超过了目前计算机的计算能力。如果人类的大脑能够处理这样两类计算量迥然不同的任务,这到底说明,我们理解棋类游戏的算法思路有问题(也就是说,大脑的运算能力是一定的,只是我们还没找到围棋的高效算法),还是人类大脑的运算(思维)能力,其实是不能以单一维度衡量的(从某个维度上来说,在解决围棋的问题上,大脑可以展现出远远高于象棋的计算能力)?

好了,闲话这么多,就此打住。最后给松鼠会提两点意见:
1.我看片的时候,听讲解的同时看了看字幕,发现字幕有一些翻译错误,所幸不是很严重。因为字幕是合成在影片一起的,所以,这样的问题也不能怪罪松鼠会。不过以后准备材料时,多注意一些这样的细节(如果同一部片子有多个字幕,不妨选择质量最好的那个版本),另外互动环节如果出现问题应该当时纠正(比如有人说“吃转基因食品,我们的基因就会随之变化”,应当有人马上澄清),可能更好点。
2.如果能够在影片结束后,做一些入门性的背景介绍(譬如这一次的,可以介绍图灵检验,中文屋,图灵完备性等概念),这样可以真正“以科普为中心”,而不会“以影片为中心”,对主题起到辅助和补充的作用(而不限于影片所介绍的知识),在专业的嘉宾和热情的观众之间夯实基础的沟通桥梁,效果可能更好。

Next Page »