RSpec 與測試驅動開發的思考方式

日前翻舊文時,看到一篇關於 RSpec 的好文章。

這篇文章有條不紊的說明我們是如何利用 rspec 這套工具,引導我們的軟體開發流程。

根據 rspec 中的 spec 字眼,我們可以將 rspec 解釋為一種用於描述軟體規格的的特定領域語言(Domain Specific Language)。由於軟體規格就是應用軟體表現出來的外在行為,所以跟隨 rspec 此類工具的設計流程,被稱為「行為驅動開發模式」(Behaviour Driven Development)。這種開發模式屬於測試驅動開發模式(TDD)的高階形式。

JavaScript 與 Desktop - WebKit

繼《JavaScript 與 Desktop - DBus 》,本文將說明 gjs/seed 如何結合 GTK 和 WebKit 設計 GUI。由於本系列文章的重點,放在將 Web UI 的開發經驗延續到桌面軟體的開發上,因此在 GTK 方面僅著墨於如何開啟一個視窗,並加入一個 WebKit 元件;換一個較易理解的說法是,建立一個桌面視窗,並嵌入一個 Web 瀏覽器呈現網頁內容。

Padding Oracle Attack 與 Web 軟體開發框架

今天在 InfoQ 看到一篇關於破解金鑰加密技術的文章,Padding Oracle 漏洞影响JSF,RoR及ASP.Net。這篇文章的主要檢驗對象,是那些將用戶、表單等資料,經由金鑰加密方式,傳送給 Web 客戶端的 Web 軟體開發框架。破解理論及範例,都可以在作者 Juliano Rizzo & Thai Duong 的網站上找到,請參考 Rizzo 的網站: netifera.com

利用 Padding Oracle 漏洞 (PO),攻擊者不需要私鑰,就能在可預期的嘗試次數中,解出加密資料的原始內容。The attack works within a complexity of O(NbW) in order to decrypt the message where W is the number of possible words (typically W = 256)(Serge Vaudenay, 2002). 我不懂密碼學的理論,但看了作者示範的破解影像《Cracking CAPTCHA with Padding Oracle attack》後,我猜想在某些狀態下,破解這種加密方式的通行碼之所需時間,短於破解雜湊法處理的通行碼。

JavaScript 與 Desktop - DBus

我先前在 ICOS 2010 記事 提及目前有多項軟體專案,正試圖將 Web 軟體開發經驗延伸到 Linux 桌面軟體開發領域。 在那之中,以 gjs 和 seed 這兩項專案的成果最接近實用階段。這兩套都是基於 C 與 GNOME Library 的 JavaScript 解譯器實作品。透過 GNOME Library 的 GObject introspection framework ,它們可以呼叫系統中所安裝的其他函數庫。故而它們可以用於開發一般的 Linux 桌面軟體。

我這兩天試用 Ubuntu 10.10 與 gnome-shell 時,同時嘗試著用 gjs 和 seed 撰寫一些小程式。首先嘗試的項目是透過 D-Bus 調用其他桌面軟體的服務。

《蝴蝶、斑馬與胚胎》讀記

雖然我是個生物學的外行人,但我看《蝴蝶、斑馬與胚胎~探索演化發生學之美》這本書應該是優秀的基因學入門書。然而,不知中譯本是否刪掉了註解,以至於作者在書中提到的一個名詞與概念,都缺乏進一步的解釋。如此一來,這本科普書的內容就顯得太專業了。一般人應該會像我一樣,讀起中間章節,感到一知半解。

賀再就職滿一年與工作回顧

算一算,我到目前公司就職的時間滿一年了。回顧我那常態性失業的歷史,待滿一年真是可喜可賀。我原本以為那些與我同時期報到的同事會待得比我久,沒想到他們反而都比我早離職換公司,就我一個還留著。我待過三間軟體開發公司,雖然內部文化不同,但軟體開發人員的流動率都是那麼地快。至於我本人,大概是因為我太懶,也不指望軟體業有什麼前景。反正去那都一樣,既然這間公司不資遣我,我便懶得換環境了。

將桌面管理程式由 nautilus 換成 pcmanfm

網路上可以找到許多將桌面管理程式由 nautilus 換成 pcmanfm 的教學文件。方法不一,各有疏漏。在此提供我的作法,供各位參考。

我目前使用的桌面環境是 Ubuntu 10.04。

淺談基本工資

前一陣子勞工團體為了基本工資的問題吵得沸沸揚揚。勞工團體主張「基本工資的作用就是讓勞工至少活得像個人」。我反倒想說:「調漲基本工資會讓失業者活得更不像個人」。所幸最終結果只是象徵性地調高六百元,人們勉強不會發覺它的不良影響。

勞工團體不喜歡看複雜的數學公式,巧得是,我不熟悉數學的語法規則,所以也不喜歡看數學公式。因此我在本文中不會用複雜的數學公式談基本工資。

我在本文說明的方式相當簡單,略去了許多細節的設定與定義。嚴格說來,這方面的議題足以寫出上百頁的論述。但是這一方面的論述實在太多了,從一、兩百年前就有許多學術論述;差不多在一百年前的內容就已經得到現在的結論,而且沒有用微積分或複雜的數學公式。既然如此,我寫再多內容也不會增加什麼學術價值,那我還是當個懶人,只說重點吧。

筆記型電腦電池使用時間估算

耗電量公式: 使用時數 = (V * AH) / W.

電池上會標示伏特(V)與安培數(AH),例如我的 ThinkPad X200s 附帶的 4 芯電池上標示: 14.4V=2.0AH,28.8WH。至於瓦數(W)則要看實際狀況而定,各機種與運作環境皆會影響。

ICOS 2010 - 開放源碼國際研討會 2010 記事

我上週末參加在高雄舉辦的 ICOS 2010 開放源碼國際研討會。原定是五六日三天(9/17 ~ 9/19)的活動,但最後一天碰到凡那比颱風侵台,週六時就宣佈最後一天的議程取消。今年的 ICOS 難得辦一次大規模活動,卻碰到颱風提早結束,十分可惜。

話說颱台登陸那天,高雄也是災情最慘重的區域。我家停了一整天電,完全接收不了外界的消息。第二天恢復電力後,才從電視新聞中得知我所居鄉鎮超過一半區域淹水,我家十分幸運地位在那沒有淹水的一小半區域。現在想來,我也算十分幸運了。

經濟思想史,周憲文譯

前幾天心血來潮,在網路拍賣的二手書店上淘書,意外地找到臺灣銀行經濟研究室出版的經濟學名著翻譯叢書之《經濟思想史》上、下兩卷,譯者是周憲文先生,民國71年出版。 臺灣銀行經濟研究室出版的經濟學名著翻譯叢書,我以往只在各大學的圖書館內看過,流出不多。我從未在市面上看過這套叢書。其中有不少名著,至今仍無其他中譯版本,更顯珍貴。

Innovate 2010 IBM開發者大會記事

上週參加了每年慣例的 IBM 開發者大會。Innovate 2010 IBM開發者大會活動主頁。從 2007 年的 Jazz 、2008 年 Rational Team Concert、一直到今年的主題「Let's build a smarter planet」,仍然聚焦在團隊的協同開發工作。這一點也不令人意外。軟體系統的複雜度與日俱增,軟體開發的工作早就脫離了單一平台、單一技術、單一開發者就能獨力完成的時代。由複數成員組成開發團隊,完成一項專案已經是常態現象。而《人月神話》一書中提到團隊成員愈多,則互相交流的活動量就愈頻繁,溝通成本也就愈高。因此能夠降低溝通成本,有效協同團隊成員活動的工具,自然就日益重要了。

不過連續說了這麼多年的協同開發,今年的協同重點自然也不會原地踏步。從一開始談如何實現協同開發,今年已經進展到如何在協同開發的基礎上,追求軟體生產效率,改善軟體品質以及促進創新機會 (Efficiency, Quality, Innovation)。

在 Web 介面中,塑造便利的條碼讀取操作體驗

在 Kiosk 、旅客導覽系統或門禁系統中,通常只連接有限的資料輸入設備。主要是提供觸控螢幕,允許使用者點選畫面選項,以便操作公開性的服務。進階者,則提供特制數字鍵盤、條碼讀取機、RFID讀取機等輸入設備,讓使用者輸入由數字構成的文字資料。

本文說明所用的案例,便是一個提供條碼讀取機的Web介面導覽系統,它會在畫面上顯示一個書籍感應畫面,提示顧客將書籍的背面的ISBN條碼放到條碼讀取處讀取,然後將它的 ISBN 送到後端查詢書籍資訊。

Ubuntu 10.04 的 Music Player 評價

我使用了幾套 Ubuntu 10.04 版提供的音樂播放軟體,在此記錄其支援格式、播放清單評價、介面整合能力以及記憶體用量。 目的是為了我帶著 小黑(ThinkPad) X200s 筆記型電腦出門時,可以用一套最省電的音樂播放軟體聽音樂。

本文的使用環境是 ThinkPad X200s 筆電,安裝 Ubuntu 10.04 64bit 桌面版。選用的播放軟體,都是由 Ubuntu 10.04 套件清單所提供者,僅用套件管理程式即可完成安裝。

Vala 程式語言入門

介紹

如果你知道 "C with Classes" 甚至曾經用過,那麼對於 Vala 的運作方式,想必也會感到熟悉。我認為「 Vala 是 "C with GObject" 的編譯器」 (Vala is a C with GObject compiler) 是非常貼切的介紹描述。

Vala is a new programming language that allows modern programming techniques to be used to write applications that run on the GNOME runtime libraries, particularly GLib and GObject.
Vala Tutorial

Vala - Time and Log

This article describes two things about Vala programming. First, how to get current time and output it as a formatted timesamp. Second, how to design custom log.