買餐計價

Thursday, April 23, 2009

因為看見 小影 為電鋸兄的 無聊問題 做了一個 java quiz ,只需實作 OrderMarker 的部份,所以就弄了一個 PlainOrderMaker ,兼真真正正試玩 git/github。而我的實作方法,其實也就是 Clement T 所說的做法,先排好最抵買餐,再順序盡買就是了,很簡單。

做完後,我想不如 Port 一個 Javascript 的版本如何?所以就弄了這個 Meal Calculator (很差的名字),用 jquery 作 library,用 QunitTDD 主程式,並建了一個簡單的 HTML UI。我用了 Github Pages 的功能來發佈了,大家可以到 這裏 看看。有興趣者也可以 fork 一個來玩玩。

編程之樂

Thursday, April 16, 2009

近來在網上看到有人引了經典著作 《人月神話》裏一段 ,來解釋編程的樂趣。手痕自己亂翻譯一次做中文:

編程何樂?行者何獲?

其一是創造之樂。如孩童愛堆泥沙,大人也愛創造,尤其是自己作品。我想這是來自神的創作之樂,樂於每片葉之獨特,每片雪花之新奇。

其二是助人之樂。深心處,我們想他人能享用我們的成果,覺得好用。在此,編程本質上與孩童首個為父親辦公室所造的泥筆筒,並無不同。

其三是樂於組合緊扣不同複雜部件,見其精巧運作,實踐建造時之原理。經編程的電腦,有如彈珠台或自動唱機運作機關般迷人,還更上一層樓。

其四是學習之樂。其樂自於無常的工作本質。每遇難題,總有所得:時而實際,時而理論,或皆有之。

最後是樂於材料之可塑。程式員,如詩人,離想像只差一線。他無中生有,空中建城,以幻想創造。少有材料可有如此彈性,易於重建優化,又容易實現偉大的概念和結構。 (…)

但程式亦非詩詞,是真實運作可用,能得可見結果。它能列出答案、畫出圖畫、生出聲音、移動手臂。神話傳說裏的魔法在現代得以現實,只需鍵入正確咒語,螢幕便活起來,顯示前所未有的東西。

編程所以為樂,在其滿足我們與生俱來的創造渴望,點亮人皆有之的感情。

其實當中某些點,也可推至其他科技人員,非單是程式員。 對科技的信念 背後,有賴人們積極創新,動腦筋解決層出不窮問題,帶來新的價值,甚至大大地改變人類生活。

P.S. 這翻譯雖沒字字精準,但也希望詞能達意吧。原文寫得很美,所以翻譯上也偏向用古雅的中文表達,奈何我這個人其實古雅不起來。《人月神話》是有中文版的,但我沒讀過,不知譯得如何?

實驗 Bookmarklet – isolate

Friday, March 6, 2009

isolate

我很喜歡用 Aardvark 這個 Firefox Addon,除了用來查看 DOM struture 非常有用外,還經常會拿來刪除一些頁面的廣告、sidebar 等等,只留下想要的內容,無論是閱讀、列印、複製時都會非常有用。

經一段時間的使用,發覺自己有個習慣,就是在清理完畢時候,總會再微調一下文字大小、行高、寬度等等,所以就寫了個實驗性質的 bookmarklet,想做到像 Aardvark 某些功能,另外再加一條改變樣式的控制條。結果就是這個:

isolate

Bookmarklet 的名字我不知該怎叫,所以只是隨意叫我在 Aardvark 裏常用到的 isolate 功能。這個 bookmarklet 使用會模擬一小部份 Aardvark 的功能:Wider (擴大選區,w鍵)、Isolate (清除到只剩下選區,i 鍵)、Remove (清除,r 鍵)、Quit (離開,q 鍵),Mouse click 可以鎖定選區,選區上方會出現可以控制樣式的條,再 Mouse Cilck 可消除鎖定區。

技術上這個 Bookmarklet 會先載入 jQuery 1.3.2,再插入選框和控制條,在 Mousemove 時會對「框」住目標,再可以使用控制條來設定目標樣式。這當中參考了不少 Aardvark 的碼。至於控制條是很簡陋的,因為沒有耐性做到很美… (可能用一個 CSS 輸入框會更適合…)。

出來的結果我自己也覺得有點吃力不討好,所以我懷疑自己還是會常用回 Aardvark。但無論如何,也寫一篇紀錄一下。

P.S. 不知道有沒有像 userscripts.org 這種但是給 bookmarklet 用的網站?

jQuery 1.3 and JS Bin

Thursday, January 15, 2009

jQuery 1.3 剛剛出籠,重點是新的 selector engine Sizzle 。效能提昇之餘,更可因此而引進新功能,如 live event delegation ,據說普通的 event delegation 也會更快 (也是因為 selector 快了吧)。而 Sizzle 本身已成為一個獨立專案,讓其他 library 也可以用。

jQuery 的 API Browser 也更新了,在試用之時發覺每一個 code example 都伴隨一個 “Edit” 連結,結果是連到 JS Bin 裏可以直接修改和測試 Code,非常方便。

但 JS Bin 不是會每三個月做 house-keeping 嗎?還是特別為 jQuery 做 host 了?結果測看了其 URL,發現原來可以用 http://jsbin.com/?html=[code]&js=[code] 來發送一個完整的例子,當然這會受到 URL 的字數限制了。

Short-Amazon (regular expression 版)

Wednesday, December 24, 2008

某天看到 Othree 寫了個 short-amazon 來縮短 Amazon 網址,我依樣葫蘆地試用 regular expression 的方式做一次:

JavaScript:
  1. function convert(){
  2.   var output = parseUrl(document.getElementById("input").value);
  3.   document.getElementById('output').value = output;
  4.  }
  5.  
  6.  var parseUrl = function(input){
  7.   if(!input) return '';
  8.  
  9.   var lines = input.split('\n');
  10.   var re = /^(http:\/\/www\.amazon\.[\w\.]{2,6}).*(\/(dp|gp\/product)\/[A-z0-9]*)(\/|\?).*/;
  11.   var result = '';
  12.    
  13.   for(var i in lines){
  14.     var l = lines[i];
  15.     if(re.test(l)){
  16.       l = l.replace(re,'$1$2');
  17.     }
  18.     result += l + '\n';
  19.   }
  20.   return result;
  21.  }
  22.  
  23.  document.getElementById('output').onfocus = function () {this.select();};
  24.  document.getElementById('input').onkeyup
  25.  document.getElementById('input').onblur
  26.  document.getElementById('input').onchange = convert;

當然,用 regular expression 的缺點就是沒有那麼好讀。

這原本是寫在 JS Bin (很方便!),但因為 JS Bin 會定期做 house keeping,所以特此記下。