Video podcast
玩了一阵子podcast,每天中午听一点英语,顺便还能学习一点知识,感觉挺好的。但是人没有满足的时候,现在又开始玩video podcast。开始的时候还为使用什么软件发愁,后来想起曾经用过的Miro。
Miro既有Linux版,也有Windows版,支持OPML导入导出。我在podcast.com上找了几个,先看着,以后再去发掘。
把开源进行到底!
玩了一阵子podcast,每天中午听一点英语,顺便还能学习一点知识,感觉挺好的。但是人没有满足的时候,现在又开始玩video podcast。开始的时候还为使用什么软件发愁,后来想起曾经用过的Miro。
Miro既有Linux版,也有Windows版,支持OPML导入导出。我在podcast.com上找了几个,先看着,以后再去发掘。
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, '/');
}
在领导和乡亲们的大力支持下,我们开始在项目组里推广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:69和spec/models/repository_spec.rb:75
如果使用gitorious的人比较多的话可以配置mongrel cluster,具体参见Deploying Rails Applications。
部分参考资料:
Nokia N800上最新的系统是diablo,和著名的blizzard公司的游戏同名。升级需要reflash,无法在线升级,不过升级到diablo之后就可以在线升级了,无需每次reflash。
升级之前想着要备份,但是想当然的以为备份是在PC上的Nokia软件里,结果没有备份。:-(
实际上,备份是在N800里面,结果周末花了很多时间重新安装配置软件。
胆战心惊地尝试了一把git rebase --interactive,把以前的commit message修改了一下。一直习惯用-m直接在命令行上写commit message,但是在git上有个小小的问题,就是用git log看的时候并不会自动换行,所以使用emacs的fill功能(M-q)美化一下格式,然后再提交。
当然,出了修改commit message、author之外,git rebase --interactive还可以做很多更夸张的事。
一段漫长的低迷期总算过去了,自从能够静下心来看程序,心情便好起来了。同样的环境,同样的代码,不一样的心情,由消极变积极之后,不再有世界末日来临的感觉。当然,坏消息也有,老板离职了,因为个人原因回Intel工作。说起来我们组也很有意思,就像一个栈,先来的人压在下面,离职的时候后来的人先出栈,看看现在周围这几个人,仿彿又回到了几年前……
看别人写的代码有点抵触情绪,觉得很麻烦,不如索性自己重新写一个,当然如果是很大的程序没法重写,就拖着,能不看就不看。直到有一天拖不下去了,硬着头皮看下去,发现也还看得懂。
写程序能让我心情好起来,但是好像已经很久没有写了。应该养成个习惯,没事写两笔,就像写blog一样,即使只是为了心理健康。
看同事使用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补全,目录名会自动被替换,无需手工删除。