Kindle Touch破解、更换字体

UPDATE:
豆瓣上现在有人放出了自动更换字体和汉化的破解脚本,可以移步这里下载。如果想要看看如何用ssh进kindle内部偷窥的话可以接着往下看。

前段时间从米国通过转运公司买了一个Kindle touch,拿到手里面以后发现中文显示非常蛋疼,会出现中文笔画粗细不一的问题。买Eink图的就是显示效果好,字体有问题自然是不能忍的。多看不知道什么时候才会出Kindle touch的版本。不过对于看书而言换多看的意义也不是太大。在网上搜索了一下更换字体的流程,将整个过程整理如下:

  1. 破解
    下载kindle-touch-jailbreak-1.0,里面有一个jailbreak.mp3。连上KT以后将KT中的Music目录清空,把jaillbreak.mp3拷贝进去。弹出KT以后在KT的menu->Experimental->Music Player。然后在屏幕下方会看到“Press to Jailbreak”,点击这个按钮,重启以后就破解完成了
  2. 安装ssh
    下载simple_usbnet_1.1,将解压出来的update_simple_usbnet_1.1_install.bin放到KT根目录下。弹出KT以后选择menu->Settings->menu->Update your kindle。这时候KT上就安装好ssh服务了。
    在KT的搜索框里面输入”;un”(不包含引号)就可以启动或者停止KT的ssh服务。在搜索栏中输入”;un password PASSWORD“来设置root的初始密码,PASSWORD替换成你的密码。
  3. PC端安装驱动
    如果你是Linux系统可以直接跳过这一步,如果是win7连上电脑以后应该会出现一个找不到驱动的设备。在设备管理器中找到这个设备,手动选择驱动程序。在选择驱动程序的时候选择 网络适配器-> Microsoft Copration-> Remove NDIS Compatible Device就可以了。Win7会提示不推荐安装这个驱动,但是其实是没问题的。
  4. 更换字体
    ssh用root用户远程登录到 192.168.15.244。运行mntroot rw来去掉文件系统的只读限制。这样你就可以用WinSCP之类的软件来把字体文件上传到KT中了(你要是嫌麻烦也可以直接把字体拷贝到KT中,然后从ssh替换掉原来的文件)。你只需要把你想要的字体替换掉 /usr/java/lib/fonts下面的MHeiM18030_E.ttf ,MHeiM18030_E_Bold.ttf和code2000.ttf这三个字体就可以了,正文貌似是用的code2000.ttf,推荐使用黑体。更换完了以后记得看一眼字体的权限,必须是644权限才可以。
    然后就是下载这个local文件,解压以后放到/etc/fonts下替换原来的文件。
  5. 重启
    大功告成

nginx配置备忘

安装

在ubuntu 10.10里面还没有专门的fastcgi包,必须通过lighttp里面附带的fastcgi加上自定义的脚本来启动fastcgi进程。但是在ubuntu 11.10里面有了一个php5-fpm的包专门用来处理fastcgi,免去了自己倒腾脚本的麻烦。把这一堆包装上安装就算是完事了:

1
sudo apt-get install nginx php5 php5-fpm mysql-server mysql-client

配置

配置也很简单,直接在/etc/nginx/sites-avalable里面添加一个自己的配置文件,然后创建一个到/etc/nginx/sites-enabled/的软链接即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
server {
        listen   80; ## listen for ipv4; this line is default and implied
        root /path/to/root/;
        index index.php index.html index.htm;
 
        # Make site accessible from http://localhost/
        server_name _;
 
        location / {
                # 找不到页面的时候返回到index.html
                try_files $uri $uri/ /index.html;
        }
 
        # 将错误页面重定向到制定的文件
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /usr/share/nginx/www;
        }
 
        # 处理php文件
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi_params;
 
                # 在使用wordpress必须要有这个rewrite,否则访问rss的时候会出现404错误
                if( !-e $request_filename)
                {
                        rewrite ^/wordpress/(.+)$ /wordpress/index.php?q=$1 last;
                }                        
        }

北航毕业论文latex模板

最近更新了一下北航的硕士毕业论文latex模板,在texlive的xelatex下面编译。整个项目放在了这里:

http://code.google.com/p/buaalatex/

在Google里面搜索了一下发现居然根本搜索不到这个项目页面,大班群里面还好多人在找模板找不到,因此决定放上来说一下。

另外这个项目里面还还有Grissom做的本科毕设xelatex模板,以及Philips Bai做的ctex版硕士模板。需要的童鞋可以关注下。

喜添新丁

puppy1

家中喜添新丁,两个多月大。长的倒是很讨人喜欢,眼神忧郁,发型拉轰。只是体毛太重,小小年纪就浑身是毛~

veer上手玩

img_20111028_120014

前两天twitter上面不断听说有人在买veer来玩,去淘宝上看了一下价格发现只有650块。加上我已经被手上的HTC Magic卡到天荒地老的状态折腾的不行,于是乎当即决定跑到淘宝上面去入了一个。用了将近一周,算是有点发言权。

从外形和尺寸上说veer应该是很精致很讨女生喜欢的类型,从图里面可以看到veer基本上就和我的手掌差不多大。如果不推开键盘的话打电话都感觉不是很握的住。原本以为这么小巧的手机单手玩会很轻松,结果发现在输入的时候一只手是完全没办法按键盘的,还是得两只手操作。整个手机的边缘都是圆圆的,加上外壳又是有点滑的材质,让人感觉很容易这个小不点儿很容易就会从手里面非出去的样子(事实上昨天晚上就把它扔出去两米远,不过居然一点伤痕都没有)。手机的滑盖还比较紧,如果是尝试一只手推开的话会容易拿不住手机往外滑,结果还是得两个手。当然如果你不用输入仅仅是触屏操作看看网页的话一个手还是没问题的。

在这么小的机身上生生的塞进去一个全键盘,手指粗大的同学肯定会痛苦的要死,平时用肯定得用手指甲来点,否则很容易误操作。不过用了一段时间以后感觉这个键盘输入虽然不算是很快,但是肯定是比触屏的全键盘输入要快的。考虑到平时触屏平时都使用九宫格输入法打字,veer输入中文肯定会慢一些,但是输入英文就肯定是占优的。

系统的话是传说中的WebOS 2.1.2。见识过了这个评价颇高的系统之后感觉果然还是很不错的,除了基本没有应用。卡片式的多任务管理很方便好用,开很多个程序也没出过什么问题,仍然运行的很流畅(不过也得考虑到现在WebOS上面也只有一些简单应用)。很有意思的是整个系统可以下载到很多的补丁来改变系统的行为,比如说可以在屏幕右上角的菜单里面添加3G的开关等等。稍微研究了一下发现居然连系统界面都是用html+javascript的方式来做的,居然能够做到这么流畅你让Android那卡卡的java情何以堪啊。系统的手势区很好用,直接点手势区切换多任务比android的长按home键好太多了。另外滑动删除信息、通知的功能也很好使。在功能手机上你可能需要进选项,删除,确认这好几步操作,android上面也得用那个蛋疼的长按操作。WebOS上面只用潇洒的一滑就好了。

应用程序有国内第三方开发的QQ,网易新闻,街旁等不超过10个软件。而HP官方的商店里面的东西基本上都是没啥用的垃圾软件。比较意外的是居然有愤怒的小鸟,不知道是不是第三方移植的。不过WebOS有一个有意思的功能就是能把一个网站作为一个应用保存起来,这类似与Chrome的应用的概念。本质上就是一个书签,不过如果对于专门对手机优化过的网站而言体验并不差。我一直习惯在公交上读Google Reader,这段时间一直用网页版,发现并不比Android原生的应用差多少。

逛了逛WebOS的论坛,国内有一两个论坛上面研究WebOS,会有很少的几个自制软件、ROM。发现一个有意思的现象就是,因为WebOS的中文软件真的很少,因此论坛里面仅有的几个中文软件基本上都是收费的。虽然价格都不贵,但是估计因为最近HP的大甩卖行为这些开发者也应该挣了些零花钱。

总体而言这个手机做工精致,如果能够体积放大一半儿,待机时间能再长一些就很不错了。不过鉴于它目前的价位,还是非常适合买一个用来哄妹子的,妹子们对这个造型的手机都比较没有防御力。

处理Emacs中的行号和空白字符

做过开源项目的童鞋可能会知道,在很多开源项目中会有专门的脚本来检查代码风格。其中包括行尾是否有多余的空白字符,是否使用使用tab,每一行是否超过了指定的宽度等等。这些问题通常在敲代码的时候并不容易看出来,等到要提交代码的时候才发现问题。稍微搜索了一下发现在emacs中有一个很有用的whitespace插件可以解决这个问题。

whitespace可以针对设置的规则对上面提到的问题进行高亮显示,效果如下:

WhiteSpaceOnLight

whitespace具体可以找到的问题包括tab, 空格混用;行尾多余的空白字符;文件结束前的空白字符;超过指定长度的行等等。可以通过设置whitespace-style来指定需要提示哪些问题。在我的配置中使用了如下配置:

1
2
3
4
5
6
7
;; deal with white spaces
(require 'whitespace)
(global-whitespace-mode)
(setq whitespace-style
      '(face trailing tabs lines lines-tail empty
        space-after-tab space-before-tab))
(add-hook 'before-save-hook 'delete-trailing-whitespace)

默认的whitespace-style把整个buffer被搞得有点乱糟糟的,因此我把不是很需要的部分都去掉了,只剩下检测行尾空白、tab等少数几个问题。对于行尾的多余字符而言,一个个删除也是很麻烦的事情。所以我直接用delete-trailing-whitespace在保存的时候把它们都干掉了。

不过在这里whitespace会和行号有一点点冲突。通常为了显示行号都会打开linum-mode,行号会是右边对其的数字。whitespace会认为行号前面的空白字符是问题字符而高亮显示,搞得非常难看。为了解决这个问题可以用下面代码对linum进行设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
;; Show line number
(require 'linum)
(global-linum-mode t)
(setq column-number-mode t)
(setq line-number-node t)
(setq linum-format "%5d ")
(add-hook 'linum-before-numbering-hook
          (lambda ()
            (let ((w (+
                      (length
                       (number-to-string
                        (count-lines (point-min) (point-max))
                        ))
                      2)
                     ))
              (setq linum-format
                    `(lambda (line)
                       (propertize (concat
                                    (truncate-string-to-width
                                     "" (- ,w (length (number-to-string line)))
                                     nil ?x2007)
                                    (number-to-string line))
                                   'face 'linum))))))

这是从emacs wiki上面抄过来的一段代码,用了一个特殊的unicode字符x2007来设置行号的格式,既能达到右端对其的效果又不会被whitespace误杀。

Emacs中处理日志文件

最近写的东西会将信息输出到一个日志文件中去,每次调试的时候log文件内容都会刷新。每次都手动revert-buffer比较烦人,查了一下发现有一个auto-revert-mode可以自动刷新。下面的配置可以实现对于.log文件调用auto-revert-mode:

1
2
3
4
5
6
7
8
9
10
11
;; auto revert log files
(add-hook 'find-file-hook
          (lambda ()
            (if (string-equal
                 ".log"
                 (substring (buffer-file-name)
                            (search "." (buffer-file-name))))
                (progn
                  (setq auto-revert-mode t)
                  (message "Enabling auto-revert-mode for log file")))
            ))

如果是比较长的日志文件,并且日志使用追加内容的方式添加上去的话,可以将上面的(setq auto-revert-mode t)换成(setq auto-revert-tail-mode t)以提高效率。

STL中的红黑树

平时用STL通常只是顺手把vector, map之类常用的类拿来用用就完了,也没有想到去仔细研究里面都有些什么东西。这两天有一个算法程序需要将一堆对象排序,并且会非常频繁的插入删除,对效率的要求极高。原本想用priority queue,但是发现它是对一个数组进行堆排序的方式来操作,效率并不高。在STL的文档里面找了找发现居然没有红黑树,google了一下才知道set, map底层都是用红黑树实现的,只是这个红黑树没有暴露出来给人用。

也不知道是出于什么考虑,性能优秀的红黑树虽然标准库里面有,但是却遮遮掩掩不直接提供给大家用。值得注意的是,因为红黑树是内部使用的类,各个STL实现中的红黑树还不一样。

在VC的实现中红黑树是在xtree文件中的_Tree类,用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include 
#include 
#include 
 
using namespace std;
 
typedef _Tree< _Tset_traits, allocator, false > > rb_tree;
 
int main()
{
    rb_tree* tree = new rb_tree( less(), allocator() );
    for(int i=35; iinsert(i);
 
    printf("output: %d ", *tree->begin() );
}

gcc中的实现则是在bits/stl_tree.h文件中,而且类的名字和用法都不一样:

1
2
3
4
5
6
7
8
9
10
11
12
#include 
 
typedef _Rb_tree,
                 less > rb_tree;
typedef rb_tree::iterator rb_tree_iter;
 
int main()
{
    rb_tree queue;
    queue._M_insert_unique( int );
    printf("size: %d", queue.size() );
}

对Archlinux的怨念

之前之所以开始使用Archlinux是因为觉得ubuntu的软件包更新太慢,有的软件居然用的还是一年多以前的版本。冲着Archlinux的Rolling Release的名号在自己电脑上把它装上了。

事实上Archlinux的确是一个很有特色的发行版,主要在于它的软件包管理系统可以支持用户向软件仓库中提交软件包的编译脚本。通过这个编译脚本它可以自动化的完成下载源代码、编译、打包、安装的过程。因为编译出来的代码是经过打包以后再安装的,自然这就比传统的make install要保险的多,至少你不用担心卸载的问题,同时还能够随时用到最新的软件。

另一个特点是它的包管理器不会去修改你的配置文件,很多升级相关的操作也没有实现自动化(比如说内核升级以后有些内核的mod就必须自己手动编译、设置),而ubuntu则会在内核升级的时候把所有相关的东西都给你设置好。Archlinux的开发者声称这是一个feature而不是一个bug,因为Archlinux的哲学是不会让软件自作聪明。

好吧,看起来这真是一个能让你变成资深黑客的发行版(或者至少是看起来像黑客)。但是用了一段时间以后发现Archlinux有的时候实在是会有让你砸电脑的冲动。它的软件仓库实在是太不靠谱了!我在虚拟机里面跑了几个月的Archlinux,经历了两次更新以后莫名其妙的问题。在直接装到硬盘上以后又经历了两次。或者是更新以后死活进不了gnome,一登录就重新回到gdm;或者是更新完以后直接所有bash命令都失效;或者是告诉你内核出了虾米虾米问题。

当然hacker就要有hacker的样子,找到bug,告诉developer,甚至自己写个补丁发过去。但问题是这种问题通常都是快速出现并且快速消失的。也许这个问题只是在某种特殊情况下出现,当过两天软件更新到某个更新的版本的时候这个问题又不复存在了,每次我都会在irc, news letter, forum, google里面到处问但是却根本没有人知道是怎么回事,看来我是少有的几个遇到问题的倒霉蛋。更要命的是它出问题的时候正是大作业如滔滔江水绵绵不绝的时候,而我想要写篇latex却要用另外一条电脑满世界找不知道藏在哪个犄角旮旯的解决方案。

好吧,我认输。在忙过那一段时间以后又一次直接把archlinux重装了,并且决定要是下一次还在更新以后出问题我就再也不用这个东西了。后来再跟一个朋友聊天的时候知道他以前也用的archlinux,一问才知道他也遇到了所有bash命令出错的问题,一怒之下又装回了ubuntu。看来倒霉的人不止我一个 Orz
以前有人说Linux是一个危险的东西–它会让你不知不觉的把大量时间耗费在无意义的对系统的配置上面,而正经事儿却一件也没有干。对于其他Linux可能未必是这样,但是,Archlinux的童鞋们,小心了。

尝试给开源项目打补丁

最近开始尝试给开源项目打补丁。首先是跑到Gnome Love上面去逛了一圈。GnomeLove是Gnome官方为了降低开源开发者加入的门槛而搞的一个页面,上面有一些帮助入门的文档链接,从GTK开发到git的使用都有。然后再到Bugzilla上面用GnomeLove作为关键词,能够搜索出一堆比较容易改的bug。
我抓了Empathy的一个bug开始改。Empathy有一个问题就是,它的聊天窗口不会记忆联系人边栏的位置,每次打开一个窗口都需要自己重新拖动它。修改这个bug也很简单,在聊天窗口创建的时候加入一个事件响应函数。然后再在窗口边栏位置变化的时候把这个位置保存在GConf里面,下次窗口打开的时候再把这个数读出来就好了。上次Jesse给Gnome给数独游戏修改bug的时候对方一个多月以后才有反应,不知道这个bug多久以后会有人理我?