CF to IDE 使用記錄

上週弄了片 CF to IDE 的轉接卡。想用便宜的 CF 記憶卡替換我家一台老舊電腦上的那顆跑了七、八年的 IDE 硬碟。 CF to IDE 轉接卡的問題不大,就只是線路轉接而已,卡上甚至不必用到晶片。不過卻發現現在並不是每種 CF 記憶體都能拿來當 IDE 硬碟。

基本上,CF 記憶卡有兩種使用模式,一為 Fixed 模式,另一為 Removable 模式。前者就是配合 IDE 介面,當作硬碟在用的模式。後者則是作為可移除磁碟,配合讀卡機的模式。很顯然,要配合 CF to IDE 轉接卡時,要選擇支援 Fixed mode 的 CF 記憶卡。

Android 對 Linux 的負面影響

我看不出 Android 對 Linux 帶來什麼正面影響,所以我的標題就直接寫「負面影響」。 我目前看到的負面影響,主要分成兩個方面。一是智慧財產權,二是硬體設備的支援。

OpenSSL Library - 讀取 X509 certificate 的資訊

前陣子完成一個案子,這案子要驗證 RFID 卡的文件內容是否可信。 本文內容是工作過程中寫出來的一個練習程式與小工具。 此工具用途為查看本地的 X509 證書資訊,並回報其是否有效。 工具名稱為 x509-cert-info。

程式內容使用了 OpenSSL 函數庫。OpenSSL 函數庫內容很多,但公式文件的內容很少,就是些草稿。 我將陸續整理工作過程中得到的相關經驗,記錄在部落格上。

部落格版面配置調整記錄

這幾天更動了部落格的一些版面配置內容。

一、書籤的部份,我留下了 Twitter, Facebook, digg, Plurk, Google bookmark 五項。 不過我個人只有 Twitter 的帳號,不用 Facebook, digg 與 Plurk,所以我沒測試過這三家的功能是否正確。

二、我一直想把工具區那行礙眼的「趕快免費註冊facebook...」的訊息拿掉,可惜不成功。 再寫信給樂多團隊反應,看看能不能讓使用者自己決定要不要那一塊內容,至少讓我們可以調整格式。

三、「您可能有興趣的文章」功能,用意雖好,但它的佈置不好,沒有給予一個單獨的 DIV ID 或樣式類別名稱。 這樣不方便透過 CSS 設置該區塊的樣式。我是用 JavaScript 去修改它的位置或樣式。

另外,在修改過程式,我覺得這些社群網站提供的服務使用功能,對網站內容佈局的侵入性愈來愈強了。 以往只要知道某個CGI的網址,再配合 QueryString 字串送出。我只需要放個連結就可以搞定。 現在是給你一個 JavaScript 庫的網址,再加上一堆 HTML 與 JavaScript 源碼,讓我們想辦法找地方塞進去。 對於網頁內容系統的管理者而言,這或許還不算難事。但是像我這種個人用戶,限制不少,很難在部落格的版面中安排地方放置。 我個人並不喜歡這種變化。

BCD碼轉文字

日前公司同事請我幫忙解決一個數字顯示的問題。客戶有一個讀卡設備,接著 COM 埠上。 他按照客戶提供的規格手冊,從該設備中讀出卡號。但顯示出來的卡號不是他預期的樣子。 我看了他的程式與執行結果後,我第一時間覺得程式和結果都沒錯啊,哪裡有問題。 又聽了一次他的解釋後,才注意到他忘了一項計算機概論的基本觀念:儲存在記憶體中的數值若要顯示成文字,要經過數值轉文字內碼的程序。 他忘了這件事,所以才一直以為是程式有問題。

當我意識到他的錯誤時,我還稍微向他解釋了一下數值與內碼的差異。 不過看他的表情似乎還是有點迷糊,也不知他是否真的理解了。 總之,我最後還是很快地寫好BCD碼轉ASCII碼的函數給他用。

Ubuntu 10.04 與 BandLuxe C270 使用筆記

我日前買了一張 BandLuxe C270 的 3G 行動網卡,以使用我的中華電信 3G 服務。 雖然那張行動網卡的規格上標明 Linux Kernel 2.6.27 以上即支援,但實際使用時,還是有些事情沒有說。

這張行動網卡提供了所謂「內建驅動程式」的功能。這表示它內建了一個 USB CDROM (光碟機),裡面儲放了它的驅動程式軟體。當你將它插入電腦的 USB 插座後,作業系統首先會把它當成一個 USB 光碟機。對 Windows XP/7 而言,當這張網卡被當成 USB 光碟機之後,作業系統會執行自動安裝程式(若你並未關閉此功能),安裝網卡內儲的驅動程式與連線軟體。接著,剛才安裝的連線軟體就會取消行動網卡的 USB 光碟功能,並啟用它的 3G 通訊功能。

但是上述動作在 Linux 系統中完全沒有意義。因為行動網卡內儲的驅動程式安裝軟體是 Windows 版,沒有 Linux 版。當你將行動網卡插入 USB 插座後,Linux 只會把它當成一個 USB 光碟機,就不會再繼續其他動作。就算你開啟那台光碟,裡面的軟體也不能在 Linux 下使用。

Web Storage 使用經驗

針對瀏覽器的本地資料儲存功能, W3C 規劃了至少三種功能規格,Web Storage 是其中最簡單的一種。 它原本是 HTML5 規格的一部份,後來單獨劃為一個規格。不過我們還是將它籠統地歸為 HTML5 的功能之一。

W3C 將 Web Storage 定義為用戶端 JavaScript 環境中的一種實作了 Storage 介面的實體。這個介面提供了一組基於 key/value 的操作方法,隱藏了資料存續細節。簡單地說,一個 storage 就是一個 hash table ,你只需要按照 hash table 的方式存取資料,例如 sessionStorage.x = 1; y = sessionStroage.x + 100。用戶端底層會幫程序員處理資料存續的工作,你完全不必知道資料如何存入資料庫或取出。

Embed VLC video in your GTK app and control via DBus

VLC 這套媒體播放軟體的擴充性實在好用,在 Linux 桌面環境能玩的花樣更多。 自從它實作了 Freedesktop Media Player DBus 介面之後,我們只需要透過基本的 D-Bus 功能,就可操作它的播放動作。 再配合它的 --drawable-xid 指定呈像視窗,就可在我們的桌面應用軟體中,嵌入影片播放功能。 實現這個功能,並不需要撰寫複雜的程式碼。

回顧 cruisecontrol 導入結果之感想

在我為公司建置 cruisecontrol 每日建置系統時,我發覺同事們似乎認為有一個工具可以自動建置專案就夠了。儘管現在的自動建置過程,僅是制式地執行 make 或 ant 中幾項事先規劃好的工作項目。而同事們覺得這樣就算是「標準化」。並不打算更進一步地組織一套慣例化、甚至標準化的開發流程。

就執行結果來看,開發流程仍然是人人一把號,各吹各的調。有人寫的建置文件(Makefile/build.xml)專門給 cruisecontrol 的環境使用;他自己反而不用、也不能用在他自己的環境中。有些則是律定的工作項目只是佔個坑,實際上不做任何事。還有些建置文件,只能用於部署軟體釋出階段(release)的環境,而不能用於部署開發階段的環境。

Vala - system signal agent

Unix系統的行程間通訊機制中,有一套稱為 signal 的信號機制。因為它被列在 POSIX 規範之中,所以本文將以 Posix signal 稱之。Psoxi signal 是一種簡單的事件通知機制。它將某些事件予以編號,例如 SIGHUP, SIGTERM 等。程序可以向系統註冊這些信號的處理函式。當特定事件發生時,系統就會打斷程序目前的流程,將執行點轉移到程序指定的處理函式。

然而從設計模式的眼光來看,Posix signal 對程序而言是 Singalton 模式,它只有一個實體。所以同一時間,每一個 Posix 信號只能註冊一個處理函式。當你的程序內有多個單元關心同一個 Posix 信號時,程序員必須要另行安排登記與分派機制,以免不同的單元彼此爭搶 Posix 信號的處理權。 GNOME 環境的程序員,可以利用 GObject 型別機制提供的 GObject signal 機制,實現 Posix signal 的分派機制。

GNOME3 - GObject Introspection 的版本更迭問題

我先前在《Vala與GObject Introspection的不搭配狀況》抱怨這些工具互相不配合的狀況。而我最近兩三天發現根本的原因,其實就出在 gobject-introspection 本身的版本更迭。

我把一項原本在 Ubuntu 10.04 主機上編譯完成的 typelib 安裝在 Ubuntu 11.04 的主機上測試。我的測試程式擲出 typelib 版本代號不對的訊息,它預期的版本代號是4,而我提供的 typelib 代號是 2,也就是兩者版本不相容。我最終的解決方式是拿源碼在 Ubuntu 11.04 主機上重新編譯。而在尋求答案的過程中,我並未在 gobject-introspection 的 GIRepository API 與工具中,找到可以指定特定版本的選項。換言之,現階段的 gobject-introspection 沒有提供新舊版本的相容能力。

Matchbox keyboard

因為工作需要,我需要評估一些平板電腦相關的應用。因此我接觸過 MeeGo ,使用過它提供的幾種虛擬鍵盤(軟體鍵盤),例如 fvkbd, meegotouch-inputmethodkeyboard 。更進一步地,當我嘗試著在 Debian/Ubuntu 系統上自訂一個平板桌面環境時,也需要一個虛擬鍵盤。而 Ubuntu 套件庫中就提供了 Matchbox keyboard

Matchbox keyboard 並不是功能最多的虛擬鍵盤。但它應該是結構最簡單的一套,也提供了設定鍵盤佈局的功能。而且 X window 上的其他虛擬鍵盤的原理跟 matchbox keyboard 大同小異。如果想要嘗試客製化一個具有虛擬鍵盤的操作環境,可以 matchbox keyboard 為起點。等到產品化時,我們隨時可以用其他同樣基於 X 協定的虛擬鍵盤替換它。

Android 捲入專利風暴的內容,應不牽涉 Linux

最近一年來, Google Android 面臨了一波又一波專利控訴,有 Apple 告 HTC、Microsoft 告 HTC, Motorola 等案。 在討論過程中,不斷地有人提到 Linux 會如何如何。 顯然他們對 Google Android 的印象還停留在兩年前(2009),他們還以為 Android 是一種 Linux 套件。 因此他們認為這場專利風暴會波及 Linux 社群。 但就我所知,Linux 社群及其相關廠商,應該不會受到影響。

MeeGo 1.1 編譯 Hanvon 10.1 觸控面板模組

MeeGo 1.1 使用的 Linux 核心是 2.6.35 ,此版本並不支援 Hanvon (漢王)觸控面板,也不支援多點觸控。 必須套用 MeeGo 維護者額外提供的 patch 文件,自行編譯核心。

安裝套件

安裝 MeeGo 後,再安裝編譯核心所需的套件。

sudo zypper install kernel-netbook-devel make gcc diffutils patch

取得 Patch

查看 Hanvon/PixCir touchscreen constantly "clicks" when touched。 下載上列文件中的其中3個patch:

  • 0001-2.6.37-hid-multitouch-support-for-PixCir-based-panels.patch
  • 0002-2.6.37-hid-multitouch-disable-2.6.36-MT-features.patch
  • 0003-2.6.37-hid-multitouch-add-unitec-ids-to-driver.patch

套用此 patch 後,可讓 2.6.35 的核心支持 Hanvon 觸控面板。 但受限於核心功能,僅提供單點觸控。

GJS/GnomeShell - timeout

GJS/GnomeShell 的運行環境,基本上是以事件為基礎。而它的事件處理迴圈,則是由 mainloop 負責。 mainloop 除了主要事件來源外,還提供了兩種可添加的事件來源,即 timeout 事件與 idle 事件。 本文為這些功能的使用範例。

使用 PulseAudio 命令列工具切換應用程式使用的音效設備

Ubuntu 10.04 中的 gnome-volume-control (音效偏好設定)提供一個視覺化的音效控制環境。 但我碰到要讓不同的應用程式分別將音訊輸出到不同音效卡的情形,gnome-volume-control 就做不到。 我只好用命令列工具去指派。

pacmd 是 PulseAudio 的交談式命令控制工具。 可以透過它控制 PulseAudio 的狀況。

Vala 與 GObject Introspection 的不搭配狀況

Vala 與 GObject Introspection 都是 GNOME 3 平台中的重要角色。 Vala 為 C 語言程序員提供了易用的 GObject 設計工具。GObject Introspection 則是銜結不同程式語言所實作的 GObject 項目的橋樑。我在《ICOS 2010 記事》中,便提到像 gjs/seed 這些新興的 JavaScript 解譯器,可以透過 GObject Introspection 調用既有的 GLib 項目。 理論上這兩套工具要能搭配互補,但我這陣子在摸索它們的互補途徑時,卻碰了一鼻子灰。

用案例解釋 OpenID 與 OAuth 的使用情境

參與者
  • abc.net 是一個社群服務網站,並且同時也是 OpenID 與 OAuth 的 Provider 。
  • xyz.com 是一個購物網站,且可使用 abc.net 所提供的 OpenID 與 OAuth 的服務。
  • 路人甲,是一個人,慣用的網路ID是 john。

路人甲(john)是 abc.net 的長期使用者,他在 abc.net 的使用記錄中,留下了許多偏好資訊,包含:

  • 他的名片,記載了他的地址、聯絡方式、與公司職務等。
  • 他的使用偏好,他習慣選擇中文使用介面,偏好藍色系佈景。
  • 他的通訊錄與好友名單。

Google Android 又涉嫌違反 GNU GPL

記者沒有人「請問您對微軟控告邦諾的 Nook 中的 Android 侵犯專利一事,有何看法?」

石頭成表示:又在告專利,來點新鮮事吧。等等,你說被告的對象是 Android?這是件好事,我很高興看到 Android 又被告了。Oracle 告完,微軟告。後面還有開放源碼界的法律專家在等著。活該啊。

繼 Oracle 狀告 Google Android 之後,微軟也出手了。這還不止,就連涉足開放源碼界的法律專家也在質疑 Google Android 違反 GNU GPLv2 的內容。在更早一些時候(3/17),LinuxDevices 報導《Google accused of violating GPLv2 licensing in Android》,文中摘要了多位法律專家的見解。在這則新聞中,人們討論的對象,不是 Oracle 告 Android 的 Dalvik 虛擬機,而是 Linux 核心與 bionic 函數庫。Edward Naughton 嚴正地指出: If that is the case, Google has found a way to take Linux away from the open source community and privatize it.(Google's Android Contains Legal Landmines for Developers and Device Manufacturers).