Daemon

使用Proc::Daemon可以把Perl脚本变成一个Daemon。用法很简单:

#!/usr/bin/perl
use Proc::Daemon;
Proc::Daemon::Init;
# your program goes here

我们可以做一个简单的测试,把下面的程序存为daemon.pl。

#!/usr/bin/perl
use Proc::Daemon;
Proc::Daemon::Init;
open LOG, ">/home/yourname/log";
print LOG "Process Id is $$.n";
close LOG;
sleep 100;

然后开两个shell,在一个shell里面运行perl daemon.pl,当再次出现提示符时,退出这个shell,换到另一个shell,从log文件里查看daemon的进程号,然后运行ps确认该进程仍在运行。

通常来讲daemon要一直运行,所以程序里应该有个类似死循环之类的结构,这里是一个真实的例子。

Playlist

虽然很少听歌,但还是收集了几十首mp3。投靠Linux阵营之后,一般使用xmms播放,偶尔也用mplayer,效果都还不错,唯一的遗憾是播放列表不能正常显示。

上个周末闲来无事,浏览CPAN,发现了几个操作mp3标签的module,顺手装上玩了一下,写了两个小程序,分别把id3v1和id2v2两种标签内容的编码从GBK转到UTF-8。第一个变化是在nautilus里面鼠标右键=>属性=>音频tab页上能够正确显示标签内容,其次,在totem和bmp里面也能正确显示,xmms还是没搞定。由于totem退出时总是报异常出来,我就选择bmp了。

奇怪的是,在公司的电脑上只有bmp能正常显示,其它的都不行了。所以,如果您要尝试这两个脚本,最好先备份您的mp3,本人不对任何运行结果负责!:-(

由于前面有使用Encode的经验,这次主要是学习mp3标签的知识以及相应module的使用方法。两个脚本的功能如下:

getmp3info
显示id3v1格式的标签,并(可选的)能够将其内容的编码从GBK转为UTF-8。使用MP3::Info。
mp3tagconvert
显示id3v2格式的标签,以及编码转换。使用MP3::Tag。

两个程序的选项是一样的,用法如下:(仅以getmp3info为例)

# 查看id3v1格式标签,如能正常显示,说明编码为UTF-8。
$ getmp3info 1.mp3
# 查看id3v1格式标签,如能正常显示,说明编码为GBK
$ getmp3info --gbk 1.mp3
# 遇到混合编码,可以使用x选项禁止对某个或某些内容做编码转换。
$ getmp3info --gbk --x TITLE --x ARTIST 1.mp3
# 编码转换
$ getmp3info --convert --x TITLE --x ARTIST 1.mp3

其实,播放列表对我这种不常听歌(而且很少更新)的人作用不大,就那几首老歌,熟门熟路的。对于歌迷来说,作用也有限,新歌混熟了之后谁还需要这玩意?!可在某些情况下,它却成了像我这样的End User选择播放软件的重要标准!bmp就这样胜出了,至少是在我的机器上。然而,这样的选择标准是不是不够专业呢?作为一名程序员,我也会觉得用户有时的需求很怪异,为什么要把注意力放在一些无关紧要的事情上呢?处在不同的位置,会有不同的想法,典型的屁股决定脑袋!:-)