Running RSpec in Emacs

RSpec is a Behaviour Driven Development framework for Ruby. It's output format can be customized. However, the default format works well in Emacs's compilation-mode. Type M-x compile and input spec file_name_spec.rb. The result will be prompted at a new buffer. Some useful information are [...]

崭新的 2008 年

昨天是 2007 年的最后一天,今天是 2008 年的第一天,总是想写一点总结或者展望之类的,却又写不出来了。正好今天阳光如此明媚,就留一张照片吧,阳台的景象,不是很开阔,也没有秀丽风景,但是也伴随了我两年多了: 希望 2008 年的阳光一直都是这么灿烂! 在这条路上来来往往的多少人呢? 愿所有人在新的一年里迎接崭新的自己! :)

RubyConf 2007 video 释出!

RubyConf 2007 演讲的全部视频最近由 Confreaks 公司公布(Creative Commons Attribution-ShareAlike license)出来,可以在这里在线观看或者下载 AVI 格式(H.264)的视频。 这么多牛人的怎么多精彩的演讲,真是令人激动啊!我把他们下载下来了,这样离线的时候也可以看。我还把他们传到了 88 CompLang 版的 FTP 上,校内的朋友们可以直接去那里下载。 :) 我虽然还没有来得及看所有的演讲,但是随便看了几个都是非常有趣的(当然,也是非常精彩的),我这里随便介绍一两个,相信你一定也会喜欢的! Hurting Code [...]

Ruby 1.9.0 is released

Ruby 1.9 在圣诞节如期发布啦! Hi, We are happy to announce of the release of the 1.9.0 the development release. You can fetch it from: ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.bz2 407cc7d0032e19eb12216c0ebc7f17b3 ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.gz [...]

Teach yourself “自主知识产权” in 2 hours

咱们中国人似乎一直很热衷并且很擅长于创造“自主知识产权”的东西,一直很纳闷,直到今天翻开这次的操作系统实验指导一看,才知道原来这玩意这么容易!我们不妨来亲自实践一下,内容就是这次的操作系统实验:为 Linux 内核添加一个新的文件系统(听上去是很浩大的工程啊!): 第一步:准备工作【30 min】 所谓“工欲善其事,必先利其器”,这次我们的工作环境是 Linux ,为了方便起见,我使用我熟悉的 Debian GNU/Linux 系统。 从校内的 FTP 下载 Debian Etch 安装光盘。【10 min】 安装基本子系统,连接网络源,安装必要工具(如 emacs 、sudo [...]

告别一周没有手机的生活

上周手机丢了,也一直都没有时间去买个新手机。一个周过来,并没有什么特别不适应的,只是看时间特别不方便了,于是做事情都没有一个时间概念了,特别是上课的时候期待着下课却又不知道还有多少时间才到下课铃响——非常郁闷,哈哈 :D ! 真是没发现原来我和外界联系这么少,如果我不说的话,这样随便消失一周也恐怕最多只有一两个人知道吧!这样看来,我虽然比以前开朗了许多,但是大致上还是那个样子啦,有时候却不得不感慨时间过得真快啊!这几天无意间在 Blogger 上翻到自己高二时候留在上面的一篇 Blog : 没想到我那个时候就会写 Blog 了,而且还是用 gmail [...]

Continuation + Y Combinator

我在介绍 Continuation 的文章中提到了一个 create_iterator 的实现,它接受一个函数名,内部去调用这个函数而实现 iterator 。最初我是想让它接受一个 block 的,但是后来却改成了函数名,正是在做二叉树的遍历时出了问题:二叉树遍历是一个经典的递归程序,而 block 没有名字,无法做递归,只好作罢。 不过在前一篇文章中我又介绍了 Y Combinator (其实我也是在一边学习的)正好可以用来做匿名递归,刚好可以把这两者结合在一起啦! 原来的 create_iterator 是这样的:

the Y Combinator

今天看到 A Use of the Y Combinator in Ruby 这篇文章,却被他的代码搞晕了,半天看不明白,于是只好另辟蹊径,不看他的代码,却自己来写一下,如果我写出来的代码和他一样,那自然就明白了,如果不一样,也好对比一番,相信也更容易理解了。 这里要解决的问题大致就是“匿名递归函数”的问题。递归函数大家都知道了,例如经典的阶乘函数: def fact(n) if n == 0 1 else n*fact(n-1) end end 匿名函数也没啥,在许多语言里,函数就和普通的值没有什么区别,不一定非要有一个名字,例如 lambda 就可以创建一个匿名函数: func = [...]

mile stone 1: 手机被偷了

今天晚上骑车出去,在一个红灯停下来,然后一位小哥过来说他刚才看到有人偷我东西,我才发现上衣口袋里的手机不见了。再找也找不回来了。真是奇怪,我骑车在路上还在想自己上次备份电话本的事情(一直都想备份一下的,因为我也一直都担心手机会丢或者会坏,可是手机不是很智能,不能连到电脑上,只能手工填,导了一小部分之后系统重装了,就中断了),结果手机就丢了。

反思:关于电脑的可用性

计算机的历史虽然不长,但是确实是飞速发展,到现在几乎是家家户户都有电脑,接上了宽带,说不定比固定电话的普及率还高,各行各业都可以见到电脑的身影,应用范围越来越广。我们应该为此自豪吗?电脑完美了吗?答案当然是否定的!电脑确实非常实用,能够帮助我们解决许多问题,可是,从某些方面来看,电脑几乎可以说是人类迄今为止最为失败的发明! 比如在可用性方面。 且不说通过 G 代码来编程的数控车床这类专门面向专业人员的设备,就看我们最常见的 PC 机好了。如果你在看这篇文章,我猜你一定用过电脑了,不知道你觉得自己的电脑是好用还是不要用呢?如果你要添加评论,肯定是要用键盘的了,抛开世界上最差的 10 款 PC [...]

我们该向国外的 CS 课程学习一下了

今天在刘未鹏的 Blog 上看到 Joel Spolsky 在耶鲁的演讲([1] , [2] , [3])的导读,便跟着链接过去看了一下。演讲真是非常诙谐有趣,而且看了以后也觉得蛮有收获的,所以也来推荐一下。 演讲中提到了几门 CS 课程,也是相当有趣。比如 MIT 的那门著名的计算机基础课,第一堂课就讲了“Computer Science isn’t about computers and it isn’t a science”。 这门课确实相当有名,其实就是用 SICP (Structure and Interpretation of [...]

Write a Scheme Interpreter in Ruby(2): THE Interpreter

在上一篇文章中我们实现了对 scheme 代码的 parse 和 analyze 过程,并得到了一些可以直接 eval 的对象(String ,Symbol ,Number 和 Cons ),可是光凭这些并不足以让我们的解释器跑起来。这次我们要添加必要的代码,实现一个真正可运行的解释器。 在前面的代码中,我们已经实现了 scheme 中的几个基本对象的求值:作为 atom 的 String 、Symbol 和 Number 以及作为 list 的 Cons 都已具体实现了 eval 方法。事实上 atom 的求值已经不需要加什么其他代码了,但是 Cons 类却是耍了一个把戏,仔细看 Cons [...]

Write a Scheme Interpreter in Ruby(1): Parser & Analyser

也算是突然心血来潮吧,就想写一个 Scheme 的解释器,其实也是心血来潮了许多次了,只是一直都只是一个想法,最主要的原因还是因为自己对编译原理一无所知吧,也许明年上过编译原理课之后就好写了。不过这次真是心血来潮了,拦都拦不住,怕是等不到明年了。 不管写得出来写不出来,也都先试试吧!多次见石老师演示过 boost::spirit ,计算理论课上也学过了上下文无关文法,似乎还是知道个大概。于是我就开始找 Ruby 的 parser 库。 好像 parser 也有许多种,什么 Recursive Descent [...]

Multiton

Multiton 类似于 Singleton ,目的是要保证某种单一性。但是和 Singleton 的一个区别就是:Singleton 对于一个类只可能有一个对象,而 Multiton 则可能有多个对象,仅当用于构造的参数相同时,才保证唯一性。有许多地方都有这种模式的应用,例如 Lisp 或者 Ruby 里的 symbol ,同名的 symbol interned symbol 总是同一个对象。还有 Java 里的 String 也是这样的。 最近心血来潮在用 Ruby 做一个玩具级别的 Scheme 解释器,要表示 Scheme 里的 symbol 、number 和 string [...]

单元测试的绿条条

其实自己对单元测试那套东西也是听说过不少的,而且自己也觉得挺有道理,却是嘛,如果有测试结果摆在那里的话,重构起来胆子都会更壮!不过我却大多数时候都是在提心吊胆地写代码,虽然项目已经分成了几个小的模块,但是当用到其他模块的功能时却老是担心会有错误,而且却是经常会有 bug 散布在各个模块中。 我明白单元测试的重要性,可是却总是“没有时间”(或者所用的工具不太合适)去写单元测试。直到最近有了亲身体验,我才明白:我以前根本没有明白单元测试的重要性!