English Vinglish: People’s journey across the language barrier

I don’t remember I have ever go to the cinema for a Bollywood movie, but I am glad I enjoyed it very much when I did this for the first time.

The movie remind me of the ESL classes I took. The frustration of not being able to express thoughts in English efficiently echoes the wider range of non-English speaking audiences, evidently by the success of the movie in these traditionally non-Bollywood markets, including Taiwan.

Compare to India, the English-speaking culture is different in Taiwan. English is not the working language of the mess, except for some white-collar works in forgiven companies or tech sectors (e.g., Mozilla in Taiwan). There is indeed a tread (or, “debate”) on wider-adoption of English usage in colleges. And of course, English dominance and culture invasion, and so on and so on.

That said, the English-learning students depicted in the movies are very true. If you only speak English and had (or, having) the experience working with people from other cultures, I wholeheartedly recommend you to see the movie. Pay attention to the thoughts and the minds of these the characters. In retrospect, think about the inherent behavior of these people as they went through their life-long journey of working with you in English.

This is the only reason I wrote this post, in English.


此文經由作者同意,翻譯自 David KendalModern computing: A short history and a shorter rant


(此文將「當代」定義起始於微電腦時代(約 1970 年)以符合文意,但前述的歷史除了微電腦,也可以套用在與更早的大型主機上。)








反之,撰寫程式在新的電腦上變得越變越困難,尤其是 Apple 的裝置。這很可惜,因為 Apple 的設計很好,但他們似乎認為容許可撰寫程式的功能,和好設計與易用性是相衝突的。這樣的易用性根本就是個幻覺,因為在畫面之下,電腦是一模一樣的。更精確的說,這種「易用性」高的電腦是更不好用的:它無法為人人所用,只能提供某些人(專業程式設計師)所預期的行為。



  • Computer、computing:譯為電腦,但泛指所有能夠執行程式的計算裝置(computing device)。可以很拗口的翻譯為「計算機」但是這不是一般詞彙。
  • Programming、programmability:譯為「撰寫程式」,因為沒有常用的中文詞彙。在簡體中文有很精準的動詞,即「编程」。

Grunt with QUnit setup on Travis-CI, with SlimerJS

QUnit running on Travis-CI, with SlimerJS

Due to performance considerations, I’ve removed IndexedDB dependency completely from JSZhuyin, the Chinese IME implementation entirely in JavaScript. The program now do searches entirely in the memory with pre-built binary data (the data is built with node with JavaScript too). In order to future-proof the development I’ve enabled Travis CI to run tests with SlimerJS too. For those of you who is not familiar, SlimerJS is the Gecko (Firefox) equivalent of PhantomJS, which allow you to control a browser instance (e.g. to run a QUnit test page in this case) with JavaScript API.

Why not PhantomJS?

For starter, I don’t hate PhantomJS because it’s not Gecko. I love the tool and it’s pioneering idea, but the shipping version lacks of a lot of browser APIs needed for my project to run. It does not come with Function.prototype.bind (reason given here); nor I have no idea the version of WebKit it is shipping with, given the fact it comes with ArrayBuffer interface but without other basics like Uint16Array. Since JSZhuyin rely on these interfaces to work on binary data, I would have to set up the CI with anything other than PhantomJS.

The setup

If you are looking to run PhantomJS and QUnit, the grunt-contrib-qunit task is so easy to set up and it’s probably not warrant a post here. For testing on SlimerJS, I’ve turned to the grunt-shell task instead and run it with a shell script. Without messing up the format of the post here, please refer to the actual setup:

The first problem I hit was that SlimerJS does not return exit code due to Gecko constant. tee the output to a file and grep it solve the problem. The last small glitch I encountered when I push everything to Travis CI was the fact $TMPDIR directary is not actually writable in their VMs; so I moved the temporary file to the working directory instead.


I hope this post will help you get everything running. Web testing and automation is a gigantic topic in which I’ve just starting scratching it’s surface; sometimes I wish there should be a simple tool where you could set it up and forget it, but I still enjoy the alternative process before that show up.