Thursday, April 20, 2006

DBIx::Class和DBI

今天在更新安装DBIx::Class 0.06001的时候,make test在测试关于cache的地方失败了。
究其原因,是因为测试cache是依赖于DBI的Trace Output的。而DBI 1.40在TraceLevel 1下,输出的内容有些问题,并且在DBI 1.43中得到了修正:
- Changes in DBI 1.43 (svn rev 377), 2nd July 2004
* Changed TraceLevel 1 to not show recursive/nested calls.

奇怪的是,在比较DBI 1.40的TraceLevel 1和TraceLevel 2的输出文件后,发现在TraceLevel 1下,输出的是recursive/nested calls的最后一句,不过这一点并没有在Changes中被提到。但是在逐版本安装测试1.42和1.43后,我确认这个问题是在1.43中修正了的。
已经把问题提交到了Dbix-class ML了,估计应该会在下一版本修正。

Saturday, April 01, 2006

如何正确设置svn仓库权限

在多用户环境下,如果你使用的是Berkeley DB作为后端,那么你多半遇到过这样的错误:
Berkeley DB error while opening environment for filesystem ...
DB_RUNRECOVERY: Fatal error, run database recovery

为了解决这个问题还是费了我不少功夫,所以这里小小地归纳一下。
首先每一个用户都需要有BDB文件的读写权限,所以通常情况下我们会创建一个用户组G,然后把所有用户都加入到G中,并且会把整个仓库的组设为G。但是,因为用户在操作BDB的时候会创建新文件,而这时使用的umask一般是022,即组用户没有写权限。此后,当其他用户试图操作该文件的时候就会发生上面的错误。
在svn的How-to文档中建议尽量避免多用户访问仓库,但是如果使用的是file:///或者svn+ssh://的话就完全没办法绕开了。于是《Version Control with Subversion》一书的第6章第5节中另外提供了一个解决方案:
$ cat /usr/local/bin/svn

#!/bin/sh

umask 002
/usr/local/subversion/bin/svn "$@"

即手动包装一下svn,在执行命令之前将umask改为002,问题就这样解决了。
svn作为新一代的版本控制系统,对于这样一个显然客观存在的问题竟然没有一个较好的解决方案,实在是令我吃惊不小。

Friday, March 31, 2006

《Learning Perl》

在国内很久没见过Perl的新书了,总算来了一本。《Perl语言入门(第4版)》,可惜是影印版。很多人都觉得影印版才好,原汁原味。不过我比较偏爱中文版,图个方便,翻看起来利索。
手头有中文的第3版,也是我Perl的启蒙老师,确实不错。第4版估摸着也差不多,差别是更加与时俱进,要不要也买一本呢,呵呵~

Friday, March 17, 2006

Moose

昨天看到的新模块,自我描述是Perl5 OO系统的一个扩展。
注目点
1、在类定义中可以很方便地声明属性的读写权限
2、在子类中可以定义父类方法的绑定方法
例:after 'a' => sub {}
意为在执行方法a之后,绑定执行sub {}。和NEXT有那么点像。
看着会是个挺有意思的东东,关注。

Thursday, March 16, 2006

《Intermediate Perl》

《Learning Perl Objects, References, and Modules》 的第二版,主要是增加了一些关于测试和CPAN的章节。
虽然连第一版都没好好看过,不过对Perl的新书还是很感兴趣的,最想看到的就是中文版。看着省力,就算翻译质量一般般。
不过回想想,手头有的不少是对折书,中文版看起来是比较难了……

其实我是一个程序员

俗话说,好记性不如烂笔头,所以,占块地儿,动动手。
懂的,不懂的,都写下来;想到的,悟到的,都记下来。
^_^