2009-03-28

无题

已经很久没有在这一亩三分地写下稍许文字,而每次动笔的冲动总会在不经意间悄然消融。隐约中有一股落寞与寂寥,无法言语。

断断续续的,SICP已经只剩最后一章没看了。因为工作关系使用了一段时间Ruby,我觉得这是最接近Lisp的语言之一,一切都很自然,仿佛邂逅一位多年不见的好友,一点都不陌生。最近又有点迷上Haskell,读完SICP第四章特别是逻辑程序设计那一节后,居然连Haskell代码看起来也挺顺眼。Solidot上有篇文章说,“程序设计语言就像女朋友:新的更好,因为你想变得更好。你认为学了新语言就能成为更好的程序员。”

我个人认为这在某种程度上是一种排遣方式 - 旧语言的习惯已经根深蒂固,很难找到进步的喜悦。新语言对程序员而言是一种新鲜感和收获感 - 在了解到一定程度后继续重复该循环。

文章里还说:不要追求你不需要的东西。

标签:

2009-03-25

[招聘]: Sr. Software Engineer

Job Description:
Basic project management skill
Basic people management skill
Good communication skill
Good oral & written English

Experience in building scalable infrastructure software or distributed systems
Experience in Web service design and implementation, especially RESTful Web service

Experience in IT infrastructure architecture
Experience in networking
Experience with virtualization technologies, especially VMWare

Programming experience in C, C++, Python, Ruby, Java
Experience in Linux
Security fundamentals

有意者电邮: liqun82 [at] users.sf.net

标签:

2009-03-18

cset-100

今天向自己的hg仓库检入了第一百个changeset,初步完成了自己的第一个代码生成工具。回头在看看这五百行Scheme代码,我确信自己很不喜欢它们 -- 直白但流于杂乱。

这几天读cgia才豁然发现,在聪明的程序员手中,很多枯燥的工作都能以优美的方式解决。问题是,很多时候,自己缺乏那种视角,所谓``不识庐山真面目,只缘身在此山中''。

如果让我重写,我可能会用ERB来解决之。Template System的好处是数据和逻辑分离,而我现在的Scheme代码中直接hard-code了目标代码。

标签: ,

2009-03-09

code generation

读``Code Generation in Action'',看到其中对ERB的运用,真是大为折服。当初读``Programming Ruby''的时候,里面也稍微提到了一点ERB,心想它不就是个模板处理工具嘛,和GNU AutoGen大同小异。如今随手可见各种tokenizer/parser,配合适当的templating system,其威力真的是不容小觑。

《天龙八部》中萧峰在聚贤庄以一套江湖中人人皆会的粗浅功夫 -- 太祖长拳,对敌少林寺两大``玄''字辈高僧,却能够占尽上风。高手果然是摘花飞叶皆可伤人啊!

标签: ,

2009-03-06

非确定性计算

1961年,Lisp语言的发明者John McCarthy提出了非确定性程序设计的思想。设想一下,如果我们有一个算子称为amb(iguous),它的行为如下:
  1. 有参数的时候不确定地返回其中一个参数;
  2. 没有参数的时候对它的求值则将导致失败;
  3. 如果其子表达式有一个可达,则表达式必须有返回值。
所以:
  1. 求值(amb 1 2) 将返回1或者2;
  2. 求值(amb)将导致失败;
  3. 求值(amb 1 (amb))必然返回1。
这里有对amb的解释、示例和一个在scheme语言中的简单实现。有了amb后,我们可以思考下面一个简单的数学问题:如果 2 <= x, y, z <=9,有哪些x, y, z可以使得x的平方是y和z的平方和?
(define (require p)
(if (not p) (amb)))

(define in-range
(lambda (a b)
(require (< a b))
(amb a (in-range (+ a 1) b))))

(let ((x (in-range 2 9))
(y (in-range 2 9))
(z (in-range 2 9)))
(require (= (* x x)
(+ (* y y) (* z z))))
(list x y z))
对上面的表达是求值,将会得到(5 3 4),再求值(amb)将得到(5 4 3) ,再次求值则会得到错误报告:(error "amb tree exhausted")。这两组数正是我们需要的结果。

标签: ,

2009-03-05

Beyond Paxville

曾经用过最强劲的机器是一台Paxville,拥有两个四核的CPU,打开超线程后实际上会有16个逻辑处理器,加上8GiB内存,``make -j17'' 编译一个linux + xen0仅仅需要一分钟。后来回学校写毕业论文时用自己的笔记本做实验,光是编译linux就花掉了半个多小时,着实让我深深怀念拥有Paxville的美好时光。

两年半后的今天,我有了更强劲的机器 -- 组内每个开发者分到了一台Dell 2950。还是两个Quad-core CPU, hyper-threading, 只是主频提高到了2.5GHz,内存升至16GiB,而且有6块750GiB的硬盘。大家都热情很高的建了自己的ESXi Server,并把自己的虚拟机从原先的Server上迁移过来,很是方便。

计算资源越来越廉价,十年前一台586已经让人艳羡不已,而现在手机上都能玩虚拟化

标签:

2009-03-02

Wish list

离过生日还有八个多月,不过我却想好了我的wish list, 那就是我垂涎已久却始终没有找到电子版的两本经典书籍:
  1. The Little Schemer - 4th Edition
  2. The Seasoned Schemer
Amazon上两本书加起来是49.5美刀。

标签: ,