近年的 Linux 桌面環境,處理桌面應用程式選單與項目,依循 FreeDesktop 規格:
XDG Menu 支援樹狀選單結構 (menu tree),樹狀選單的每個節點,都允許包含多個分類項目(category)。選單的葉子則是應用軟體(application),它們與分類項目連結。選單結構描述於 .menu 文件中,選單內容描述於 .directory 文件,應用軟體的內容描述於 .desktop 文件。
使用關係: .menu -> .directory -> .desktop
日前 OpenJDK 發表了第一版的 Java Lambda 語法 (First Version of Java Lambda Syntax Sparks Debate),語法好壞,爭論不斷。本文分別列出了以 JavaScript, PHP, Ruby, C# 語言模仿 Java Lambda 範例的程式碼。
在數學中,lambda 有一個嚴謹的定義。但在是程式語言中,lambda 有另一個更廣泛的理解,即「匿名函數」(anonymous function)。在大多數程式語言中,根本沒有區分 lambda 與匿名函數,因此有些程式語言用 lambda 稱呼,有些程式語言用匿名函數稱呼。本文使用了五種程式語言,所以在稱呼上,會夾雜使用 lambda 與匿名函數。
Autoconf solves an important problem—reliable discovery of system-specific build and runtime information.
The GNU Build System
一名資深的 Linux 程序員,應該很熟悉下列的軟體源碼安裝動作:
./configure
make
make install
configure 是由 GNU 軟體建構系統產生的自動組態指令稿,它可以檢查源碼編譯前的相依項目,並按照系統環境產生搭配的 Makefile 。所以使用者可以用相同的操作指令,完成軟體源碼的編譯動作。本文將以一個 hello 程式為例,說明如何產生符合 GNU 軟體開發指南的 configure。
鴻海富士康廠區,連續且密集地發生12起「非正常死亡」事件,引起世人注目。在我看來,這整起事件曝露了台灣高科技產業在管理上的通病。亦即「高度科技產業,低度管理思想」。
日前處理一件工作,用 C 語言引用另一家廠商提供的 SDK 開發一套小工具。身為一個專業人員,按照 GNU 軟體開發指南,我們的 C 程式碼,應該要透過 Autoconf/Automake 完成建置前的組態工作。於是我進一步地使用 Autoconf 工具完成完成軟體建置環境的檢測與生產的組態文件。
然而我在將第三方廠商的 SDK 檢測動作加入 Autoconf 流程時,碰到了麻煩。為了處理這件事,花了我一整個工作天解決。令我不禁抱怨 GNU Autoconf manual 的內容編排內容實在很糟糕。本文記錄了在 Autoconf 中,如何檢查建置軟體時所需的額外標頭檔與函數庫。
前陣子,有位同事看了《約耳趣談軟體》(Joel On Software 中譯版),就作者提到面試人員教戰守則中的第一道程式問題向我請教。那道題目是「就地(不用額外記憶體)把字串反向」。同事不熟 C 語言,不了解作者為何說不懂指標的人,解這題一定會錯。所以跑來問我。
這道問題難就難在「不用額外記憶體」的條件。再者,就算面試者用了指標,我仍然可以就 C 語言的意義挑毛病,指出光用指標無法滿足「不用額外記憶體」的條件。如果只是從 C 語言的角度思考,僅用指標寫不出滿足條件的字串反向程式。面試者還要能從組合語言的角度思考,才能向出題者解釋他的程式確實滿足條件。
Firefox, IE, Opera, Chrome 等瀏覽器,都在高喊 HTML5, CSS3 。但是 HTML5, CSS3 到底有何特異功能,讓大伙們趨之若騖? 微軟提供了一個網頁: Internet Explorer 9 Platform Demos 讓我們體驗 Web 的未來趨勢。雖然這是微軟為了測試 IE9 所設計的網頁,但我用 Firefox 3.6, Opera 10.1 去看,也是玩的很愉快。畢竟 Firefox, Opera 瀏覽器跟隨 HTML/CSS 標準的起步,比 IE9 要早太多了。
內行看門道,外行看熱鬧。一般人可以在該網頁上看看未來的 Web 應用軟體的 UI 設計趨勢。內行的設計師,請記得一定要多用檢視網頁原始碼的功能,把那些新功能全都學起來。
假設我今天在微軟 Windows 系統內,用 OpenOffice 編輯了一份文件,其中的字體設定為標楷體。當我把這份文件拿到 Linux 桌面環境上開啟時,我將發現文件中的字體,全部都無法以楷體顯示。這是因為在 Linux 桌面環境上,並沒有安裝標楷體這套字型。
絕大多數人的解決方式是,將 Windows 系統中的標楷體字型檔案,複製到 Linux 桌面使用。但是就法律層面上來看,此一行為係著作權的侵權行為。微軟並未授權使用者於 Windows 系統之外單獨使用標楷體的權限。
然而,我們是真的非要標楷體不可嗎?未必。設定字體的動作,我們可以用抽象些的方式描述:「這些字要用楷書字體顯示」。重點是楷書,不一定要哪一家。而 X Window 的字型系統有一個非常有彈性的別名功能,可以讓我們指定哪些字體可以使用什麼字體顯示。例如,我們可以告訴 X Window: 『當你碰到一份文字要顯示「標楷體」時,你可以用「全字庫正楷體」顯示它們。看到「細明體」時,則用「全字庫正宋體」顯示』。如此一來,我們就不需要為了顯示文件中的字體,而買一大堆相似的字型檔案。
GDM 2.20 版之前,登入畫面的 UI 程式是 greeter ;GDM 2.24 版本之後,登入畫面的程式改成 gdm-simple-greeter。兩者的主題設定方式完全不同。由於 Ubuntu 9.10 之後採用的 GDM 版本已經升級到 2.28 以上,故 Ubuntu 9.10 之後無法使用 GDM greeter 的主題套件。
不幸的是,目前絕大部份的 GDM 主題套件,都是 GDM greeter 適用的。例如 GNOME ART Themes / Login Screen 提供的主題套件,就是提供給 GDM greeter 用的。所以在那裡取得的 GDM 主題套件,不能用在 Ubuntu 10.04 上。
當一名程序員實作了一個 daemon 時,他將會面臨一個關於系統啟動流程的問題。他要如何安排啟動流程,才能正常地啟動他的 daemon? 要放在 init.d 嗎?還是放在 rc.local?再者,每種 Linux 或 BSD 系統的啟動流程都有差異,更是為這項工作增加不少負擔。而 D-Bus service 的運作模式基本上也是一個 daemon ,所以當程序員實作了一個 D-Bus service 後,按理也是要為安排啟動流程煩惱。
所幸 D-Bus 有一個 dbus daemon launch helper 的功能,可以免除程序員安排 D-Bus service 啟動程序的困惱。只要按照 D-Bus 規格上說明的方式,寫好 .service 文件,dbus daemon lauhcn helper 就會在使用者呼叫指定 D-Bus service 時,自動啟動該 D-Bus service 程序。程序員不必煩惱 D-Bus service 程序的啟動問題。
Ubuntu 10.04 採用 Plymouth 取代 xsplash ,所以 Ubuntu 9.10 及以前版本的啟動畫面修改方式全都不適用。但是 Plymouth 提供了更簡單的修改方式。
Ubuntu 10.04 的 Plymouth 設定文件都放置在 /lib/plymouth 目錄內。與主題樣式有關的設定文件放置於 /lib/plymouth/themes ,預設主題樣式文件為 default.plymouth。其內容大致如下:
[Plymouth Theme]
Name=Ubuntu Logo
Description=A theme that features a blank background with a logo.
ModuleName=script
[script]
ImageDir=/lib/plymouth/themes/ubuntu-logo
ScriptFile=/lib/plymouth/themes/ubuntu-logo/ubuntu-logo.script
觀其內容,稍有經驗的使用者應該很快就能理解該如何下手修改了。
Ubuntu 10.04 採用 Grub2 作為啟動管理程式,同時也大幅改寫了設定文件的內容。這讓使用者更容易改變 Grub 的主題樣式(背景圖案與文字顏色)。
Ubuntu 10.04 的 Grub2 主題設置文件是 /etc/grub.d/05_debian_theme。Ubuntu 10.04 大幅改寫了 05_debian_theme 的內容。預設情形,它會去尋找 /usr/share/images/desktop-base/moreblue-orbit-grub.png 作為 Grub 的背景圖案。一般使用者只要將背景圖檔複製為 /usr/share/images/desktop-base/moreblue-orbit-grub.png ,再執行 sudo update-grub2
即可。
今天聯合報從 Telegraph 取材了一篇高盛弊案的重要關係人物 Fabrice Tourre 的報導。該篇報導摘錄了 Fabrice 與朋友間的一封郵件內容。我覺得這篇郵件的內容, Fabrice 說出了難得的實話,故一併搜尋到原文內容,摘錄於此。引為己誡。
E4X 全名為 ECMAScript for XML ,是 ECMA-357 Standard 的規範項目。它屬於 ECMAScript 的選用性能力,所以 ECMAScript 實作品不一定會實作的。目前看來,最積極支援 E4X 的就是 Mozilla 。它旗下兩種 ECMAScript 引擎 (SpiderMonkey, Rhino) 都支援 E4X。另外, Adobe 的 ActionScript 也支援 E4X ,只是用法略有不同。
E4X 最主要的能力,就是將 XML 文件直接視為 ECMAScript 中的原生型態 (primitive type)。一份 XML 資料在 E4X 眼中,其地位等同於 1,2,3, "hello" 這些原生型態的資料。E4X 基本上將 XML 資料視為容器,因此提供許多與 Array 相同的方法。這意味著你可以像是在面對 Array 般地操作 XML 資料。
前兩天,我在觀看 PHP Manual 中新增的 Gearman 和 mqseries 兩個擴充元件的內容。我一邊想著 PHP 連 IBM WebSphere MQ Series 這種 Message bus 都支援了,真是不錯;另一邊又想起好一陣子沒留意 PHP 的 D-Bus 相關消息了。於是搜尋了一下,這次找到了兩個 php-dbus 擴充元件,版本都還在 0.1.x ,文件也非常匱乏。不過我還是看了它們的源碼文件,安裝並撰寫一些 D-Bus 應用。就結果而言,現在已經可以使用 PHP 撰寫基本的 D-Bus 客戶端應用工具了。
目前有兩套 php-dbus 擴充元件:
- GREE Labs's php-dbus
GREE 這套的實作內容有限,你無法用它補捉 D-Bus signal 。也無法用它撰寫 D-Bus 服務。
- Derick's php-dbus
Derick 這套已經被列入 PECL 之中,而且大部分的 D-Bus 內容皆已實作,可用度最高。但是文件相當匱乏,我實際上是看著它的源碼中的範例程式碼摸索它的使用方式。
這兩套我都測試過了,以 Derick's php-dbus 完成度較高。儘管 Derick's php-dbus 目前版本 (ver 0.1.0) 在撰寫 D-Bus 服務與客戶端程式時,仍然要避開某些情況才不會觸發記憶體錯誤。但它功能齊全,假以時日,等它修正錯誤後,相信它就會是 PHP 官方的 php-dbus 擴充元件。
我的電腦上,內接兩台光碟機,偶爾還會接上外部光碟機。有時,則是把光碟片的內容複製到SD記憶卡,插在記憶卡讀卡機內。也就是說,我有多個可抽換式儲存設備。而在採用 udev 管理設備的 Linux 桌面環境中,每當我們把儲存媒介(CD, SD card)放入可抽換式儲存設備後,系統都會在 /meida 配賦一個掛載點。只是掛載點的名稱,預設使用設備的 UUID ,例如 /media/1234abcd 。對人而言,實在不是容易記憶的名稱。當電腦上有多個抽換式儲存設備時,就會帶來一些小小的麻煩。
例如我放入一片 Ubuntu 的安裝光碟片,有時我就會搞不清楚這片光碟片的內容掛載在哪個點下。所以,我就寫了一個 shell script ,到 /media 目錄下幫我找出來。
為了搭配我的小黑(X200s)筆電,前幾天去挑了一組耳擴與耳機。由於我已經有一組桌上系統,又是要搭配筆電,故只挑隨身耳擴與耳道式耳機。耳機的預算是 2000元以下。
出發前,先用自己的桌上系統聽過一遍,讓耳朵熟悉一下。桌上系統配置為:
- Foobar2000 1.0 KS output
- 電腦訊源: TerraTec Xfire 1723 音效卡,光纖數位輸出到 DAC。
- 外接式DAC: 電光石火 Spitfire
- 綜合擴大機: 王記 Wangine A2150。 Rec Out(By Pass)端子輸出到耳擴。
- 耳機擴大機: PROTON 550。這是一台含耳機輸出孔的綜擴,只是被我拿來當耳擴罷了。我先前曾買過一台電光石光 Cute Encore 耳擴,聽過一陣後又賣掉,繼續用這台「耳擴」。
- 喇叭: 雅瑟 Usher S520
- 耳機: Grado SR60
筆電部份, Grado SR60 直接接上 X200s 的耳機輸出孔。當天是帶著筆電與 SR60 到店家處試聽。