liboi发布0.0.3版。该版本主要做到Windows的移植工作。目前liboi同时支持Windows和Linux。
下载: http://code.google.com/p/liboi/downloads/list
Windows用户请注意下载 liboi-0.0.3.zip文件。*.tar.gz和bz2文件都只打包了Linux编译需要的文件。
接下来0.0.4主要是Windows平台上的一些重整工作,例如把第三方依赖拿出来,tar.gz和bz2也打包Windows平台需要的文件。
完成了liboi 0.0.2版本,发布在了google code上。
0.0.2版本增加了文件移动的操作,可以将文件拷贝到设备上,或者从设备上拷贝出来。
下载:http://code.google.com/p/liboi/downloads/list
接下来开始做到Windows的移植工作。
自从用了OpenInkpot,并且推荐了几个用v3的朋友换成OpenInkpot之后,越发觉得,对于普通用户来说,管理阅读器相当的麻烦,三天两头就需要提供技术支持,从安装字体到拷贝书籍再到配置系统,不一而足。
因为OpenInkpot在V3上使用USB RNDIS驱动连接阅读器和PC,并且通过SSH的方式连接设备,但是SSH的设置步骤复杂,而且在Vista x64和Win7这种比较新的操作系统上面总有些问题,对用户要求比较高。
其实V3的这种连接模式比较像Windows Mobile手机的方式,这种方式在具有一个客户端的时候有很大的灵活性,例如WM手机的Active Sync。另外就是等待OI支持USB Mass Storage,即模拟一个U盘出来的方式,但是看起来一时半会儿也没有做的计划。
但是OI有它的好处,就是很多可以自定义的东西,例如阅读器的键绑定——我一直想把翰林V3左侧的翻页键互换——但是修改的方式需要用户ssh到阅读器修改。这对于普通用户来说简直就是噩梦。
同时,OI还有一些问题,例如在0.2 rc5当中添加的libextract,即在书架模式下显示书籍的元信息,而不是文件名,在很多时候其实是有问题的。官方的绕过方式是重命名一个文件,但是同样需要ssh到阅读器修改。
由于这些问题,最好有一个可以用来管理电子书设备的客户端软件。这个软件也许可以做下面的事情:
- 自动配置电子书的USB RNDIS连接
- 书籍搜索、下载和同步
- 数据的同步,例如书签
- 状态备份和恢复,例如当前阅读的图书的页码,书籍版式(横屏,切白边等)。
- 安装字体
- 设备软件更新
- 设备配置修改,例如修改键绑定
- 其他工具性的功能,例如拷屏
等等。
但是前提是要有一个客户端软件。因此最近先整了一个基础库,取名 liboi,即lib-openinkpot之意,host在Google Code上面: http://code.google.com/p/liboi/。经过几个星期的晚上+周末的工作,现在把0.1版本放出来,这个版本支持最简单的功能:
- 根据默认的SSH配置连接阅读器。
- 获取阅读器信息,类似OpenInkpot版本号
- 在阅读器当中执行命令(有了这个功能剩下的就是想象力了)
目前只支持Linux平台,请在项目主页上下载源码包自行编译。源码包当中有oish.c文件,会生成一个oish(OpenInkpot Shell)的程序,可以作为例子程序使用。
后面的事情,主要包括:
- 拷贝文件,包括拷进来和拷出来。
- Windows Porting
- SSH自动配置
另外招募擅长客户端界面的同仁开发客户端GUI,我要做的话估计界面会很丑。当然了,没报酬,代码开源,纯自愿参与。
最近OpenInkpot已经发布了官方0.2预发布版本20091001(算是给国庆献礼么?:P),这个版本第一次把中文本地化的内容包含在内,也就是说将来大家使用OpenInkpot的时候就可以看到中文的界面了。大家可以在首次刷机之后选择语言为“简体中文”,或者到设置/Setup里面更改。注意选择语言界面里面9,0两个键不能用来翻页的,小心选中了希腊语。:P
目前中文化的部分仍然在进行当中,已经完成的部分包括:
1. 新的中文字体,使用文泉驿中文字体替换掉了以前的老字体,中文显示漂亮了很多。
2. Wiki页面的中文化,包括用户手册(http://openinkpot.org/wiki/0.2/UsersGuide/zh)和安装指南(http://openinkpot.org/wiki/0.2/InstallationGuide/zh)。
3. 大部分程序界面的中文化。包括书架、非PDF阅读器的大部分。PDF阅读器(LocoPDF)当中的字符串现在还没有抽出来,因此暂时还只有英文界面。中文化进度可以到http://l10n.openinkpot.org查看,有兴趣的也可以注册上去参与翻译和查看翻译进度。
正在进行的工作包括:
1. 随机帮助文档的翻译。这个功能在最近才刚刚加入到OI当中,翻译工作也刚刚开始进行。有兴趣的可以参见http://groups.google.com/group/openinkpot-l10n/browse_thread/thread/ac83e60784869903
2. 应用程序名的翻译。现在还没有好的名字想出来,因此暂时没有提交。征求大家的意见,下面这些应用程序名怎么翻译比较合适:
* FBReader: 默认的非PDF阅读器
* CoolReader: 可选的非PDF阅读器
* LocoPDF: 默认的PDF阅读器
* MadEye: 默认的图片查看器
* 小游戏们:Bridges Puzzle, Fifteen Puzzle, Flip Puzzle, Pegs Puzzle, Solo (Suduko like) Puzzle, Twiddle Puzzle。都是一些益智小游戏,介绍可以参见http://www.chiark.greenend.org.uk/~sgtatham/puzzles/
3. 一些杂七杂八的东西,例如存储器名字,“Internal Storage”和”SD Card”这种,还没翻译。
如果有什么本地化相关的建议,可以直接联系我 (ftofficer@ftofficer.com)
昨天收到了Mozilla Addons发来的邮件,经过漫长的等待,TabIMSwitch已经成为了Mozilla Addons大家庭的正式一员。
现在你可以登录Mozilla Addons上的页面来下载最新版本了。
https://addons.mozilla.org/addon/5413
—
5413将是你的终生代号 :b
VeryCD是个不错的网站,除了在每个页面上面出现的flash广告(见下图)。当然我也知道VeryCD维持生存基本上要靠广告,但是经常搞死我浏览器的flash广告,我是不得已把它过滤掉的。

Firefox对于广告的解决方案当然是AdBlock Plus。这个插件可以按照通配符或者正则表达式来封锁广告。如果你不懂通配符或者正则表达式,直接用鼠标点点基本上也是可以解决问题的。通过在其中添加一条规则封锁 http://222.37.134.*/*.htm*,顺利达到了封锁VeryCD上面的flash广告的目的。
但是随之而来的问题是,因为过滤掉了一个iframe,整个页面布局就有了一些问题,资源详细信息因为布局的缘故无法显示(见下图)。

为了能够让它显示出来,只好另外再打一层补丁。这次用Greasemonkey,让它在加载VeryCD页面的时候在原本显示广告的地方显示另外一个东西来占个位置,自然就能够让详细信息部分显示了。
在这里显示什么呢?看了几个VeryCD页面之后,发现大多数的页面上面在简介部分都有至少一幅图片。按理说把第一副图片按比例缩小放在其中应该可以吧。最后结果见下图:

最后贴Greasemonkey脚本的代码。请将其拷贝到记事本保存为“所有文件”,文件名选择.user.js结束。保存后拖动到Firefox(事先需要安装了Greasemonkey),确定即可安装。
== 代码开始,请不要拷贝这一行 ==
// ==UserScript==
// @name Re-format VeryCD item detail
// @namespace http://ftofficer.spaces.live.com
// @description Re-format VeryCD item detail
// @include http://www.verycd.com/topics/*
// ==/UserScript==
function findFirstImg() {
var paras = document.getElementsByTagName(‘p’);
for (var i=0; i<paras.length; ++i) {
var p = paras[i];
if ( p.getAttribute(‘class’) == ‘inner_content’) {
var imgs = p.getElementsByTagName(‘img’);
if ( imgs && imgs.length > 0 )
return imgs[0];
}
}
return null;
}
function getScale(imgWidth, imgHeight, divWidth, divHeight) {
var wScale = divWidth * 1. / imgWidth;
var hScale = divHeight * 1. / imgHeight;
if ( wScale > 1. && hScale > 1. ) {
return 1.;
}
return wScale < hScale ? wScale : hScale;
}
function fixupVeryCDDetailPage() {
var moreInfo = document.getElementById(‘moreInfo’);
if ( moreInfo ) {
var frame = document.createElement(‘div’);
frame.setAttribute(‘class’, ‘Banner1’);
frame.width = 300;
frame.height = 250;
firstImg = findFirstImg();
if ( firstImg ) {
var img = document.createElement(‘img’);
img.src = firstImg.src;
var imgScale = getScale(img.width, img.height, frame.width, frame.height);
img.width = Math.floor(img.width * imgScale);
img.height = Math.floor(img.height * imgScale);
frame.appendChild(img);
}
if ( moreInfo.parentNode ) {
moreInfo.parentNode.insertBefore(frame, moreInfo);
}
}
}
fixupVeryCDDetailPage();
== 代码结束,请不要拷贝这一行 ==
今天打开Space准备写blog,却发现“发布日志”按钮仍然是灰掉的,看看Greasemonkey的脚本状态已经启用了,难道M$会ws到连我这个第三方开发者都不放过?接下来就是分析一下看看有什么变动,然后更新一下脚本。但是看来看去文档的结构都没有变化,Greasemonkey脚本的运行也很正常。
无意之中在标题当中填了几个字符,竟然发现“发布日志”按钮启用了!然后把Greasemonkey的用户脚本设置成禁用,刷新页面,输入标题,“发布日志”和“保存为草稿”立即启用了。
原来我误解了M$,其实是M$做了点工作恢复了Space的bug,看来我的Greasemonkey脚本可以退休了。
不过暂时还是保留在那里吧,不知道哪天会再次出现问题。
今天收到Mozilla发过来的邮件,希望我们可以把自己的扩展升级到支持Firefox 3.0。本来在Beta 1出来的时候就打算做的,一直没动手,今天既然收到了信,就花了一天的时间调整了一下TabIMSwitch,小小的改动了一下,目前已经兼容于Firefox 3.0 Beta了。
新版本号码 1.1.0.41。
下载TabIMSwitch 1.1.0.41
SHA1校验码:0f0acbdd7df6ddd712541d5e766fb0ce9f07a56d
MD5 校验码:fe421b0905dbae7e59bbb3d028ad311f
但是因为现在最广泛使用的1.1.0.37版本的一个bug,自动更新到1.1.0.41基本上是不可能的,因为1.1.0.37版本当中根本就不包含自动更新URL。造成这个问题的原因是在编译的时候把放在Mozilla addons上面的版本和公开在Google Code上面的版本弄混了,而Mozilla的版本是不能有自动更新URL的——Mozilla会给你加上一个。
所以,麻烦大家自己手动下载下来升级吧。
为了防止以后出现类似的问题,这次把编译脚本修改了,把Mozilla addon上面的版本和Google Code上面的版本完全分开,将来应该不会出现类似的问题了。
— 更新@2007-12-23 3:08 —
发完blog之后两分钟,发现1.1.0.40的包有问题,版本号忘了改了,还是1.1.0.39,忙中出乱啊,晕啊晕。
下载了1.1.0.40的,等自动更新到1.1.0.41吧。
也许你发现了上面的帖子。
这个帖子是我在进行测试,看看能不能启用Live Space的“发布日志”按钮。
事实上是成功了,特将其分享给大家。
首先,你需要安装Firefox扩展 greasemonkey。这个扩展可以使你在加载一个页面的时候执行一段你自己的Javascript程序。
安装之后,将下面的程序拷贝到一个文本文件,并把扩展名改成 .user.js。(务必是.user.js,否则greasemonkey无法自动安装之)。
===脚本开始,拷贝时请不要包含这一行===
// ==UserScript==
// @name Enable Live Space Post Button
// @namespace http://ftofficer.spaces.live.com
// @description Enable Live Space Post Button
// @include http://*.spaces.live.com/*
// ==/UserScript==
function LiveSpace_enableButton(id) {
var button = document.getElementById(id);
if ( button ) {
var cls = button.getAttribute("class");
var clsNameEnd = cls.indexOf("spDisabled");
if ( clsNameEnd != -1 ) {
clsNameEnd–; // skip " " before spDisabled
var newCls = cls.substring(0, clsNameEnd);
button.setAttribute("class", newCls);
button.setAttribute("mi:state", "enabled");
var aNode = document.createElement("a");
aNode.id = id;
aNode.href = "#";
}
}
}
LiveSpace_enableButton("actionToolbarBlogPost");
LiveSpace_enableButton("actionToolbarSave");
===脚本结束,拷贝时请不要包含这一行===
然后将这个js文件拖放到Firefox窗口中,greasemonkey会弹出对话框询问是否安装,选择是,即可完成安装。
然后,去Live Space的“添加日志”当中看看吧。
如果看到“发布日志”和“保存为草稿”仍然没有启用的话,请看看greasemonkey当中配置的网直通配符是不是和你的网址一致,自己改改看看。在不行可以在这里回复。