用来修正错误编码的文件名的 Safari 插件

我之前[讨论过](/2008/02/17/cocoa-nsstring-decoding-error/)一次这种文件名的错误编码,为了在浏览器下载时的不必手工修正这个问题,这里提供一个 Safari 的 SIMBL 插件: SafariURLFix。

使用步骤如下:

1. 如果没装过,先[安装 SIMBL](http://www.culater.net/software/SIMBL/SIMBL.php);

2. 下载 [SafariURLFix.zip](http://jjgod.org/program/SafariURLFix.zip),解压后,放到 `~/Library/Application Support/SIMBL/Plugins` 目录 (如果没这个目录就自己创建);

3. 在 Terminal 中输入:

`defaults write com.apple.Safari JJURLsToFix -dict newsmth.net GBK`

其中 newsmth.net 为你希望应用修正的网站域名。也可以打开 `~/Library/Preferences/com.apple.Safari.plist` 文件自己编辑 `JJURLsToFix` 这个 Dictionary,自行添加新的,见附图。Edit Safari Preferences Manually

4. 重新启动 Safari,尝试下载[这样](http://att.newsmth.net/att.php?p.719.275418.308.png)的文件,看看文件名是否被正确纠正了。

如果还有什么问题,欢迎在下面提出。

How to test a proxy autoconfiguration file

Due to the existence of [Greal Firewall](en.wikipedia.org/wiki/Golden_Shield_Project), I have a terribly long `proxy.pac` file. Apparently, how to maintain that becomes a problem. Regularly, I use [git](http://git-scm.com) to keep a “stable” version and make updates on it.

Recently I just found the script stop working for no good reason, because the proxy server I’m using is working, and I tried manually choose a proxy server (by entering its address and port into my browser directly) it also worked, so apparently there is something wrong with the script.

However, it has been a while since I last commit my changes to this script back to git. So there are some changes I wish to keep and I don’t want to do a binary search to find out the problem (Yep, I’m a lazy guy).

A few googling got me a tool called [pactester](http://code.google.com/p/pactester/), which turned out to be very useful. Basically it’s a Perl wrap of [SpiderMonkey](http://www.mozilla.org/js/spidermonkey) JavaScript engine. Since the proxy autoconfiguration script is just a subset of plain JavaScript, it can safely executes that with SpiderMonkey and find out where is the problem.

So I installed it and did one test:

$ pactester -p ~/Documents/Miscs/proxy.pac -u ‘http://blog.iphone-dev.org’
Use of uninitialized value in numeric ne (!=) at pactester line 137.
Error: SyntaxError: missing ) after condition at line 98:
if (dnsDomainIs(host, “cubes.fr”) return “SOCKS 127.0.0.1:7777”;

So that’s the problem. Fixed it, everything is back to normal again!

That’s a small tip on debugging a complex pac script, hope it helps.

Pro JavaScript Techniques 的中文版上市

相信熟悉 Web 设计的朋友已经了解,这本书是一本关于 JavaScript 的较有深度的书籍,中文版是由贤安 ([realazy](http://realazy.org/blog)) 和我一起翻译的,中文译名是《[精通 JavaScript](http://realazy.org/jspro/)》。

原书的价值,对于熟悉的朋友应该毋庸置疑,我们两人在翻译时也颇费了一番功夫,大致分工是我主要负责和语言特性相关的,贤安主要负责和 Web 应用相关的 (包括与 CSS 的配合),如果有任何意见建议,欢迎致信 [projsch@gmail.com](mailto:projsch@gmail.com),我们会将所有的更正与改进放在[勘误页面](http://realazy.org/jspro/erratra)上。

Mozilla 2

Brendan Eich 的这篇 [Mozilla 2](http://weblogs.mozillazine.org/roadmap/archives/2006/10/mozilla_2.html),过了一个多月我才来看。还是有些新内容的。

现在“Mozilla”这个词比较怪,它不再指以前那个“Mozilla Suite”浏览器 (自从 SeaMonkey 分出去之后),也不专指“Firefox”,更不仅限于“Gecko”渲染引擎 (虽然现在给 Mozilla 起的版本号还是和 Gecko 同步的),按我的理解,指的是 Mozilla 组织这面大旗下的整个平台的统称,Web 渲染,XUL, XBL, JavaScript, XML/XSL 等许多引擎的统称,而其招牌产品就是 Firefox。

其中,Mozilla 1.9 将对应着 Firefox 3.0,其路线大致已经确定了。Brendan 讨论的是在架构上将有巨大变化的 Mozilla 2,它预期在 2008 年出现。

最引人注目的是基于 JIT 的 JavaScript 虚拟机的出现,加上改进的垃圾回收,将给 JavaScript 的效率 (在 DOM 访问和内存占用方面) 带来巨大提升,据说。同时,它支持的语言会是 [ECMAScript 4](http://weblogs.mozillazine.org/roadmap/archives/2006/05/javascript_2_ecmascript_editio.html) (俗称 JavaScript 2)。

其他的改进对普通用户则不大可见,比如放弃 XPCOM,而更多的依赖标准 C++ 的特性来写程序,去掉一些为了兼容性遗留的[旧 API](http://wiki.mozilla.org/Gecko:Obsolete_API),简化代码组织,放弃 CVS 换用新的版本管理工具,等等。

FreeType 2.2.1 的一点测试

最近 [FreeType 2.2.1](http://download.savannah.gnu.org/releases/freetype/)
刚刚发布,尽管由于 API 的变化 (许多内部函数被隐藏起来了),多数的 distro
并未把系统使用的 FreeType 升级到这一版本——我相信要过很长一段时间才有可能这
么做。但使用源代码编译的版本,我做了一点小小的对比分析。

因为精力有限,只对 FreeType 2.1.10 (目前绝大多数发行版正在使用的版本)
进行了比较,试图给出基于 FreeType 的程序 (如 fontconfig) 应当如何配置字体
才能获得最好的效果的一点建议。而事实上,font rasterizer (字体光栅化工具)
必须和其他的 rasterizer 比较才能看出明显的区别来,例如 ATSUI, Win32 GDI
等等。

同时,我也只对随 Windows 附的 simsun.ttc 做了测试。如果你有兴趣,欢迎分享
更多的测试结果。

测试的截图在 [flickr](http://www.flickr.com/photos/jjgod/tags/freetype/) 上。

经过比较,我们可以给出这样一些建议:

1. 必须打开 anti-alias,gamma 才会起作用。
2. gamma = 0.0 时启用 sRGB (次像素反锯齿) 模式,这种模式要比默认的
gamma = 1.0 显示得更清晰锐利一些。
3. 绝大多数情况下,打开 hinting 能达到更好的效果。
4. 小于 12px 的情况下,关闭 anti-alias,打开 hinting 能使字体勉强可读,
但仍然建议绝对不要使用这么小的字体。
5. 12px 以上,即 12-16px, 18px 的汉字必须使用嵌入的 bitmap。事实上,AA +
hinting 的汉字要到 28px 以上才可以称为比较可读。