在 Mac 下解决 Wii Sports Resort 不能启动的经历

1. 收到从淘宝购买的 [Wii MotionPlus](http://en.wikipedia.org/wiki/Wii_MotionPlus)
2. 用 [WBFS for MacOS X](http://wakoopa.com/software/wbfs-for-macos-x) 把 [Wii Sports Resort](http://en.wikipedia.org/wiki/Wii_Sports_Resort) 美版 ISO 复制到移动硬盘
3. 打开 Wii,用 [USB Loader GX](http://usbloadergx.koureio.net/) 启动 Wii Sports Resort,蓝屏,Error #002 错误
4. 启用 USB Loader GX 的“防 002 错误”功能,再次启动 Wii Sports Resort,黑屏重启
5. 发现需要从 Wii Sports Resort 的光盘镜像里提取一个文件放到 SD 卡根目录,但网上没人提供美版的对应文件 (只有日版和欧版的)
6. 发现用来提取文件的 [WiiScrubber](http://gbatemp.net/index.php?download=4838) 只有 Win32 版本
7. 找到 [WiiScrubber-ng](http://www.dcemu.co.uk/vbulletin/showthread.php?t=138935),一个 Unix 移植
8. 下载编译 WiiScrubber-ng 的源代码,发现缺少 key.bin 文件无法执行
9. 下载 MakeKeyBin 的源代码,提取出跨平台部分单独编译,生成 key.bin
10. 运行 wiiscrubber-ng,发现提取文件部分并没有移植
11. [少量修改](http://github.com/jjgod/wiiscrubber-ng/tree/master) wiiscrubber-ng, 加入提取文件功能,获得所需的 `player.dol` 文件
12. 复制获得的文件到 SD 卡中,启用 USB Loader GX 的“Alternate DOL”功能,成功进入 Wii Sports Resort, 看完 MotionPlus 的使用演示
13. 退出游戏,关闭“Alternate DOL”功能,再次启动 Wii Sports Resort,正式开始游戏

说说对今早 WWDC Keynote 的想法

1. 大家一边纷纷怪 Keynote 没新意,一边在发布前使劲的刺探情报,所以这两年的热点产品往往在发布之前就被曝得体无完肤,就好比自己先去看了剧透,然后看电影的时候痛斥没有惊喜。

2. MacBook Pro 的升级对我而言算是个惊喜,本来以为要到 10 月以后才会发布的东西,居然现在就出来了,不过亮点不多,比如期望的 Nehalem 移动平台,显然不可能这么早就出现。

3. Safari 4 正式版的界面不得不说是一个妥协的结果,本来 Beta 中需要很大勇气的创新被巨大的反对意见逼退了,Apple 没有 “take one step further” 去继续改进,而是直接放弃了尝试,回到了传统的 tab 布局。总体来看,这个界面设计缺乏深思熟虑,不会很讨人喜欢。

4. Snow Leopard 针对用户的大更新不多,小改进不少,总的而言会是一个让人 (尤其是比较喜欢保持软件更新的人) 用着很舒服的平台。

5. 针对开发者的特性许多都是头一次出现的,不应该期望它们在 10.6 中就足够成熟,其实大部分都还是给有尝试热情的、勇敢的开发者,以及基于这些底层技术作二次开发的厂商做热身的。这算是为以后的改进搭下了一个很好的基础,单从底层技术而言,Apple 这个公司对于业界的影响也越来越大了,对 OpenCL, GCD, LLVM, WebKit 等技术的推动充分说明了这一点。

6. iPhone OS 3.0 的改进,主要是希望利用大量 app 的先发优势压倒 Palm webOS 这样的新秀,然而对比起来玩弄的噱头越来越多,聚焦在一个好用的手机、好用的交流、联络工具上的改进越来越少,所以相比 Palm webOS 显得格外苍白。毫无疑问的,iPhone OS 3.0 升级让这个系统更完整、更有潜力了,但 Apple 自己开发的内置 app 却乏善可陈,这是自今年 3 月的发布会以来最大的遗憾,更遗憾的是 Apple 没能在 WWDC 前解决它。

7. iPhone 3GS 正是那种“被剧透得体无完肤”的产品,所以其实也没什么好说的,我自己没什么升级的打算,但对于还没买过 iPhone 的人来说,不失为一个好选择,当然,这是在解锁版的价格合适的前提下。

Updates on font changes in Snow Leopard

A few months ago, I’ve covered font related changes in Snow Leopard in [this post](http://blog.jjgod.org/2009/03/17/snow-leopard-font-related-changes/), that was perceived from developer preview build 10A286, after I got build 10A335 and 10A354, several changes can be observed.

1. Heiti SC and Heiti TC we covered earlier are now used as the default fallback fonts for Simplified Chinese and Traditional Chinese, respectively. We can see this via the content of the default font fallback configuration file of [Core Text](http://en.wikipedia.org/wiki/Core_Text):

$ cat /System/Library/Frameworks/ApplicationServices.framework/\
Frameworks/CoreText.framework/Resources/DefaultFontFallbacks.plist



zh-Hant
STHeitiTC-Light



zh-Hans
STHeitiSC-Light

2. “**Menlo**”, the monospaced font we mentioned previously, are apparently used as the default coding font for Xcode 3.2 now. Apple even filed a couple of trademark registrations in [US](http://tarr.uspto.gov/tarr?regser=serial&entry=77-745991+&action=Request+Status) and [EU](http://www.macnn.com/blogs/2009/06/01/823.html) for that name.

Menlo
Menlo Regular in Xcode 3.2

Personally, I still prefer the good-old-Monaco.

3. A pair of new Chinese OpenType fonts called **Hiragino Sans GB** and **Hiragino Sans CNS** have been added into recent builds, for Simplified Chinese and Traditional Chinese, respectively. Both fonts have two widths: W3 and W6.

Hiragino Sans GB W3
Hiragino Sans GB W3
Hiragino Sans GB W6
Hiragino Sans GB W6
Hiragino Sans GB W3
Hiragino Sans GB W3

These fonts were [announced](http://www.screen.co.jp/ga_product/sento/press/MP_NL081118E.pdf) by Dainippon Screen Mfg. Co., Ltd., they are specifically designed for Chinese users, but in a traditional Japanese Kanji style. These fonts can be seen as “sans-serif” fonts (hence the name) or “Gothic” fonts in Japanese term, or “heiti” in Chinese term.

However, Hiragino Sans CNS, the font family for traditional Chinese appeared in 10A335 is removed suspiciously in 10A354. I wonder if Apple will added it back in the official release.

For comparision, Microsoft licensed a pair of Chinese fonts called “[Microsoft Yahei](http://en.wikipedia.org/wiki/Microsoft_YaHei)” and “[Microsoft Jhenghei](http://www.microsoft.com/typography/fonts/family.aspx?FID=368)” in Windows Vista, which are somewhat similar to Hiragino Sans fonts, at least to my eyes.

dump 混合光盘镜像中的 ISO 9660 分区

Leopard / Snow Leopard 光盘镜像是混合 (hybrid) 分区格式,也就是一个磁盘镜像中,既有 HFS+ 分区,也有 ISO 9660 分区 (Boot Camp 驱动就存放在这个分区上),在 Mac OS X 上只会挂载前者,在 Windows 下只会挂载后者。虽然可以在 Terminal 下手工挂载后者,但也不是很方便,这里记录一个脚本,方便直接把 ISO 9660 分区 dump 为 ISO 文件:

$ cat dump.sh
#!/usr/bin/env bash
DISK=`hdiutil attach -noverify $1 | awk ‘/Apple_partition_scheme/ { print $1 }’`
dd if=$DISK of=$2 bs=512 count=`hdiutil pmap $DISK | awk ‘/WINDOWSSUPPORT/ { print $6 }’`
hdiutil detach $DISK

使用方法:

$ ./dump.sh snowleopard_10a354_userdvd.dmg bc.iso

Packaging for Installation on Mac OS X

在 Mac OS X 下为程序打包该用什么格式?这是个很有趣的问题,首先,显然绝大部分的应用程序都应该:

* 使用手动安装,也就是一个独立的 `.app`,里面通过 `@executable_path/../Frameworks/` 的方式[链接所有依赖的第三方库](http://www.cocoadevcentral.com/articles/000042.php),也就是说,不往系统相关目录里乱放东西。这是 Apple 官方的 Software Delivery Guide 中[推荐的安装方式](http://developer.apple.com/documentation/DeveloperTools/Conceptual/SoftwareDistribution/Introduction/Introduction.html)。
* 支持用 Sparkle 这样的自动更新框架,实际上符合上一点的也就自然可以用 Sparkle 完全自动的完成更新。
* 用 `.zip` 格式分发。为什么不用 `.dmg`?因为 `.dmg` 不容易直接解压,挂载速度比 `.zip` 慢得多,增加拖动的手续,所以我支持这篇 [zip vs dmg](http://0xced.blogspot.com/2006/11/zip-vs-dmg.html) 的观点。

SunPinyin 安装界面

但是如果遇到特殊的情况呢?比如你写的是一个**非得**往系统目录 (`/Library/…`) 安装内容的软件呢?比如我最近参与改进的 [SunPinyin 输入法](http://blogs.sun.com/yongsun/entry/sunpinyin_for_mac_leopard_updated6),就必须打包为 Installer 支持的 `.pkg` 格式安装了,否则很难确保软件被正确的安装。

关于这个打包方式,最重要的一点心得是:千万不要用 Apple 自己提供的 [PackageMaker](http://developer.apple.com/DOCUMENTATION/DeveloperTools/Conceptual/PackageMakerUserGuide/index.html),这恐怕是 Apple 开发的最恐怖的一个开发辅助工具了,因为:

* 它必须用图形界面修改内容
* 它保存的 `.pmdoc` 格式非常混乱,而且居然喜欢把*绝对路径*存入文件中
* 不支持 [Installer Plugins](http://developer.apple.com/samplecode/InstallerPluginSample/listing1.html) 扩展

那替代的工具是什么呢?是一个非常棒的第三方工具: [Iceberg](http://s.sudre.free.fr/Software/Iceberg.html),它能:

* 打包出 Mac OS X 10.2+ 以上都支持的 `.pkg` bundle 格式
* 界面比 PackageMaker 友好得多,而且有非常详尽的文档,也很方便调试
* 支持 Installer Plugin

涉及打包、Sparkle 的 appcast 自动生成,Iceberg 的使用等问题,都可以参考 SunPinyin [目前使用的代码](http://src.opensolaris.org/source/xref/nv-g11n/inputmethod/sunpinyin/ime/wrapper/macos/packaging/)。