Pages

Sunday, August 14, 2011

为Kindle自制 Mobi 格式英英辞典

Kindle入手一个月了,真是好东西,和在电脑上相比,更能静下心来阅读。自带的查英文字典功能也非常适合英语学习。美中不足的是自带的两本牛津英英辞典有点太难,不太适合我的英语水平,本人更喜欢Longman这样比较简单的英英辞典。网上有网友放出不少自制辞典,其中就包括了Longman等,但是由于是从别的格式转过来的,不太适应Kindle,非常多的词无法自动取词。故痛下决心,决定自制Longman字典。

由于担心涉及版权问题,细节就不说了,下面只说说思路:

Longman字典自带电子格式,很早以前,我就研究过它的v4版本,想转一个Babylon格式的,最后也是不了了之,不过对格式的解析到时有一定基础了。是从下面这个日本人的转换脚本里学来的:
http://hp.vector.co.jp/authors/VA005784/longman4/ldoce4conv.html
(此人用的是Ruby,想当年为了看懂这个脚本,还学了一阵子Ruby。)

此脚本对应的是V4格式。目前网上最新的是V5,和这个略有不同,但是思路是一致的。
将Longman的压缩包解开后,可以得到每个词条一个xml。内容大体就是显示的内容,还包括了词的变化形式(Inflection),这个正是Mobi辞典取词的关键信息。

得到原始信息后,开始转换成Mobi格式。Mobi格式其实是一些html文件+资源文件+OPF源信息文件,通过OPF文件控制mobi格式的生成。最早是读了一遍亚马逊官方的 Amazon Kindle Publishing Guidelines,对字典格式只有只言片语,又去研究epub规范,发现根本没有提到Mobi字典的格式。原来这个是Mobi特殊格式,和epub无关。最后在mobipocket的开发文档中找到了例子。看了例子,一切都明白了。
http://www.mobipocket.com/dev/article.asp?BaseFolder=prcgen&File=advancedbooks.htm

源格式,目标格式都清楚了,后面就简单了。写个程序生成html,配合例子的OPF文件稍加修改,用亚马逊官方的kindlegen工具生成。生成后的mobi文件可放到Kindle Previewer上预览(这工具真不错,效果很像),几经调整,终于得到了可用版本的Longman字典。

相比网上下的Longman,效果好的多:
  • 取词基本正常,加入了各种变化。
  • 音标也正常,网上的版本,音标转换成了金山字体,此字体害人不浅,音标转成这种字体对应格式后,在各种辞典里都不能正常显示。Longman自带的Unicode编码的音标不需要转换就能在Kindle上完美显示。

Saturday, July 23, 2011

UEFI/GPT+Arch Linux,小进展

UEFI模式启动Arch Linux成功,此贴发自Arch。不过遗憾的是加了noefi模式启动。

上次失败之后想了一下,用archboot版本通过VBox给移动硬盘重装了一下系统,至少保证kernel,grub2都是好的,在VBox无法启动,似乎是VBox的UEFI没有USB驱动?在实体机器上,可以进入Grub菜单,但仍然启动不了,重启之后,加了noefi参数,启动成功。装了xorg/gnome/gdm,可以进入X,说明intel的驱动是不依赖于BIOS的。现在就是这个noefi了。期待3.0的内核发布,也许就完美了。

现在移动硬盘是GPT分区了。想分几个区分几个区,还是很不错的。下一步等出差结束,回去把本机硬盘也格了作成GPT分区。Win7+Arch,完美了。

Monday, July 18, 2011

UEFI/GPT + Linux

这两天尝试了一下用UEFI/GPT模式安装和启动Arch Linux。尝试了几种方式都失败了,但是还是有些收获的。
首先尝试通过VBox挂载安装ISO,在移动硬盘上安装。问题很多:
  • 官方的安装盘不支持EFI启动
  • 安装程序似乎不支持GPT分区,但是可以挂载
  • 安装程序不支持安装grub2-efi,需要手动安装(wiki)
经过各种努力,装上了一个不完美的版本,但是在Latitude E6420中,无法启动。可以进入Grub2,在装载内核时无响应。搜了一下,发现有人提了相似的问题:
应该是2.6.39的kernel以及本机的UEFI都有bug,导致安装失败。去DELL官网搜了一下BIOS更新,从A04升级到A05,还是不行,看来要等3.0的kernel了。目前本人对于Arch还是个新手,不懂AUR安装kernel,此事暂缓,继续观察。

再次尝试直接在VBox中安装。这次用了非官方支持的archboot(估计也是官方做的,只是不提供官方支持),可以UEFI启动,启动后一段时间是黑屏的,一度认为不行,直到出现企鹅图标,发现还是可以的。archboot用part分区,可支持创建GPT格式以及分区,需要手工建立GPT系统分区(见wiki),可支持安装grub2-efi(貌似有bug,反复安装了几次),略去N次尝试后,终于可以启动了。有个问题是无法设置成默认启动,用efibootmgr设置不报错(wiki),但是无效。必须从EFI Shell找到grub.efi,手工启动。虽然不完美,总算有了一个可以启动的。

在新系统中折腾好了Xorg,GnomeShell,GDM后,悲催的发现无法启动,貌似是vboxvideo驱动依赖与BIOS。也就是说vbox-guest-addtions不支持UEFI下的图形。

折腾到这里还是没有一个能用的Linux桌面。不过收获还是不小的。现在对EFI的启动过程有点明白了,原来的MBR扇区+stage2文件都存在GPT那个系统分区中(200M,fat32格式,设置boot=on),可以存一堆不同的,大家互不干扰。启动程序需要在UEFI的启动管理器中设置(似乎叫NVRAM,Mac中常见这个东西),如果没配置,也可以通过EFI Shell去找到那个efi文件并加载。EFI Shell内置在VBox中,但是实体机器是没有的,也是需要安装的。

后面,就是期待3.0的kernel的发布,会再次尝试。

Sunday, July 17, 2011

博客再开

2011年,一个字乱。公司动荡,换了工作,平静的生活一下子被打破了。再想回去过那种安逸的日子已经不可能了,还是努力工作吧。

想想前几年,似乎一事无成。也许是注意力太分散了,面面俱到,但是都没有深入下去。是时候静下心来了,在一两个点上研究的深一点,有所突破。

去年,本来是想深入学习LLVM的,但新公司是纯Java体系,那就先钻研钻研Java吧。正好JDK7即将发布,我的Java知识还停留在JDK1.4上,需要严重更新了。还有Linux,仍然要继续玩下去,工作中也用得着。Mac和iOS什么的我就不花时间了。

去年一年都在混腾讯微博,逐渐发现哪里的用户群年龄普遍偏低,不太适合我,干脆放弃,只留了一堆汽车媒体的,看看车而已。不久前又注册了Google Plus,用了几天,挺不错的SNS,准备以G+为中心,开始整理我的SNS类应用。但是同时我也感觉到,其实我还是需要一个Blog的。这年头大家都在玩Twitter一类的东西,写Blog的人越来越少了,但是Twitter的速度太快,我还是需要一个静下心来写点什么的平台。Blog的速度比较适合。

这个Blogger帐号貌似06年就申请了,但是由于国内访问不了,就没有维护了。一直没有找到合适的地方,之前在腾讯QZone混了一段时间,不过在那里写技术类博客似乎不是好注意。还是先挪到Blogger这里来吧。都准备以G+为中心了,Blogger也挺好的。反正主要是自己记录写东西的,国内能不能访问也无所谓了。