持續整合與跑步呼吸
大約是一月時的事,我看到消息說「GitHub已將持續整合服務器Janky開源」。然後,我就在公司的郵件群組中發了封信,說我可能會評估一下 Janky 這套持續整合工具。同事在跟帖中說,這樣會不會分心,是不是應該等目前的專案都結束了再做?
同事的說法,反應出他們尚未確實理解「持續整合」的意義。我相信大部份開發團隊初次接觸「持續整合」時,都會有相同的誤解。我在郵件與 twitter 上表達了我的看法。
大約是一月時的事,我看到消息說「GitHub已將持續整合服務器Janky開源」。然後,我就在公司的郵件群組中發了封信,說我可能會評估一下 Janky 這套持續整合工具。同事在跟帖中說,這樣會不會分心,是不是應該等目前的專案都結束了再做?
同事的說法,反應出他們尚未確實理解「持續整合」的意義。我相信大部份開發團隊初次接觸「持續整合」時,都會有相同的誤解。我在郵件與 twitter 上表達了我的看法。
我昨天在聯合報上看到一篇報導:《科技業追效率 站著開會成風潮》(聯合報,民國101年2月4日,A3版)。當我看到標題「站著開會」這四個字時,我直覺想到這該不會是在說敏捷開發方法/極致編程(Agile method/eXtreme Programming)所提倡的「站立會議」吧?仔細一讀內容,還真是這麼一回事。我書讀得少,這是不是國內大眾媒體首次以「企業管理」的角度報導「敏捷方法」的新聞?真是可喜可賀啊。
SSD fdisk calculator。固態硬碟分割計算器。讓你的磁區對齊 4K 區塊。 此程式為網頁版,瀏覽器打開本頁即可計算。不用下載,不用安裝。
春節前,看到 PCHome 有批 SSD 好便宜,我趁機買了一個回來裝在我的 ThinkPad 上。 不過在分割磁區時碰到了些小麻煩。為了要準確地對齊 4K 區塊,我乾脆寫了個計算器來算位置。 本來是用 gnumeric 試算表算的,後來為了發佈出來,又花了半天用 JavaScript 寫成網頁版。
IBus 輸入法平台利用 D-Bus 協定作為訊息通路。 所以程式人員可透過 D-Bus 協定控制 IBus 輸入法的動作。但比較麻煩的是,IBus 不連接公用的 dbus-daemon 服務,而是另行實作了 ibus-daemon。所以 D-Bus 客戶端若用預設的方式接上 dbus-daemon 後,並不能找到與 IBus 平台溝通的訊息通路。
用公車系統對上述內容作個譬喻。IBus 跟 DBus 都是同一款公車,駕駛與乘坐方式是一樣的。但是 DBus 停靠的車站是 dbus-daemon ,而 IBus 停靠的車站是 ibus-daemon。乘客(客戶端)如果跑到 dbus-daemon 車站的話,搭不到 IBus 的車。乘客要去 ibus-daemon 車站,才能搭上 IBus 的車。那麼乘客要如何找到 IBus 的停靠站呢?
在農曆新年的歡樂期間,聽到美國大規模掃蕩網路硬碟(免費空間)服務商的行動,實在非常破壞氣氛。 MegaUpload 服務因負責人被 FBI以洗錢與盜版罪名通緝,服務主機也被查扣,服務全面停擺。緊接著,連 FileSonice 也宣佈關閉所有文件共享功能。這真是如同晴天霹靂般的事,因為我是 FileSonic 的付費會員。
我在「Synergy - 軟體KVM 使用說明」中提到我的工作需要一套 KVM。我首先嘗試了 Synergy 這套軟體 KVM。它確實做得很好,只是我目前的工作內容常常要退出使用端 X 視窗或切到文字終端機。在這種情形下,Synergy 就不能繼續為我服務了。我不得已,只好再添購一組硬體的 USB KVM;型號是「Uptech KVM211U」。
這陣子使用下來,這種 USB KVM 的相容性問題不大,連我的 USB 軌跡球都能接。但還是有一點的問題,那就是 KVM 在切換終端時,實際上就是在插拔 USB 設備。於是每次按下 KVM 的切換鍵時,作業系統都會出現 USB 鍵盤與滑鼠拔出或連接的情形。 這對我來說就是個困擾了。因我為軌跡球設定了一些操作行為,例如指定中鍵模擬滾輪。不幸的是,當 KVM 切走時(拔出滑鼠),這個設定就會失效;KVM 切回時(插入滑鼠),我得再執行一次設定工作。
在 Linux 桌面中,我寫程式時慣用的文字編輯器是 gedit。 我寫了一個配合「外部工具」外掛的指令集,可以讓我直接在 gedit 的視窗中直接編譯或執行我正在編寫的程式碼。
繼第一部份《Working with PHPUnit, part 1 - 安裝備忘錄》後,接下來舉例說明操作 PHPUnit 之過程。
近來的軟體開發流程強調「測試驅動開發 (Test-Driven Develope)」,對於單元測試 (unit test) 發展出了一些系統化的作法和工具,這類單元測試工具俗稱 xUnit ,例如 C 語言的 CUnit , Java 的 JUnit , .NetFramework 的 NUnit 。 PHP 也有 PHPUnit 。
安裝 PHPUnit 其實很簡單,基本上按 PHPUnit 的《Installation》的步驟即可完成安裝。只是我在 Windows 平台上做了一些修改。
目前常見的 BT (BitTorrent), eMule (EDLink) ,都是屬於公開匿名式 P2P 網路。它們的檔案分享關係網路是公開的,任何人都可以加入,並不適合企業內部的檔案散佈需求。
但也存在私有 P2P 網路架構(Private P2P)。有發展時間長久、支援軟體眾多的 Direct Connect,以及從匿名式 P2P 網路擴充過來的 Freenet 等。
我前天想要修改我寫的一個精簡型 PHP RESTful 框架 (「CommonGateway」),將它由外部設定(注入)控制項屬性內容的動作,改的更有使用彈性。最好像 Java Spring framework 那樣,可以透過注記(annotation)方式,讓使用者指定要注入的項目。
雖然 PHP 的語法並不支援注記符號,但是我可以變通一下,把注記內容寫在 doc 區,然後再自己解析 doc 的內容。 PHP 的 phpDocumentor 和 PHPUnit 工具就是這麼做的。這個工作倒也不難,只需要用到 PHP Reflection 功能的 getDocComment() 就可以了。
我之前在「JavaScript 與 Desktop - DBus」說明 gjs 如何調用 D-Bus 服務時,提到 gjs 提供的 D-Bus 實作內容相當低階,以致於我們必須要自己定義我們想要調用的 D-Bus 代理個體的介面原型。在該文中我也提到,大部份的 D-Bus 服務都會實作 org.freedesktop.DBus.Introspectable 介面,提供 Introspect 方法(D-Bus 的 introspect 在 Java/C# 中採用的說法就是 reflect),讓其他人可以藉由這個方法查看介面規格。我們查詢的結果會是一份 XML 文件,若我們進一步分析該文件,就可以直接將分析結果交給 DBus.proxifyPrototype() 注入指定的代理類別。
本文就是想要利用 gjs 實作的 E4X 能力,去解析遠端個體傳回的內觀資訊(introspection),由程式自行產生 gjs dbus 模組所需的介面原型敘述,再注入成為新的類別。免除由程序員自己手寫介面原型敘述的不便。
今天我來說個新的程式語言,CoffeeScript 。 CoffeeScript 的編譯器會將它的程式碼轉譯成 JavaScript 程式碼。它產生的 JavaScript 程式碼基本上可以在任何 JavaScript 環境中運行。
我沒有用過這玩意,只是它的語法令我覺得有點意思。CoffeeScript 的設計目的,在為 JavaScript 環境提供一個「更整潔的語法」。我大致看了一下它的程式碼範例,它大部份的語法混合了 Python 與 Ruby 的風格,但程式碼區塊(匿名函數)這部份則是採用 C# 語法。 我們來看看「Your first cup of CoffeeScript, Part 1: Getting started」這篇文章中的範例程式碼,初步認識 CoffeeScript 的語法。
介紹 JavaScript 關於函數與建構者的基礎知識。理解此一基礎,將建構者內容參數化。 透過參數化的技巧,實作一個產生新類別的類別。
JavaScript 沒有類別定義的關鍵字。"定義類別"這句話在 JavaScript 中的意義, 等於是定義一個新的建構者(Constructor)。
週日閒來無事,得知高雄駁二藝術特區有一場「繪師100人展」,展示日本100人著名繪師的畫作。 展示內容正好是我感興趣的 ACG 萌系畫作,所以我就跑去參觀了。單人票價250元。
以庶民的娛樂「浮世繪」為題,抓住現代人心靈的寄託,並集合介紹100位現代「繪師」的新作,從人氣繪師所描繪的獨特世界觀,展現高超的繪畫技巧、質感、與潛力,不斷地帶給世界最新的日本價值觀。
畫展活動資訊:
在上一篇《SOD 安全文件概論》中,我直接使用工具 openssl 解讀 SOD 的內容。但它只是按照各項資料的結構順序,用粗略的格式顯示資料內容。本文則是直接用 OpenSSL C 函數庫解讀 SOD 內容。
由於本文案例中的 SOD 採用 ASN.1 格式儲存,所以解讀 SOD 的工作實際上就是 ASN.1 文件的解讀工作,需要利用 OpenSSL C 函數庫中與 ASN.1 相關的函數。不幸的是,在已經很貧乏的 OpenSSL C 函數庫文件中, ASN.1 函數更是連份說明文件都沒有。如果不直接去讀 OpenSSL 的 C 源碼,可能根本寫不出 ASN.1 解讀程式。在此提供大家一個指引方向,想要進行這項挑戰的人,只需要去讀 OpenSSL C 源碼的 crypto/asn1/asn1_par.c 這份源碼文件。本文也沒有足夠的資訊仔細說明那些 C 函數的用法。
Google Android 4.0 (Ice Cream Sandwich) 上月發佈,其中被當作主要賣點的「臉部辨識解鎖」(Face Unlock)功能,在我們公司中,基本上是當作笑話在看的。我的 twitter 中,也推了4則訊息提到 Android 4.0 的臉部辨識解鎖。
我九月份在部落格上發了一篇《因為影像左右相反,導致識別系統軟體專案失敗的例子》。臉部辨識就是該案例的軟體系統中的主要軟體項目。我們公司身為該專案眾多協力廠商的其中一員,對臉部辨識功能於實際佈署運用時會碰到的諸多狀況,也累積了不少經驗。而 Android 4.0 臉部辨識被發現的兩個狀況,不過是我先前就知道的其中兩件事罷了。