Archive for August, 2008

思考是人的最后底线吗?

Monday, August 25th, 2008
new_mind.png
Image from the cover of The Emperor’s New Mind

本来不想把标题取得这么大,因为本来就是我自己说几句自己的看法,我也不是专门研究这个的,所以基本上等于是胡说了,不过想来想去也没有想到什么其他的标题。

其实我对这个问题倒是挺感兴趣,只是想来想去都是无解,本来打算一直到自己那天下决心把那本《皇帝新脑》看完之前不再纠缠的,不过今天无意中在豆瓣上看到一篇叫做“你知道你为什么脑残吗?”的文章,看了以后,发现文章中说的脑残和我想像中的似乎不太一样——如果我看明白了的话,我觉得他说的是“不注重独立思考,太依赖网络(或工具)”的现象就是叫做脑残。虽然我有时候还是会自己想一些问题,但是想起自己前几天写的那篇“口算能力太弱了”的 blog ,似乎我也是脑残的典型了? ^_^bb

其实我不太喜欢看那些带些脏话的文章,不过,抛开“脑残”这个词好了,关于“工具”与“思考”的问题似乎还得在讨论一下。总的来说,两者都是人类的特长,不过还是有亲疏之分,脑袋是自己的,工具则是外面的,过于依赖于工具,似乎会有点大清王朝任用了太多汉人为官的那种感觉——给汉人这么大的权力,哪天他们起来造反不就完了?

Read the rest of this page »

在线 DNS 查询

Monday, August 25th, 2008

今天不知道是学校的 DNS 出问题了(倒是经常出问题),还是国内的 DNS 出问题了(也是经常出“问题”),突然访问不了 github ,通过 online proxy 上了一下发现不是网站挂掉了,不过本地无法解析这个域名。

于是我便找了一个在线查询 DNS 的网站,Google 一下会有很多结果,比如这个 online nslookup 。不过通常查询出来的 ip 并不能直接在浏览器里输入进行访问,如果页面里有诸如 http://github.com/blabla 这样的绝对链接的话,还是解析不出来。更常见的一种情况是 web server 通过客户端访问的 host 来区别不同的 web app ,比如 mail.mstczju.org ,wiki.mstczju.org 和 www.mstczju.org 这些站点实际上都是在同一台机器上同一个 ip 地址同一个端口上运行的。

所以,一劳永逸的解决办法就是把 host 和 ip 对应的项写入到 hosts 文件中。不过,如果以后 github.com 的 ip 变动了(虽然应该不会随便变动吧?)而又忘记了自己曾经改过 hosts 的话,大概会弄得焦头烂额,哈哈! ^_^

玉泉西门行

Sunday, August 24th, 2008

中午去同学那里聊了一会关于实验室、导师以及若干问题,可惜到最后也没有得出什么实质性的结论来。不过三十二舍那边条件还真不错,寝室里面的环境和紫金港那边最好的那种寝室差不多,桌子也还是那么大;而寝室外面就是山,虽然有许多人会很讨厌虫子,但是我还是更喜欢像小时候那样住得和绿色更近一些;大厅也很宽敞,不像三十舍根本就没有大厅,连窗户都很小气,风都吹不进去,难道还是怕楼层太高了一不小心掉下去?

离开的时候差不多四点钟,真不是个好时间,如果回去的话,差不多刚到就要出来吃饭了,直接去吃饭的话又太早了。大概是到了特别容易怀旧的年龄了呢,看到一些东西,总是会想起许多事情来,在脑子里晃来晃去,不过,我还是明白自己不是生活在幻想的世界中的,正好有时间,便决定去散散心。玉泉虽然结构错综复杂,但是地方其实只有那么大,只要方向弄清楚了就没问题了。

Read the rest of this page »

口算能力太弱了

Friday, August 22nd, 2008

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

记得临近高考的时候,我还抱着一本挺厚的《复数》在看,同学们都笑话我,因为复数基本上属于只考一点点的那种内容。然而只有我知道我在干什么:虽然三维向量解立体几何题很好用,但是我的计算能力太差了,时常算错,我想找一种更方便的办法来弥补。不过最后其实没有找到。

一方面,使用工具应当是人最大的特点之一了吧,然而太过于依赖工具又会产生问题。试想现在的社会,如果突然全世界的电脑都停止运转了,或者全世界都停电了,那人们的生活会受到什么样的影响?而我自己似乎总是在不断地追求更方便的工具,却忘记了注重根基,就好像房子快被风吹倒了,便再往上造一层一样。其实我自己也一直知道这是有问题的,但是已经到这个地步了,也是没有办法的事情。 :p 所以闹出今天这样的笑话我似乎也习以为常了。

Read the rest of this page »

Gift from Thousand Parsec

Wednesday, August 20th, 2008

As a student taking part in Google Summer of Code 2008 under the Thousand Parsec mentoring organization. I just received the gift from Mithro.

gift_from_tp.jpg

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 T-shirt from Google. I like them very much! (Including the last gift from Google — a copy of O’Reilly’s Beautiful Code). ^_^

I’m currently preparing the first release of Schemepy for the final-evaluation of GSoC. However, I would like to keep on development/maintenance even after the GSoC final-evaluation.

‘\n’ at the end of each line

Thursday, August 14th, 2008

其实我记忆中已经不止一两次碰到这个问题了,在今天又被它折腾了几个小时之后,我决定一定要把它记录在 Bug Archive 中。这就是从文件中一行一行地读取文本并进行处理的时候,末尾的那个换行的问题。

在 C 语言里一般不会遇到这样的问题,因为 C 语言有 getsfgets 两个函数,其中前者会去掉 '\n' ,而后者则会保留 '\n' ,而一般人都记不住这两者分别的行为,所以使用的时候都会小心翼翼。

而在 Python/Ruby/Perl 这样的语言中,从文件中按行读取简直太容易了,写一个处理文本行的程序就那么简单,可是却容易忘记了末尾的换行符。原本我想得到的是一个 "foobar" 的字符串,结果得到了 "foobar\n" 我还浑然不觉,继续处理,到最后结果完全出乎意料。

下次一定要记住,读入的文本行包含了换行符,如果必要的话,调用 strip 将它剔除!其实我觉得好像大多数情况下都不需要末尾的换行符,也许读取行的函数默认剔除换行符更加方便一些呢! :)

rmmseg-cpp 0.2.6 & pymmseg-cpp 1.0.1

Thursday, August 14th, 2008

上一篇文章中我说了 pymmseg-cpp 在 Windows 下无法正常工作的事情,经过一番折腾,现在终于能正常运行了。于是我发布了 1.0.1 版,并在 google code 申请了一个 project ,用于存放 release 包:pymmseg-cpp 在 google code 的项目主页

另外,在 github 上看到 nasi 将 rmmseg-cpp fork 了一下并对编译脚本针对 Mac OSX 进行了一点修改,便把补丁添加进来了。我身边也不好找 Mac 的机器,不过 ashchan 告诉我说打过这个补丁之后在 Mac 下挂起的问题解决掉了。于是我便顺便发布了一个 rmmseg-cpp 的新版本,没有其他改动,非 Mac 的用户不必升级。

再回过头来看看一开始 pymmseg-cpp 无法在 Windows 上工作的问题,有一个原因看起来是 C 和 C++ 之间的瓜葛,原来我写的 C 包装层大概像这个样子:

Read the rest of this page »

pymmseg-cpp: rmmseg-cpp with Python interface

Thursday, August 14th, 2008

以前为了提高 RMMSeg 的性能,我写了 rmmseg-cpp ,根据 JavaEye 一段时间的使用情况来看,似乎挺稳定的,性能也很不错。其实 rmmseg-cpp 虽然名字里面有一个 “r” 字,但是算法核心完全是用 C++ 做的,最后才加了一层 Ruby 的接口包装。正巧最近我又两个用 Python 的项目都要用到中文分词,便决定给 rmmseg-cpp 加一个 Python 的接口。

正如我在 On the Rubinius FFI 一文中描述的一样,做到 Native 模块的接口有两种方法,一种是我在 rmmseg-cpp 中用的写 C 代码来粘合二者。另一种则是直接用语言提供的 FFI 接口,写 Python 代码来粘合。也可以算是各有各的好处吧,不过这里用 FFI 有一个很吸引我的地方就是粘合代码不用进行编译。如果用 C 来写粘合代码的话,需要用编译 Python 解释器相同的编译环境下加上 Python 的源代码(至少是头文件)一起编译,在 Linux 下倒是挺方便的,但是在 Windows 下可以说是相当麻烦,这似乎也是 rmmseg-cpp 一直不支持 Windows 平台的原因。但是如果用 FFI 来写粘合代码的话,就只需要单独编译原本的 Native 模块。编译一个标准的 C/C++ 模块和编译一个依赖于 Python/Ruby 源代码/头文件的模块是不一样的,这样的任务即使在 Windows 下也可以很方便地完成。

Read the rest of this page »

为 blog 添加了回复提醒插件

Tuesday, August 5th, 2008

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

立马装上,自己先测试一下。 :D

Notes: How to make a patch

Friday, August 1st, 2008

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

diff -u original new > original.patch

希望自己能记住,就算记不住也能方便地在此查到。 :)

Read the rest of this page »