记一件有意义的事

Jan 13, 2009

Comments

这是发生在我身上的真事. 下面的时间, 基本上可以精确到分. 

————

2009年1月11日下午7点01分, 我在赶一篇论文, 离截至还有30小时. 突然间, 左后背和腰剧痛, 没法正常集中精力工作. 

7点20分, 还在痛, 我已经疼得趴在office 的地上打滚了, 不管采取什么姿势, 都疼得要命.

7点24分, 我在twitter 上说: “各位好友 我后背和腰突然剧痛 连坐着都受不了, 躺下也痛 各位可知道可能是什么情况? (打字都不利索)”

7点25分, 我意识到这么疼肯定扛不住了, 给女友打电话, 准备去医院. 

7点57分, 上车, 坐都疼, 躺在后座上.

8点02分, 打电话给老板, 告诉他痛得扛不住了, 老板说, 论文剩下他来搞, 赶快去医院. 

8点22分, 到医院, 急诊. 路上, 疼得把车门内侧踢得全是脚印. 

8点43分, 预诊医生说, 疑似肾结石, 要抽血, CT 等. 其间, 老板打来电话关心.

9点10分, 打起吊针, 抽血化验, 打了止疼药, 等血检结果. 

10点05, 上CT 台, 做CT. 

10点40分, CT结果出来了, 和医生谈, 确定为一颗不到1毫米的结石. 再打吊针. 还是太疼, 我有生以来第一次向医生索要止疼片. 

11点整, 挂完水, 医生说, 可以回家了. 待会儿就尿出来了. 

12点01, 还是疼, 到药店买了强力止疼片. 吃了两粒.

凌晨大约两点, 起来尿了一个巨长的尿, 不疼了. 看排出的结石大小, 白色的, 像头屑一样, 比半颗芝麻还小. 

————

这基本上就是我7个小时的肾结石体验. 现在已经全好了, 得感谢老板和女友一直关心. 

我牙疼肿过半边脸, 骨折过, 韧带拉伤过, 而且自认为自己很耐疼, 都扛不住那种肾绞痛 (维基百科说, 这是最厉害的一种疼痛, 比生孩子还疼. 我觉得牙疼的程度和这个比, 也就1:10的程度). 排出结石的那一刻, 我突然想, 那些喝了三鹿奶粉的婴儿, 该是多么痛苦? 我是一个身体各方面机能还算相对巅峰的人, 结石也非常小, 那些小婴儿的泌尿系统, 可没成年人发达, 而且更加脆弱, 结石又更加大, 他们怎么受得了? 

而且, 我是在医疗效率相对高的美国, 从疼痛到就医也就几小时. 各种高级诊断手段, 比如CT, 超声, 都有条件做, 也能迅速的查到问题, 所以几个小时就免除了疼痛. 而那些农村的, 普通家庭的孩子呢, 那些说不出来疼光哭闹的孩子呢, 可以想像, 他们往往要拖个几天, 跑到”大城市”的医院, 折腾很久, 才能查出问题, 他们承受的是怎样的疼痛啊. 

有句话叫感同身受.我没有体验过肾结石的那种痛苦前, 只是道义上支持三鹿宝宝的维权; 现在, 我真心的支持三鹿宝宝维权行动. 我甚至很想折腾一下那些往奶粉里面加三聚氰胺的人, 那些知情封锁几个月的人 和 那些不许家长维权的人. 有生之年, 得给那些害人之人, 一人冲杯三聚氰胺奶粉, 让他们”感同身受”一下这种绞痛, 认识一下自己干的是不是人事.  

从感同身受意义上来说, 得一次肾结石, 受一次折磨, 是件非常有意义的事情, 让我更加想明白了很多事情, 是为记. 

(PS: 我的结石的成分有待医生分析, 不能确定是否也是三聚氰胺的问题).


编程珠玑番外篇-A.P2P客户端的策略和奇妙的对策论-1

Dec 31, 2008

Comments

(过新年了, 找到了以前写的一篇没发出来的旧文章, 算作一篇贺岁吧)

最近日本著名演员饭岛老师去世了. 在我这个年龄段的人中, 熟悉饭岛老师的相信十有八九都是通过奇妙的叫做 bt 或者 电驴 的软件认识的. 今天我们就来八卦一下程序设计人员是如何_设计这些客户端的策略使得您既能下载欣赏到饭岛老师的片子, 又不会浪费您太多的上传带宽_的. 简单的说, 就是 P2P 软件的客户端的策略该如何设计, 使得整个系统能够帮助每个用户获得相应的利益最大化.

要研究这个问题, 我们得从博弈论谈起. 但是因为这个是给程序员看的八卦, 不是数学专业课, 我们不在这里说太多的数学, 而是用例子和八卦引入.

大家都知道, 1994 年的诺贝尔经济学奖给了一个数学家, 约翰.纳什 (电影”美丽心灵”为证). 纳什的理论工作是推广了冯诺伊曼开创的极大极小定理(博弈论的基本定理). 而在通俗的对博弈论的介绍中, 提到纳什, 一般都是着重在纳什均衡和囚徒困境上. 我们不具体深究纳什均衡的数学意义, 而是以下面一个具体的极其简化的例子来说明囚徒困境:

假设 BT 网络中两个节点 阿强(A) 和 B哥(B) 要交换文件. 文件很大, 我们假设需要非常多轮交换才能完成. 每一轮, 每个节点可以选择 平衡上传/下载 和 几乎不上传/贪婪下载两组策略. 我们按照博弈论的一般用语, 把第一种策略称为 C(合作), 第二种称为 D(叛变). 同时, 假设A, B 都是使用 ADSL 网络, 所以上传成本比下载成本要高很多, 我们在计算回报的时候考虑这样的不对称. 现在, 假设 A 和 B 各自有对方需要的文件, 那么, 如果 A, B 同时选择策略 C, 即平衡的上传和下载, 他们得到的回报都是 3, 如果其中一个人偷鸡选择 D, 即几乎不上传, 光下载; 而另一个节点选择 C, 则选择 D 的能够下载到所要的文件且几乎不需要付出上传的代价, 我们记回报为 5, 而另一个人付出了上传的费用, 却得到了一点点的下载, 可以把回报看成是0. 如果两个人都选择贪婪下载, 几乎不上传, 那么两个人都得到了一点点下载, 现在这样的下载量没有3多, 但是因为本身付出的上传成本也少, 我们把这时候两者的回报都定为 1.

说了这么多, 只是为了让问题更加的真实. 这些交代的条件的数学本质, 可用表格表示, 博弈论中称之为支付矩阵:

C D

C (3,3) (0, 5)

D (5,0) (1, 1)

现在的问题是, 阿强和B哥都是理性的, 也是自私的, 因此, 他们都认为, “假如我选 C, 对方可能选 C 或者 D, 那么我这个策略最糟糕的情况下收益是 0, 而假如我选 D, 最糟糕的情况下收益是 1″ 那么, 因为 D 下最糟糕的收益比 C 最糟糕的情况下收益要大, 理智的人肯定选D. 我们看到, 两者选择 D 都是理性的, 但是实际上从对两者的收益分析看, 两者都选择 C 才是更加优的. 这个表面上看上去很理智但是最后没有到达对双方最好的结果的困境, 就是所谓的囚徒困境. (看过这篇八卦, 您也可以叫做饭岛老师困境)

关于囚徒/饭岛困境的简单介绍就到这里, 现在我们看我们的原始问题. 我们知道, BT 交换文件是分成一块一块的, 也就是说, 是一次一次的交换的. 我们把每次交换叫做一轮的话, 整个系统是一个多轮的博弈问题(或者叫做多阶段的博弈问题). 这个博弈问题, 就显得好玩起来了. 为什么呢, 因为多阶段博弈, 居然能够让自私的A和B两个节点为了自己的利益, 进化出合作来.

我们先简单的说明一下多阶段博弈不必然的能跳出囚徒困境. 比方说, 如果 A 和 B 知道一共有 N 轮博弈, 那么最后一轮, 理智的他们肯定都陷入了囚徒困境, 在第 N 轮 的策略清楚之后, N 的问题就转化为 N-1 轮的问题. 所以, 必然的, A 和 B 在所有 N 轮上, 都会陷入囚徒困境 (好比奸商一辈子只和你做有限次买卖的话, 就会一直黑你, 不黑白不黑). 他们等到花儿也谢了, 也不能得到自己想要的内容. 但是, 问题的奥妙在于, 假如A 和 B 不知道一共多少轮, 或者有无限轮呢? 假如阿强在某轮选择平衡的上传和下载(C), 则可能正好碰上 B 哥 也选择”友好合作”, 那么, 两个人都舒舒服服的交换了饭岛老师的片片. 所以, 对于一个设计良好的BT客户端, 问题的关键在于怎么选择自己的策略, 使得既能完成自己自私的下片目标, 又能注意和其他客户端良好的合作使得自己的收益最大, 而不在于在特定的一轮中自己的得失.

这里, 我们的目标是设计一个良好的策略. 通常, 在设计一个实践中性能良好的算法的时候, 数学家和计算机科学家在这里的方法就鲜明的分野了. 数学家, 会证明这样算法的存在性, 性能上下界, 和众多的必要条件, 以及算法之间在最理想的情况下的好坏比较. 而计算机科学家, 会像搭积木一样, 用不同的基本模块, 直接尝试不同的组合, 一一做实验, 看哪种方法最好. 在这里, 我仅介绍一种计算机科学家的方法: 通过让不同方法比赛, 取出赢家, 赢家的方法最好的方法. 其实准确的说, 这个就是达尔文的适者生存的方法. 而这个比赛本身又是一段非常有趣的八卦, 因此我着重花笔墨介绍一下.

在心理学和行为学领域, 有一本非常著名的书, 叫做<合作的进化>. 其作者, 记载了在80年代, 他组织的两次比赛, 叫做IPD (Iterative Prisoner’s Dilemma, 多轮囚徒困境). 竞赛的目的是在一个多轮的囚徒困境中找出最好的策略, 参赛者自己写好算法程序, 然后由组织者让这些程序两两对弈, 看谁在多轮囚徒困境中得到最多的分. 在所有的数学家计算机科学家等提交的很多程序中, 表现最好的一个策略, 超乎寻常的只有四行简单的 Basic 程序. 这四行 Basic 程序, 勾勒出了一个叫做 “针锋相对” 的算法(Tit for Tat).  这个算法策略很简单, 一开始采用合作, 假如对方上一轮合作, 则本轮合作. 如果对方上一轮对抗, 则本轮对抗. 用中国人熟悉的话说, 叫做”人不犯我, 我不犯人; 人若犯我, 我必犯人”. (四句话正好对应四行程序, 不是巧合). 其他的算法, 比如随机算法呀, 永远敌对的算法呀, 都比不过这个算法. 因此, 这个算法赢得了第一年的竞赛.

第二次, 各位吸取教训, 继续开发好算法. 猜猜第二次谁赢了? 居然还是那四行程序! 在合作的进化中, 作者从”宽容, 以牙还牙”等社会学的角度去解释为啥这四行程序会赢. 或许对人生有深刻思考的人会感叹, 这四行程序的确蕴含了深刻的智慧. 但是, 很不幸的是, 这个程序在现实中, 有一个非常大的漏洞, 而因为这个漏洞, 使得BT程序如果不修改策略, 先现实中会寸步难行. 这个看上去非常理智非常聪明的策略到底是怎样的大漏洞呢, 我先卖个关子, 下回分解.

(想看剧透的, 可以看 Wikipedia 的条目: Tit for Tat: http://en.wikipedia.org/wiki/Tit_for_Tat )

新年快乐!


编程珠玑番外篇的番外篇

Dec 22, 2008

Comments

  1. 最近挺忙的, “编程珠玑番外篇”更新不快了, 闲散的短篇反而多了. (我和霍炬说过, 写技术八卦非常的耗时间, 平均写一篇要做50次以上的Google, 还要整理很多书的读书笔记查资料等等, 耗时基本在三小时左右). <编程珠玑番外篇> 是一个我自己也非常中意的系列文章, 用师兄[刘未鹏](http://blog.csdn.net/pongba)的话说, “这个系列传播力很强”. 所以, 我会一直坚持写下去, 写完了汇成一个 PDF 大家取用.

  2. 今天技术牛人 DBAnotes 推荐我的博客了, 他说:

4G Spaces

地址: http://blog.youxu.info/

作者: 徐宥

我和作者不认识。他的《编程珠玑番外篇》是今年见到的最好的技术八卦(并非贬义);”完全用键盘”工作的系列文章很好的体现了 Geek 精神。

感谢他的推荐和表扬. 希望这个技术八卦系列在2009年依然是质量上乘的技术八卦 :)

  1. 下面的写作计划其实我早就有了, 苦于没有时间码字 (事实上从最近到1月12日, 我都没时间码字了). 为了让大家保持一个好胃口, 趁着 DBAnotes 的推荐, 说一下剧透好了 (有兴趣的快订阅本博客啊):

协程的八卦: 抢占式多任务 协作式多任务的概念, 协程在编程语言里的实现的历史, yield 关键字的来历. 协程在现代编程语言中的消亡和复兴.

关于用户级线程库的八卦: 内核线程还是用户线程, 历史的演变, 各大编程语言的实现, 为啥Python 不能在多核上提高效率而Java 能. 用户级线程库在现代编程语言中的复兴.

Java平台的动态化: JSR292 的前世今生, 一个静态语言的平台如何加入一个指令就能动态化? PVM 和 JVM 的区别在哪里, 谁是下一代一统江湖的语言平台?

我相信, 后面会写的越来越精彩, 希望大家持续关注.

»»>各位读者,新年和圣诞节快乐««


一首汉俳

Dec 20, 2008

Comments

前日看李淼的博客, 学到了一个叫做俳句的东西. 带着学了不少日文俳句 (Haiku)的知识. 女友懂日语, 看到我看俳句的介绍, 立即变戏法的从家里面翻出了她的十几本日文俳句集, 我 Orz 啊.  </p>
据她说, 俳句就和中国的唐诗一样, 属于日本的基本文学样式之一.  她给我翻译了几段, 我觉得, 虽然形式类似, 日语中的俳句比中文的宋词要清丽一些, 颇有魏晋初唐的山水田园诗的风范. 
学写了一首:    </p>

一封家信

前年秋之信
泛黄纸张言犹新
家书抵万金

顺便贴一首清丽的日文俳句(据说是最有名的一首, 我土人 今天才知道):
闲寂古池旁
青蛙跳进水中央
扑通一声响

趣事一则

Dec 14, 2008

Comments

junyu 和我暑假无聊的时候曾经搞笑写过一段文字:

我们正在工作在一个火狐狸的实现, 而且已经要完成了基本上, 并且可以让火狐狸直接呈现 CHTML 页面. 对不起微软的用户, 因为我们没有得到任何英特网探险家的超文本解析库的授权, 按照新千禧年数字法案, 我们的工程师不能加 CHTML 的支持通过反向工程. 我们感到很抱歉为此.

服务器捐赠是被欢迎的. 你也可以捐赠我们通过 Paypal.

反正不知道当时是谁突然灵光一闪, 想起来我们小时候用过很土的那种翻译软件的风格, 然后两个人都很有感触, 就像回到 windows 95 一样. 所以我们一起人工模仿恶搞出了古老的翻译软件的效果. 为了保证“看上去”真实, 我们在后面加上了一段:

鸣谢: 谷歌翻译 提供了很多便利为我们的工作, 我们感谢它!

于是, 有了以下的评论:

  1. 这些文字感觉是翻译过来的。。。在国内土生土长的人写文章会写以下这样的语句?

  2. “服务器捐赠是被欢迎的. 你也可以捐赠我们通过 Paypal”,这是怎么翻译的,难道是直接通过翻译工具将英文转化出来的?

  3. 我测试过,是把中文用翻译软件翻译成英文,再用翻译软件把翻译的英文翻译回中文的产物。

  4. 很明显是故意这样写的,目的是搞笑嘛

  5. 谷歌翻译 提供了很多便利为我们的工作, 我们感谢它!

——————————主页上写的很清楚!

  1. 撒比,是先用英文写好,再用Google翻译的,就做出了这种“特效”。

这些评论, 特别是3 和 6, 完全不顾我和junyu 花了十几分钟人脑翻译的事实. 我们看了这些以后, 不禁莞尔.