LinuxMCE 是一个类似 Widows 的 Media Center Edition 的软件包。目的是提供免费的集成的家庭媒体中心。目前只能安装在 Ubuntu 6.10 的系统上。完成安装后你的计算机就可以像一台超级电视机一样,上电就可以用。当然它的功能不局限于播放媒体文件,貌似是要整合所有的家电,让你的家成为智能住宅。
但是很遗憾,我没能安装起来,看上去可能是安装脚本的问题。不过这个不是我要说的,一番好奇,展开了下面的探索之旅:
安装需要一张 Linux MCE 的光盘,并下载一个 installer 的包。安装这个 deb 包之后,在桌面上就出现了 Install Linux MCE 的快捷方式,图标是一个红色的光盘。其实说快捷方式不够准确:
lrwxrwxrwx 1 root root 46 2007-03-27 16:25 mce-installer.desktop -> /usr/share/mce-installer/mce-installer.desktop
显然,这个安装包的东西都放在了 /usr/share/mce-installer 下面:
$ cd /usr/share/mce-installer/
$ ls
mce-installer.desktop mce-installer.sh
为什么桌面的那个图标显示那样的光盘,这是因为这是一个 Gnome 的配置文件:
$ cat mce-installer.desktop
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=Install Linux MCE
Comment=Install Linux MCE Media Center
Exec=gksu /usr/share/mce-installer/mce-installer.sh
Icon=/usr/share/pixmaps/gnome-cd.png
StartupNotify=false
Terminal=false
Type=Application
Categories=GNOME;Application;Audio;Music;Player;AudioVideo;X-Ximian-Main;X-Novell-Main;X-Red-Hat-Base;
所以以后自己也可以做这些类似的事情。我记得 windows 下面的快捷方式也是类似这样的配置文件。
再来看那个 mce-installer.sh 。运行的时候它会开始一个图形界面的窗口向导,这是怎么做到的呢?我知道 GUI 的部分应该是 Python 写的,不过这个脚本展示了一些我原来不了解的东西。先来看看它的内容:
#!/bin/bash
exec &>/dev/null </dev/null
export DISPLAY=:0
echo ""
echo "Linux MCE Installer Starting ... please wait"
echo ""
# create a temp directory to extract to.
export WRKDIR=`mktemp -d /tmp/selfextract.XXXXXX`
SKIP=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0`
# Take the TGZ portion of this file and pipe it to tar.
tail -n +$SKIP $0 | tar xz -C $WRKDIR
# execute the installation script
PREV=`pwd`
cd $WRKDIR
./mce-installer
# delete the temp files
cd $PREV
rm -rf $WRKDIR
exit 0
__ARCHIVE_FOLLOWS__
...
最后省略号的部分是二进制的数据,而 __ARCHIVE_FOLLOWS__ 表征分割线,见该行:
SKIP=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0`
$0 就是这个脚本自己的文件名,用 awk 取出匹配分割线的这一行,然后输出下一行的行号,行号保存到 $SKIP 变量中,然后呢:
$ tail -n +$SKIP $0 | tar xz -C $WRKDIR
它用 tail 命令取出自己脚本中第 $SKIP 行及其后的文件内容,通过管道转给 tar 命令解压缩到指定目录。这时候我知道原来后面的数据是一个 .tar 压缩包。为什么不用一个独立的外部的 .tar 文件呢?我想单一文件的安装程序更方便,也更酷,就像 .exe 或者 .msi 文件一样。
那个安装目录 $WRKDIR 早在之前就定义好了:
export WRKDIR=`mktemp -d /tmp/selfextract.XXXXXX`
不过看起来有点奇怪,目录名称中的一串 X 看上去像是模板,仔细往回看,原来是用 mktemp 创建目录,没见过的命令,查 man 文档:
mktemp -- make temporary file name (unique)
所以这里的 temp 不是 template 而是 temporary ,不过所要创建的文件或者目录确实可以用模板的形式:只有末尾的连续 X 才被替换为随机的字串,目的是要创建一个不重名的临时文件或者目录。不错,又学了一招。
接下来的事情毫无悬念,到那个安装目录, 执行真正的安装程序。完成之后删除那个临时目录,结束。
看起来很简单,不过着实满有趣的,略富技巧性的实现。
Published on March 28, 2007 1:56 pm.
Filed under: 东拉西扯 Tags: awk, bash, linuxmce, mktemp, tail, ubuntu
看了 Linux MCE 的介绍,免不了心痒想玩玩。于是用 screen 在服务器上以缓慢的速度从美国站点下载,到了家再快速下载到本地。下来的是 iso 镜像文件。以前在 Windows 里面一直用 Nero,可我不想切换过去,于是第一个想法是,在菜单的“添加/删除”中搜索相关的软件。找了一个,装上了,可以选择从镜像文件刻录,可刚开始就报错。让我看 vodim dev=help,可我哪懂这些啊,于是再 Google,看到一篇文章,说只要三步。而这三步中的两步是作者有意加上的根本可以不算的步骤,强烈的反衬出这关键的一步其实是多么的简单:右键点击 iso 文件,选择写入光盘,点击刻录按钮。
这似乎简单得让我吃惊。然后是感叹。妈的,真他妈容易啊!比傻瓜还傻瓜。
同时发现,Ubuntu 7.04 中从“位置”菜单可选择制作光盘,然后出现的是和文件浏览器类似的界面,你要做得就是把要刻录的文件目录在其中组织好,最后点击上方黄色背景栏中的“写入”按钮。这又是一件多么朴素而自然的操作方式啊!
Published on March 28, 2007 10:16 am.
Filed under: 东拉西扯 Tags: iso, linuxmce, nero, ubuntu
周六中午在松江去上海的车上竟然碰到了素未谋面的大智若鱼,简直是巧之又巧。要知道,春节过后我也还是第一次回松江,碰到大智若鱼是在车的最后一排隔一个位子,而她也只是去加班,并且平时并不是走这条线路。而若只是我一个人在的话,大智若鱼也未必会肯定的认出来,同时看到了我老婆和我,还有我妈,大鱼才招呼我们。我当时还在想,一定是哪位小学同学,但以我对童年的好记性,不应该不认识这位阿,一秒钟后她唤出我老婆的名字,就更加另我困惑了,若不是大鱼自己介绍,我怎么都想不到是这位从未谋面的朋友。我老婆当时心里还嘲笑我,连自己同学都不认识,后来听到叫自己名字,傻掉。
所以一路上,我们都非常愉快的有说有笑,直叹世界之笑。原本大鱼要给我的小礼物我一直都没有刻意去要,却没有想到以这样一种方式会面,所以,随遇而安了,才有机缘体会这种邂逅的喜悦。
Published on March 26, 2007 9:59 am.
Filed under: 东拉西扯
从论坛看到了推荐,下了很久一直没有看,担心太过纷杂会半途而废。今天终于鼓起勇气花了两个多小时看完了这部影片。看之前我是不知道背景的,只知道可能会比较有意思。看到前三分之二的时候,线索还比较清楚,到后面突然就纷乱起来,人物的名称位置变化,一度让我揣测是否人格分裂。但很快这种猜测被推翻,因为对照开始的情节,这不合理。及至最后,简直无法拼凑一个合理的解释。特别是半夜起来看莫名的剧团演出,并且一同哭泣,莫名的拿到一个神秘的蓝盒子。老实说,我看不懂。我可不想像皇帝的新衣一样。看完的时候很郁闷。我总希望任何事情都能有一个合理的解释,可是《穆赫兰道》并没有如此。
怀着不安而焦躁的心情,我找了些评论文字,也没多看,大体读了周黎明先生的这篇文章,觉得似乎找到点门道了。自然我是不明白很多幕后的,学究的,深层次的东西的,所以无法自己得出这样的理解也是很自然的事情,要不然人家怎么做专业的影评呢。不过多少这种文字的概括对于理解这样类型的片子很有帮助,甚至不可缺失。很多时候,电影只是用来娱乐和消遣,让人看得明白成了基本的要素,然而还是有很多人是把电影作为一种表达手段,所以像《穆赫兰道》本身也就是想要让人在纷杂中体会表达者内心的纷杂。人物角色的变化和叙事结构的交叉循环,也一定程度上表达或者暗示着另一种相似的现实。反正我是当作开阔视野来看的。
及至晚上随便阅读沈大成的文章的时候,突然发现她也提到了周黎明。这应该不是巧合,只不过因为刚读过周先生的文章,所以才会注意这个名字的再次出现。这时候我在想,专业的作影评的还真不容易,特别像要解读这类形式和内容都很晦涩的电影。除了懂得电影的专业知识以外,对产业和故事的人文背景也都需要有深刻的理解,并且能有很好的驾驭文字的能力,实在不是我等庸俗之辈可及。不过我想,从现在起,我开始意识到,看影评该是和看电影同样重要甚至更为重要的一件事。开拓视野,更多的思考,才是看电影带来的乐趣。
Published on March 25, 2007 10:17 pm.
Filed under: 东拉西扯
这是严格意义上的测试驱动,这是一个里程碑。
虽然以前也写过一些用于测试的代码,大都仅以模拟使用的形式编写,类似那些 example code。仔细想想,我也写过正规的测试代码,不过那是在发布模块的时候照葫芦画瓢弄了几个。而这次,是真正的出于自己的需求,并在测试案例的帮助下修正未期遇到的 bug。与此同时的另一个原因是,如果我不用测试驱动开发,就只会落得一团糟、剪不断理还乱的境地。所以这次测试驱动是以一个救世主的身份来到了我的身边。
虽然很早之前就有这个概念,也知道测试驱动的重要性,但真正体会到它的魅力和震撼却只在今天。这多少缘于最近在看《Perl Testing – A Developer’s Notebook》一书这件事的影响。虽然今天的测试案例还只是仅限于 ok() 和 is()。
每写下一个测试案例,然后再写代码去完成或者修正它,最后看到结果中的一堆 ok 开头的测试结果,我的内心就充满了无比的信心。有时候是测试案例本身的问题,但更多是代码没有顾全的原因。当增补一条测试的时候,所作的修正可能会引发之前那些已经通过的测试重又失败。这正是测试的魅力。你永远可以不用摇摇摆摆兜圈子走路,你的身边始终有着盏盏明灯指引方向,告诉你当前的局势。你就可以坦然的镇定的从容的解决那些旁生出来的问题。当一切重新变成整齐划一的 ok 的时候,内心就会无比喜悦。当有新的 bug 被发现后,我所做得就是增加一个对应的测试案例,并使之通过,然后就可以骄傲的说,让暴风雨来得更猛烈些吧。
我觉得自己很酷~
Published on March 23, 2007 6:16 pm.
Filed under: 东拉西扯 Tags: perl, tdd, test, translate
开发环境需要这个模块,可在我的 Ubuntu 上安装时出错,看了文档知道这是一个对 file-4.* 这个程序的封装。于是下载下来 configure,居然报告:
c compiler cannot create executables
解决办法是:
$ sudo apt-get install gcc libc6-dev
然后:
cd file-4.20
./configure
make
make install
cpan install File::LibMagic
我原先就已经有了 gcc 不过没有 libc6-dev 。为什么 Ubuntu 没有对应的 package 可以用呢?以后有空看看怎么自己做,呵呵。
Published on March 23, 2007 5:40 pm.
Filed under: 东拉西扯 Tags: cpan, file-libmagic, gcc, ubuntu
之前优化过 Ubuntu 字体之后,在阅繁体中文的邮件时依然使用了原先默认的字体,所以连带上次的设置过程和这次的繁体字体设置一并归纳如下,以后再要装系统就不用到处找了。
首先下载字体文件,简体中文用 STHeiti.ttf 繁体中文用 LiHeiPro.otf 英文用 Lucida Grande 。中文都是 Mac 里面的黑体字。出于版权的关系,这里不提供下载连接。
由于 LiHeiPro.otf 是 Open Ture Type 的字体,不是 TTF ,所以系统不能直接使用,我们需要转换一下。保存下面的内容到 otf2ttf.sh 文件中:
#!/usr/bin/fontforge
# Quick and dirty hack: converts a font to truetype (.ttf)
Print("Opening "+$1);
Open($1);
Print("Saving "+$1:r+".ttf");
Generate($1:r+".ttf");
Quit(0);
当然你需要保证 fontforge 已经安装,并且上述脚本第一行的路径和实际的相同,并为该脚本增加可执行的属性:
$ sudo apt-get install fontforge
$ chmod +x otf2ttf.sh
然后运行该脚本转换字体,以下是在我系统上的输出,虽然有两句貌似警告的话,不过不影响使用:
$ otf2ttf.sh LiHeiPro.otf
Copyright (c) 2000-2006 by George Williams.
Executable based on sources from 15:48 3-Jul-2006.
Opening LiHeiPro.otf
Unknown GSUB sub-table type: 0
Unknown GSUB sub-table type: 0
Saving LiHeiPro.ttf
恭喜,你已经得到了 LiHeiPro.ttf 文件。
第二步,复制这些 ttf 字体文件到 /usr/share/fonts/truetype 目录中。当然也可以放到用户主目录的 ~/.fonts 目录中,只要 fc-cache 找得到。
第三步,刷新字体数据的缓存:
这时候,应该可以在菜单-首选项-字体中可以可以看到有这三种字体。
第四步,配置字体的使用。编辑 /etc/fonts/language-selector.conf 文件,分别找到下面两行:
<family>Bitstream Vera Serif</family>
...
<family>Bitstream Vera Sans</family>
各在下面添加:
<family>STHeiti</family>
<family>LiHeiPro</family>
这使得系统采取一定的次序选择要渲染的字体。英文简体繁体混杂的时候,就可以分别用 Lucida Granda 和 STHeiti 和 LiHeiPro 来渲染,以达到最佳效果。
第五步,调整中文渲染效果。菜单-首选项-字体-细节中如果使用微调,中文字因为笔画多,容易模糊,但如果关掉微调,英文字又会很难看,所以我们需要全局打开微调,然后针对中文字体关掉微调,使用 hinting 配置参数。打开 /etc/fonts/fonts.conf 文件,找到类似结构的地方添加:
<match target="font">
<test name="family">
<string>STHeiti</string>
</test>
<edit name="hinting">
<bool>false</bool>
</edit>
</match>
<match target="font">
<test name="family">
<string>LiHeiPro</string>
</test>
<edit name="hinting">
<bool>false</bool>
</edit>
</match>
重新启动 X 。可以用快捷键:Ctrl+Alt+Backspace。
第六步,设置菜单-首选项-字体。除了最后的等宽字体不用变之外,其他的都可以选择 Lucida Grande 字体。然后尝试调整细节,取得自己最满意的效果。
大功告成!
Published on March 22, 2007 9:48 am.
Filed under: 东拉西扯 Tags: font, otf, ttf, ubuntu
无聊地看电视,发现正在介绍一部科幻电影,可没打出来片子的名字是什么,看样子是已经引进的。于是出门去四平电影院看看,刚到门口便看到它的海报,中文名字很俗气,原名叫 DejaVu。看到这个名字的一刹那,我内心哦了一下,好像在 verycd.com 上看到过,当时也没在意。电影院要 20 日开始放,我也不着急,回家下载高清的慢慢享受。
DejaVu 一看就知道是个法语的词,貌似很酷的样子。Google 一下,原来就是似曾相识的意思。似曾相识!
小学的时候,我就一直有这种感觉,比如上课到一半的时候,突然强烈的感觉到老师正在说的话,以前听到过,那么熟悉,而且当时的光线,风,声音的语调,周遭的环境也都仿佛是曾经经历过一般。一般持续的时间比较短,但如果有一秒钟的话,自己会体会到这一秒似乎被拉长了好多倍,像是在慢镜头中经历一般。小时候喜欢乱想,为了能有个合理的解释,就猜想一定上辈子经历过这些。后来想想上辈子这种事情太玄,于是猜想可能现在已经快要老死了,死前的片刻不断往复一生的经历,现在的一切都是大脑中缓慢的重放,所以会有似曾相识的感觉。倒也不怕死,反正现在感觉不到,慢慢地再活一次也没什么太过令人担心的。
到五六年级的时候,我发现妈妈也说有过这种感觉,于是开始问周围的同学,令我惊讶的是,几乎每一个人都说有过这种体验!我很是兴奋,像是马上就能拿什么诺贝尔奖似的。可当时没有什么互联网,除了图书馆的一些浅显的书之外,我只能一个人胡思乱想。到很后来的时候,不知道从什么地方听说这是个很著名的心理现象。加之越来越清晰地认识到进化的本质和对大脑的了解,现在我已经不觉得这有什么特别了。不过这种体验确实很特别,似乎年龄增长之后少了很多。
Published on March 20, 2007 9:07 am.
Filed under: 东拉西扯
在优化字体使用 Mac 上的 STheiti 和 Lucida Grande 之后,想要 be cool 的我实在耐不住尝试 Beryl 的冲动。原本以为会不太顺利,要修改很多配置文件,还可能会出现意外,不过竟然一路绿灯,爽得不行!
公司的电脑配置还算满不错的,显卡是板载的 Interl 915G 芯片组的,所以参考这篇帖子后,短短的几分钟就大功告成。
简单来说,就是这样:
echo 'deb http://www.beerorkid.com/compiz edgy main-edgy' >> /etc/apt/sources.list
wget http://www.beerorkid.com/compiz/quinn.key.asc -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install beryl-core beryl-plugins beryl-plugins-data \\
emerald beryl-settings beryl-manager beryl beryl-dev emerald-themes
然后到菜单:系统->首选项->会话->启动程序,添加 /usr/bin/beryl-manager 如此启动的时候就用 Beryl 窗口管理器。然后重启。当然我用的是 Ubuntu 6.10。
然后试着按照这里的介绍玩玩看!当然也可以自己设定快捷键。
遗憾的是,我原来用 win 键关联打开一个终端窗口,现在不能用了,因为 Beryl 使用了很多 win 开头的键,暂时还没什么好的解决办法。
我一直欣赏 Apple 的风格,曾经一度想着要入手一台 Apple 机器,不过实在是太贵了,我也不是有钱消受的人。不过现在有了 Ubuntu,什么 Vista, Apple, Mac 都不重要了。
Published on March 16, 2007 11:26 am.
Filed under: 东拉西扯 Tags: apple, beryl, ubuntu
虽然有 screen 可以用,不过在本地机器上还是喜欢开终端窗口。为了区别,我使用 Menu 键快捷设置标题。但是每次都去手工做这些事情,未免繁琐。我希望每个终端在做特定的事情的时候,自动给自己设置一个标题。参考这篇邮件之后,大致归纳如下:
在 bash 下面:
export PROMPT_COMMAND='echo -ne "\\033]2;Chunzi\\007"'
在 sh 下面:
echo "\\033]2;Chunzi\\007"
坦白说,我不知其所以然,管用就好。看上去回显一段带有控制符的文本就行。也不会影响当前的 shell 提示符。什么时候了解了内中机理再说。
Published on March 15, 2007 11:22 am.
Filed under: 东拉西扯 Tags: bash, screen