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.”貌似他们不禁止色情内容的意思。