Unix系統的行程間通訊機制中,有一套稱為 signal 的信號機制。因為它被列在 POSIX 規範之中,所以本文將以 Posix signal 稱之。Psoxi signal 是一種簡單的事件通知機制。它將某些事件予以編號,例如 SIGHUP, SIGTERM 等。程序可以向系統註冊這些信號的處理函式。當特定事件發生時,系統就會打斷程序目前的流程,將執行點轉移到程序指定的處理函式。
然而從設計模式的眼光來看,Posix signal 對程序而言是 Singalton 模式,它只有一個實體。所以同一時間,每一個 Posix 信號只能註冊一個處理函式。當你的程序內有多個單元關心同一個 Posix 信號時,程序員必須要另行安排登記與分派機制,以免不同的單元彼此爭搶 Posix 信號的處理權。 GNOME 環境的程序員,可以利用 GObject 型別機制提供的 GObject signal 機制,實現 Posix signal 的分派機制。
我先前在《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 沒有提供新舊版本的相容能力。
因為工作需要,我需要評估一些平板電腦相關的應用。因此我接觸過 MeeGo ,使用過它提供的幾種虛擬鍵盤(軟體鍵盤),例如 fvkbd, meegotouch-inputmethodkeyboard 。更進一步地,當我嘗試著在 Debian/Ubuntu 系統上自訂一個平板桌面環境時,也需要一個虛擬鍵盤。而 Ubuntu 套件庫中就提供了 Matchbox keyboard。
Matchbox keyboard 並不是功能最多的虛擬鍵盤。但它應該是結構最簡單的一套,也提供了設定鍵盤佈局的功能。而且 X window 上的其他虛擬鍵盤的原理跟 matchbox keyboard 大同小異。如果想要嘗試客製化一個具有虛擬鍵盤的操作環境,可以 matchbox keyboard 為起點。等到產品化時,我們隨時可以用其他同樣基於 X 協定的虛擬鍵盤替換它。
最近一年來, Google Android 面臨了一波又一波專利控訴,有 Apple 告 HTC、Microsoft 告 HTC, Motorola 等案。
在討論過程中,不斷地有人提到 Linux 會如何如何。
顯然他們對 Google Android 的印象還停留在兩年前(2009),他們還以為 Android 是一種 Linux 套件。
因此他們認為這場專利風暴會波及 Linux 社群。
但就我所知,Linux 社群及其相關廠商,應該不會受到影響。
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 的運行環境,基本上是以事件為基礎。而它的事件處理迴圈,則是由 mainloop 負責。
mainloop 除了主要事件來源外,還提供了兩種可添加的事件來源,即 timeout 事件與 idle 事件。
本文為這些功能的使用範例。
Ubuntu 10.04 中的 gnome-volume-control (音效偏好設定)提供一個視覺化的音效控制環境。
但我碰到要讓不同的應用程式分別將音訊輸出到不同音效卡的情形,gnome-volume-control 就做不到。
我只好用命令列工具去指派。
pacmd 是 PulseAudio 的交談式命令控制工具。
可以透過它控制 PulseAudio 的狀況。
Vala 與 GObject Introspection 都是 GNOME 3 平台中的重要角色。 Vala 為 C 語言程序員提供了易用的 GObject 設計工具。GObject Introspection 則是銜結不同程式語言所實作的 GObject 項目的橋樑。我在《ICOS 2010 記事》中,便提到像 gjs/seed 這些新興的 JavaScript 解譯器,可以透過 GObject Introspection 調用既有的 GLib 項目。
理論上這兩套工具要能搭配互補,但我這陣子在摸索它們的互補途徑時,卻碰了一鼻子灰。
參與者
- abc.net 是一個社群服務網站,並且同時也是 OpenID 與 OAuth 的 Provider 。
- xyz.com 是一個購物網站,且可使用 abc.net 所提供的 OpenID 與 OAuth 的服務。
- 路人甲,是一個人,慣用的網路ID是 john。
路人甲(john)是 abc.net 的長期使用者,他在 abc.net 的使用記錄中,留下了許多偏好資訊,包含:
- 他的名片,記載了他的地址、聯絡方式、與公司職務等。
- 他的使用偏好,他習慣選擇中文使用介面,偏好藍色系佈景。
- 他的通訊錄與好友名單。
Python DBus 官方教學文件請閱讀下列三處內容:
不幸的是,這份官方文件有許多疏漏。你必須參考 Python DBus Source 中的程式碼才能得到正確的資訊。
Tutorial 中的範例程式,放在 Source 中。需下載 Source 以閱讀官方教學文件的完整範例程式。
我沒拍照。不過 my-hiend 網站有許多精彩照片,可自行觀賞: 2011年高雄國際Hi-End音響大展實況報導。
我在寫這篇記事時,也是一邊看那些照片,一邊回憶我的感想。
講座篇
我去聽了三場數位流講座,其中19日的兩場牽涉到數位技術方面的知識。
我手上有一台無硬碟式精簡電腦 (Atrust t100),是廠商數年前給公司的工程樣機。
規格挺舊的(VIA Nano CPU),但上面沒有任何風扇,也沒有硬碟,運作時很安靜。
所以我試著用它啟動 Ubuntu Studio ,接上我的 USB DAC (NuForce Icon Mobile)。
Make an Ubuntu Studio system on USB/SD disk.
日前我做了一項大量資料計算效能評測工作。
評測內容是多行程(multi-processing)與多線程模式(multi-threading)的效能差異。
根據程式內部的資料計算方式內容,從理論與個人經驗,我直覺預期這項評測的多行程模式的效能會比較高。
有趣的是,公司同事(或者說多數資訊人員)則是習慣性地認為多線程模式的效能比較高。
在 Unix 世界中,系統管理者普遍會用 shell script 撰寫簡單的管理工具。
為了強化易用性,簡化 shell script 的撰寫工作,就出現了專門負責提供圖形式互動元件的小工具,
可供我們在 shell script 中調用。
讓它們處理複雜的使用者輸入工作,同時也提高了 shell script 的使用親和力。
本文提供其中兩種工具的使用範例。
-
一、文字終端機環境: dialog。
非 Ubuntu 預裝項目。
-
二、GNOME桌面環境: zenity。
這是 GNOME Desktop 計劃下的一個小工具。為 Ubuntu 桌面版本預裝項目,Ubuntu 桌面版都會安裝此套件。
HTML5 規劃了一組支援本地文件(客戶端文件)讀取的函數介面,即 File API。
透過 File API ,我們可以直接在瀏覽器中讀取客戶端的文件,而不需要先將檔案回傳到伺服端暫存後再讓瀏覽器取回顯示。
本文將設計兩個文件閱讀工具示範 File API 的用法。
整個工作僅需在瀏覽器(客戶端)使用 JavaScript 即可達成,完全不需要任何資料上傳到伺服端的工作。
繼小紅點(TrackPoint)讓我玩上癮之後,我又對另一種不常見的指標設備 — 軌跡球 — 感到興趣了。
昨天終於弄了一個價格合宜的羅技木星軌跡球(Logitech Trackman Marble)來玩,台幣約在680元左右。
包裝中附有 Windows 與 MacOS 的驅動程式。在 Windows 上的使用方式不必多講了。
我來說說在 Ubuntu 10.04 上使用這隻軌跡球的經驗吧。
2013-03-19 更新在 Debian 6 上的使用內容。
我從一位 Linux 程序員的角度來看 MeeGo, WebOS, Android 之間的差異。
這三套作業系統同樣基於 Linux 核心並支援 ARM 架構。
寫下這篇筆記,提供想要進入它們的軟體發展領域的程序員參考。
如有不同看法,歡迎討論。