2006年12月25日星期一

Why UTF-8 Sucks

Linux应该用哪一种locale,这还用得着问么,当然是UTF-8。如果在充满愤青的开源论坛上对此提出异议,那你就等着被拍吧。不过我还是有些不同的意见,而且标题为“Why XXX Sucks”的文章看多了,感觉这个句式挺爽,所以今天试着说说,为什么UTF-8也sucks。

首先,使用UTF-8保存文本,会使字节数膨胀。具体增加值根据文本类型会有所不同,对于中文用户而言,UTF-8文件尺寸约为GBK内码的1.5倍。在存储成本越来越低的今天,这的确有点鸡蛋里边挑骨头的味道,所以放在第一个说。

其次,排序方法不符合用户习惯。虽然我没有找到可靠的资料说明Unicode采用了怎样的编码顺序,但翻阅Unicode的码表可以看出,应该是主要采用了笔画序。如果你也像我一样有很多mp3文件,以演唱者为目录名分类存放,你就知道那有多痛苦了。类似的问题其实很容易遇到,例如通讯录中的联系人名单等。

第三,存在不定宽度字符。有一些字符,比如欧元符号、摄氏度符号等,在各种编码中都有定义。传统上中日韩地区将这些字符表示为全宽字符,而其他地区则将这些字符表示为半宽字符。Unicode将这类字符称为Ambiguous,并有文档说明如何处理这些字符。

Ambiguous字符在拉丁语系用户眼里,跟半宽字符是一样的东西,而且还有些“特别的好处”,于是有意将一些文本中半宽字符转用Ambiguous字符表示。而这样的文本在CJK用户看来,就是一塌糊涂。Wordpress不经修改会出现标点符号错误,就是这个原因造成的。

上文提及的三个问题,除了第一个外,其实都有解决的办法。Linux的locale除了指定内码外,还包括语言相关的很多内容,如日期、时间、数字格式等,其中LC_COLLATE就与文字排序有关。不过打开/usr/share/i18n/locales/zh_CN(系统不同位置也可能不同)看看,中文并没有特别制订自己的排序方法,而是直接照搬了ISO14651,跟Unicode内码排序差不多。

至于第三个问题,纯属非CJK地区开发者只图自己方便搞出来的。用Ambiguous字符替换原始字符,不但看起来一样,而且还避免了诸如SQL注入、嵌入非法脚本等问题,简单方便。类似问题也存在于VIM中,VIM有一个参数ambiwidth,默认值为singe。如果将encoding设置为utf-8,并且不修改ambiwidth的设置,对中文引号等字符的描绘就会出问题。

Unicode是为了解决国际化信息交换和处理而出现的,其立志成为所有编码的超集,所以不可能照顾到所有国家和地区的用户习惯。

例如编码顺序的问题,1980年制定的GB2312将汉字分为常用汉字和次级汉字,常用汉字3755个,按照拼音辅以笔形顺序排列,次级汉字3008个,按笔画部首排序。读音依据的是普通话审音委员会发布的文件,而字形则有文化部和文字改革委员会负责。

而Unicode就不可能采用这样的排序方法了,同一个字中文和日文读音不同,甚至大陆和台湾的读音也不同。于是只好用笔画偏旁序,一种机械而折中的方案。

即使采用这种方法,编码制定过程中也大有可吵之处。经过不同国家和地区的使用及演变,一个字的字形可能产生一些细微的变化。是不一样就收,还是有所取舍?取舍时以大陆的中文为准,还是以台湾的中文为准?是听中文的,还是听日文的?这不仅是文化的冲突,还可能牵涉政治问题。

由此可以得出结论,Unicode虽然是一个好东西,但仅有Unicode显然是不够的。一些语言相关的细节问题,商业软件有厂家负责(如MS-SQL就有完备的语言和排序规则),其他的就只能靠政府和我们自己了。只要国内开源社区真的能有所发展,如Wordpress标点符号等类似问题自然可以得到解决。

最后回到开篇那个命题,现下Linux应该使用哪一个locale?我个人的意见是zh_CN.gbk。GBK貌似过时,但其实该标准包含的汉字几乎等同于ISO10646的BMP(Basic Multilingual Plane),日常使用应该足够。而拥有良好国际化支持的程序,例如GVIM、Firefox,并不会因为locale而失去了阅读和处理其他编码的能力。除此以外,Opera、WINE等国际化支持不好的程序,使用zh_CN.gbk也能避免的掉很多莫名其妙的问题。

2006年12月14日星期四

更新小k

我的手机是索爱的k750i,起码几天前还是。这个手机用了有一年多,虽然我也没有特别珍惜爱护,可对我来说意义其实蛮特别的。拿回来的时候软件版本是R1J002,过不多久就有新版本出来了。当时小k虽然已经被破解,但非官方的刷机是要收钱的。而我的CDA是102337/1,在官网上升级有可能被刷成英文机,所以一直没动过。

前几天突然想起,上网随便逛了一下,发现小k已经被完全破解了。有个叫Darkmen的乌克兰人完成了破解小k的最后一步,他发布了一个FAR的插件SEFP,通过该插件可以对小k的内部文件和存储器进行直接操作,完成刷机所必须的“闭合”。这不过是今年6月4号的事情,可这几个月来国内外手机论坛都蛮热闹的,有关小k刷机改机的内容非常多。

仔细看了看,虽然单纯升级系统的意义不大,不过有几个补丁还是挺吸引人的。例如修改标点符号的排列顺序,把中文标点提前;对方接电话的时候震一下手机,可以提醒你;长按拍照键可以打开和关闭补光灯,当电筒用;去掉未签名java程序的警告等等。

为了这些功能,少不得又是一番折腾。升级的过程中了解到了不少东西,譬如说现在的移动QQ连视频都能用了,许多wap网站上还出现了色情小说之类的。最近正在进行3G测试,《经济观察报》也针对3G作了一期特稿,似乎3G马上就要来了的样子。就是不知道,什么时候手机上网才能便宜到实用的程度。

远的且不去想他,如今我的小k系统版本变成了R1DB001,型号也变成了k750c,涂上一笔留个纪念。

2006年12月11日星期一

Zooomr:年轻真好

过去一直在用flickr,前几天因为一个心血来潮的理由,集中体验了一下很热门的几个相册服务,包括Zooomr23hq、Zoto、PBase等等。虽然最后还是觉得flickr最好,而且Zooomr">连第二也排不到,不过仍然觉得这是个很有意思的地方。

这家站最被容易被人口口相传的有这么几点:相册服务的后起之秀,flickr的追赶者;可能会被收购,传言金额在500万美元左右;只有一个(以前的事了)站长兼程序员,当年17岁,今年18岁。不过这些特点跟用户的关系不大,而我对Zooomr的第一印象却好坏各半,感觉这里做得很时髦,却也很粗糙。

时髦在申请账户的时候就可以感觉到了,Zooomr并不自己管理用户认证,而是用了OpenID。所谓OpenID,就像你在MS、Yahoo、Google,只要申请过一个账户,就可以使用该站旗下的所有服务。只不过MS他们的账户只限于自己的旗下网站,OpenID则属于开放的第三方。

站在用户的角度,我对OpenID这东西没什么特别的感觉,好处坏处都有。但对于服务提供商来说,用这种东西可以说是相当大胆的行为。撇开隐私一类的深层问题,假如OpenID服务器down掉了怎么办?用户声称忘记OpenID密码且无法找回,要求你让他进入自己的账户又怎么办?世界是平的,很先锋,可现实问题也不少。后来我才知道,Zooomr现在已经是2.0 beta版了,升级时用户认证就出了问题。以前用的认证方式是Level9、Meetro和Google Account,OpenID和LiveJournal是现在才统一的。

至于粗糙就随处可见了。网站首页是固定宽度的,页面下方有近五分之二是灰色,显然是前景长度不够,CSS也没有调整好。登陆页有部分内容与页脚重叠,也是CSS的问题。删除照片之后,查看次数和Trackbacks不会实时更新,有延迟。照片public还是private不能改,保存无效。虽然能生成个人的Tags云,但无法通过Tag定位和搜索特定用户、相册的照片,也就是说Tag搜索只能是全域的。

还有个非常严重的问题。虽然Zooomr声称支持jpeg、png、tiff等格式,但略缩图都是jpeg的,包括“原始尺寸”。是的,“原始尺寸”,而没有“原始文件”。即使你上传的已经是jpeg格式的图片,Zooomr依然会给你通通转一遍,而且原始文件不保留。我上传了一张103KB、800×600的照片,下回来的文件是184.4KB,EXIF也全没了。[*这意味着就算你是Pro用户,也无法从Zooomr拿你上传的原始文件。*]我认为这是不可接受的设计错误,也是让我判定Zooomr目前不足用的最大理由。

单以这些方面评价,现在的Zooomr恐怕连beta都不够格,可Zooomr却有种让人无法全面否定他的特质。如果把Zooomr当成一件作品,那产生这种特质就应该归功于作者,那位叫做Kristopher Tate的小伙子。所谓的年轻,所谓的稚嫩但富于激情。

在Zooomr的about页上(这也是我唯一发现有指向FAQ链接的页面),Tate大大咧咧地列出了他的开发工具,有LightTPD、Python、Debian等等。这就是个挺典型的programmer作风,类似的表现还有不少。评论和留言支持Markdown,很geek的东西。API用了flickr的标准,连OpenID都用,这个倒不奇怪。只不过API的完成度相当低,自己开发上传程序更顾不上,那就用第三方的jUploadr,开源的。说实在话,我猜这家伙的代码风格不会太好……

如果有兴趣,还可以去读读Zooomr的blog。就我翻过的那几页,Tate更新可算是很勤奋。文字也称得上很可爱:“I want to connect the world with itself — first hand, from your eyes. And, I hope that I am not alone.”他也很喜欢YouTube,正好有人说他handsome,觉得如何你可以自己去看看

一个优缺点鲜明的作品,一个年轻而幸运的男孩儿,这样的用户体验其实是蛮有趣的。不知道这样的business,能够走多远?

Zooomr现在对bloggers免费赠送Pro账户,每月的流量限制是2GB,后来提高到2.5GB,现在又提高到4GB,真有点“想一出是一出”的味道。

blog上有一张地图Zooomr World Map Coverage as of 26.11.2006。原来Zooomr的用户竟然是大陆(似乎是北京,有点不正常,或许跟IP数据有关)和台湾最多……

Zooomr的API实现很不完整,页面上虽然说允许email申请APIKey,但好像没人回复的样子。如果想要的话,其实可以去jUploadr里找,不过目前没什么用就是了。

Zoto打算要全面收费了,说是3.0版正式推出的时候,时间是12月。不过现在12月快过了一半,却也没动静。而且年底是西方传统的促销、折扣、派送期,这会子跟人要钱,前途未卜。其实我觉得Zoto很适合存放照片,就这么倒掉也蛮可惜的。他们家的CEO还写了篇《Why Flickr Sucks Sometimes》,骂也没骂痛快,我只看出了酸葡萄心理。

OpenID的官网上有个列表,看得出现在接受这项服务的网站并不多。不过其中有一个我觉得很惹眼,DeadJournal。“DeadJournal.com is a journal site (much like LiveJournal), but as you will quickly see, not all journals are apple pie and fruitcakes. Here is where you find the journals that nobody else wants to see, or even host.”广告语写得还不错吧,有没有兴趣去逛逛?

好吧,其实写这篇东西的最初动因其实是Zooomr的Terms of Service。其中第4条Rule说:“All users are bound by applicable local laws, including laws regarding pornography and copyright. It is up to individual users to determine for what purposes use of the Web Site would be illicit and illegal in his/her jurisdiction.”貌似他们不禁止色情内容的意思。

2006年11月10日星期五

律制初步

律制基础

听觉位列五感之一,音乐可以说是人类与生俱来的才能和需要。而音乐作品的创作、乐器的设计和制造,都需要选出特定的几个音作为标准和素材,律制就是为解决这一问题而已产生的。

在很早以前人们就发现,人耳对于音高的比值较为敏感,而对绝对音高则并不敏感。在人类通过研究物理发现“频率”以前,律制通常是借由物体的长度、容积等物理量进行对比的,而现代则多采用频率比。

比值进行比较和运算十分麻烦,需要进行乘除法甚至乘法、开方运算。而当数学发展到对数产生时,律制的计算获得了大幅度的简化。将比值取同一个数为底的对数(例如常用对数),乘除法可简化为加减法,乘方开方运算可简化为乘除法。(对数运算法则可见维基百科

由于对数通常为小数,纪录和书写不便,人们又通过其他手段发展出其他单位来表示音高的比值。最常用的一种叫做音分,将八度音程划分为1200音分。求某个比值相当于多少音分,可比值取常用对数,乘以1200再除以2的常用对数。很明显,“音分”这种单位可以说是专为十二平均律量身定做的。

十二平均律

十二平均律对近代西方音乐起到了非常重要的影响,也是现代音乐使用最为频繁的一种律制。不过十二平均律的发明者却是一个中国人,即明朝郑王世子朱载堉(1536-1611)。他在其著作《律吕精义》中明确记载了十二平均律的计算方法:先对八度音程的比值2开平方得二分一八度音程的比值1.414213562373095048801689,再对结果开平方得四分之一八度音程的比值1.1892071150027210667175,最后对结果开立方得十二分之一八度音程的比值1.059463094359295264561825。已知一个音的频率,求上下一个音的频率,只需要将频率乘或除以十二分之一八度音程的比值即可。以数学的观点来看,朱载堉即是将2开12次方作为公比,将一个八度音程平均分成了12份构成一个等比数列。

现代音乐以十二平均律作为理论基础,将一个八度音程划分为12个半音,2个半音即为一个全音。再将八度音程分为7个音级,每两个音级之间的音程关系为全、全、半、全、全、全、半,这样就构成了现代音乐中所使用的七声音阶。

下表以a1=440Hz为标准,列出了小字一组,小字组和大字组各音的频率:

Hz C D E F G A B
C 65.41 73.42 82.41 87.31 98 110 123.47
c 130.81 146.83 164.81 174.61 196 220 246.94
c1 261.63 293.66 329.63 349.23 392 440 493.88

三分损益律

三分损益律是中国古代的一种律制,最早的记载见于《管子·地员篇》。其也可以说是中国古乐的主宰,即使在十二平均律被发明之后也依然如此。

《管子》中记载了三分损益律的详细生律方法:“凡将起五音,凡首,先主一而三之,四开以合九九,以是生黄钟小素之首以成宫。三分而益之一为百有八,为徵。不无有三分而去其乘,适足以生商。有三分而复于其所,以是成羽。有三分而去其乘,适足以生角。”

这段话的大意是说:宫弦长81寸,三分益一就是乘三分之四,得徵弦长108寸。徵弦三分损一就是乘三分之二,得商弦72寸。商弦再三分益一,得羽弦96寸。羽弦再三分损一得角弦,64寸。

由于弦长与频率成反比,若求两弦的频率比,可通过求弦长倒数之比获得,而通过频率比即可算出音分值,列表如下:

 
弦长 108 96 81 72 64
音分 / 204 204 294 204

由上表可以看出,如徵相当于十二平均律中的C,则徵、羽、宫、商、角约相当于C、D、E、A、B。若以《管子》中的记载为准,“宫”作为音阶中的一个音级使用时,其位置应该是在五音的中央。后世宫、商、角、徵、羽的排列顺序,应该经过了一些变化。

与《管子》年代相近,《吕氏春秋·季夏纪第六·音律》记载了利用三分损益产生十二律的方法:“黄钟生林钟,林钟生太蔟,太蔟生南吕,南吕生姑洗,姑洗生应钟,应钟生蕤宾,蕤宾生大吕,大吕生夷则,夷则生夹钟,夹钟生无射,无射生仲吕。三分所生,益之一分以上生。三分所生,去其一分以下生。黄钟、大吕、太蔟、夹钟、姑洗、仲吕、蕤宾为上,林钟、夷则、南吕、无射、应钟为下。”

以黄钟为首,应钟为尾,首尾相连就可以看出,原音律与相生的音律,起止相隔八个音律,所以三分损益生十二律又有“隔八相生”的名称。

纯律

各种乐器发出的声音都不是一个单音,而是一个复合音。除了一个音量最大最容易被注意到的基音之外,还有一系列的泛音。而乐器的音色,就跟泛音的多寡和相对强度有非常重要的关系。以琴弦为例,整根弦整体振动所发出的就是基音。而琴弦的1/2、1/3,也作为一个相对独立的发音体在振动发声,这就产生了泛音。

泛音在物理上叫分音,电磁学中叫谐波。根据现代科学的研究发现,泛音的频率符合一个简单的数学关系,即均为基音频率的整数倍。仍以琴弦为例,弦的振动频率公式为:f=(1/2L)*sqrt(T/m)。其中L为弦长,T为张力,m为弦的质量,sqrt表示求括号内表达式的正平方根。只要弦一定,T和m就一定,我们设某根弦具有如下性质:n=(2/L)*sqrt(T/m),代入公式可得该弦的频率f=1/n。由于频率与弦长成反比,1/2弦的频率即为2/n,1/3弦的频率即为3/n,以此类推。很容易即可发现,琴弦的基音和泛音频率能构成一个等差数列,公差为1/n。

文字不好理解,可试列一张表格。假设有一根弦的振动频率为65.41Hz,即a1=440Hz,按十二平均率算得的大字组C。第一行为基音和泛音的频率;第二行为该频率最接近于十二平均律的一个音名;第三行为该音相对左边一个音的音分值。得表如下:

  基音 泛音1 泛音2 泛音3 泛音4 泛音5 泛音6
频率 65.41 130.81 196.22 261.63 327.03 392.43 457.84
音名 C c g c1 e1 g1 a1
音分 / 1200 702 498 386 316 267

很容易即可发现,基音与泛音1的音程关系是一个完整的八度,而泛音之间也形成了近似于十二平均律的纯五度、大三度等音程关系。这些音程关系都是自然存在的,说是“纯正谐和”的“自然音程”,应该有一定的道理。纯律即是使用这样的简单整数比生律的一种律制。

当音程以比率关系表示时,音程相加则是比值相乘,音程相减则是比值相除。例如大2=纯5减纯4=(3/2)/(4/3)=9/8,依次类推还可以算出大6=纯8减小3=5/3,大7=纯5加大3=15/8。以c1=261.63Hz,我们就可以算出以下表格:

音名 频率比 频率 音分
c1 1 261.63 /
d1 9/8 294.33 204
e1 5/4 327.03 182
f1 4/3 348.83 112
g1 3/2 392.44 204
a1 5/3 436.04 182
b1 15/8 490.55 204

由上表可以看出,纯律中的大二度有204音分和183音分两种。前一种即上文提到的纯5减纯4而得到的9/8,而后一种为纯4减小3而得到的10/9。

附表

三种律制的音程关系比较:

三分损益律
音名 黄钟 大吕 太蔟 夹钟 姑洗 仲吕 蕤宾 林钟 夷则 南吕 无射 应钟
音程 0 114 90 114 90 114 90 90 114 90 114 90
音名              
音程 0   204   204     294   204    
十二平均律
音名 C   D   E F   G   A   B
音程 0   200   200 100   200   200   200
纯律
音名 C   D   E F   G   A   B
音程 0   204   182 112   204   182   204

2006年11月1日星期三

乐理初步

简谱上用的阿拉伯数字1、2、3、4、5、6、7,唱名分别为do、re、mi、fa、sol、la、si。每两个音之间都有相对固定的音高差距,即所谓音程。唱歌会走音,是因为没有把握好音程关系,发音的频率偏高或偏低。

如今表示音高,通常使用C、D、E、F、G、A、B这7个字母。C到B分别与do到si相对应,又叫音的音名。表示音高的方法有两种,分别应用于物理和音乐两种学科。物理学上表示音高,用一个大写字母加一个表示音组的数字,例如C4、B6。音乐中则分小字组和大字组。小字组用小写字母表示,如c、d。比小字组高的为小字一组、小字二组等,用小写字母标示并在右上方加组数。比小字组低的依次为大字组、大字一组、大字二组等,大字组使用不带数字的大写字母标记,其他则用大写字母加右下方的组数表示。

有关音乐方面的标准音高有两个,第一国际音高是1834年在德国斯图加特决定的a1=440Hz,第二国际音高是1859年在法国巴黎决定的a1=435Hz。音乐上的中央C指的就是c1,其频率可以由不同的a1推算出来。

音高就是声音的频率,由于人耳对于不同频段的声音敏感度不同,例如100Hz和200Hz在人耳听来差别很大,1100Hz和1200Hz却分不太出来,所以在音乐中相邻两个音之间的频率差并不固定。决定两个音之间的频率差是多少有一个专门的学科,叫做律制。用通俗的话说,一个频段好比一把尺子,律制就是一种在尺子上打刻度的方法。现代乐理最通用的律制叫十二平均律,发明者是明朝的郑王世子朱载堉(1536-1611)。

十二平均律将八度音程分成12个半音,每两个半音的频率比值都相等。一个八度之间的频率比值是2,将2开12次方约为1.059463094359295265。再规定除E到F、B到A之间的音程为1个半音外,其余相邻的两个音之间都相距2个半音。这样已知a1=440Hz,440乘以1.059463094359295265的平方,就可以算出b1的频率约为493.88Hz。

音程的度量单位叫做“度”,又叫“度数”。例如do跟do,也就是同一个音,音程关系叫“一度”,也叫“同度”。同理,fa到la的音程关系叫“三度”。但因为音级间所包含的半音数是不定的,单纯用度数并不能完整表达音程关系。所以音程的构成除了度数以外,还包括“音数”,表示两个音级间包括多少个半音。音数一般用真分数表示,1/2为1个半音,1为2个半音。例如音数为0的“一度”叫做“纯一度”,音数为1/2的“二度”叫做“小二度”,音数为1的“二度”则叫做“大二度”。关于音程关系有一个口诀:“一四五八无大小,二三六七没有纯”。

注:

我唱歌走音非常厉害,一个善于此道的朋友可怜我,说他可以教教我,谁知开头第一节课讲的就是音程关系、十二平均律。虽然老师说乐理不用太明白,唱准了最重要,叫我多多跟唱音阶和简单的小节。可搞不懂又有趣的东西,总会让我心痒痒的。

看了不少资料后才知道,除了十二平均律外,还有五度相生律和纯律等其他律制。与五度相生律、纯律等自然律不同,十二平均律是一种人工律,是通过数理方法,兼顾人的听觉感受,人为创造出来的一种律制,目的是为了能方便地“旋宫转调”。

可五度相生律、纯律究竟是怎么一回事,怎么个“自然”法,“旋宫转调”又是怎么一回事,我到现在也没搞明白。解决走音问题这篇笔记应该足够了,可我似乎对律制一类的东西兴趣更大,稍稍有点对不起友人的感觉……

2006年10月28日星期六

小叔出世

第一次有当长辈的感觉,已经是很久以前了。那时我才17、8岁,正值春节,我哥的高中同学、我妈的干儿子,带着他的老婆和出生不久的儿子,来我们家拜年。因为事前没有通知,我们家也没有准备,我还躺在床上没有起来。我妈说让我也见见自己的干侄儿,于是就把那个被衣服包得紧紧的婴儿交到了我手上。怕摔了他,我就把腿弓起来,把他放在我的大腿上,跟他打了第一个照面。

干哥哥夫妻算得上是俊男美女,儿子自然也差不到哪里去。眉眼周正,小脸肉乎乎的,透着嫩嫩的粉红色。或许是搞不清楚我这个陌生人是谁,一双漂亮的眼睛很疑惑地盯着我。那个表情很可爱,就像是初生的小猫小狗一样,我也笑着跟他对视。可惜顶多过了三秒钟,他就放开嗓子哭了起来。我究竟还是没能获得他的青睐,急忙把孩子还给了他的母亲。

第二次同样也是过年,叔伯姑婶齐聚在爷爷家里,我二姑的女儿,也就是我的表姐,带来了一个孩子,说是她的儿子。我稍微有点吃惊,因为那个孩子已经有4、5岁了,而我却是头一次听说有这么个孩子存在。表姐自然是没有结婚,而且孩子的父亲是我早以为跟表姐分手了的男人。中间的曲折不问可知,我只顾想着表姐应该吃了不少苦头,对那声“舅舅”都没有太大的反映。

我从小就不喜欢孩子,看着那些或是调皮捣蛋,或是娇生惯养的小东西,就没来由的上火。即使这两个孩子跟我沾亲带故,也算乖巧可爱,我也提不起多少主动跟他们亲近的兴趣。直到很久以后,我才想起一种可能。我不喜欢孩子,会不会是因为我也希望有人宠我惯我,会不会是因为我也不想长大?

主要原因也罢,次要原因也罢,我有些羞愧,又有些黯然。聊以自慰的是,我并非一点长进也没有——最近跟朋友聊天时曾提起,我现在仍然不喜欢孩子,但再过几年,我很可能会想要一个。可这究竟代表了些什么,又会在什么时候发生,我自己也不太清楚。

不过时间是不会停下来等人的。昨天下午,我哥打来电话报喜,他的孩子出生了,是个女儿。虽然我觉得有点蒙,不过母亲当奶奶了,而我也有了个侄女儿,这却已经是个事实。或许我的脚步该快些,主动往前走,总好过被人赶着走。

无论如何,新生命的诞生都是件值得高兴和纪念的日子。希望我的小侄女能健康长大,有一个平安幸福的未来。

2006年10月24日星期二

近期玩过的几个PS2游戏

古堡迷踪ICO

叫好不叫座的一个游戏,玩之前就抱着几分好奇,想知道究竟是怎么一回事。

几年前的画面拿到今天来看,不消说是简陋了些。不过气氛还是营造得很不错的,广阔而又空旷的古堡,逃命的少年。操纵着ICO在悬崖和高墙上移动和跳跃时,我忍不住有些发怵。于是对这个游戏我有了自己的理解,ICO之所以一见到少女就决定带她一起走,未必是出于英雄救美的心态,也许仅仅是害怕孤单而已。

可惜除此以外,整个游戏就乏善可陈了。动作解谜的游戏是否好玩,很大程度上取决于谜题的设计。这方面该游戏的表现一般,堪堪及格,没有什么特别吸引人的。而且故事的交待也很有缺陷,玩过之后脑子里有一大堆的“为什么”、“怎么会”,十分有损代入感。

《旺达与巨像》我也没玩过,据说跟这个游戏一脉相承。虽然口碑也非常好,可打过这个游戏之后,我对《旺达与巨像》的期待还是减了几分。

Monster Hunter

据说网络模式比单机模式好玩得多,可惜我是无福消受的了。动作感不错,手持大剑与怪兽搏斗,很有些豪气。没有等级的概念很合我的胃口,角色属性的提升都依靠打造新装备获得。可由于在游戏中钱实在很难赚,而打造装备的花费动辄成千上万,有种恶意拖延游戏时间的感觉。

任务总数不少,怪物、武器、装备的种类也很丰富,本应该是个很耐玩的游戏,可我实在没耐性耗下去了,一周目都没完成。据说PSP版的《怪物猎人P》有将难度调低,心有戚戚焉。

God of War

以希腊神话为背景,不过故事是新编的。看着诸神都跟Ares过不去,而且潘多拉之盒居然变成了神秘力量的源泉,感觉有点怪怪的。游戏采用自动视角,在某些情况下会比较别扭,而且这一点还被设计者利用,故意增加某些场景的难度。有几处可能出现读盘死机的问题,要有勤存盘的习惯。

先挑毛病的原因是,除了以上所说,我再想不出这个游戏有什么缺点。50小时三周目完成,GOD模式就留到有时间了再慢慢体会吧。

Devil May Cry 3

没碰这个系列以前就看过不少宣传画,还以为这种以耍帅为第一要义的游戏不会很难,事实证明我是大错特错。

这的确是一个追求帅为目的的游戏没错,可所谓的帅却是建立在相当的难度之上的。30余个小时完成了Normal的二周目,却还有四分之一的隐藏任务完不成,传说中的Dante Must Die更是碰都没碰。

相当的难度加上恼人的度盘速度,帅哥真不是那么容易当的。

大神

可爱到爆的一只大白狗,一点不夸张,真的。玩以前还担心日文的问题,没想到看不懂对白,注意力就更多集中在了角色的表情和动作上,就更能体会大白狗的可爱之处。水墨风格的画面很漂亮,难度不高却又有趣,Clover出品的确名不虚传。

不过语言仍然造成了一点障碍,虽然游戏自然有一种吸引人到处乱逛的魅力,但看不懂对白还是会错过一些支线流程。50小时出头才完成的一周目,结果也远谈不上完美。

虽然是日文的ARPG,不过这个游戏我应该会玩上第二遍的。

2006年8月5日星期六

Opera字体问题的一篇笔记

首先需要在opera:config中关闭core X fonts支持,并确认打开了xft fonts支持。opera的字体选用机制已经很莫名其妙了,没必要还跟core X fonts纠缠。之后在高级设置的国际字体中,针对简繁体中文选择你喜欢的字体。如果运气足够好的话,你已经拥有了不输firefox的字体描绘品质,不过事情一般都不会这么顺利就是。

假如你发现采用gbk/gb2312编码的网页表现良好,但utf8编码的网页却很糟糕,那很有可能是你使用了utf8的locale,例如zh_CN.utf8。opera并不认为zh_CN代表间体中文,虽然有些怪异,可看起来就是这样。解决的办法是在非utf8的locale下启动opera,例如zh_CN.gbk或zh_CN.gb2312。

你可以每次都在term中敲LANG=zh_CN.gbk opera &启动程序,可以写一个脚本完成这件事,或者干脆把系统locale改为zh_CN.gbk。听起来有点不可思议,可我推荐最后一种解决方案。utf8的locale所带来的便利,远少于其带来的各种麻烦,虽然这并不是utf8的错。

补:上段没有说清楚,多解释几句。在zh_CN.utf8下访问GB2312页面,Opera会使用国际字体设置中的内容,但访问UTF8页面时则不会,而是按字体按名称排序选取。也就是说,locale为UTF8时,Opera所采用的字体是不可控的。

现在不管什么编码的网页应该都使用你指定的字体进行描绘了才对,可如果你发现中文字符间距不正常,小字间距过大,而大字又有重叠,那真是恭喜,我遇到过的问题你都遇到了,挺蓑。

安装X时一般都会附带装上两套中文点阵字体,分别是fangsong ti和song ti。如果fontconfig中打开了bitmap,即点阵字体支持,上述问题就很可能发生。假如opera中某些中文字显示得异常大,应该也是同样的原因造成的。因为fangsong ti只有12和16点阵,song ti也只有12、16、24这三种尺寸。至于问题的根源究竟在哪,是fontconfig还是字体本身,我也不清楚。个人感觉,opera看起来比较可疑。

解决的办法有好多,关掉fontconfig的点阵字体支持,或者删掉fangsong ti和song ti之类。后一种太暴力,所以我推荐前一种,反正点阵字体对于如今的桌面来说用处不大,不过代价就是文泉驿的点阵宋体也不能用了。

fontconfig的配置文件可能在很多地方,自己慢慢找。打开bitmap支持的部分可能会长成这样:

<selectfont>
 <acceptfont><pattern>
  <patelt name="scalable"><bool>false</bool></patelt>
 </pattern></acceptfont>
</selectfont>

改为:

<selectfont>
 <rejectfont><pattern>
  <patelt name="scalable"><bool>false</bool></patelt>
 </pattern></rejectfont>
</selectfont>

个人结论:opera的中文支持蛮糟的。