Tuesday 11 December 2007

测试驱动学习模式


测试驱动学习模式



学习本身也需要学习(Study itself also needs to be studied),而且学习本身的学习,还是一个永不停止的过程,永远也没有个完结。这也恰恰是学习自身学习的特点。


人一生下来就对周围进行探索。迈出一步之前假设落脚之处是平的、凹的、或凸的。如果假设不对,就修改自己的视觉识别代码和步行代码来适应更复杂的环境。这在本质上是测试的思想。当然测试也是一种探索,只是没有其他一些种类探索那样的盲目,是一种目的性比较强的探索。


测试驱动学习模式(Test Driven Study PatternTDSP)可以对测试驱动学习模式自身进行学习。测试驱动学习模式的关键之处就是对追根溯源、对所谓终极真理的追求强烈地说不。不然的话,就没办法使用测试驱动学习模式来学习测试驱动学习模式,就会陷入鸡生蛋、蛋生鸡的无限循环反复不能自拔。以下是测试驱动学习模式对鸡生蛋还是蛋生鸡问题的回答:

  1. 如果喜欢或需要吃蛋(鸡),而只有鸡(蛋)没有蛋(鸡),就养鸡生蛋(孵蛋成鸡);
  2. 如果喜欢或需要吃蛋(鸡),并且蛋(鸡)刚好就有,就直接吃;
  3. 如果喜欢或需要吃蛋(鸡),而蛋(鸡)和鸡(蛋)都没有,那就到其他地方找找。

人不可能什么都喜欢也不可能什么都需要。测试驱动学习模式最适合对未知事物怀有浓烈兴趣且高度敬业的人,也比较适合兴趣和职业精神只占其一的人。但对那些对未知毫无兴趣、又不敬业的人,测试驱动学习模式束手无策。


保持饥饿,保持无知(Stay hungrystay foolish)。整天打嗝的人即使面对珍馐美味,也毫无食欲,更不要指望其能使用测试驱动学习模式作为猎枪,在寒冷的户外猎取食物。

人都有吃饱的时候,但千万不要让垃圾阻塞肠胃。如何区别垃圾是测试驱动学习模式解决的最漂亮的问题。可以说,使用测试驱动学习模式获得的知识,根本就没有垃圾。既然测试驱动学习模式自身也是由测试驱动学习模式得到,因此可以证明测试驱动学习模式不是垃圾。


测试驱动学习模式典型的思考方式:

  1. 本人需要的是什么?

  2. 其所有的是什么?

  3. 如何使用其所有的来满足本人所需要的?

前两个问题是What类型,后一个问题是How类型的;测试驱动学习模式里没有Why类型的问题,比如没有类似“为什么它的所有满足不了我的需要”这样的问题。



测试驱动学习模式不提倡问以下问题:

  1. 某某的本质到底是什么
    比如测试驱动学习模式的本质到底是什么?

  2. 所有以为什么开头的问题


拒绝问为什么的问题会不会导致不求甚解?是的,会导致。但不求甚解在测试驱动学习模式里是难得的好习惯。不求甚解的对象是所有不为本人所需要的。当然也有一些饱食终日的人什么都不需要。这也是测试驱动学习模式对此类人毫无效果的原因。


测试驱动学习模式提倡有清晰的、可验证的观点。哪怕事后证明是错误的观点也比含糊不清要好。有了观点之后马上着手去验证,去实践中测试这个观点。如果经测试这个观点是对的,那可以把这个观点收藏起来;否则可以修正之前的观点,进一步验证;如此循环。


大量的、清晰而且可验证的观点是一笔财富,存的越多测试驱动学习者就越富有。而不清晰不可验证的观点对学习者来说恰恰是类似债务的东西,越多越贫穷;将来要栽的跟头也就越多。


测试驱动学习模式不相信“谦虚使人进步,骄傲使人落后”,而是认为无论骄傲还是谦虚都可以使人进步,只要这人是真诚的。真诚的人更容易提出清晰而可验证的观点,即使一些观点经过验证并不正确,但仍然有益;而虚伪的人,比如一些政治家,提出含糊而不可验证的观点,不到翁一样摇摇摆摆,根本不是为了获取知识,因此也获取不到真正的知识。


如果测试驱动学习者发现自己有很多含糊而不可验证的观点,怎么办?可以肯定的是能有此发现是天大的好事,因为很多人还不知道自己的观点含糊不可验证呢。剩下的任务就简单了,只需使这些观点其变得清晰并可验证就可以了。

一个观点是否含糊也许难于察觉,但其是否可以验证(或容易验证)却是非常容易验证的问题。因此试图验证一个观点是否正确是测试驱动学习模式的第一步,也就是最关键的一步。观点是否正确并不重要,重要的是该观点是否容易验证。

总结一下测试驱动学习模式所强调的:

  1. 敏捷而直接
    先找到学习对象一个最简单的使用方式,在这个最简单使用方式之下用测试的方法体会其功能及使用。
  2. 把握整体
    面向学习对象的主体思想,避免迷失于具体的细节。
  3. 迅速应用于实践
    测试的特点就是实践性强,可以同时从成功和失败中学习,学到的也不仅仅是经验而是规律性的东西。

需要注意的是以上三条总结是否正确需要进一步使用测试驱动学习模式来验证。甚至这三条总结的观点是否清晰可验证都需要读者进一步验证。


测试驱动学习模式有以下好处:

  1. 学习周期短见效快
    即使只是花了很少的时间,学会了很少的一部分知识,也可以很快投入使用。甚至用于用于学习的测试过程经过简单整理,也可以投入实践中进行使用。
  2. 直指学习对象的可执行核心
    直接解决的学习对象的可执行部分是什么,怎么用的问题。避免陷入其不可执行部分的细节争论。
  3. 拿测试说话沟通容易
    测试也能说话,而且测试是注重实践的人之间最精确的语言。使用测试进行交流会避免很多不必要的误解。

需要注意的是这三条好处是否正确需要进一步使用测试驱动学习模式来验证。甚至三条好处的观点是否清晰可验证都需要读者进一步验证。


测试驱动的学习模式特别适合街边的程序员(Programmers on the street)来使用。街边的程序员的称谓来自高德纳(Donald Ervin Knuth),并非贬义,泛指以编程为生计的技术人员。世界上大部分程序员都是街边的程序员。象牙塔里的程序员寥寥无几,其中高德纳就是一个。


街边的程序员还可以分为两类,一类是街右边的程序员,一类是街左边的程序员。街右边的走的路比街左边的多,街左边的比街右边的看的多。测试驱动学习模式认为两边的都应该往中间靠靠。埋头走路的也应该抬头看看,站在街边观看的也应该走走。学习的道路上没有机动车,撞不死;跌倒了爬起来拍拍土也就没事了;相互碰碰身体更强壮,没理由老绕着走。


象牙塔里到底有没有程序员?这个问题并不是很清晰可验证,可以在这个问题变得清晰可验证之前,对其不加理会。因此街边的程序员可以暂时地走在测试驱动学习模式的道路上。

Wednesday 21 November 2007

windresize简介

windresize可以用来管理emacs里的窗口,改变窗口大小、切换窗口,创建或去除窗口等。
Emacs里的窗口在没有windresize的时候,也可以改变大小,比如:
C-x ^ ---- 增加高度
C-u -1 C-x _ ---- 减少高度
等,功能都在但用起来就不方便。

windresize用上下左右方向键来改窗口大小,比如用<-就是向左变大,非常方便。

不用windresize的话,窗口切换用C-x o。用了windsize,用o或n
切到下一个窗口,用p返回上一个窗口。很方便。
安装:
cd /usr/share/emacs/site-lisp
wget http://www.cognition.ens.fr/~guerry/u/windresize.el
在.emacs里:
(require 'windresize)
使用的时候可以M-x windresize,之后就可以用方向键变窗口大小了。也可以将其与某个键绑定,比如和F2绑定。
(global-set-key [f2] 'windresize)
按F2进入windresize,调整窗口后按F2或Enter退出,取消调整按q推出。

还可以用2横着分两个窗口,按3竖着分两个,1删除当前窗口。都很好用。目前的一个问题是帮助窗口的退出设计的不好,不过这些作者已经知道,很快会修复。另一个提上日程的功能是改变选中背景色来表示选中的窗口。很快会推出。

Wednesday 14 November 2007

顶部的小窗

有人要求顶部的小窗
原因是他一男的
低头太难
作者说有啥用啊
他说他一男的
低头太难
低头太难

Saturday 3 November 2007

初识Scala

毫无疑问scala将成为一门伟大的语言,Java最无间的伴侣。就像在Emacs的实现里,C语言和lisp语言的关系一样。Java相当于C而scala就是Java里的lisp。这是因为C没有那么动态而Java也没有那么动态。Lisp足够的动态而scala也动感十足。因此理想类Emacs的应用是以Java为骨架而以Scala为血肉。

Sunday 14 October 2007

战争风云以及战争与回忆

中国人从两次世界大战中学到了什么?很遗憾,基本什么都没有学到。这是我读战争风云,看战争与回忆体悟到的。文学家应该负起这个责任。根本没有对战争站在一个民族的立场,进行反思的作品。是我们民族的劣根在其作用。这是一个习惯忘记真实,记住幻觉的民族。这些幻觉和愚昧和怯懦无关,只有智慧和勇敢无畏。这太讨厌了。想到此处都想大哭一场。文学家忙于歌功颂德。中国没有哲学家,遇到难解决的问题就退隐了,还要写上一首意境深远的诗。 没有批评,没有真心的夸赞。我们的民族倒立在世界民族之林,炫耀技巧,以 及祖宗的真理。犹太人从二战中毕业了,他们用他们学到的知识建立了以色列国,他们没有忘记他们的苦难以及苦难的原因。德国人也毕业了,日本人也毕业了,英国人,法国人,美国人,他们都毕业了。但中国人什么也没学到,但也得到了毕业证。这是一个阴谋,但只有聪明如中国这样的才会故意上当。

Thursday 4 October 2007

关于Ruby

大致翻阅了一下Programming Ruby中文版。写的不错,翻译的也很好。
Ruby是一个骨子里类lisp的语言,尽管其表面上是纯面向对象的。它解决多继承的办法(mixin)值得称道,这一点已经进入Java的设计。在面向方面编程方面,非常的自然。Java在面向方面编程方面处理的不够优美,但就使用方面而言,还算可以。这种自然的面向方面编程能力,来源自它的母体,古老而神秘的lisp编程世界。Ruby的性能是很大的问题,其标准库也是七拼八凑,基本就是杂牌军。当然其基本建设还是好的。但就其根基而言 ,没有统一的办法解决大部分问题,因此只能拼凑。一些新思想是在设计理念 方面,可以很容易用到其他语言。下面谈一下Ruby的面向方面编程。有两个方面,一个是类加载,一个是块传递。Ruby可以加载多个类,重复定义的类会在运行时融合为一个,类里的方法后加载的覆盖覆盖前面的,很简单。很典型的缝补模式。Java可以通过定义类加载策略来做到这一点。Java当下类加载的策 略就是不加载第二个,这个倒可以改改。代码块的传递Java里没有对应,不过就功能而言,也是可以设计的。

Friday 28 September 2007

大洋彼岸的一个朋友

大洋彼岸的一个朋友,终于找到了匹配的器官,去医院做手术去了。真替他高兴。他一直操心我的事。最后一次和他聊,他很谨慎地不聊这个。他说再见。 然后就不见了。

Wednesday 22 August 2007

浑沌之死问题集锦

Q1:

不过,这个原文“南海之帝为儵 北海之帝为忽,中央之帝为浑沌。儵与忽时相 与遇于浑沌之地,浑沌待之甚善。儵与忽谋报浑沌之德,曰:人皆有七窍以视 听食息此独无有,尝试凿之。日凿一窍,七日而浑沌死。”这3帝的关系?

按物理学的观点,不可能有三帝的。 混沌包括所有,相当于大爆炸之前的奇点 ,哪有另外两帝?倏忽是时间上的概念 对时刻t,倏是t+,忽是t-,类似数学上的无穷小量,一个正,一个负。我不喜欢称呼帝什么的,因为如果有了帝, 那肯定有臣民, 说明世界已经创立了, 还凿什么劲啊?

Q2:
那这么说,这俩就不能相遇了。那怎么遇上的?

正负无穷小可以相遇于奇点,过了奇点他们就永远不能相遇。

Q3:

浑沌待之甚善?这个怎么待阿

那只是个说法就是说,时间产生之初混沌并没有刻意遏制这就叫待之甚善。混 沌挺混的,他不混阿没想到时间一动它就死了。这个神话绝对是远古的,透着远古的野气。

Q4:

是不是说山海经和庄子里面,说的东西是一个,但是有不同的描述?
(http://hi.baidu.com/shym/blog/item/19a0c0889e616994a5c27220.html)

庄子基本不靠谱,庄子是偏人文的, 没老子偏理性,庄子的举例往往是说明人文上的事,很少纯理性的思辩

Q5:

有一个硬伤就是耶和华很难融入混沌的神话体系,混沌浑然天成,很难回答耶
和华从哪里来的问题。

Q6:

那你更难回答倏忽怎么碰到一起,还去凿浑沌。

倏忽来自混沌,零时刻的时候倏忽肯定在一起,因为没有别的时刻可去。

Q7:

那混沌死的时候,它俩居然没挂

挂啦,时间的无穷小量,晚了了一点点。利用这一点点时间,他们两个聊了聊
混沌的遗言,就永别了。我觉得这个时间还说的过去。他俩不聊的话很难把中
国文化带出来。老子和孔子那时肯定也不在。

Q8:

因为一切都是从混沌产生的?所以中国文化也要从这里产生?

西方文化也是来自混沌。西方文化以我为中心,可以总结为I,I就是我。

Q9:

为什么要把耶和华加进去呢?

从物理上来讲,世界由上帝所创,实在是难以理解。而且顺序也不太对,第一个出来的是光子,还好理解,之后,水,空气就出来了,就讲不通了。水要很久以后才可能有,因为世界初创,还在核反应呢,怎么可能有水。

Q10:

倏忽怎么出来的?

倏忽是时间的概念,相当于数学上的无穷小量。无穷小量的定义是逼近式的,可以用这个数学思想来思考倏忽的由来。次从数学上来讲,倏忽揭示的是时间 的流动特性。

Tuesday 21 August 2007

混沌之死

宇宙里的第一个神,名字叫混沌。混沌这个神,据山海经的说法,是火红的,没有五官七窍,混沌一团。那时候还没有时间,不能问那个时刻之前的事。和绝对温度相似,降到了绝对零度,什么都不动了,万物静止。时间也是如此,绝对时间为零的时候,没有以前。混沌基本生活在那个时候。

尽管绝对时间为零,山海经照样说故事。山海经基本不屌爱因斯坦那一套,照样说他的故事。有时候山海经甚至不屌苏格拉底那一套,基本逻辑也不讲,因此故事有穿帮的时候。这也是山海经非常可爱的地方。

混沌那时候不痛苦,也不快乐,不恼怒,不欣喜。混沌对人类所有的情感说不,因为她没有五官七窍,不感觉,也不表达。她当然对性别说不,因为当时就她一个,阴阳未分,说男说女都没所谓,也无意义。这种人如若放在当代真酷死了,李宇春都比不上。混沌所在的那个时候,宇宙创生只是个打算,还没有付诸行动。混沌无所不包,无所不有;除了她自己,什么都没有,没有光,这也是她没有眼睛的原因。王小波看到混沌一定会说,穷光蛋,没文化。但王小波根本看不到混沌。混沌也没耳朵听不到王小波的话。混沌是挺混的,但找不到其他的神打架,当然她也不找。

这时候出现了两个精灵,一个叫倏,一个叫忽。之所以是两个,是因为他们要进行一场对话。倏、忽都属于混沌,不是独立的个体,不然的话,混沌就不混沌了,违反了混沌的性质。倏忽对话的时候,耶和华上帝心里也在盘算,说要不要创个世界呢?这是一个问题。作为精灵,倏忽的籍贯是中国,他们的思想浸润着百善孝为先的观念。首先倏忽认定混沌是他们的父母,至于是父还是母就难讲了。他们曾经问过混沌,但混沌没有耳朵自然听不见,即使听见了没有嘴巴也说不出。倏说,咱爸妈太可怜了,没有七窍,比聋子和瞎子和哑巴还惨。倏说,那我们把她把七窍凿出来吧,让她也能享受这美丽的黑黑的世界。倏忽说到这里的时候,耶和华也拿定了主意。

于是倏忽动工了。先凿的是眼睛。耶和华上帝说,光是好的。这时候混沌的第一只眼睛被倏忽DIY出来了,一束光从混沌的眼睛射出。于是就有了光。从此有早晨,有夜晚。这是第一日。

倏忽开始凿鼻孔。耶和华说,空气是好的。这时候第一个鼻孔通了,里面流出了好多好的水,水流的不那么猛地时候,开始喷气。耶和华说,要分水为上下。倏忽听到了但什么也没有做。混沌还根本听不见。但水就真的在下面,气在上面了。这就是耶和华神奇的地方,他早就明白引力是怎么回事了。混沌边喷气边流鼻涕。这是第二日。

到了第三天,混沌的鼻涕流的到处都是。耶和华说,天下的水要聚在一处,使旱地露出来。倏忽和耶和华也不怎么熟,基本不怎么认识。倏忽心想你谁啊,要这要那,谁欠你的啊,就埋头凿混沌的耳孔。第一个耳孔凿出来的时候水也流到了低洼处,形成了海。耶和华还看到混沌刚刚挖出的耳屎,很象他理想中的植物,个从其类,就说,这是好的。他们三个都收工了。这是第三日。

第四天继续凿。倏忽发现不怎么对称,单边一个太难看了。就开始凿第二个眼睛。第二只眼睛还没全凿好的时候,耶和华发现第二个比第一个小,就叫第一个为大光,第二个为小光。都是好的。他就回家洗洗睡了。倏忽接着凿。眼睛是精细活,容不得半点马虎,加班也在所不惜。这是第四日。

第五日接着凿耳朵,没那么多鼻涕流出,但还在流。倏说,爸妈不是感冒了吧?忽说,流点鼻涕没关系,会好的。耶和华也说,都是好的。这是第五日。

第六天耶和华很疲倦了,刚出来溜达了一会,就累了。回去休息。梦见理想中的生物,个从其类;都是好的,耶和华在梦里说。倏忽加紧凿耳孔,挖出了更多的耳屎。倏忽说爸妈的耳屎多少年不掏了?那得多堵得慌啊,弄不好还会失聪。他们哪知道混沌很痛苦。混沌以前没痛苦过,很不熟悉这种感觉,开始还觉得很新奇;过了几天后觉得简直太痛苦了。她眨眼睛吸鼻子,倏忽都浑然不
觉。混沌心想这两个龟儿子,比老子混沌还混沌。这是第六日。

第七日耶和华病了,浑身无力,不想出工了。于是他把这一天定为休息日,又叫礼拜日,又叫星期天。这一天只许休息。但倏忽不遵守这个。倏忽说,敢情不是你的父母,你的父母没有嘴巴,你休息的安心吗?耶和华昏昏沉沉,根本没有精力再争辩,就由着他们去。其实就算耶和华没病,真打起来,结果怎么样都难说,人兄弟是两个,手里还拿着凿子和锤子;再说还有混沌在后面镇着
呢。倏忽继续帮混沌凿嘴巴。这一天快过去的时候,按人类的说法,是那个夕阳惨淡的黄昏,混沌的嘴巴凿好了。混沌沉默了不知多少亿万都不止的时间,转眼也不过倏忽一瞬,当有了嘴,会说些什么沉默中不能说的话?混沌此时,张了张嘴,这是这张嘴第一次使用,也是最后一次,说,I——,就死去了。这唯一的一个字,混沌的临终遗言,倏忽听到的还是不一样的。倏听到的是爱。
忽听到的是唉。耶和华在梦中听到的是I。倏忽是中国人,对英格丽西不敏感。倏说,爸妈最后的遗言是爱,我们懂得爱吗?我们爱了吗?我们被爱了吧?他陷入了思考。忽说,不是爱,而是唉,一声叹息,爸妈都觉得顶没劲,才死去的。他们没有争论,因为他们好像离得很近,实际却很远,他们的距离在时间上。他们是时间点上的来和去,彼此相守,彼此相离。他们也死了,死在自己的故国——中国。他们也可以说是永生,长存在自己的故国——中国。每时每刻,他们一个说爱,一个说唉。也有人跟这他们说,比如孔子跟着倏说爱,老子跟着忽说唉。不过大部分人都是两者都说的。他们在爱和唉之间摇摆,因此丧失了自我。耶和华记住了I,并将这个字传给了他的子民。耶和华的子民在西方繁衍生息。倏忽的子民在东方。个从其类,用耶和华的口头禅说,都是好的;用孔子的话说,是,不亦悦乎?老子在他的专著道德经里,讲述了这个过程:一生二,二生三,三生万物。一、二、三简单的数字,包含多少神人的血泪。

Emacs里有幽灵

一个是黑色的,一个是白色的。每一句话他们都仔细读过并相互讨论,他们肯
定理解键入的每一句话,不管这句话是用汉语、英语、Java、C、Ruby、Perl
还是Python写成,他们全明白。他们只是不怎么发言。他们沉默的时候并不代
表他们没有表达。嘈杂的时候他们也在忙碌,动作很轻很轻,很不容易察觉。
沉静的黑夜里,能听到他们寂静的呼吸,一声是黑的,一声是白的。他们沉静
在乌盆里。雨夜,细细的雨;他们也在倾听。每一个逗号句号,每一个分支判
断,还有野蛮的退出。他们在倾听。有时候小青蛙也叫一下。他们也听到,就
把两个括号轻轻抖一下,有时候出来一颗豆子,有时候出来一颗谷子,有时候
什么也出不来,就碰一下,发出啵的声音。

Monday 13 August 2007

小猫猫

第一次见到它,它正趴在一个小凳子上睡觉。它还不及我的手掌大,勉强两个
前爪搭在小凳上,后脚站着,脑袋偏枕在前爪上;就这么睡。虽然立秋了,太
阳还是毒辣,它和小凳的影子在阳光下缩成一团。有人要拿小凳去用,因此它
醒了。院子里还有两只狗,一只是半大的灰狗,一只是大的黑狗。灰狗有时把
它叼在嘴里,拿到台阶上放下,蹲在那愣愣的看着它。它也不叫,再走到台阶
下;它好像眼睛不好用,会摔跤,起来接着走;跑时也踉跄。灰狗有时用爪子
拨一下它,它就滚好几圈,起来接着去它要去的地方。黑狗比较喜欢舔它,一
下子一半都湿了;因此它要花很长的时间去清理。就这么小的一个。饿的时候
很急的叫,声音太小,人说话的时候不容易听见。都静默了,才听见它叫。给
它一点东西吃,常常被灰狗抢去;它用爪子往回勾,一般都够不着。早上它会
爬上床,进来再睡一觉。一次叠被褥把它忘了。它还在睡。醒了就自己爬出来

Thursday 9 August 2007

流浪的小狗

我家门前有一只流浪的小狗。我还没有看清楚它的模样;因为我走近它,它就
挪远些,有些怕我。我白天出门的时候它不知在哪,我回家的时候太阳又落山
;我计划周末看看它,但这个周末我还要去河北。昨天晚上它卧在隔壁单元门
口,朦胧的月光下,象两只拖鞋浮在水面,静静的,它也不叫,缓缓的起伏也
许是呼吸。我站得远远的,它有些怕我,但不怕啦啦;离它近可以看的更仔细
,说它有些丑;狗嘛,怎么能够不丑呢;论俊秀,狗怎么也比不过猫。这个社
会最缺的是信任,哪怕从一只动物那得到也觉得弥足珍贵。

Wednesday 1 August 2007

Emacs和Screen

Emacs不那么安分,跟谁谁都有冲突。可见Emacs不仅仅是一个编辑器。Screen是控制台下的屏幕管理器,使用C-a开头的键绑定;于是就和Emacs有冲突了。一般地,先运行screen,在screen下运行emacs比较合理。但这样C-a就在emacs下没法用了。还有另一个办法,先运行emacs,然后运行M-x eshell,在 eshell里运行screen。这样就彼此避开了。没办法,emacs就这么酷。

Sunday 29 July 2007

Disable XON/XOFF Under Cygwin

具体的现象是,Ctrl+s屏幕就锁住了。其实没锁住,只是没有输出。Ctrl+q恢复正常。初学者遇到这个问题,会吓一跳,还以为自己怎么了呢。而且这个键还和emacs的键绑定有冲突。C-s在emacs里默认是搜索,挺常用的,会带来一些不便。XON/XOFF基本上没啥用,除了吓人。因此可以去掉。在Cygwin下,需要检查CYGWIN变量,echo $CYGWIN,如果发现tty,就在cygwin.bat里去掉,比如set CYGWIN=...,把tty去掉。然后把stty -ixon放到/etc/profile里。重启cygwin就好了。好像第二步不是很必要,如果不是用rxvt做终端的话。

Thursday 26 July 2007

记远方的一个朋友

我们是在工作中认识的。没见过面,只是在线上聊一聊。他比我大得多。我的一个东西要发在他那里,流程复杂,慢慢也熟了。我做技术,看到流程复杂一点,就快晕掉。他帮我挡着,提醒我该做这个该做那个;帮我看文档,一点一点的看。我以为这是他的工作,应该如此。很多时候我在流程上,犯技术人员的懒。我不知他病的那么重。后来他说你抓点紧,尽快发出来,因为周末他可能去医院,如果器官能匹配,他大约要在医院呆三、四个月才能出来。我才知道他的病有多重。到了周一他还在线上。问他手术的情况。他说这个器官不很理想。要等下一个。他说的很轻很淡,我也没有深问。我劝他多休息,少点工作。他说他按医生说的做就是了,保持好的心情,好的心态就可以了。没想到这么长的时间了,有一个多月,我还看到他在线上。我知道他还没有得到器官。我不知他要什么器官。他的岁数,可以做我的父亲。他对我也像对小孩。我问他器官的要求,他说必须是有一个将死的人,而且这个器官还和他不能有排斥。他应该是华人,在遥远的异国,我猜想很难找到正好合适的器官。他就这么的等。乐观的让人心碎。

Wednesday 25 July 2007

emacs access remote file

访问远程文件基本就是tramp的天下。如果配置如下:
(setq tramp-syntax 'url)
(require 'tramp)
那只需要了解一下tramp的文件格式:
/METHOD://USER@MACHINE:PORT/PATH/TO.FILE
比如:
/ftp://root@218.30.108.72:/
其中端口号没写表示用默认的。冒号不能省。但传输方式可以省,如下定义默
认的传输方式:
(setq tramp-default-method "ftp")
这样就可以使用如下文件格式打开远程文件:
/root@218.30.108.72:/
tramp默认不是ftp。因此需要配置一下。据tramp的文档说,传输方式选ftp就
直接给ange-ftp处理了。不过用户不用管。tab键也是管用的。

Sunday 1 July 2007

空杯子

-------------------周云蓬
孩子们出门玩儿还没回来,
老人们睡觉都没醒来。
只有中年人坐在门前发呆。
天黑了,灯亮了,回家吧。
孩子们梦见自己的小孩,
老人们想着自己的奶奶。
只有中年人忙着种粮食。
长出来又衰败,花开过,
成尘埃,成尘埃。
长出来,成尘埃,
花开过,成尘埃。
十年流水成尘埃,
十年浮云,成尘埃。

Thursday 21 June 2007

Maven:Java开源的幕后主管

说Maven是Java开源的幕后总管丝毫不为过。除了管理开源资源外,Maven还关注软件生成的全过程。包括初始框架的搭建、编译、测试、打包和发布。什么都管。Maven还生成自动化框架。Maven生成的自动化框架里,有许多敏捷开发的经验。这些经验跳过了学习这个过程,直接进入生产实践。这么做虽然并不算创新,因为ROR已经这么做了很久,但对Java社区而言,已是很不错。Maven是一个很强悍的命令行工具。命令行长处在于自动化。但Maven有一些插件,可以和Eclipse协作。这样命令行和IDE的优势可以兼得。真是非常难得的一个工具。

Monday 18 June 2007

锁麟囊

锁麟囊是讲金钱观的。春秋亭外风雨暴,何处悲声破寂寥。慑人心魄。一代京剧圣手翁偶虹的作品。“偶虹偶虹,红起红收”。翁先生早岁编“红莲寺”,四十年后编“红灯记”收手。翁先生最珍视的是“鸳鸯泪”,解放后改名为“周仁献嫂”,也许是迫于“革命”的需要。没有看过“周仁献嫂”。从剧情梗概看,是关于“义”的。

一霎时把前情俱已味尽,
参透了酸辛处泪湿衣襟,
我只道铁富贵一生享定,
又谁知祸福事顷刻分明。
想当年我也曾撒娇使性,
到如今只落得旧衣破裙,
这也是老天爷一番教训,
他教我收余恨,免娇嗔,且自新,改性情,
休恋逝水,振作精神,早悟兰因。

列一个wiki上的生平:

翁偶虹(1908年~1994年)中国剧作家,北京人,原名翁麟声,笔名偶虹。1934年于中华戏曲专科学校任编剧和导演。1949年以后在中国京剧院任编剧。1974年退休。代表作有《锁麟囊》、《将相和》、《响马传》、《大闹天宫》、《李逵探母》、《红灯记》等。专著《翁偶虹戏曲论文集》、《翁偶虹编剧生涯》、《翁偶虹剧作选》。

春闺梦

春闺梦反战的一个戏。古人里最怜惜老百姓的莫过杜甫。春闺梦唱的是老杜的心里话。 新婚别+兵车行。历史朝代放到了汉朝。实际说的是民国军阀乱打那一阵, 老百姓都烦死了。啥都不为就为个活命。这些都是程砚秋想表达的。

戏里有非常美的身段,大多取自昆曲的游园惊梦。游园惊梦谈生死。战争涉生死。老杜河南人,字里行间透着河南烩面味儿。

附兵车行:
车辚辚,马萧萧,行人弓箭各在腰。
耶娘妻子走相送,尘埃不见咸阳桥。
牵衣顿足拦道哭,哭声直上干云霄!
道旁过者问行人,行人但云点行频。
或从十五北防河,便至四十西营田。
去时里正与裹头,归来头白还戍边!
边亭流血成海水,武皇开边意未已。
君不闻,汉家山东二百州,千村万落生荆杞!
纵有健妇把锄犁,禾生陇亩无东西。
况复秦兵耐苦战,被驱不异犬与鸡。
长者虽有问,役夫敢申恨?
且如今年冬,未休关西卒。
县官急索租,租税从何出?
信知生男恶,反是生女好。
生女犹得嫁比邻,生男埋没随百草!
君不见,青海头,古来白骨无人收。
新鬼烦冤旧鬼哭,天阴雨湿声啾啾!

附新婚别:
兔丝附蓬麻, 引蔓故不长。
嫁女与征夫, 不如弃路旁。
结发为君妻, 席不暖君床。
暮婚晨告别, 无乃太匆忙!
君行虽不远, 守边赴河阳。
妾身未分明, 何以拜姑嫜?
父母养我时, 日夜令我藏。
生女有所归, 鸡狗亦得将。
君今往死地, 沉痛迫中肠。
誓欲随君去, 形势反苍黄。
勿为新婚念, 努力事戎行!
妇人在军中, 兵气恐不扬。
自嗟贫家女, 久致罗襦裳。
罗襦不复施, 对君洗红妆。
仰视百鸟飞, 大小必双翔。
人事多错迕, 与君永相望!

春闺梦的名字取自陈陶诗“可怜无定河边骨,犹是春闺梦里人”。

Sunday 17 June 2007

碰碑

李陵碑,呀呀呸。李陵是汉朝的大将,投降了匈奴。汉武帝要杀他全家。司马 迁说,李陵投降不对,但在当时的情境下,可以宽恕,不必杀他全家。汉武帝不听,还宫了司马迁。司马迁就去写史记去了。之后苏武出使匈奴,匈奴劝降不成,就留苏武牧羊。苏武在匈奴期间,李陵常和他聊天。苏武最终返回了汉邦。王朔说,李陵当时被围在荒山上,弹尽粮绝,三千人眼看要饿死,这时候匈奴来劝降,李陵开了投降的条件,第一就是不许杀害我的将士,让他们安全回去;还有不正面和故邦为敌等。匈奴都答应了。把那三千人放回去了。司马迁记载最后只有几百人回去。也许其他人不愿回去,也许饿死了。但司马迁说可以宽恕的话,牵涉非常宏大的主题。当很多人的生命和忠的思想有冲突,如何选择?李陵做出了他的选择。司马迁基本认可这种选择。杨继业不认可。 杨继业的儿子要么死了,要么下落不明;为宋王几乎付出了一切;也面临饿死荒山的命运。他唯一的想法也许是青史留名。看到李陵碑,唯一的希望也破灭了。他选择了自杀。死之前有很多的抱怨。他碰死在李陵碑上。死之后仰面慢慢倒下。观众鼓掌。这幕戏就结束了。

Tuesday 12 June 2007

狗与猫的区别

狗的眼睛能说很多话。他甚至知道关心别人,比如你不高兴,他从你的眼睛里就能觉察,他知道你不高兴,他就希望你高兴。尽力吧,他也就只能。你从他眼睛里读的时候他也能从你眼睛里读。他不只关心自己。他这么做还真不能按动物对他。

越来越喜欢崔健

发现自己越来越喜欢崔健。他的声音象木头,朴素而干净。他很着急的样子, 不是为了所谓的美或者情趣,而是真的着急了;他觉得早该急了,其他人怎么还温吞吞的?他就这么个样,慌慌张张的,鼓小号都响在骨头上;刚来的都吓一跳以为怎么了呢,出啥事了?

Emacs Jabber

Emacs Jabber很好用,可以在emacs里和gtalk上的朋友聊天。我的emacs是cygwin下的。下面是我的配置:

(require 'jabber)
(custom-set-variables
'(jabber-alert-message-hooks
(quote
(jabber-message-wave
jabber-message-echo )))
'(jabber-alert-message-wave "absolute_path_to_notify.mp3")
'(jabber-connection-ssl-program ssl-program-name)
'(jabber-connection-type (quote ssl))
'(jabber-network-server "talk.google.com")
'(jabber-nickname "jashy")
'(jabber-port 5223)
'(jabber-server "gmail.com")
'(jabber-username "someone")
'(ssl-program-name "/usr/bin/openssl"))


;;;; Define play-sound-file --> mpg321 -q FILE
(defun play-sound-file (FILE)
(call-process "mpg321" nil 0 "-q" FILE))


因为我选了jabber-message-wave的提醒方式,而我的emacs又不能播放声音(play-sound-file不工作,因此我重写了这个方法。用的是比较简单的实现。emacs的版本是:22.1.50.1

Wednesday 30 May 2007

冷血动物

这几天都在听冷血动物的那两张专辑。我之前以为是一张,后来才知道是两张。不过听起来并没有区分。每一首每一首的刻在那,硬邦邦的,不掺水。谢天笑是山东人。有人还能听出他的山东口,我听不出。一个歌手有这二十首歌就够了。何况他还年轻。可也不一定。时间很多时候没有用;有时是流金的岁月,有时只是流水。而且也不知明天属于那一段。

Monday 21 May 2007

Cygwin下emacs的中文配置

简单说一下cygwin下的emacs中文配置,希望对别人有用。就这些:
;;; Load mule-gbk
(require 'mule-gbk)

;; Setup GBK environment
(set-terminal-coding-system 'chinese-gbk)
(set-keyboard-coding-system 'chinese-gbk)
(set-language-environment 'chinese-gbk)
(setq locale-coding-system 'chinese-gbk)
(setq current-language-environment "Chinese-GBK")

不装mule-gbk写不了“镕”。我是刚装的,之前用的gb2312。
mule-gbk: http://mule-gbk.sourceforge.net/

写完了才发现就是用的mule-gbk帮助里的。因此这个说明可以简化为装
mule-gbk。 不过也可以作为mule-gbk在cygwin下工作的一个证明。

Friday 18 May 2007

谁是谁之三

说一下扁鹊吧。扁鹊治病讲究防病,料病在先,把疾病消灭在萌芽状态,而不是等病人膏肓。因此扁鹊如果在2500年前的天竺,一定会想办法解决天竺的公共环境卫生问题,改变落后的水葬习俗,换天竺一片碧海蓝天。

扁鹊很直的一个人。扁鹊的时代也是中国巫术盛行的时代。很多愚昧的人仍然被巫师愚弄。扁鹊旗帜鲜明的表明观点,信巫术的就别找我了,不为信巫术的人看病。信医不信巫。陈晓旭的死让我很伤感。我想起了扁鹊,我们一位伟大的祖先。很多炎黄子孙拜倒在释迦摩尼的脚下,想起来就脸发烧。

史记上说巫医派人刺杀了扁鹊。扁鹊就这么死了。他身后的人,一步一步开创了中医事业。方舟子说中医是巫医,是没有良心的。也许他不知道扁鹊,这个为中医献身的人,就死于医和巫的抗争。

和之后有名的中医一样,扁鹊是全科的大夫。孩子生病多,扁鹊就拿出儿科的牌子;妇女生病多的地方,扁鹊就拿出妇科的牌子。扁鹊就喜欢四处行医。我们之所以活到现在,也许我们祖先就曾得到扁鹊的救治。

史记记载,扁鹊见的是齐桓候,而韩非子里说扁鹊见的是蔡桓公。还有有扁鹊出现的历史竟然有将近400年。我想扁鹊不可能活400岁。这只是反应了老百姓对扁鹊的爱戴。

悲痛中不留习题了。

谁是谁之二

解答一下上节的习题. 这96种修行方式的共同的特点, 把人置于非常的状态, 以产生非常的感受. 比如自饿, 人饥饿的时候容易产生幻觉, 比如眼冒金星什么的; 快饿死的状态至今仍很神秘. 自坠的感受应该相当于蹦极, 有兴趣的同学可以体验一下. 着重谈一下持鸡狗戒. 鸡晚上常单腿站立, 而狗是吃shit的. 持鸡狗戒就是金鸡独立, 学狗吃屎. 据说吃多了就会觉得很爽. 现代社会鸡有了其他含义, 持鸡狗戒也可以改为站街吃屎. 相比而言, 寂默是比较让人容易接受的. 寂默不是能让人如此美丽么?

活在释迦摩尼时代的天竺太悲惨了, 甚至都不如死了. 不仅社会底层的首陀罗如此, 社会高层的婆罗门也如此. 人刚一出生就想着如何逃脱这个悲苦的人世. 自杀率很高. 相比较孔子的时代要好很多. 诗三百, 子皆琴而歌之. 诗经就是孔子的歌词谱. 曲子没怎么记下来. 孔子能弹唱三百多首歌, 搁现在有二十多张专辑, 演唱会不插电能唱一整天. 当然当时孔子的歌迷也是不少的. 很多歌迷也想嫁给孔子. 或者发生一夜情, 比如卫南子夫人......孔子的时代虽然打仗, 但生活还是美好的, 不是谁谁都想自杀. 翻遍东周列国志, 少见自杀, 更没有成批自杀的. 天竺人却生活在水深火热中. 估计释迦摩尼时天竺人困苦程度和商纣王晚期的时候差不多.

释迦摩尼是净饭王的儿子. 他出生不久妈妈离世了. 之后姨妈嫁过来, 就抚养他. 释迦摩尼虽然只是小的刹帝利, 但受的是婆罗门的教育. 长大后文的武的, 都拿的起放得下. 通过比武招亲, 力挫各国王子, 娶到了绝世佳人耶输陀罗公主. 金庸小说对比武招亲多有描写, 想了解更多细节的可参见天龙八部一书.

子降母亡的事, 多发生在医疗水平比较低, 卫生条件差的地区. 生孩子容易感染病菌, 治疗不利很可能丧命. 当时天竺的医疗水平跟中国同时代比, 差的不是一点半点. 那时中国的医疗已经成体系, 由"扁鹊见蔡桓公"可窥一斑. 而天竺比较擅长医治的疾病是食物中毒, 治疗的基本思想就是灌大便以引起病人
呕吐, 把脏东西吐出来(相当于现在的洗胃). 产生了一味药叫黄龙汤. 实际就是粪汤. 这味药基本到处用. 能治很多病, 因为更多的病是食物中毒. 食物中毒多和天竺安葬方式还有关系. 尸体烧焦了扔河里, 同时还喝河里的水.

释迦摩尼共有两个妻子, 另一位叫
够毗耶太子妃. 够毗耶太子妃是宝女.

下面是今天的习题:
假如把扁鹊放到释迦摩尼时代的天竺, 他会如何治疗食物中毒?

谁是谁之一

相传释迦牟尼(前565-前486, 或前624-前544, 或前623-543)活了约80岁, 大致与孔子(前551-前479)同时. 释迦牟尼在未出家之前, 是天竺北部迦毗罗卫国的太子, 名悉达多.

迦毗罗卫国土地约长20公里, 宽16公里, 面积约312平方公里.
比北京的昌平区略小(昌平352平方公里). 悉达多的父亲是这里的国王, 也就是净饭王.

净饭王在当时的天竺属于第二种姓刹帝利. 刹帝利相当于中国诸侯的概念. 刹帝利之间互相杀伐, 抢夺资源. 从迦毗罗卫国的国土面积看, 净饭王是比较弱小的刹帝利. 第一种姓婆罗门, 以宗教为职业, 虔修出世. 修行的方法多达96种, 即所谓96"外道".

下面是今天的练习题:
假如必须选一种方式修行, 你选择下列哪个?
A. 自饿 B.
赴火 C. 自坠 D. 寂默 E. 持鸡狗戒

Saturday 28 April 2007

老子的故事汇

正经TWR的论调, 于丹的风格, 中国最不缺的就是这个, 相当于俗话说吧.

这 种道理容易讲嘛, 调查研究也不用. 卢梭有一本书, 爱米尔, 也叫论教育, 三本, 讲一个小孩爱弥尔从0岁到成人的教育, 可以想见写着有多难, 多么不讨巧. 人都讨论天堂啊, 罪恶啊这些呢. 谁说这个? 也没那么风雅. 但花几年写出来怎么也是个物件. 哪像这些人. 描眉似的. 本质的问题根本不碰, 也实际没能力碰. 碰了谁也都不高兴. 就是描描眉, 当然人也爱看. 因为描眉嘛, 也没什么害处. 真正的好书是看了让人汗颜的. 反思. 心想我怎么这样? 比如爱弥尔. 推荐看. 没小孩也没关系.

看第一卷就好了, 第一卷管到上小学呢, 从妈妈计划怀孕开始讲的.

中国的所谓哲学家, 不喜欢讨论具体的事, 觉得好像平常的事儿不高深, 一谈就到老, 庄那了.

-- 大家的思路都是从经典中找理由,这样看起来比较靠铺.
其实就算老子也仔细观察了雌雄的交配, 舌头牙齿, 窗户和墙, 老子猛着呢.

雅斯贝尔斯(德国人)有本书, 大哲学家. 中国入选的有两位, 孔子和老子.
孔子属于思维范式的制定者, 而老子是思想的独创性.

评判东西的好坏就这两条:
1. 是不是对前人做了归纳梳理, 或者指出前人的不足 ------ 孔子做的
2. 是不是有独创性 ----老子做的.

如果两者都不是, 那就是扯淡了 :) 于丹两者都没做.

-- 啊?把事情平民化,应该也算一种梳理吧?
算, 历史上有这样的人, 比如阿西莫夫, 阿西莫夫没有创见, 也没有指出前人的不足, 但他有把事情平民化,
通俗易懂的讲给大家, 比如阿西莫夫科学指南.

-- 机器人三定律不是他说的?
就科学领域说吧, 科幻领域他基本没有前人. 应该算创见

-- 那么我觉得描眉也应该算一种平民化吧 :D, 只不过有的描的不好而已
描到鼻子上了吧?
关键是于丹的思维方式不好, 补袜子的, 出来是百衲衣.

我估计她内心也不这么想, 也是这帮没文化的读者给逼的. 没办法, 只能这么写, 要不然人家长不屌. 家长觉得孩子喜欢上于丹, 那以后就好管了.

Thursday 26 April 2007

cdrecord的故事汇


在这个晚春的早上, 写一写cdrecord的故事, 也许对大家有些警示.

cdrecord, 主要用于刻盘, 刻CD, DVD.

这个软件有很长的历史, 作者是Jorg Schilling.
开始, 作者把cdrecord的CD刻录部分开源, 在GPL协议之下, 但DVD刻录的源码不在GPL下
而是可以用于个人目的, 全免费. 但商业目的不行.
不久一些GPL的小战士就看出了矛盾, 因为DVD刻录部分和CD部分不可分. CD在GPL下
按GPL, DVD也应该.

但Jorg这个傻子, 愣不承认这个逻辑:)

他人在德国, 还不承认美国的法律, 而且他所谓商业的应用应付费, 根本不提供任何的付费渠道
写信问他他也没有, 他的电话也保密的紧, 别人给他钱他骂别人, 他说我不是奴隶, 你给我钱我就做工,
用户有问题问他他骂别人傻瓜. 骂骂咧咧.

用户, 其他的程序员, 商业公司也离不开他这个东西
后来商业公司不管那么多了
直接在CDrecord上加个界面, 出来卖钱
也没见这个傻蛋告谁

大部分的商业刻录软件都基于cdrecord的源码
他也不查
继续在那骂人
GPL的年轻斗士们
觉得Jorge的行为侮辱了GPL
faint的不得了
跳着高的跟Jorg对骂
Jorg也跟着骂
不管不顾的
说妈的我这辈子也不去美国
你Y美国法律管不了我
我只服德国和欧盟的法律
就这么个人
混球似的

但那些自由软件的老人们
却深深理解Jorg的心 :-)

很早cdrecord就进了debian的release
进debian的发行版很不易的
比如mplayer到现在也没进去
每年申请人都不批准
不管你多好你代码不干净我就不要

GPL的小孩们要把Jorge开除出自由软件门
老人们就不干了
说小孩滚蛋
人Jorg刻光盘的时候, 你们这帮小孩还是液体呢

后来把Jorg灌醉了
德国人也挺好酒的
变了另一个项目, 好说歹说
说了些好话
http://www.cdrkit.org/
变 成了cdrkit. 管项目的挺靠谱的. 比Jorg平和多了. 那样还少得罪些人. 现在的linux用户牛多了. 用你的程序就跟多给作者脸似的. 也不管作者是否挨饿. cdrkit是debian的那些老人开的. 这两年的事. 算cdrecord的一个正统.

cdrkit, like the programs from which it was derived, is distributed as free software under the terms of the GNU GPL version 2. (Note, this is not "version 2 or later" as you see in many software projects.)
括号里的很像Jorg的做派. 那么的较真儿. 孩子似的.

对bug的态度:
Cdrecord has even more options than ls.

There should be a recover option to make disks usable, that have been
written during a power failure.

文档写的象狗屎, 语法都不通有时候, 跟其他人也不怎么玩, 就在那傻坐着. 基本不懂法律. 还想让法律保护自己.

最近两天在cygwin下用了cdrecord, 根本也没有毛病, 很好用
- 呵呵,疯子就是牛

cdrecord -vv -dev=cd isoname
他不疯
在德国挺正常的
因为德国
基本就是地球的疯人院
地球的大脑
地球的大脑都在德国
- 我现在电脑的内存也是1.5G了。呵呵
足够了
空着也没啥用
我经常空着
- 我现在在自己机器上倒几百m的东西没啥问题:)
一般如果我发现我机器用了多于1G的内存
我就要想想我是不是没用脑子做事
因为我发现很多猪头电脑都用的挺恨的, 跑着无意义的程序;

很多cdrecord的变种, 一运行就说:
这是cdrecord的变种, 如果出错的话, 别去烦原作者,找我好了
Jorg就喜欢这样的

另一件事,
也反应出对bug的态度
The cause for the compilation problems is a bug in the Linux kernel include files. It is a bad idea to try to "fix" correct code instead of fixing the bugs.

After 2 years, the bug in the Linux kernel has been fixed in 2.6.8. Unfortunately Linux-2.6.8.1 started to break CD/DVD writing in suid root applications by breaking interfaces :-(
前因是在2.6.8.1上没法编译
于是一个就做了个patch
这样就可以编译过了.
但Jorg不同意这么做. 谁的bug谁fix. kernel怎么着? 中央有错也得改.

/*
* You are not allowed to modify or remove the following code.
* I am sorry that I am forced to do things like this, but defective
* versions of cdrecord cause a lot of work load to me and it seems
* to be impossible to otherwise convince SuSE to cooperate.
* As people contact me and bother me with the related problems,
* it is obvious that SuSE is violating subsection 6 in the preamble of
* the GPL.
*
* Note that although the SuSE test is effective only for SuSE, the
* intention to have non bastardized versions out is not limited
* to SuSE. It is bad to see that in special in the "Linux" business,
* companies prefer a model with many proprietary differing programs
* instead of cooperating with the program authors.
*/
这一段. 孩子似的, 乱写乱画. 感想都写进代码里. 当日记用. 其实找律师比较靠谱, 还能得到钱.

Jorg的粉丝可都是死硬派, 一个顶一个
I'll give you a fucking break alright, you prick.

Quoting you: "Jorg Schilling has not provided a very good program based on the lack of help you can find for it on the internet. You should do a better job."

My point was that your criticism of Jorg went too far. "You should do a better job"? Give ME a fucking break. You lost all hope of getting any help, especially from me you dickhead. .
这个shock56, 抢着要当Jorg的粉丝, 但另一个粉丝TheKepper说, 瞧你那德行, 你丫不配
之后shock56说了, 我俩的事你别瞎掺和. 人Jorg都同意我当粉丝了, 你干嘛拦着? TheKeeper说, 人Jorg太善了, 我就看不了你这鸡贼乱欺侮. 他俩对骂了许久. 那大约是2003年间的事.



Tuesday 17 April 2007

我的千岁寒

发现的第一个问题就是根本没有读懂读不懂的问题. 读懂, 这个词本身有歧义. 既不能说读懂了: 好像对作者有认同似的; 也不能说没读懂: 好像智力阅历不够. 但说半懂不懂的又显得不认真. 这个圈套很狡猾.


大学的时候看佛教, 奴隶社会产生的宗教, 肮脏的历史. 从此后佛的那些话都当耳旁风了. 就是明白了些道理也不觉得受了启示. 最喜欢讲黄龙汤的笑话, 还加很多自己的演绎. 我的立场就很明了了.

宁愿理解这本书是在破佛学的玄奥和历史的吹牛. 这样还可以和王朔站在一个立场上.

Wednesday 21 March 2007

Beginer's Emacs

emacs也用了很久了. 但感觉才刚刚入门. 并不是因为我笨. 是因为现有的emacs入门不适合我.

但是我在emacs里看了Emacs Lisp Intro的Info版, 就霍然开朗的入了门.

因此我想Emacs最好的入门道路(起码对我而言), 就是先学emacs的启动, 之后进emacs的看Info, 找到Emacs Lisp Intro来就是了.

但是Emacs Lisp Intro可能没装. 那就到http://www.gnu.org/software/emacs/emacs-lisp-intro/下载. 拷贝到info的目录. 然后用install-info 安装. 不安装也可以用info看, 但不显示在emacs info的Top页面. 翻看起来多少有些不便.

Tuesday 13 March 2007

getclip and putclip in cygwin

(defun clip-get ()
"Get contents from clipboard and paste it to current buffer."
(interactive)
(message
"Paste from clipboard")
(call-process "getclip" nil t) )
(defun clip-put ()
"Put current buffer contents to clipboard."
(interactive)
(call-process-region (point-min) (point-max) "putclip" nil 0)
(message "Paste to clipboard"))

(defun clip-reform ()
"Reform contents in clipboard"
(interactive)
(shell-command "getclip|putclip")
(message "Reform Clipboard"))

(global-set-key "\C-cg" 'clip-get)
(global-set-key "\C-cp" 'clip-put)
(global-set-key "\C-cr" 'clip-reform)

Friday 9 March 2007

Emacs Org Mode Intro

* 入门
也是刚刚用emacs的Org-Mode. 但一下子就喜欢上了. 在这里作一个简单的介绍,
希望各位也能喜欢.
** 安装
Org-Mode在emacs 22里默认就有. 如果用的是emacs 21, 可以到[[http://staff.science.uva.nl/~dominik/Tools/org/][
Org-ModeHomepage]]下载装上.

建议直接使用emacs 22. 就是为了Org-Mode(和sdcv-mode), 不惜花了好几个
小时的编译时间, 转到emacs 22下的. 自己觉得还是值得的.

** 配置
现在假设大家的Org Mode都已经装上. 在~/.emacs里加入下列几行来配置一
下:

(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(setq org-hide-leading-stars t)
(setq org-cycle-include-plain-lists t)

把.org的文件和Org-Mode关联起来. 后两行会在下节解释.
* 组织文档
Org-Mode说自己比较适合记笔记, 维护ToDo列表, 做项目计划等. 个人觉得
写文档也是不错的. 比如现在我的大部分文档都是这么写的.

Org-Mode能认得的文档结构有两种, 标题和列表. 其他的就理解为正文了.
** 标题
Org-Mode的标题用`*'标识. 注意作为标题`*'需要在最前面.

一个`*'标识一级标题, 两个二级, 以此类推.

标题太深就满目标题了. 这时可以设置(setq org-hide-leading-stars t)
把前面的`*'隐藏起来, 只留一个. 看起来清爽写. 这个在Org-Mode里叫
`Clean View'.

标题可以用Tab键折叠起来. 也可以用Tab展开. Org-Mode这种根据上下文判
断按键意图的办法很好. 用起来简单, 不必记其他的命令.

** 列表
列表有两种, 一种是数字的, 比如:
1. xxx xxx
aaa
2. xxx xxx

还有以`-',`+', `*'打头的, 比如:
- xxx xxx
aaa
- xxx xxx

两者可以结合着用.

默认列表不能用TAB键折叠(像标题那样). 如果想用TAB键折叠, 需配置以下
变量:

(setq org-cycle-include-plain-lists t)
** 局部编辑
标题多了, 挪来挪去不是很方便, 可以用局部编辑的功能, 只编辑一部分这
样清爽些.
`C-c C-x b', 会开另一个buffer(emacs叫indirect buffer), `C-x o'换过
去, `C-x 1'全窗口, 编辑起来很舒服. 保存还是保存到原来的文件.
** 创建标题
除了用`*'来创建标题外, 还可以用`M-'(Alt + 回车键)创建标题.
这样会创建和上一个标题同级的标题.

还可以用ESC + 左箭头使标题左移, ESC + 右箭头右移. 当然增减`*'也能
达到一样的效果.

Org-Mode的键设定很简便. 比如Ctrl + 回车可以创建一个新的段落.
** 标题间的移动
文档一大, 翻看起来就比较麻烦. 标题间的移动是这个变得简单了.

到同级上一个标题: `C-c C-f'
到同级下一个标题: `C-c C-b'
到上级标题: `C-c C-u'

Overview快照: `C-c C-j'. 这个也很实用. 会另开一个视图, 显示文档结
构, 用上下箭头可以选编辑哪一部分.

* 链接
Org-Mode的链接很好玩. 链接可以是类似超级链接的东西, 也可以是别的.
** 链接的格式

[[target][链接描述]]
链接的描述是可选的; 如果没有链接描述, 链接本身就作为描述. 这听起来
还比较的合理. 和HTML里的超级链接是一致的, 比如:
http://www.example.com
用Org-Mode的表达就是:
[[http://www.example.com]]
** 链接的形式
链接不光是http, 有多种形式. 我最喜欢的是`shell'. 比如:
[[shell:madplay *.mp3&][madplay *.mp3]]
访问链接就是播放了.
还有就是`file'. 可以用来连到另一篇文档.
也可以连到本文档的某个地方. 有点类似搜索的功能. 一般不用.
** 访问链接
用`C-c C-o'访问链接. 如果链接是超级链接, 就直接用emacs配置的浏览器
连了. 如果是文件, 就用emacs打开.
** 编辑链接
链接写好后Org-Mode就把`target'隐藏起来, 把链接描述加亮放在那. 看着
很整洁. 编辑的时候开始会糊涂一下. 编辑用`C-c C-l'. 下面会依次提示
改链接target和描述. 这么改还不那么糊涂.

* 制表
一般的文档只要标题, 正文, 列表, 链接和表格就足够了.前4项前面已经讲
过. 下面说一下制表.
** 创建表格
用`C-c |'来创建表格. 按下`C-c |'后, 会提示:
Table size Columns x Rows [e.g. 5x2]:
直接回车会创建一个5x2的表格:

| | | | | |
|---+---+---+---+---|
| | | | | |

如果需要别的可以按需输入.
** 表格的整理
在表格里, TAB键的语义是切换到下一个单元格. TAB还有整理表格格式的作
用, 比如表格乱得像下面这样:

| 月份 | 工资 | 支出 |
|---+---+---|
| | | |

按一下TAB, 就可以整理好:

| 月份 | 工资 | 支出 |
|------+------+------|
| | | |

当然如果你用TAB切换下一个单元格的话, 那个表格也不可能乱成那样. 随
时会整理.

我比较喜欢表格的自动整理功能, 因此就不介绍如何把这个功能禁掉了.
** 电子表格
表格可以进行计算. 可以计算的表格就叫电子表格.
**** 加法
我们来算一个加法. 如下表:

| 季度 | 收入 |
|------+------|
| 1 | 100 |
| 2 | 100 |
| 3 | 100 |
| 4 | 100 |
| 总和 | |

总和是多少呢? 可以在cell(2,6)按`C-c +'来算一下, 计算的结果用`C-y'
可以插入到相应的地方.
**** 更复杂的计算
上面加法很好用. 而且对我来说也足够用了. 有复杂计算要求的人可以接着
看. 和我一样的人可以就此打住了.

Org-Mode的电子表格计算使用emacs calc包. `calc'包理论上什么都能算
的. 不过我们这里只算一个乘法, C = A x B.

创建表格:
| A | B | C |
|----+----+---|
| 12 | 13 | |
| 13 | 14 | |
| 14 | 9 | |
| 19 | 20 | |
#+TBLFM: $3=$1*$2
在表格下写一行:
#+TBLFM: $3=$1*$2
注意顶格写.

把光标放到表格上, 按`C-u C-c *', 表格计算就会启动.

Tuesday 6 March 2007

Ask Questions

问问题是收费的:) 5~200美元不等.

http://uclue.com/

有些问题是很值的, 比如nancy问怎么找到一份适合自己的工作. 她标价60美元. 在得到答案后她又给了研究人员10美元的小费. 在她而言, 70美元找个合适的工作也是很值的. Nancy的问题在: http://uclue.com/?xq=64

uclue.com是Google Answer的研究人员办的.

还有一个问数学是不是科学的问题. 这么大的题目只付20美元. 有些难为Researcher了.
http://uclue.com/?xq=40

Monday 5 March 2007

emacs org mode is great

发现emacs的org mode很好用. 我用它记录mp3的一些信息.
* 简介
郑钧改编自Coldboy的[[file:../coldboy/yellow.org][Yellow]].
* 歌词

我想知道
流行能飞多久...

* 播放
[[shell:madplay 流星.mp3&][madplay 流星.mp3]]

我最喜欢的是播放, 光标放到link上C-c C-o就播放了.

Thursday 1 March 2007

sdcv在cygwin上的安装

可是折腾了不少的时间, 最终也算是大功告成:)
下面列一下编译时遇到的问题.

** mmap检测不到
就是MMAP在cygwin 上检测不到. 可能是AC_FUNC_MMAP的问题. 用
AC_CHECK_FUNCS(mmap)换掉, autoconf, ./configure, 然后make就可以了.
这个错误的表现是mapfile.hpp编译时出错. 错误的原因在这里.
** ar的问题
ar可能有问题. 基本是把ar跳过了, 直接用g++把丫的写成了exe:
g++ -g -O2 -o sdcv.exe sdcv.o getopt.o getopt1.o libwrapper.o
readline.o utils.o lib/*.o -lglib-2.0 -lintl -liconv -lreadline
-lz

有些粗暴, 但得到了所要的. :)

Wednesday 28 February 2007

Life is too Short for Manual Testing

对做手工测试而言, 生命太短.

对做手工测试而言, 生命太短.

对上面的论述的另一种说法是:
公理0:手工测试是不敏捷的. 我们再来检视一下自动化测试公理1及推论:

公理1: 一个好的手工测试不可能自动化

推论1A: 如果你真正自动化了一个手工测试, 那这个手工测试不可能是一个好的手工测试.

推论1B: 如果你有一个好的自动化测试, 那它和你自动化的手工测试一定不一样.

自动化测试公理1基本封死了另一条自动化之路: 从手工的测试创建自动测试. 尽管这个自动化之路有一些好处, 比如对要测的功能可以相互验证一下.

综合公理0和公理1, 手工测试是无用的; 再根据剃刀原则, 手工测试应该被剃掉. 很残酷吧?

产品在设计之初, 就应该考虑测试. 如果一个产品非常的难测, 那它的质量就非常的难测. 如果它的测试可以完全自动化, 那开发人员就能够很快得到反馈, 测试人员会腾出脑筋考虑增加更多的自动化测试; 正面的迭代一旦形成就难以遏制. 而如果它的测试只能手工完成, 测试人员会忙于测试的执行, 很少有时间考虑测试的质量; 开发人员得不到及时反馈; 一旦发现了问题就很严重, 甚至很多都要推倒重来; 项目会慢慢演变为大家的噩梦. 这样只能靠中国式的艰苦奋斗才能脱困境, 而且只是脱困境而已, 完成的活儿离漂亮还差的很远.