Archive for the ‘Miscs’ Category.

又土鳖了一把

更新: gitmo 已经过期了,Sergey Yanovich 更新了 git repo 上的说明,现在应该用这个 client.sh 来更新。

今天实在是受不了 CVS 了:在 mozilla 这么大的树上用 cvs diff 简直是自虐,于是找来 mozilla cvs trunk 的 git mirror 来 clone,上次 clone 过一次发现缺东西不能编译,因为 mozilla cvs 树里有些东西是作为 external item 放在别的地方的,比如 nsprpub,但 git mirror (和 hg mirror) 都没有镜像这些。

因为看 mozilla.dev.platform有人贴了一个 gitmo 的脚本还方便,以为不会出问题的,结果还是出问题了。

为什么呢?因为 git 的 mirror 是用那个 repository 的几个 branch 来存这些 external items 的,每次我要用到这些 external items 来编译的时候,就把 checkout -b 一个 本地的 branch 出来,remote 的一个 branch 给 merge 进来,然后编译,问题是这些个 remote branch 的镜像更新似乎不如 CVS 上的勤,结果跟主干上的代码就不一致了。

虽然归根结地还是 mozilla 土鳖:CVS 这种原始社会的玩意早该淘汰了,但经验之谈是:除非对 Mozilla 的代码树结构以及它的编译系统很熟悉,否则如果自己要编译 Firefox 还是直接从 CVS 上取最省事,出问题的概率最小。

哦,顺便说一句,最近解决了一个 Firefox 3 在 Mac OS X 10.5 上的一个比较严重的 bug,涉及中文字体的载入和顺序,patch 已经进入主干,最新的 nightly build 中也已经包含,不妨试试。

随手翻译了一个 Colophon

Cover

Linux System Programming 封面上的图是在一个正在飞行机器上的人。早在莱特兄弟于 1903 年实现他们第一台“重于空气”的可控飞行器以前,世界上的许多人就已经在用简单而精致的机器探寻飞行的奥秘了。在二世纪或三世纪时,就有中国的诸葛亮在孔明灯中飞行的记录,这是第一个热气球。而在六至七世纪,许多中国人尝试将自己绑在大型的风筝上以在空气中飞行。

此外,据说中国还创造了会转动的玩具,它是直升机的早期版本,这个设计可能在莱昂纳多达芬奇对人类飞行进行早期尝试时给予了他灵感,而在 1845 年,他设计了一台扑翼机,一台试图通过展动翅膀载人于空中飞行的机器。尽管他从未将这台机器建造出来,扑翼机的鸟状结构影响了后续几个世纪对飞行器的设计。

绘于本书封面的这台飞行机器要比 James Means 在 1893 的模型飞行器更为精细,多出了螺旋桨。Means 后来给他的飞行器印制了一份使用手册,其中提到“于 Willard 山巅,Crawford 屋畔,觅一良所”来试验这台机器。

不过这类试验通常是很危险的,在十九世纪后期,Otto Lilienthal 建造了一些单翼机、双翼机和滑翔机,他是第一个展示出飞行是在人类可控的范围内的人,也因此获得了“飞行测试之父”的称号:他曾参与超过 2000 次滑翔机飞行,有时单次飞行距离就超过了一千英尺。他在 1896 年死于一次降落事故,在那次事故中他折断了脊椎。

飞行器还被称作机器鸟或飞行船,也偶尔会叫成人造信天翁 (Artificial Albatross) 这样华美的名字。人们对飞行器的热情现在依然高涨,直到今天还有航空爱好者在建造早期的飞行器。

封面图和章节题图来自 Dover Pictorial Archive。封面的字体是 Adobe ITC Garamond。正文字体是 Linotype Birka,标题字体是 Adobe Myriad Condensed,代码字体则是 LucasFont 的 TheSans Mono Condensed。

注:孔明灯的传说里并没有提到诸葛亮借此飞行,当为老外附会。

信长之野望 12 PK 版出了

可惜手头没有 Windows 用啊,郁闷郁闷。

网志改名

网志改名,其实也早该修改了,这个 web log 的内容将不再以 web 标准的宣传为主题,事实上,很早就不是了。

之所以今天来改,是因为以前只是觉得厌倦,但现在发生的 XHTML 到 HTML 5 这件事情让我对“web 标准”的宣传感到恶心了,我不能理解为什么那些所谓的“专家”,上一分钟还在向人推销 XHTML 是多么的好,下一分钟就翻脸不认大唱 HTML 5 的赞歌。脸皮之厚,堪称神奇。

既然如此,我也懒得帮他们一起圆下一个谎,反正是浏览器厂商你方唱罢我登场,慢慢唱吧,我写我的程序去。

管理大型的 Cocoa 项目

NetNewsWire 的作者 Brent Simmons 最近的一篇文章介绍了如何有效的管理大型 Cocoa 项目。他的建议可以总结为下面几条:

为了改善代码的可读,可查找性,应该遵循:

  1. 只对那些没有明显关系的对象之间的交互使用 Notification。
  2. Key-Value Observing 也是很危险的,应该只对 Preferences 项目使用这一特性。
  3. 只将 Binding 用于很简单的情形,复杂的 TableView 还是用 datasource/delegate 比较好。

管理代码时可以使用的技巧:

  1. #pragma mark 来划分代码的区域
  2. 用 Ctrl-2 来列出当前打开文件的符号 outline。
  3. 用 Shift-cmd-D 来快速打开指定文件。
  4. 用 opt-cmd-T 来将当前打开的文件和左侧的目录树同步。
  5. ctrl+double click 打开符号的定义,opt+double click 打开符号的文档。
  6. 在文件系统中用平面方式组织文件,不划分多层目录,在 Xcode project 中用 group 来划分层级结构。

对于有 Cocoa 开发经验的人,尤其是管理过这种超过 200 个源文件的较大项目的人来说,这些经验是很有用的。

What I’ve done with my MBP

算来买到 MBP 距今也有 4 个月了,这四个月里我主要做了哪些 hack 工作呢?这里罗列出来,或许你会有兴趣:

  • 因为 OS X 上没有一个文本编辑程序 (ok, let’s forget vim and emacs) 支持自动的编码探测,所以我在 jserv port 的 Mozilla 的编码探测技术charset-detector 基础上稍作修改使之能在 OS X 下工作,并打算修改 open source 的 Text Editor 的代码,使之能够自动探测选择常见的编码。这个工作前一部分已经完成,后一部分打算在这个周末做一做,包括 pack charset-detector 为 Framework 等等。link, binary, source.

  • 因为突然要听 APE (Monkey’s Audio),但 OS X 下把 APE 转换为 MP3/Apple Loss less/AAC 必须先用 MAC (Monkey’s Audio Console) 将 APE decode 为 WAV 格式。但却没有人提供 Universal Binary 的 MAC。所以就自己修改、移植、编译了一份 MAC for Intel。link, binary.

  • 将 Apple 提供的输入法例子 BasicInputMethod 修改为 Intel Macs 下可编译。link, source.

  • 因为想玩《金庸群侠传》,但 OS X 下先前别人编译的 DOSBox UB 版本却一跑“《金庸》” 就崩溃,于是自己编译了一份新的 CVS 版本。link1, binary.

  • 修改 gVim for Mac OS X,提供完整的中文支持和 ATSUI 渲染功能。并改进对部分中文输入法 (QIM) 的支持。这是最近几天做的,也是最复杂的一个。link, patch, binary.

还有几个未完成或者未 announce 的 project :) 上面这些项目我都是在一完成后就在 newsmth.org 的 Apple 版发布,我也时常在那儿停留,参与讨论,如果你有兴趣也不妨来逛逛。

Hacking 真是人生最大的乐趣 ;)

Upgrade completed

升级到 Wordpress 2.0.6,更换了新 theme,改用 PHP Markdown Extra,并不小心把原来上传的文件都搞丢了…

好吧,写点什么

恩,还是得写点什么,在懒惰已经成为习惯,找借口找上瘾了的时候,看到勤奋的 midi 同学 blog 更新之快,我就不由得惭愧啊。

距离上次写 blog 又是两个月了,这两个月发生了什么事呢?

  1. 推研的事情终于尘埃落定,如无意外,明年这个时候我就该在中科院研究生院上课了。未必是最好的结果,也未必是最坏的,还是非常感谢不少朋友和老师的无私帮助。感谢我的父母。
  2. 买了一台 MacBook Pro,我和 lukhnos 这么说:新机器到手的时候,真有点手足无措的感觉。有种打开了一个憧憬已久的世界时,突然不知道该干什么的感觉。但也只是一阵子,这一阵子之后,我又给自己的 Mac 学习计划开了一个长长的单子——用 lighttpd 的作者 Jan 的话来说:hey … that’s why we are hackers :)
  3. 申请了水木社区 的 TeX 版斑竹,欢迎大家多支持。
  4. 下周又是一堆考试,还有恐怖的 12 分钟长跑,所以,你可以预料到… 下次更新时间不定!

blog.jjgod.org

域名由 jjgod.3322.org 改变为 blog.jjgod.org (原来的仍然可用)。Thanks a lot to lukhnos & dfbb.

在 http://feeds.feedburner.com/jjgod/blog 这里提供一个固定的 RSS feed。

BTW: 还没想好 jjgod.org 这个根域名用来放什么,有建议吗?

字体的市场

这两天不停在想的,是关于字体市场的问题。

我是一个 TeX 爱好者,也是一个 HTML/CSS 爱好者,可是,无论是用 TeX 排版,还是用 HTML/CSS,都经常会不可避免的觉得,排版 (Typesetting/Layout) 和字体 (Font/Type) 真是不可分割的孪生兄弟,要做好前者必须理解后者,用到后者的时候又往往都在前者,最关键的是,在一个领域中很复杂、很麻烦的事情,往往在另一个里面竟很容易;在一个领域中只有非常 Ugly 的解决方案的事情,在另一个里面却解决得异常 Elegent。这真是非常有趣的事情。

然而易于发现的一个倾向时,我们已经习惯了从排版工具上解决问题,而不是从字体上下手。以最近的一件事情为例,Adobe 在去年新推出的一款 OpenType 字体叫 Garamond Premier Pro,在处理 Optical Sizes 上有问题,(所谓 Optical Sizes,就是说字体自动根据不同的大小来选择不同的替换字形,为什么要这么做呢?因为每个字体都是有设计时就决定的最优大小,把设计给 5pt 大小使用的字体放大到 10pt 去用,会很难看,所以我们一般都会让标题、正文和脚注用不同的字体),发现这个问题的用户不是报告到 Adobe 的论坛上,而是先报告到了 XeTeX (支持 OpenType 的 TeX) 的论坛上,再由 XeTeX 的作者告诉 Adobe 字体部门的负责人员,这个负责人员这才承认,是测试时的疏失,将在今后改进。

将这么一件事情,要说明的就是,我们发现排版效果和期望的有误差时,先一步不是怀疑字体,而是怀疑排版工具把正确的字体用错了,这当然不是好的倾向,可批评这个也没什么意思,我要说的其实是这种倾向的来源。

为什么我们凡事先试图去责怪排版工具呢?因为排版工具好修改——TeX 的代码是开放的,有活跃的用户在维护它,有大量的人给你回答问题;而字体却很难修改,不仅很难,从版权上说,甚至完全不允许修改。也就是说,字体的市场,相比排版工具太封闭了。作为一个开发者来说,只要掌握了一定程序开发的技能,排版工具出了问题,我可以试着自己去改正它,排版工具缺少功能,我可以试着自己去增加,不管我做不做得成,我的态度都是积极的;而对于一个字体的用户,学习字体修改却难得多,再加上版权上不被允许,所以只能等销售者修正问题,再获取更新的版本,这是一种消极的态度。

当然,也有人会说,商业的排版工具也有这个问题,没错,InDesign 也有这个问题,可是相比起来,字体出现了问题,影响更严重、更广泛一些。

字体市场封闭的问题,在中文字体上尤其如此,以著名的 SimSun 为例,我曾经写信给中易公司咨询这个字体的售价,结果回答是只销售批量授权,价格在六位数 (人民币) 以上,不提供单独授权的版本,也不允许任何形式的字体内嵌 (embedded) 行为。而方正公司虽然以两元一款的价格销售它的 GB 字体,但销售的网站相比国外的 myfonts.com, store.adobe.com, linotype.com 难用得多,购买和咨询也相当得不便,更不必说给这些字体的质量和问题提出意见了。所以说,我觉得这些开发中文字体的公司,根本不曾认真考虑过个人字体市场。

其实字体定价,两元太低了,linotype, adobe 这些公司销售的字体,一款一般都要 20 到 30 美元,贵的还要 40 美元以上,而且英文字体和中文的不同,只有 Regular 的当然不够用,至少要有 Bold, Italic 和 Bold Italic 才够,复杂一点的需求还需要 Semibold, Demibold, Extended, Condensed, 还有对不同Optical Sizes 的要求,所以一套非常完整的字体,卖 2000 美元也不奇怪。当然,也要分不同的字体算价格,方正兰亭里面有些不错的,比如书宋、兰亭宋、新报宋等,也有些做得是在不算高明。

我的看法是,字体的定价应该按照下面几个因素:

  1. 包含的字符的数量
  2. hinting 的质量 (绝大多数中文字体的 hinting 都不好)
  3. 是否有额外的特性,比如内嵌点阵
  4. 是装饰性字体还是正文字体

而且用于印刷的字体和用于屏幕显示的字体明显定价应该不同,因为印刷的 DPI 高得多。我自己的判断标准是,用于印刷的字体,覆盖整个 GBK (字符大概是 22000 多个),hinting 质量再中上 (我习惯用一套简单的判断方法,就是 PDF 里 10pt 能看得过去),无内嵌点阵,这样的字体卖 100 元可以接受,毕竟这样的字体我总共也就需要两三套。

而装饰性字体、包含字符不多的书法体,价格就应该适当调低,50 元以下比较正常。

这说的是常规时候的定价,现在这样的市场,明显应该有更好的价格促销,以及对团购的优惠.. 其实关键根本不在字体的价格,而是这些公司的态度,无论在什么时候,保持开放的态度,虚心听取用户意见的公司都是我更希望看到的。

当然了,这些都是我自己瞎想象,我猜大家看完一定会说,学人家讲市场,省省吧,还是老老实实做技术这份很有前途的职业去吧。