參考: The Java Native Interface Programmer's Guide and Specification - Chapter 2 Getting Started
UPDATE: I have commit this code to Matthew Johnson. This bug is fixed in the version 0.7.3 of libmatthew-java. See Debian Bug report logs - #590331.
Java D-Bus bindings requires libmatthew-java, a small JNI library, to use Unix-Sockets. We find a memory leak in libmatthew-java version 0.7.2. Here is the fixed code.
D-Bus 是一種與 CORBA, Microsoft COM/DCOM 處於相同抽象層級的行程間通訊(IPC)機制。它們將 IPC 方式抽象化到 API 的形式。一方面簡化了 IPC 需求的設計內容;另一方面,也為不同程式語言之間互相調用方法的作法提供了更易用的途徑。
當你需要用 C 語言實作一個 D-Bus 服務時,你有兩種選擇。其一,使用 D-Bus Low-Level API ( D-Bus Low-Level API Tutorial)。但是 D-Bus 開發人員強烈建議我們不要使用這種方法 (WARNING: you should NOT use this API unless you absolutely have to.
)。其二,使用 dbus-glib bindings 。絕大多數時候,我們都將採用此一方法。
近年的 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。
日前處理一件工作,用 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
即可。
我曾耳聞將來只有 JDK7 而不會有 Java7 的傳言(No more Java 7)。雖然結局尚未到來,但看 Java technology, IBM style: A new era in Java technology 中的用字遣詞,傳言似乎真有那麼點可信度了。
雖然 Oracle 收購 Sun 之後,附帶取得 Java 內容的控制權,但 IBM 顯然決意擴大它對 Java 內容的影響力。在 Java technology, IBM style: A new era in Java technology 中,IBM 提出了不少項目。觀其態勢,既便 Oracle 最後不將這些內容納入 Oracle Java 7 specification,IBM SDK for Java v7 也會支援。在 JCP 的成員中,IBM 不是唯一有這打算的。 Apache 基金會也有自己的一套想法。
今天聯合報從 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 資料。