This page intentionally left blank ((this is the simplest update I’ve ever written))
Kindle 3.1 中文阅读
注:本文会涉及到kindle的jailbreak,如果对此有concern(鄙人表示非常理解)抑或有某种不可告人的洁癖抑或根本不需要在kindle上阅读中文的话,请勇敢的忽略此文。 首先列出本文的参考文献,因为本文都是建立在参考它们的基础之上:
[引子] 我之前经常用 chrome 的 send to kindle 插件往kindle上发想看但又不想在浏览器上看的文章,之前鬼差神使般的竟然没有遇到过任何中文issue,但是一个月黑风高的夜晚kindle 3.1 release了,然后所有的平静就这样被打破了,突然间所有 send to kindle 过来的文章无一例外都render出一个个小方块,虽然我之前一直有预感,但这一刻最终终于还是来了… 为了排除是插件升级所带来的问题,另外一个月黑风高的夜晚我给插件的作者发了comment,告之其中文有issue,第二天的reply果然验证了我的哥德巴赫猜想,插件没问题,是kindle有问题,anyway,虽然一直还没理解之前kindle 3.03奇迹般的没问题的原因,但既然3.1还是有问题,我们就需要fix它;既然amazon不是这么proactively的fix它,那我们就只能小小的customize一下下了。 [changeLocale] 这个方法从3.0*开始便一直work,但是它会使中文显得比较黯淡,阅读起来有点费力,可能还有一些别的副作用,但是无论如何,至少是一种solution:
;debugOn ~changeLocale zh-CN ;debugOff
[Jail Break] 为了使用 MobileRead 论坛的 fonts hack,我们需要先越狱,下载那里的jailbreak包 ((目前最新版是kindle-jailbreak-0.6.N.zip)),解压后从中找出符合你kindle版本的update_jailbreak__install.bin文件(比如我的kindle wifi是update_jailbreak_0.6.N_k3w_install.bin),将其通过usb连上kindle后copy到kindle的根目录,然后eject kindle并Update Your Kindle ( [HOME] -> [MENU] > Settings -> [MENU] > Update Your Kindle ) 后,你的kindle便已经成功越狱了。 [Fonts Hack] Jailbreak后,我们便可以安装fonts hack了,同理,到#1参考文献下载 fonts hack ((kindle 3目前的最新版是kindle-fonts-4.4.N-k3.zip)),文件有点稍大,下载可能有点慢,耐心耐心… 下载完后解压后从中找出符合你kindle版本的update_fonts__install.bin文件(我的是update_fonts_4.4.N_k3w_install.bin),然后同jailbreak一样,将其通过usb连上kindle后拷到kindle根目录,然后再eject,Update Your Kindle,这样默认的字体hack就装好了。kindle restart后你应该已经可以看到中文字体已经没有问题了,并且英文字体也被customize成fonts hack自带的Droid Sans了,如果你更喜欢系统默认的英文字体,没有关系,下面我们自己来customize字体。 [Customize Fonts] 我的preferences很简单,英文仍旧沿用系统自带,中文使用尽量符合纸质书阅读习惯的字体(不要太黑,也不要太粗,当然更不能有乱码)。 首先,我们用系统自带的英文字体来覆盖fonts hack的英文字体,系统默认的字体根据#2参考文献可以在这里下载到,装完fonts hack再用usb连上kindle后,我们可以发现kindle根目录多了一个叫做linkfonts的目录,其子目录fonts目录包括了所有我们customized的font,将系统默认字体包解压后覆盖到linkfonts/fonts目录后即可。 接下来我们把中文字体改成方正兰亭(我个人的preferences而已,当然是在蛋疼试过一圈之后所得出来的血的经验,更多的中文字体亦可在#2参考文献中找到),同理,根据#2参考文献,方正兰亭GBK字体可以在这里下载到。解压后不用全部拷贝,只用将其fonts目录下的CJK.tff和CJK_Bold.ttf文件copy到kindle的linkfonts/fonts目录即可。 ok,除了重启we’re almost done,fonts hack默认enable了一个叫autoreboot的feature,只要我们在linkfonts目录下(不是fonts目录)创建一个叫reboot的空文件然后eject kindle并拔掉usb后10s便会自动重启,当然我们亦可以手动重启。 [尾声] fonts hack之后的系统已经没有任何中文render的issue了,chrome的send to kindle插件也重新开始没有乱码,再次证明了不是插件本身的issue。#2参考文献后面还推荐了不少kindle的订阅和推送服务,有兴趣的同学都可以去尝试尝试。
Update 55: 核去核从
1. 这两天身感不适,这在坊间被普遍怀疑为被核辐射了,这话题先放着,暂且不表;话说处于如此命运多舛的年代,真的很有必要培养独立思考的人格和价值观,避免人云亦云,更应避免被归类为那群不明真相的一“小”撮人 ((怎么扯到这个上面来了……));当然,我这也显然不是来辟谣的,我素有阴谋论,况且都已经被核暴露了…;所谓以史为鉴,既然最近都分到了一个等级,那就更有必要了解一下1986年切尔诺贝利的故事,以及当局是怎么欺骗隐瞒以及维稳的了; 2. 这几天一直昼夜颠倒,黑白不分,晚上以msn standby为荣,早上以接不到con call为耻,过不了多久估计我不但能够黑白不分,而且马上就能是非不分,这应该只是个时间问题; 3. 核去核从还是何去何从?我不知道,我只知道我现在头痛想睡觉,很naive的期盼明早醒来也许那啥就半衰了,然后很naive的想到这也许还能排个序然后二分法查找什么的…… 4. 对了,临睡前还是忍不住要说下昨天看到的现在想到还想笑的但可能已经非常火星的东东:kmp算法,又称看毛片算法,名气之大可见一斑,以后各位看片的要多注意充电哦,这样才有助于提高效率,避免不必要的空间以及时间的复杂度浪费,你说呢?
vim-task on vim.org
很多事情很难预料,比如 vim-task 这个两个小时捣鼓出来,写readme和 blog intro 都比写code来的时间长的玩物竟然是我个人在github上最 “popular” 的 project(其余的都鲜有人watch和fork),真是有意栽花花不成,无心插柳柳成荫,悲哉悲哉; 如此这般说明这东西值得更广的分享,于是10分钟前便有了放到 vim.org 的想法,然后2分钟后它便成功上了 vim.org ((wordpress你情何以堪……)),最后还是希望它对真正感兴趣的人有用吧.
Update 54: 此时无声胜有声
1. 在一个谷歌告诉你它能穿越搜索,javaeye“不得不” 改名iteye ((说实话我感觉这像是真的……))的日子里面最好应该关掉手机睡觉,因为那样就不会在凌晨 4:30 被电话call醒; 2. 4.1是个特殊的日子,印象中很多好的坏的真的假的无聊的有趣的兴奋的郁闷的事情都会故意挑在今天,因为最后实在不行还可以undo,现实中能够undo且基本不造成影响全身而退的机会已经不多了;我们是那样的miss undo这个feature却不得; 3. 3月是个busy的月份,发生了好多事情,周围change不断,很多事情还在change,并change着;一句话总结,everything in progress; 4. 又到了清明回家扫墓的时候,每年的这个时候对我来说都不是一段开心的日子,丝毫没有任何调侃的欲望; 5. 还是白居易说的好,别有幽愁暗恨生,此时无声胜有声。
ArchLinux, RVM, Ruby, Rails, Nginx, Passenger and You
没看错,就是ArchLinux,怎么,又回来了?其实我一直未曾离开…… ((我有一个arch的liveusb,各种机子上一直保存着至少2+个arch的vm,虽然后来由于太占空间被转移到了移动硬盘,可就是一直舍不得删)) 好了不矫情了,let’s do business. [Overview] 本文介绍如何在archlinux上快速搭建rails开发环境,其中有很多可能包括我个人的preferences,各位完全可以根据自行需要取舍。 [ArchLinux] 参照Arch自己的 Official Install Guide ((最近老是official, official的… 你懂的)) 安装,其实根本不用参照,整个安装wizard做的已经非常非常user friendly了,我觉得。 [RVM] RVM 的安装依赖 git 和 curl: [cc lang=”bash”] $ sudo pacman -S git curl [/cc] 装之: [cc lang=”bash”] $ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head ) [/cc] 注意没有sudo,符合homebrew的philosophy,尽量不要root,何况我们还是作为development环境,rvm官网好像现在已经没有倾向性了,不过我印象中以前也是倾向于装在user的home目录。 同样是非常友好的安装过程,参照提示,在.bash_profile或者.bashrc的最后添加一行 Load 代码(如果你用的是bash的话): [cc lang=”bash” nowrap=”false”] $ echo ‘[[ -s “$HOME/.rvm/scripts/rvm” ]] && . “$HOME/.rvm/scripts/rvm”‘ >> ~/.bashrc [/cc] 我还喜欢shell补全,如果你也喜欢,再加上一句即可: [cc lang=”bash” nowrap=”false”] $ echo ‘[[ -r $rvm_path/scripts/completion ]] && . $rvm_path/scripts/completion’ >> ~/.bashrc [/cc] 最后查看一下notes,看看所在平台有什么注意事项: [cc lang=”bash” nowrap=”false”] $ rvm notes [/cc] [Ruby] 这里我们用rvm安装ruby,如果你喜欢也可以pacman -S之,我查了下,arch repo里的ruby是1.9.2,patch level也是最新的180,不过rvm的好处是可以安装好几个ruby版本,且能够非常方便的帮你维护不同的gemset,非常像python里面的virtualenv. 安装最新的ruby 1.9.2: [cc lang=”bash” nowrap=”false”] $ rvm install 1.9.2 [/cc] 如果需要也可以装上1.8.7的: [cc lang=”bash” nowrap=”false”] $ rvm install 1.8.7 [/cc] 下载编译安装完后我们就可以使用了,我喜欢把ruby 1.9.2,gemset rails3作为我的default: [cc lang=”bash” nowrap=”false”] $ rvm use 1.9.2@rails3 –create –default [/cc] verify一下我们是否还是 so far so good: [cc lang=”bash” nowrap=”false”] $ which ruby /home/samson/.rvm/rubies/ruby-1.9.2-p180/bin/ruby $ ruby -v ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux] [/cc] [Rails] 安装rails 3,最新的是3.0.5: [cc lang=”bash” nowrap=”false”] $ gem install rails [/cc] [cc lang=”bash” nowrap=”false”] $ which rails /home/samson/.rvm/gems/ruby-1.9.2-p180@rails3/bin/rails $ rails -v Rails 3.0.5 [/cc] 创建一个project做demo: [cc lang=”bash” nowrap=”false”] $ rails new demo [/cc] bundle一下,确保所有依赖的gem都已安装,这里会把sqlite3给补上: [cc lang=”bash” nowrap=”false”] $ cd demo $ bundle [/cc] 又一个milestone,测试一下: [cc lang=”bash” nowrap=”false”] $ rails s [/cc] [Nginx & Passenger] 不用apache,让我们换nginx玩玩;由于passenger的nginx模块安装的时候需要重新编译nginx,所以 pacman -S nginx 似乎是没有意义的,我们这里先skip掉,先安装passenger,然后在编译安装passenger的nginx模块的时候把nginx一并搞定。 安装passenger: [cc lang=”bash” nowrap=”false”] $ gem install passenger [/cc] 安装passenger的nginx模块,同时安装nginx,默认的nginx安装地址是/opt/nginx(可以修改到不需要root的地址),需要root,我们可以用rvmsudo搞定: [cc lang=”bash” nowrap=”false”] $ rvmsudo passenger-install-nginx-module [/cc] again,友好至极,装完连配置文件都帮你改好了,不过检查一下总不会错: [cc lang=”bash” nowrap=”false”] $ grep “passenger” nginx.conf passenger_root /home/samson/.rvm/gems/ruby-1.9.2-p180@rails3/gems/passenger-3.0.5; passenger_ruby /home/samson/.rvm/wrappers/ruby-1.9.2-p180@rails3/ruby; [/cc] 配置一下,来跑一下之前创建的demo project: [cc lang=”bash” nowrap=”false”] server {¬ listen 80;¬ server_name demo.local;¬ root /home/samson/code/demo/public;¬ passenger_enabled on;¬ rails_env development;¬ }¬ [/cc] [cc lang=”bash” nowrap=”false”] $ sudo /opt/nginx/sbin/nginx [/cc] 我取的server name时demo.local,所以在hosts里面加上这条entry后,我们就可以用browser访问 http://demo.local 了. 如果遇到403 forbidden,在nginx.conf里面改下user即可: [cc lang=”bash” nowrap=”false”] user samson users; [/cc] reload, welcome aboard! [cc lang=”bash” nowrap=”false”] $ sudo /opt/nginx/sbin/nginx -s reload [/cc]
samsonw.info refreshed
Yep, it’s refreshed and really officially launched ((if you’re still interested in the old one, check out http://samsonw.info/backup .)), http://samsonw.info/ . As you may already noticed, the content is simply copied from the about page here, which should be sufficient to prove that I’m really good at ctrl+c & ctrl+v, oh sorry, should be cmd+c & cmd+v …
What’s New in Firefox 4 (Part 3)
all right, go on. 接上篇和上上篇 . 这俨然已经全然变成了一个体力活…… anyway, let’s finish it.
· An experimental API is included to provide more efficient Javascript animations
看到experimental,然后点进去看到 “We do not guarantee to support it forever, and I wouldn’t evangelize sites to depend on it.” 我就一下子没了兴趣,当然你如果有兴趣完全可以深入研究一番。
· Firefox now supports the HTML5 video “buffered” property
HTML5 video的“buffered”属性,注意打了引号,我起初以为是video标签开始支持buferred这个attribute,但是我特地查看了下 这个demo ,却根本没有发现buffered这个attribute,于是我就开始confuse了,算了还是引用它自己的intro吧,“This is cool because we can now accurately determine which time-segments of a video we can play and seek into without needing to pause playback to download more data.”
· Changes to how XPCOM components are registered in order to help startup time and process separation
No more frozen interfaces!
· New Addons Manager and extension management API (UI will be changed before final release)
hey,这不就是final release吗?瞧,bug~ 哦,不对,It’s not a defect, it’s a feature~
· Significant API improvements are available for JS-ctypes, a foreign function interface for extensions
extension developer是不是爽了点?我不知道,我还没写过extension,不过可以考虑唉,对哦.
· CSS Transitions are partially supported
啥意思,又来?之前不是都说支持了吗?又partially了?又是个D(efect) feature?……
· Core Animation rendering model for plugins on Mac OS X. Plugins which also support this rendering model can now draw faster and more efficiently
终于见到一个mac os x only的了,平衡了…
· Web developers can update the URL field without reloading the page using HTML History APIs
这个有意思,下次一定要玩玩,估计会有利于ajax应用维护history和支持back和forward.
· More responsive page rendering using lazy frame construction
这个又是ff4变快的一个原因,非常建议去这个页面做下测试,我的是 14573ms vs 1289ms,快了91.15%。
· Link history lookup is done asynchronously to provide better responsiveness during pageload
嗯,异步好,做什么都不要堵住了UI线程,不然我又要去厕所或是茶水间了…
· CSS :visited selectors have been changed to block websites from being able to check a user’s browsing history
security fix,嗯,看到一句表决心的: “At Mozilla we’re serious about protecting people’s privacy, so we’re going to fix this problem for our users. ” 于是马上联想到诸葛亮出师表… 继而杜甫 “出师未捷身先死,长使英雄泪满襟”……
· New HTML5 parser
终于到了html5的parser,竟然放在这么后面,难道是因为html5要到2044年才能finalize的原因吗? “This replaces that code with a new parser that’s faster, compliant with the new HTML5 standard and enables a lot of new functionality as well.”
· Support for more HTML5 form controls
又来了… 在搞到倒数第三个bullet眼看胜利就在眼前的时候我突然开始强烈怀疑起这release notes的严肃性和完整性……
· Web authors can now get touch events from Firefox users on Windows 7 machines
win7 only,good for windows people,无关于我.
· A new way of representing values in JavaScript that allows Firefox to execute heavy, numeric code (used for things like graphics and animations) more efficiently
又是efficiency,看来来自chrome和webkit的压力绝对够大,anyway,对 user 来说永远不是坏事. 终于…… end
What’s New in Firefox 4 (Part 2)
ok, 继续,接上篇 .
· You can turn any tab into an “App Tab” by right-clicking on it and selecting “Make into App Tab” from the context menu
蛮fancy的应用,fancy就fancy在人家safari,chrome,opera,IE不支持,fancy就fancy在也实用不到哪去,暂且就认为只是为了省空间吧,还只是视觉空间,说不定还多搞你点存储空间复杂度,空间换空间?好的.
· The default homepage design has been refreshed
自从用了 speed dial 之后,我已经不知道 homepage 张啥样好多年……
· Overhaul of the bookmarks and history code, enabling faster bookmarking and startup performance
nice code refactor, 一个字,为了速度,汗,好像是两个字……
· Per-compartment garbage collection is now enabled, reducing work done during complex animations
great stuff, 对了不知道为啥,一看到compartment我就想到了我们的蜗居… 不是应该是apartment的吗?
· Additional polish for the Firefox Add-ons Manager
嗯,这个学chrome已经学的灰常像了.
· Improved web typography using OpenType with support for ligatures, kerning and font variants
嗯,等我有空先去试试 web fonts 再说吧.
· Web developers can animate content using CSS Transitions
终于支持了,great stuff.
· Responsiveness and scrolling improvements from the new retained layers layout system
没怎么看懂,不过大致能够理解,什么不理解?那就空间想象一下…… 对了,读书时一直听数学老师说男同学一般比较擅长空间想象……
· HTML5 Forms API makes web based forms easier to implement and validate
记得以前看到 sunng提到过 那会只有opera 11完整支持 html5 form,now comes ff4, great stuff!
· Support for the new proposed Audio Data API
nice, 有空一定要try一下.
· Support for HSTS security protocol allowing sites to insist that they only be loaded over SSL
以后就多了一种强制https的办法了,且可能更可靠高效.
· A new feature called Panorama gives users a visual overview of all open tabs, allowing them to be sorted and grouped
应该就是传说中的tab group吧,我昨天不知道怎么整出来过一次,现在找了半天也找不到打开的方法… 放弃…… 休息,不行了,要昏倒了…… To be continued…