口算能力太弱了

也许可以归结为对计算机太依赖的原因,但是其实我从小就是这样,如果笔算能算得更轻松的话,何必用口算呢?我似乎就是这样一种性格:追求更方便的工具,而不是注重磨砺自身的能力。在从小到大的数学课中我感触最深,比如自从学会了方程之后,我就绝对不会采用直接反推的方式求解了;高一的时候学到计算函数的斜率,有时候会非常难算,结果我翻出来了用导数求斜率的方法;还有后来的立体几何,我找来了三维向量叉乘求法向量的办法,非常好用。 [...]

Gift from Thousand Parsec

As a student taking part in Google Summer of Code 2008 under the Thousand Parsec mentoring organization. I just received the gift from Mithro. The gift includes a cool Thousand Parsec T-shirt and other Thousand Parsec/Google widgets. If I finished the final-evaluation successfully, I'll get a GSoC [...]

‘\n’ at the end of each line

其实我记忆中已经不止一两次碰到这个问题了,在今天又被它折腾了几个小时之后,我决定一定要把它记录在 Bug Archive 中。这就是从文件中一行一行地读取文本并进行处理的时候,末尾的那个换行的问题。 在 C 语言里一般不会遇到这样的问题,因为 C 语言有 gets 和 fgets 两个函数,其中前者会去掉 '\n' ,而后者则会保留 '\n' ,而一般人都记不住这两者分别的行为,所以使用的时候都会小心翼翼。 而在 Python/Ruby/Perl 这样的语言中,从文件中按行读取简直太容易了,写一个处理文本行的程序就那么简单,可是却容易忘记了末尾的换行符。原本我想得到的是一个 "foobar" [...]

rmmseg-cpp 0.2.6 & pymmseg-cpp 1.0.1

在上一篇文章中我说了 pymmseg-cpp 在 Windows 下无法正常工作的事情,经过一番折腾,现在终于能正常运行了。于是我发布了 1.0.1 版,并在 google code 申请了一个 project ,用于存放 release 包:pymmseg-cpp 在 google code 的项目主页 。 另外,在 github 上看到 nasi 将 rmmseg-cpp fork 了一下并对编译脚本针对 Mac OSX 进行了一点修改,便把补丁添加进来了。我身边也不好找 Mac 的机器,不过 ashchan 告诉我说打过这个补丁之后在 Mac [...]

pymmseg-cpp: rmmseg-cpp with Python interface

以前为了提高 RMMSeg 的性能,我写了 rmmseg-cpp ,根据 JavaEye 一段时间的使用情况来看,似乎挺稳定的,性能也很不错。其实 rmmseg-cpp 虽然名字里面有一个 “r” 字,但是算法核心完全是用 C++ 做的,最后才加了一层 Ruby 的接口包装。正巧最近我又两个用 Python 的项目都要用到中文分词,便决定给 rmmseg-cpp 加一个 Python 的接口。 正如我在 On the Rubinius FFI 一文中描述的一样,做到 Native 模块的接口有两种方法,一种是我在 rmmseg-cpp 中用的写 C 代码来粘合二者。另一种则是直接用语言提供的 [...]

为 blog 添加了回复提醒插件

在 blog 上回复的东西经常忘记去看,最后就不了了之了。有些 blog 提供了“订阅回复”的功能,就是接下来的回复会通过邮件发送给你,我觉得很实用,心想 wordpress 肯定已经有这样的插件了。搜索了一下,果然有!就是这个 Subscribe to Comments 插件,看起来还挺强大的样子。 立马装上,自己先测试一下。 :D

Notes: How to make a patch

虽然现在各种版本控制工具大行其道,但是有时候还是需要使用相对原始一些的办法提交补丁,制作补丁其实很简单,用 diff 命令,加上 -u 参数生成带有上下文的 unified 格式的 diff 文件,就是一个 patch 了。可是最容易忘记的地方就是后面的参数是先写未修改过的版本呢还是先写修改过的版本。我自己每次都记不住,要去查 man page 。正好今天收到一个 patch ,发现里面的修改都是反过来的,大概也是参数写反了吧。 ^_^ 所以我终于决定把正确的用法记下来: diff -u original new > original.patch [...]

导读:What’s wrong with CS research

其实我也不会写什么“导读”,只是今天在 newsmth 的 FuncProgram 版看到这篇文章的链接,读了一下,有种强烈地想要推荐给别人读一下的冲动。 文章的标题是:What's wrong with CS research ,说了 CS 本不是 science 却如何被硬套上这个名号煞有介事地做 research 的。Mencius Moldbug (文章的作者)说 CS researchers 分为三种: creative programmers mathematicians bureaucrats

OSCON 2008 花名册

gregg 为 O'Reilly 举办的 OSCON (Open Source CONvention) 2008 的与会成员录制了每人 30 秒钟的视频,用于介绍自己和自己要讲的东西。牛人云集,一定要看看!其实转载这个视频的主要原因是这几天看到在学校论坛的 Linux 板块看到一些转载自 cnBeta 的搞笑新闻,我觉得比起“腾讯版的 QQ for Linux”来说,大家还是应该更多地关注一下这些东西。当然,这是我个人意见。 :)

The Implementation of Scheme Hygienic macro

我在很早的时候曾经写过一篇叫做“Play with macro”的文章,介绍了 Common Lisp 式的 macro ,那是一个很基本但又很强大的工具,比较容易理解。相比之下,Scheme 的 macro 就不一样了,虽然我很早就知道 Scheme 的 macro 是一种叫做 Hygienic macro 的东西,但是直到最近才明白它是怎么一回事,因为我要实现这样一个系统。 Common Lisp 的 macro 其实就是一段 Common Lisp 代码——一段操控代码的代码。因为在 Lisp [...]

换回 Google 原来的 favicon

在不久前(其实大约都有一两个月了吧?) Google 换了它的 favicon,以前是这个样子: ,而现在变成了这样: ,我倒是不关心两个哪个寓意更深一些,既然各个人的品味不同,我也一定想坚持一下我觉得前者更好看的观点。 其实本来是件小事,但是 Google 实际上是天天都要用的,到今天终于忍不住了,Google 了一下,发现可以在 HTML DOM 树里创建一个 link 节点来强制指定 favicon :

Another pitfall in Python: == and !=

Besides the False == 0 problem, I encountered another problem that surprised me. Consider the following Python code: class Foo(object): def __eq__(self, other): if isinstance(other, Foo): return True return False f1 = Foo() f2 = Foo() f1 == f2 # => True or False ? f1 != f2 # => True or False ? What [...]

妈妈的新书:《家园》

记得妈妈很久以前给我说过她有一项伟大的计划。今天得知,就是这部叫做《家园》的新作啊: 于是趁机也帮妈妈宣传一下。太文学的东西我其实看不懂,而且我也还没拿到书呢,只好引用了一下当当上的内容简介: 安沙的黎明是从水上的一片乳白色开始的。那是河岚,是河水向太阳发出的第一声问候。安沙的河岚不像别的河岚那么单薄那么气短,它是气壮山河的。开始,它们是一寸厚,平平整整,如水上的一层冰。慢慢的,它们开始往上升。脚并不离开水面,只是把身体往高处长。等长到河谷的半山腰的时候,它们才袅袅的牵牵扯扯的上天去…… 娃娃们在喊童谣:“猫爱鱼啊,野猪爱菜,我们爱太阳天天晒。” [...]

The Schemepy weekly status report: the new fallback

I committed almost nothing to the Thousand Parsec repository this week. That's because I'm mainly working on skime -- a pure-Python VM for Scheme. After one-week hard working, the basic shape of the VM is already there. Although there are still many work (e.g. the macro system) to do before it can [...]