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.

Conclusion

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.

Group.NCTU 轉信站關門

看了 DK 的《Group.NCTU.edu.tw (2003~2013)》這篇文章一陣子,才想到我也可以寫個自以為的憑弔文(?)。

2008 年的時候,仰賴了 Group.NCTU 寫了一個 Blog 文章轉信到 BBS 站個板的 WordPress Plug-in,讓 WordPress 成為 NNTP client 把部落格文章發到個人版去。當初還花滿多時間寫的呢,也有一些遠大的計畫(例如,把文章同步到個版,再把回覆或是推文同步回來作為部落格回應),不過都沒有完成。自己的 BLOG 後來也因為一些實用的問題所以把 Plug-in 停用了;甚至到 2010 年連個板都關掉了(本來在無名 BBS 後來在 PTT2)。

當年沒有 Github 所以程式碼也不知道放到哪去了。沒有做版本控制,我甚至不太確定 2008 年的我知不知道版本控制這個慨念。唯一確定的事是後來 CornGuo 那邊一直都把程式開著,偶而會在他荒廢的個板看到 WordPress 發過去的 BLOG 文章。應該跟他要一份程式碼來存檔留念,哈。

還是懷念那個雙向的 read-write Web;雖然地點多了一點、雜了一些,但是學習、演化、重混的機會比現在多太多了。要謝謝前輩們花心思建立了這些像是 Group.NCTU 的基礎建設服務,但回頭也會慚愧想想自己是不是沒有傳承。

手開發票檢查

週末小作品:手開發票檢查小幫手

星期六和女友吃飯亂聊,講到他們行業很多人的個人工作室和公司有手開發票的需求(其實我們這行也有?),但是這些不問世事的設計師或藝術家常常寫錯發票,造成後面程序的麻煩。於是回家之後就順手寫了一個手開發票小幫手

簡單發想與實作了以下功能:

  • 驗算統一編號
  • 使用 @ronnywang 的台灣公司資料網站提供的 API,自動查詢並帶入公司全名。
  • 輸入公司名稱如果可以查到唯一的結果的話,自動帶入統編。
  • 輸入未稅價自動計算總價,輸入總價自動計算未稅價與稅額。
  • 顯示總價中文大寫。

預想的使用流程是把資料打進去,檢查正確之後把螢幕上的資料抄到發票上,避免錯誤。雖然說互動很簡單(連「送出檢查」按鈕都沒有),但沒有做過使用測試也說不上來這樣設計好不好用。至少,因為是 Twitter Bootstrap 版面所以可以說算畫面乾淨而且 mobile ready。

最後,做這個工具研究了一下才發現市面根本就有幾萬塊就可以打死的電子計算機統一發票的套裝解決方案 … 常開發票的話去辦那個還是比較方便吧。當然最好的情況是發票可以全部電子化,用手機上網就能開發票之類的。

這個工具,真的有用上有什麼感想再跟我說。