Archive

Archive for the ‘Uncategorized’ Category

对付身体小毛病

November 29th, 2005 No comments

你肯定被牙痛骚扰过,你也肯定遇到过鼻出血不止的情况。当时怎么解决的?是不是仰着头,等待止血,任凭血倒灌入喉腔……其实这种方法是不对的,耐心看看下面的文章,小编教你n多家庭妙招,来对付身体的小毛病。

  1. 换季疲劳:在季节更替的时候经常发生换季疲劳,给自己做一个“安眠枕”。在枕套下面多放些气味芬芳的杀菌植物叶片:月桂、蕨、榛树、针叶、薄荷和玫瑰花瓣。
  2. 牙齿酸痛:丁香油中的芳香物质可以消除疼痛,消灭细菌。把棉棒浸入丁香油后放到病牙上,可以帮助你缓解疼痛。
  3. 食欲过旺:藏疗法:用中指肚按住上嘴唇和鼻子之间的穴位几分钟。饭前喝一杯矿泉水或者西红柿汁。
  4. 刺:如果你把自己“浸湿”,刺就会自己钻出来。先泡个热水澡,然后拿双层餐巾纸擦拭皮肤,以便挤压出刺来。另一种方法:在扎刺周围的皮肤涂上一滴植物油。它会渗入皮肤,软化刺,这时用镊子夹出或者用消毒后的针挑出。
  5. 咳嗽:用酒精或者白酒按摩胸廓,使之发热,然后马上盖上一层薄的温热的药用蜡,直至冷却。使用此法帮助直至康复。
  6. 头晕:不要躺下、也不要闭上眼睛,这样只会使症状恶化。红辣椒可以帮助你。倒杯热水,捏一捏辣椒末放入杯中,小口喝下。水和辣椒可以使你的血液升温,刺激血液流入大脑,头疼就缓解了。如果你的手边没有辣椒,找一个舒适的地方坐下,松开衣领,沿顺时针方向按摩太阳穴。
  7. 脓包:如果脓包已经“出头”,红肿着,用消毒水已经没有用了。碘酒也不要用了,更不能挤压,否则它会更明显。用酒精(白酒、花露水)擦拭,然后混合等量牙膏和男用剃须滋润霜,将混合物涂在脓包上,等待大约15分钟,直至变干,然后小心擦掉。脓包会变小、发白。
  8. 体内垃圾:用植物油涂抹身体,按摩身体大约10分钟左右,最好用专门的浴刷。然后泡个热水澡,仔细地用浴球、浴液洗去植物油。这之后毛孔打开,开始流汗排除体内垃圾。
  9. 口臭:口气不清新的一个原因是口干。通常是因为吸烟,长时间聊天,情绪紧张。柠檬瓣可以帮助你摆脱口臭。把柠檬瓣放在舌头上5-7分钟,不时地吸一下。
  10. 流鼻血:不能躺下,头也不能向后仰,更不能用棉球堵住鼻子。需要坐下,头稍稍往前低,最好用带冰的水袋放在鼻梁上,如果身边没有,那么把手绢用冷水沾湿,然后用手绢用力按住流鼻血的那个鼻翼2-3分钟,这时用嘴均匀呼吸。
  11. 血压低:当你感觉血压开始降低时,换一个舒服的坐姿,解开衣领,顺时针按摩太阳穴。或用柠檬汁或香水几滴擦拭太阳穴。然后,可以喝一杯中等浓度的咖啡。
  12. 偏头痛:经常是因为疲劳过度、室内闷热、饥饿和不安,也可能由于遗传因素造成。苹果醋蒸气浴方法可以消除或者至少是减轻头痛。在锅内放入相同数量的醋和水,用小火烧开。当开始冒蒸气时,将头低至锅上方,呼吸蒸气,吸气60-75次就可以了。
  13. 烫伤:养一盆天竺葵(老鹳草),它对烫伤特别管用。在开水烫伤的时候,取新鲜的天竺葵叶子盖在伤口上,用绷带缠好。过10-12小时重复一次。通常烫伤在有限的几天里痊愈,不会留下疤痕和斑点。
  14. 关节: (1)当关节刚刚开始酸痛时,取新鲜的圆白菜叶,在菜叶内部涂上蜂蜜。用它做护膝包住膝盖(最好借助于有弹力的绷带),直到酸痛停止再取下来。(2)在锅 内将普通的沙子炒热后放在脚跟处,这样关节自己就会变热。这个配方特别适合痛风,但是,有静脉曲张的情况不适用。
  15. 眼四周细小皱纹:用大拇指按压眼睛外角1厘米处的穴位,每个穴位每分钟按3次。
  16. 醉后不舒服感:在躺下睡觉前喝几杯水(最好是蜂蜜水):它会帮助你减轻第二天早上的痛苦。如果早上起来还是感觉不舒服,那么,无论是药片,还是盐溶液都帮不了你,贴个芥末膏在小腿上,在额头上放块冰。过半小时你的症状就会减轻。
  17. 黑眼圈:如果你的黑眼圈不是因为慢性疾病,而是因为睡眠不足,用沾了凉浓咖啡(3汤勺咖啡兑100克开水)的湿布敷在黑眼圈部位。咖啡因是非常好的血管收缩剂,这种方法青光眼患者禁用。
  18. 掉头发:擦碎一个洗净的土豆,榨出土豆汁,加入2汤勺芦荟汁和20克蜂蜜。把这种混合物转圈涂在头部皮肤上,用毛巾将头发包2个小时,然后仔细洗净。每周进行这种疗法两次,会获得效果
Categories: Uncategorized Tags:

It is we who are lost

November 4th, 2005 No comments

Through naming comes knowing; we grasp an object, mentally, by giving it a name—hension, prehension, apprehension. And thus through language create a whole world, corresponding to the other world out there. Or we trust that it corresponds. (Or perhaps, like a German poet, we cease to care, becoming more concerned with the naming than with the things named; the former becomes more real than the latter. And so in the end the world is lost again. No, the world remains—those unique, particular, incorrigibly individual junipers and sandstone monoliths—and it is we who are lost. Again. Round and round, through the endless labyrinth of thought—the maze.)

—Edward Abbey, Desert Solitaire, p 288-289, Ballantine Books, New York, 1971.

Categories: Uncategorized Tags:

Bash readline使用技巧

November 2nd, 2005 No comments

很多人会用 Bash,但是很少有人知道 readline 是怎么回事。readline 是一个强大的库,只要使用了它的程序,都可以用同一个配置文件配置,而且用同样的方法操作命令行,让你可以方便的编辑命令行。使用 readline 的程序现在主要有 Bash, GDB,ftp 等。readline 付予这些程序强大的 Emacs 似的命令行编辑方式,你可以随意绑定你的键盘。

术语解释

在 下文中,我们经常提到 “C-x r” 这类键操作。”C-x r” 其实就是按Ctrl-x,然后按 r。同理 “C-M-@” 就是按 ctrl-alt-@(M表示meta, 在 PC 上就是 Alt 键),但是其实 @ 是shift-2 (看看你的键盘)。所以 “C-M-@” 实际上要你按 ctrl-alt-shift-2。

但是在配置文件里的键序列中,我们把 “C-x r” 表示为 “\C-xr”, 把 “C-M-@” 表示为 “\C-\M-@”,你自己看看就知道怎么回事了。同理 “Esc a” 别表示成 “\ea”。

这就是 Emacs 里的按键的通常标记方法。EMACS = Esc Meta Alt Ctrl Shift :)

技巧篇

在自己配置命令行之前,我们先来看看利用缺省的键绑定能够进行的一些巧妙的用法:

第一招:使用以前的命令行参数

你是否经常出现这种情况?你想把 ~/text-browser/ 目录下的3个.tar.gz文件搬到/usr3/software/,于是你输入:

$mv ~/text-browser/*.tar.gz /usr3/software/

我想你一定已经知道,打入 ~/text 之后按 TAB 就可以补全text-browser这个长文件名吧?这是Bash 的基本功能。我废话?好了,就当你知道吧。不过今天我要讲的东西比这个复杂一些。

Go on! 刚刚输入到这里,你突然想起,应该在 /usr3/software/ 下先建立一个目录叫browsers,这样放进去的文件比较好管理。

于是你 Ctrl-u,删掉了这行命令。唉呀,这么长的命令一下就没了。是不是有点可惜?这还不算麻烦。然后你

mkdir /usr3/software/browser
mv ~/text-browser/*.tar.gz /usr3/software/browser

嗯。TAB 是帮了你不少忙。可是你实际上有更好的办法来完成这项工作。好吧,看看 readline 怎样神奇的完成你的任务:我们回到这种情况:

$mv ~/text-browser/*.tar.gz /usr3/software/

你 刚才是按了 Ctrl-u 删除了所有输入的东西。可惜啊!你要是按 M-#(也就是按住 PC 机的 Alt 键,再按 #,实际上就是 Alt-Shift-3),那么 Bash 就会在这样最开头插入一个 “#”,然后输入这行。这样命令就被作为一行注释载入了历史。这有什么好处?这样你的这行命令里的内容就可以被再次利用。看着:你接着输入:

mkdir ...

等 等,你是不是想输入 /usr3/software/?你不用再敲一遍了!直接按 M-.(Alt 加句号),看看, /usr3/software/ 是不是出现在命令行上了?M-. 就是调用了 yank-last-arg 函数,把上一条命令的最后一个参数放在命令行上。好了,回车吧!你接着输入:

mv ...

等等,这下是该输入 ~/text-browser/*.tar.gz 了。烦不烦啊?换一种方式吧。请按:”M-1 M-.”(把上一条命令的第一个参数放在命令行上)。这样命令行成为了:

mv /usr3/software/browser

怎么成这样了?看看你的“上一条命令”是什么吧?是……你自己看。所以这个参数不是你想要的。那么继续再按一次 “M-.”。看到了吧?你的命令行已经成为:

mv ~/text-browser/*.tar.gz

好。打一个空格。再按一下 “M-.”。命令行变成了:

mv ~/text-browser/*.tar.gz /usr3/software/browser

这就是你想要的!是不是看起来你还是花了不少工夫?但是想一想,如果你是要执行这样一个命令呢?

mv /data/ftp/pub/TUG/texmf/tex/latex/CJK/GB/GB.cap \
/usr/local/texlive/texmf-local/tex/latex/CJK/GB/

嗯。记住这个有用命令:M-. , 它的前面可以用 M-0, … 作为数字参数。

第二招:补全命令名,文件名和变量名

你知道 TAB 可以补全命令行上很多东西。可是你遇到这种情况的时候怎么办?

man a-very-very-long-command-name

你 输入了 man a-ver… 之后,按 TAB,什么反应也没有。因为 TAB 执行的是 “按情况补全”(complete),它看到 man,知道这应该是一个命令,那么它认为: “后面应该是一个文件名参数。” 但是你想要的是命令的名字怎么办?答案:按 “M-!”.再来看:你需要设置 XMODIFIERS=”@im=fcitx”。你输入了

export XM...

按 TAB? 没有反应。为什么呢?因为 TAB 的补全想要一个文件名,而当前目录没有开头是 “XM…” 的文件。那么你怎么补全?答案:”M-$”。其实 readline 的补全方式被 Bash 扩充了很多。看看有多少吧!

"TAB": complete
"\M-!": complete-command
"\M-/": complete-filename
"\M-@": complete-hostname
"\M-~": complete-username
"\M-$": complete-variable

自己试试吧!

第三招:扩展命令行

你 的一个目录里有很多类似的文件,名字叫 T12.txt, T12.log, T23.txt, T23.log, T13.txt, T13.log…… 有后缀 txt 的,也有后缀 log 的。… 你想把其中的某些 T*.txt 都移动到另外一个目录,而T*.log都不动。但是T*.txt 也不是全部都要移动。所以你想把T*.txt 都放在命令行上,然后选择其中一些。你输入:

mv T...

接着按 “M-*”(insert-completions)。结果 T 开头的文件都被放到命令行上了。嗯。这在某些时候是有用的,可是现在它把 T*.log 的文件也放上去了。不行。我们于是继续输入:

mv T*.txt

好了,现在我们可以使用 “C-x*”(先按ctrl-x,然后按*)。结果所有名字T*.txt 的文件都被放到了命令行上面。”C-x*” 执行的函数叫做 glob-expand-word.

配置篇

你是不是觉得那些命令很难记住?不顺手?别怕!它们都是可以改变的,就像Emacs的键绑定那样,可以被任意的改变!

所有使用readline的程序,都使用一个配置文件来决定它的行为和键绑定。这个文件一般是 INPUTRC 环境变量确定的。如果这个环境变量没有值,那么缺省使用 ~/.inputrc。

~/.inputrc 文件很简单,只有4种语句:

  1. 注释
  2. 变量设置语句(set variable value)
  3. 键绑定(“keyseq”:function)
  4. 条件语句($if … $endif)

我们先不说其它的,先来看看键绑定吧!

键绑定

  1. 绑定语句。你 现在就可以动手设置你喜欢的控制方式。比如,我发现有些时候我需要在命令行上做上 mark(Emacs 术语),然后把mark 和光标之间的 region(Emacs术语) 删掉,这个操作在 Emacs 里叫做kill-region. 但是我们发现这个函数在 Bash 里缺省是没有绑定的。如果我希望得到跟 Emacs 一样的绑定 C-w 的话,就把这行插入到 ~/.inputrc:
    "\C-w":kill-region
  2. 使绑定生效。为了使这个键绑定生效,你需要执行 re-read-init-file 函数。这个函数缺省绑定在了 “C-x C-r”。你修改 ~/.inputrc 之后在 Bash 里输入 “C-x C-r” 就可以使新的配置生效了。
  3. 列出可用的函数。不过你怎么知道那些函数可以被绑定呢?readline 的 info 页列出了很多函数,可是你不会每次都去info里查询吧,很麻烦啊。其实你可以使用bash的 bind 命令来得到所有的键绑定:
    $bind -p

    可以显示所有现有的已经绑定和没有绑定的函数。没有被绑定的函数被显示为 “(not bound)”,并被加上了注释。就像这样:

    "\C-g": abort
    "\C-x\C-g": abort
    "\M-\C-g": abort
    "\C-j": accept-line
    "\C-m": accept-line
    # alias-expand-line (not bound)
    # arrow-key-prefix (not bound)
    # backward-byte (not bound)
    "\C-b": backward-char
    "\M-OD": backward-char
    "\C-h": backward-delete-char
    "\C-?": backward-delete-char

    你可以把这个命令的输出作为一个模板,嵌入到 ~/.inputrc 文件。把你喜欢的函数绑定到方便的按键。其实 readline 有三个函数可以让你方便的查询函数,变量和宏的绑定情况,它们是:

    dump-functions
    dump-variables
    dump-macros

    可是它们缺省都没有被绑定到任何按键。你可以为它们分别设置类似 “C-xf”, “C-xv”, “C-xm” 这样容易记忆的绑定。

  4. 如果忘了绑定……这样你就可以设置你需要的绑定啦!但是你还是有可能在需要的时候突然记不起哪些键绑定可以补全。这时候你输入:
    $bind -p | grep compl

    得到结果:

    "\C-i": complete
    "\M-\e": complete
    "TAB": complete
    "\M-!": complete-command
    "\M-/": complete-filename
    "\M-@": complete-hostname
    "\M-{": complete-into-braces
    "\M-~": complete-username
    "\M-$": complete-variable
    "\M-\C-i": dynamic-complete-history
    "\M-g": glob-complete-word
    "\M-*": insert-completions
    .......

    这样你记不住一个键的时候就可以方便的查询,这样几次之后,你就会把自己需要的按键都记住了。

配置变量

  1. 体验:Bash 的 readline 有一些变量可以控制它的行为。比如:

    bell-style 可以控制出错时是 audible(发出响声),visible(闪动屏幕),还是none(什么都不做);editing-mode 可以控制你是用 Emacs 的输入方式还是用 vi 的;

    completion-query-times 的值控制在补全的个数超过多少N时,bash 提示: “Display all N possibilities? (y or n)”;

    如果我设置 expand-tilde 为 on,当输入“ls ~/doc”,按 TAB 时,命令行会自动变成 “ls /home/wy/doc”.

    如果把 visible-stats 设置为 on,那么列出补全的时候,目录,可执行文件,符号连接,会被分别使用 /, *, @ 来标记,就像 ls -F 的到的结果。

  2. 设置:设置的方法极其简单,就在 ~/.inputrc 文件里写入类似语句:
    set visible-stats on

    然后 “C-x C-r” 使设置生效。

  3. 怎样知道有哪些设置?可以设置的参数是很多的。使用命令
    $bind -v

    就可以得到所有这些可以设置的变量和它们的值了。

Categories: Uncategorized Tags: , , ,

又被卡中心戏弄了一下

October 27th, 2005 No comments

今儿一早,看到招行信用卡电子帐单,发现有一笔2.14元的循环利息。(冤枉死我了)

其实早在意料之中,早在半个月前,就看到额度不对,总少2块钱的预借现金额度(现在看,估计就是这个利息了)

立马打电话找mm理论,mm开始拒不承认(不老实);后来几次解释事情发生的全过程(因为这期帐单涉及溢缴款、预借现金的问题,所以麻烦),mm还是不承认是他们计算错了。

然后我妥协了。让mm解释2.14的循环利息是怎么算出来的。mm闷头算了半天,告诉我,他们的确算错了(还敢质疑我的计算能力,我用计算器算的,还能错)。然后说帮我调减这笔钱。

最后特意问了一下是不是调减到下期帐单中,本期仍然要先归还这笔利息。mm说不用,少还点就行了。(我还是不踏实,没明白为什么会调减到本期帐单中。算了,才1块1毛4,多还点儿也不亏)

Categories: Uncategorized Tags: ,

编程高手

September 9th, 2005 No comments

MIT BBS上说微软电话面试的一道题就是“Who do you think is the best coder, and why?”。我觉得挺有意思的,也来凑个热闹。排名不分先后。

Bill Joy,前任Sun的首席科学家,当年在Berkeley时主持开发了最早版本的BSD。他还是vi和csh的作者。当然,Csh Programming Considered Harmful 是另一个话题乐。据说他想看看自己能不能写个操作系统,就在三天里写了个自己的Unix,也就是BSD的前身。当然是传说了,但足见他的功力。另一个传说是,1980年初的时候,DARPA让BBN在Berkley Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了,拒绝把BBN TCP/IP加入BSD,因为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了,端的是一箭封喉,很快就写出了高性能的伯克利版TCP/IP。当时 BBN和DARPA签了巨额合同开发TCP/IP Stack,谁知他们的代码还不如一个研究生的好。于是他们开会。只见当时B伯伯穿个T-shirt出现在会议室(当时穿T-shirt不象现在,还是相 当散漫的哈)。只见BBN问:你怎么写出来的?而B伯伯答:简单,你读协议,然后编程就行了。最令偶晕倒的是,B伯伯硕士毕业 后决定到工业界发展,于是就到了当时只有一间办公室的Sun, 然后他就把Sparc设计出 来乐……象这种软硬通吃的牛人,想不佩服都不行的说。据Bill Joy的同事说,一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键之处,B伯伯发言,直切要害,提出 漂亮的构想,让同事们彻底崩溃。对了,他还是Java Spec和JINI的主要作者之一。

John Carmack,ID Software的founder和Lead Programmer。上个月和一个搞图形的师兄聊天,他竟然不知道John Carmack, 也让偶大大地晕了一把。不过也许搞研究的和搞实战的多少有些隔吧。想必喜欢第一人称射击游戏的都知道J哥哥。90年代初只要能在PC上搞个小动画都能让人 惊叹一番的时候,J哥哥就推出了石破天惊的Castle Wolfstein, 然后再接再励,doom, doomII, Quake…每次都把3-D技术推到极限。J哥哥的简历上说自己的专长是”Exhaust 3-D technology”,真是牛人之言不我欺的说。做J哥哥这样的人是很幸福的,因为各大图形卡厂家一有了新产品就要向他“进贡”,不然如果他的游戏不支 持哪种卡,哪种卡基本就会夭折乐。当初MS的Direct3D也得听取 他的意见,修改了不少API。当然,J哥哥在结婚前十数年如一日地每天编程14小时以上, 也是偶们凡人望尘莫及的。对了,J哥哥高中肆业(?),可以说是自学成才。不过呢,谁要用这个例子来为自己学习不好辩护,就大错特错了。那 Leonardo Da Vinci还是自学成才呢(人是私生子,不能上学)。普通人和天才还是有区别的。对了,其实偶们叫“达分奇”是相当不对的,因为Vinci是地名,而Da Vinci就是从Vinci来的人的意思。换句话说,Leonardo Da Vinci就是“从Vinci来的Leonardo”的意思。叫别人“Da Vinci”就不知所谓乐。嗯,扯远了,打住。

David Cutler,VMS和Windows NT的首席设计师,去微软前号称硅谷最牛的kernel开发员。当初他和他的手下在微软一周内把一个具备基本功能的bootable kernel写出来,然后说:“who can’t write an OS in a week?”,也是牛气冲天的说。顺便说一句,D爷爷到NT3.5时,管理1500名开发员,自己还兼做设计和编程,不改coder本色啊。D爷爷天生脾 气火爆,和人争论时喜欢双手猛击桌子以壮声势。:-) 日常交谈F-word不离口。他面试秘书时必问:”what do you think of the word ‘fu*ck’?” ,让无数美女刹羽而归。终于有一天,一个同样火爆的女面对这个问题脱口而出:”That’s my favorite word”。于是她被录取乐,为D爷爷工作到NT3.5发布。

Don Knuth,高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿,学数学的不知道欧拉,学音乐的不知道莫扎特,学Delphi的不知到 Anders Hejlsberg,或者学Linux不知道Linus Torvalds一样,不可原谅啊。:-)为了让文章完整,就再罗唆几句吧。高爷爷本科时就开始给行行色色的公司写各种稀奇古怪的编译器挣外快了。他卖给 别人时收一两千美元,那些公司拿了code,加工一下卖出去就是上万上十万。不过也没见高爷爷不爽过,学者本色的说。想想那可是60年代初啊,高爷爷写编 译器写多了,顺带就搞出了个Attribute Grammar和LR(k),大大地造福后人啊。至于高爷爷在CalTech的编程比赛(有Alan Kay得众多高高手参加)总是第一,写的Tex到86年就code freeze,还附带2^n美分奖励等等都是耳熟能详的,偶就不饶舌乐。

顺便说一下,高老大爷是无可争议的写作高手。他给Concrete Mathematics 写的前言可谓字字铿锵,堪为前言的典范。他的技术文章也是一绝,文风细致,解释精当,而且没有学究气,不失轻快跳脱。记得几年前读Concrete Mathemathics,时不时开怀大笑,让老妈极其郁闷,觉得我nerdy到家,不可救药。其实呢,子非鱼,安知鱼之乐,更不知那完全是高爷爷的功 劳。说到写作高手,不能不提Stephen A. Cook。他的文章当年就被我们的写作老师极力推荐,号称典雅文风的样本。库爷爷一头银发,身材颀长,总是面带谦和的微笑,颇有仙风道骨,正好和他的仙文 相配的说。

高爷爷其实还是开源运动的先驱。虽然他没有象Richard Stallman那样八方奔走,但他捐献了好多作品,都可以在网上看到,比如著名的Mathematical Writing,MMIXWare,The Tex Book等,更不用说足以让他流芳百世的Tex乐。

Ken Thompson,C语言前身B语言的作者,Unix的发明人之一(另一个是Dennis M.Riche老大,被尊为DMR),Belle(一个厉害的国际象棋程序)的作者之一, 操作系统Plan9的主要作者(另一个是大牛人Rob Pike, 前不久被google挖走了)。Ken爷爷也算是计算机历史上开天辟地的人物了。1969年还是计算机史前时代,普通人都认为只有大型机才能运行通用的操 作系统,小型机只有高山仰止的份儿。至于用高级语言来写操作系统,更是笑谈。Ken爷爷自然不是池中物,于是他和DMR怒了,在1969年到1970间用 汇编在PDP-7上写出了UNIX的第一个版本。他们并不知道,一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷在1971年又把Unix用C重 写,于是C在随后20年成就了不知多少豪杰的梦想和光荣。Ken爷爷还有段佳话: 装了UNIX的PDP-11最早被安装在Bell Lab里供大家日常使用。很快大家就发现Ken爷爷总能进入他们的帐户,获得最高权限。Bell Lab里的科学家都心比天高,当然被搞得郁闷无比。于是有高手怒了,跳出来分析了UNIX代码,找到后门,修改代码,然后重新编译了整个UNIX。就在大 家都以为“这个世界清净了”的时候,他们发现Ken爷爷还是轻而易举地拿到他们的帐户权限,百思不解后,只好继续郁闷。谁知道这一郁闷,就郁闷了14年, 直到Ken爷爷道出个中缘由。原来,代码里的确有后门,但后门不在Unix代码里,而在编译Unix代码的C编译器里。每次C编译器编译UNIX的代码, 就自动生成后门代码。而整个Bell Lab的人,都是用Ken爷爷的C编译器。:P

Rob Pike, AT&T Bell Lab前Member of Technical Staff ,现在google研究操作系统。罗伯伯是Unix的先驱,是贝尔实验室最早和Ken Thompson以及Dennis M. Ritche开发Unix的猛人,UTF-8的设计人。他还在美国名嘴David Letterman的晚间节目上露了一小脸,一脸憨厚地帮一胖子吹牛搞怪。让偶佩服不已的是,罗伯伯还是1980年奥运会射箭的银牌得主。他还是个颇为厉 害的业余天文学家,设计的珈玛射线望远镜差点被NASA用在航天飞机上。他还是两本经典,The Unix Programming Environment 和 The Practice of Programming 的作者之一。如果初学者想在编程方面精益求精,实在该好好读读这两本书。它们都有中文版的说。罗伯伯还写出了Unix下第一个基于位图的窗口系统,并且是 著名的blit 终端的作者。当然了,罗伯伯还是号称锐意革新的操作系统,Plan9,的主要作者。可惜的是,Plan9并没有引起多少人的注意。罗伯伯一怒之下,写出了 振聋发聩的雄文Systems Software Research is Irrelevant,痛斥当下系统开发的不思进取,固步自封的弊病。虽然这篇文章是罗伯伯含忿出手,颇有偏激之词,但确实道出了系统开发的无奈:开发周 期越来越长,代价越来越大,用户被统一到少数几个系统上,结果越来越多的活动是测量和修补,而真正的革新越来越少。

就在罗伯伯郁闷之极的 时候,google登门求贤来乐。如果说现在还有一家大众公司在不遗余力地把系统开发推向极致的话,也就是google乐。随 便看看google的成果就知道了。具有超强容错和负载平衡能力的分布式文件系统GFS (现在能够用100,000台廉价PC搭起一个巨型分布系统,并且高效便宜地进行管理的系统也不多哈),大规模机器学习系统(拼写检查,广告匹配,拼音搜寻……哪个都很牛的说),更不用说处理海量并行计算的各式google服务了。Rob在System Software Research is Irrelevant里萧瑟地说现在没有人再关心系统研究的前沿成果了。想不到他错了,应为google关心。google网络了大批功成总是试图吸取系 统研究的最新成果。想必Rob Pike在google很幸福。愿他做出更棒的系统..

Categories: Uncategorized Tags:

记住你即将死去–苹果CEO乔布斯在斯坦福大学的演讲稿

September 8th, 2005 No comments

到底如何才能成功?三十多岁的时候我明白了,是兴趣。兴趣才是驱动人一生奋斗的关键和成功的关键。否则人随时可能停下来思索前面的路。

“我 很清楚唯一使我一直走下去的,就是我做的事情令我无比钟爱。你需要去找到你所爱的东西。对于工作是如此, 对于你的爱人也是如此。你的工作将会占据生活中很大的一部分。你只有相信自己所做的是伟大的工作, 你才能怡然自得。如果你现在还没有找到, 那么继续找、不要停下来、全心全意的去找, 当你找到的时候你就会知道的。就像任何真诚的关系, 随着岁月的流逝只会越来越紧密。所以继续找,直到你找到它,不要停下来!”

这是苹果公司和Pixar动画工作室的CEO Steve Jobs于2005年6月12号在斯坦福大学的毕业典礼上面的演讲稿。

我今天很荣幸能和你们一起参加毕业典礼,斯坦福大学是世界上最好的大学之一。我从来没有从大学中毕业。说实话,今天也许是在我的生命中离大学毕业最近的一天了。今天我想向你们讲述我生活中的三个故事。不是什么大不了的事情,只是三个故事而已。

第一个故事是关于如何把生命中的点点滴滴串连起来。

我在Reed大学读了六个月之后就退学了,但是在十八个月以后——我真正的作出退学决定之前,我还经常去学校。我为什么要退学呢?

故 事从我出生的时候讲起。我的亲生母亲是一个年轻的,没有结婚的大学毕业生。她决定让别人收养我, 她十分想让我被大学毕业生收养。所以在我出生的时候,她已经做好了一切的准备工作,能使得我被一个律师和他的妻子所收养。但是她没有料到,当我出生之后, 律师夫妇突然决定他们想要一个女孩。所以我的生养父母(他们还在我亲生父母的观察名单上)突然在半夜接到了一个电话:“我们现在这儿有一个不小心生出来的 男婴,你们想要他吗?”他们回答道: “当然!”但是我亲生母亲随后发现,我的养母从来没有上过大学,我的父亲甚至从没有读过高中。她拒绝签这个收养合同。只是在几个月以后,我的父母答应她一 定要让我上大学,那个时候她才同意。

在十七岁那年,我真的上了大学。但是我很愚蠢的选择了一个几乎和你们斯坦福大学一样贵的学校, 我父母还处于蓝领阶层,他们几乎把所有积蓄都花在了我的学费上面。在六个月后, 我已经看不到其中的价值所在。我不知道我想要在生命中做什么,我也不知道大学能帮助我找到怎样的答案。但是在这里,我几乎花光了我父母这一辈子的所有积 蓄。所以我决定要退学,我觉得这是个正确的决定。不能否认,我当时确实非常的害怕, 但是现在回头看看,那的确是我这一生中最棒的一个决定。在我做出退学决定的那一刻, 我终于可以不必去读那些令我提不起丝毫兴趣的课程了。然后我还可以去修那些看起来有点意思的课程。
但是这并不是那么罗曼蒂克。我失去了我的宿舍, 所以我只能在朋友房间的地板上面睡觉,我去捡5美分的可乐瓶子,仅仅为了填饱肚子, 在星期天的晚上,我需要走七英里的路程,穿过这个城市到Hare Krishna寺庙(注:位于纽约Brooklyn下城),只是为了能吃上饭——这个星期唯一一顿好一点的饭。但是我喜欢这样。
我跟着我的直觉和好奇心走, 遇到的很多东西,此后被证明是无价之宝。让我给你们举一个例子吧:

Reed 大学在那时提供也许是全美最好的美术字课程。在这个大学里面的每个海报, 每个抽屉的标签上面全都是漂亮的美术字。因为我退学了, 没有受到正规的训练, 所以我决定去参加这个课程,去学学怎样写出漂亮的美术字。我学到了san serif 和serif字体, 我学会了怎么样在不同的字母组合之中改变空格的长度, 还有怎么样才能作出最棒的印刷式样。那是一种科学永远不能捕捉到的、美丽的、真实的艺术精妙, 我发现那实在是太美妙了。

当时看起来这些东西在我的生命中,好像都没有什么实际应用的可能。但是十年之后,当我们在设计第一台 Macintosh电脑的时候,就不是那样了。我把当时我学的那些家伙全都设计进了Mac。那是第一台使用了漂亮的印刷字体的电脑。如果我当时没有退学, 就不会有机会去参加这个我感兴趣的美术字课程, Mac就不会有这么多丰富的字体,以及赏心悦目的字体间距。那么现在个人电脑就不会有现在这么美妙的字型了。

当然我在大学的时候,还不可能把从前的点点滴滴串连起来,但是当我十年后回顾这一切的时候,真的豁然开朗了。
再 次说明的是,你在向前展望的时候不可能将这些片断串连起来;你只能在回顾的时候将点点滴滴串连起来。所以你必须相信这些片断会在你未来的某一天串连起来。 你必须要相信某些东西:你的勇气、目的、生命、因缘。这个过程从来没有令我失望(let me down),只是让我的生命更加地与众不同而已。

我的第二个故事是关于爱和损失的。

我 非常幸运, 因为我在很早的时候就找到了我钟爱的东西。Woz和我在二十岁的时候就在父母的车库里面开创了苹果公司。我们工作得很努力, 十年之后, 这个公司从那两个车库中的穷光蛋发展到了超过四千名的雇员、价值超过二十亿的大公司。在公司成立的第九年,我们刚刚发布了最好的产品,那就是 Macintosh。我也快要到三十岁了。在那一年, 我被炒了鱿鱼。你怎么可能被你自己创立的公司炒了鱿鱼呢? 嗯,在苹果快速成长的时候,我们雇用了一个很有天分的家伙和我一起管理这个公司, 在最初的几年,公司运转的很好。但是后来我们对未来的看法发生了分歧, 最终我们吵了起来。当争吵不可开交的时候, 董事会站在了他的那一边。所以在三十岁的时候, 我被炒了。在这么多人的眼皮下我被炒了。在而立之年,我生命的全部支柱离自己远去, 这真是毁灭性的打击。

在最初的几个月里,我真是不知道该做些什么。我把从前的创业激情给丢了, 我觉得自己让与我一同创业的人都很沮丧。我和David Pack和Bob Boyce见面,并试图向他们道歉。我把事情弄得糟糕透顶了。但是我渐渐发现了曙光, 我仍然喜爱我从事的这些东西。苹果公司发生的这些事情丝毫的没有改变这些, 一点也没有。我被驱逐了,但是我仍然钟爱它。所以我决定从头再来。

我当时没有觉察, 但是事后证明, 从苹果公司被炒是我这辈子发生的最棒的事情。因为,作为一个成功者的极乐感觉被作为一个创业者的轻松感觉所重新代替: 对任何事情都不那么特别看重。这让我觉得如此自由, 进入了我生命中最有创造力的一个阶段。
在 接下来的五年里, 我创立了一个名叫NeXT的公司, 还有一个叫Pixar的公司, 然后和一个后来成为我妻子的优雅女人相识。Pixar 制作了世界上第一个用电脑制作的动画电影——“玩具总动员”,Pixar现在也是世界上最成功的电脑制作工作室。在后来的一系列运转中,Apple收购了 NeXT, 然后我又回到了Apple公司。我们在NeXT发展的技术在Apple的复兴之中发挥了关键的作用。我还和Laurence 一起建立了一个幸福的家庭。

我可以非常肯定,如果我不被Apple开除的话, 这其中一件事情也不会发生的。这个良药的味道实在是太苦了,但是我想病人需要这个药。有些时候, 生活会拿起一块砖头向你的脑袋上猛拍一下。不要失去信心。我很清楚唯一使我一直走下去的,就是我做的事情令我无比钟爱。你需要去找到你所爱的东西。对于工 作是如此, 对于你的爱人也是如此。你的工作将会占据生活中很大的一部分。你只有相信自己所做的是伟大的工作, 你才能怡然自得。如果你现在还没有找到, 那么继续找、不要停下来、全心全意的去找, 当你找到的时候你就会知道的。就像任何真诚的关系, 随着岁月的流逝只会越来越紧密。所以继续找,直到你找到它,不要停下来!

我的第三个故事是关于死亡的。

当我十七岁的时 候, 我读到了一句话:“如果你把每一天都当作生命中最后一天去生活的话,那么有一天你会发现你是正确的。”这句话给我留下了深刻的印象。从那时开始,过了33 年,我在每天早晨都会对着镜子问自己:“如果今天是我生命中的最后一天, 你会不会完成你今天想做的事情呢?”当答案连续很多次被给予“不是”的时候, 我知道自己需要改变某些事情了。

“记住你即将死去”是我一生中遇到的最重要箴言。它帮我指明了生命中重要的选择。因为几乎所有的事情, 包括所有的荣誉、所有的骄傲、所有对难堪和失败的恐惧,这些在死亡面前都会消失。我看到的是留下的真正重要的东西。你有时候会思考你将会失去某些东西, “记住你即将死去”是我知道的避免这些想法的最好办法。你已经赤身裸体了, 你没有理由不去跟随自己的心一起跳动。

大概一年以前, 我被诊断出癌症。我在早晨七点半做了一个检查, 检查清楚的显示在我的胰腺有一个肿瘤。我当时都不知道胰腺是什么东西。医生告诉我那很可能是一种无法治愈的癌症, 我还有三到六个月的时间活在这个世界上。我的医生叫我回家, 然后整理好我的一切, 那就是医生准备死亡的程序。那意味着你将要把未来十年对你小孩说的话在几个月里面说完.;那意味着把每件事情都搞定, 让你的家人

Categories: Uncategorized Tags:

About “foo”

June 16th, 2005 No comments

摘要

技术开发人员经常会在各种英文技术文档和程序源代码中看到“foo”,“foobar”等单词,而这些单词在字典中都没有相应的解释,这就使得阅读者对它们的含义非常迷惑,本文就解释一下它们的来历和含义。

关键字

foo, foobar

内容

“foo” 和“foobar”等单词经常会作为示例名称,出现在各种程序和技术文档中。据统计,在各种计算机和通信技术文档中,大约有百分之七的文档出现了这些词 语。可是这些文件都没有为它们给出合适的解释。虽然这不是个大问题,但对于初学者,尤其是母语非英语的人来说,这些单词往往会带来不小的迷惑。本文就介绍 一下这些单词的含义和来历。

虽然正式文件中对于“foo”的语源没有详细的记载,但我们仍可以从它的发展历史中,捋清一些脉络。

“foo” 一词最早出现在一些二战前的漫画和卡通作品中。在关于消防队员的漫画“Smokey Stover”中,作者Bill Holman大量的使用了“foo”一词。这部漫画连载于1930至1952年,在其中,“foo”这个词经常出现在汽车车牌上和一些没有意义的对话中, 例如:“He who foos last foos best”或 “Many smoke but foo men chew”等。根据作者自己介绍,“foo”是根据某种中国的小雕像底部的文字得来的。这听起来很有道理,因为中国的雕像往往都会刻上祝福的文字,而 “foo”可能是“福”的音译。不过英文文法能接纳Holman的“foo”这个编造的单词,也是受了犹太语中“feh”和英文中“fooey”及 “fool”的影响。

Holman在漫画中还描绘一种很有特色的二轮消防车,并取名为Foomobile。因为他的漫画在上个世纪三十年代极为流行,以至于一度有传言说印弟安那州已经生产出了这种可以使用的Holman式Foomobile。

根 据美国漫画百科全书 (Encyclopedia of American Comics, EAC) 的讲法,“Foo”一词曾在美国掀起一阵狂热,它被用到了很多流行歌曲中,并产生了超过五百个“Foo俱乐部”。华纳公司在1938年制作的动画片“达菲 鸭”中,也使用了“foo”这个词。虽然“foo”广泛的融入了流行文化中,但它的起源却被人遗忘了。

在随后的二战中,因为英美士兵经常 用俚语和粗话交流,“foo”一词就被更广泛的传开了。人们把被雷达追踪到的神秘飞行物称为“foo战机”(“foo fighter”),就是后来所谓的UFO。而当英国士兵回防时,往往也会刻下“foo到此一游”(“Foo was here.”)的字眼。

而关于“foobar”,也可以追溯到二战时期军队中的粗话缩写“FUBAR”。“FUBAR”的含义是用到烂再大修(Fucked Up Beyond All Repair),后来演变成了“foobar”。

总结

虽然有时我们可以把“foo”理解成张三李四之类的中文意思,但真正了解“foo”及“foobar”等词的含义,还是能使我们更好的理解英文文档,避免产生不必要的歧义。

Categories: Uncategorized Tags: ,