八月 30, 2008

Video podcast

玩了一阵子podcast,每天中午听一点英语,顺便还能学习一点知识,感觉挺好的。但是人没有满足的时候,现在又开始玩video podcast。开始的时候还为使用什么软件发愁,后来想起曾经用过的Miro

Miro既有Linux版,也有Windows版,支持OPML导入导出。我在podcast.com上找了几个,先看着,以后再去发掘。

八月 26, 2008

Greasemonkey script for gitorious

gitorious提供了查看文件的功能,但是我发现只有第一层目录下的文件可以看,深层目录下的文件都不能看,会发生404 not found错误。论坛里也有人遇到同样的问题。因为不懂Rails,尝试apache mod_rewrite也以失败告终,没法子,自己写了一个greasemonkey脚本,把链接修改过来。

// ==UserScript==
// @name           Unescape Slash
// @namespace      http://example.com/projects/
// @include        http://example.com/projects/*
// ==/UserScript==

var allNodeFile, thisNodeFile, a;
allNodeFile = document.getElementsByClassName('node file');
thisNodeFile = 0;
for (var i = 0; i < allNodeFile.length; ++i) {
    thisNodeFile = allNodeFile[i];
    a = thisNodeFile.firstChild;
    a.href = a.href.replace(/%2F/g, '/');
}

八月 22, 2008

gitorious

在领导和乡亲们的大力支持下,我们开始在项目组里推广git,为了方便大家使用,很希望有一个类似github之类的东西,可惜github不是开源软件。后来找到了gitorious,一个基于rails的应用。

以前从没接触过rails,第一次部署rails应用,感觉头很大,gitorious还没有一个详细的部署文档,只好硬着头皮自己来,网上搜索了一大堆资料,最终成功的搭建起来。

首先创建一个用户git,如果选择其它用户名会导致更多步骤来配置gitorious,所以没有特殊原因,尽量使用这个用户名。以下操作均以该用户操作,除非显示地使用了sudo

在局域网里搭建gitorious需要安装的软件有apache, mysql, sendmail, ruby, rubygems, imagemagick, sphinx, apg和aspell等应用程序,另外还需要libmagick9-dev, libmysqlclient15-dev, libmysqlclient15off, libonig2, libonig-dev, libaspell-dev等程序库。装好rubygems之后最好更新一下,否则可能出现错误,方法是:

$ sudo gem update --system

现在可以安装所有需要的gem了,

$ sudo gem install rake rails BlueCloth mime-types oniguruma textpow chronic rmagick ruby-openid mysql raspell ultrasphinx ruby-yadis mongrel mongrel_cluster

接下来将gitorious/config下面的gitorious.sample.yml和database.sample.yml分别复制一份,名字改为gitorious.yml和database.yml。然后运行

$ apg -m 64

随便选择一行输出,替换掉gitorious.yml文件的cookie_secret字段的值。这一步一定要做,否则会出现500错误。如果想用sendmail发邮件,在config/environments/production.rb文件里添加一行config.action_mailer.delivery_method = :sendmail。接下来创建数据库,

$ mysql -u root
> create database gitorious_production;
> exit

接下来创建需要的表

rake db:migrate RAILS_ENV=production

如果找不到rake的话可以试试ruby /var/lib/gems/1.8/gems/rake-0.8.1/bin/rake。这时如果出现找不到/tmp/mysql.sock错误,把database.yml文件里面的localhost换成127.0.0.1。然后运行

$ ./script/server -e production

当server起来之后,尝试访问http://0.0.0.0:3000/,如果成功看到首页,那么就成功了。按CTRL+C退出。

下面添加搜索功能,

$ cp vendor/plugins/ultrasphinx/examples/default.base config/ultrasphinx/

然后把default.base里面的path改为#{RAILS_ROOT}/db/sphinx/,把vendor/plugins/ultrasphinx/tasks/ultrasphinx.base文件里面包围#{Ultrasphinx::CONF_PATH}的单引号去掉,一共三处。再运行

$ rake ultrasphinx:configure RAILS_ENV=production
$ rake ultrasphinx:index RAILS_ENV=production
$ rake ultrasphinx:daemon:start RAILS_ENV=production

重新启动server,搜索功能就在了。注册一个帐号,收到激活邮件,激活帐号,成功。

不过如果真想让gitorious干活的话还要配置两个cron job

$ mkdir /path/to/gitorious/public/images/graphs
$ crontab -e

内容为:

*/5 * * * * /path/to/gitorious/script/task_performer
*/17 * * * * /path/to/gitorious/script/graph_generator

时间长短随意定,我选择5分钟运行一次task_performer,另外还要做的一件事是

$ sudo ln -s /path/to/gitorious/script/gitorious /bin/gitorious

但是,如果想给其他人使用的话,http://0.0.0.0:3000/这样的东西是拿不出手的,为此我们需要使用apache做一个reverse proxy server。首先打开mod_proxy,

$ sudo a2enmod proxy_http

然后添加一个配置文件gitorious.conf

<IfModule mod_proxy.c>
    ProxyRequests Off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://0.0.0.0:3000/
    ProxyPassReverse / http://0.0.0.0:3000/
</IfModule>

重启apache,用域名访问,如http://example.com/,如果发现没有css和image,确认一下gitorious.conf里面的http://0.0.0.0:3000/结尾的"/"是否在,没有的话,加上它。重启apache再试一下。

最后还需要一点配置,使用户可以做git clone。启动git-daemon,

$ ./script/git-daemon

这样用户就可以使用git clone git://...了,为了能够通过http方式clone,还要配置二级域名,如http://git.example.com,指向#{repository_base_path}所在的路径,也可以使用http://example.com/git/的方式,但是要修改app/models/repository.rb:69spec/models/repository_spec.rb:75

如果使用gitorious的人比较多的话可以配置mongrel cluster,具体参见Deploying Rails Applications

部分参考资料:

八月 18, 2008

Upgrade n800 to diablo

Nokia N800上最新的系统是diablo,和著名的blizzard公司的游戏同名。升级需要reflash,无法在线升级,不过升级到diablo之后就可以在线升级了,无需每次reflash。

升级之前想着要备份,但是想当然的以为备份是在PC上的Nokia软件里,结果没有备份。:-(

实际上,备份是在N800里面,结果周末花了很多时间重新安装配置软件。

八月 14, 2008

Interactive git rebase

胆战心惊地尝试了一把git rebase --interactive,把以前的commit message修改了一下。一直习惯用-m直接在命令行上写commit message,但是在git上有个小小的问题,就是用git log看的时候并不会自动换行,所以使用emacs的fill功能(M-q)美化一下格式,然后再提交。

当然,出了修改commit message、author之外,git rebase --interactive还可以做很多更夸张的事。

八月 10, 2008

Google doc

前两天发现我从Google doc上发布的帖子被屏蔽了,幸好Google绝大多数服务都支持https连接。所以如果出现链接被重置的情况,不妨试一下https。

八月 06, 2008

Programming makes me happy

一段漫长的低迷期总算过去了,自从能够静下心来看程序,心情便好起来了。同样的环境,同样的代码,不一样的心情,由消极变积极之后,不再有世界末日来临的感觉。当然,坏消息也有,老板离职了,因为个人原因回Intel工作。说起来我们组也很有意思,就像一个栈,先来的人压在下面,离职的时候后来的人先出栈,看看现在周围这几个人,仿彿又回到了几年前……

看别人写的代码有点抵触情绪,觉得很麻烦,不如索性自己重新写一个,当然如果是很大的程序没法重写,就拖着,能不看就不看。直到有一天拖不下去了,硬着头皮看下去,发现也还看得懂。

写程序能让我心情好起来,但是好像已经很久没有写了。应该养成个习惯,没事写两笔,就像写blog一样,即使只是为了心理健康。

八月 04, 2008

filecache

看同事使用source insight,只需输入文件名,source insight便可以找到并显示这个文件。看了sacha的Eclipse to Emacs: Navigating your source tree才知道在Emacs里面可以使用filecache达到相同的效果,如果搭配上ido,还会更加强大。也许是时候从iswitchb转到ido了。

下面是我的配置(忽略git相关目录及文件):

(require 'filecache)
(add-to-list 'file-cache-filter-regexps "\\.git\\>")
(file-cache-add-directory-recursively "/path/to/project")

filecache没有文档,只能看源文件头上的注释,不过已经足够了,本来也不是很复杂的东西。使用时有一个小窍门,在使用C-x C-f打开文件时,不用管前面的目录名是什么,直接在后面输入文件名,然后用C-TAB补全,目录名会自动被替换,无需手工删除。