前兩天,我在觀看 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 到店家處試聽。
我把 NuForce Icon Mobile 買回家後,曾接上我的桌機做為 USB 音效裝置 (C-Media USB Headphone Set)。一開始試著當前級,直入綜擴。但是輸出似乎不夠, NuForce Icon Mobile 的音量轉到最大了,喇叭才發出勉強可聽的音量。接著採類比輸出(line out)接上綜擴,音量足夠了。但解析力聽來比電光石火 Spitfire 差了些。
NuForce Icon Mobile 在我的 XP/Foobar2000 環境下,輸出設備不能用 KS 輸出。但幸好搭配 ASIO4ALL driver 後可以用 ASIO 輸出,效果明顯比 DirectSound 輸出好。
Icon Mobile 搭配 ASIO4ALL driver 時,有些設定的注意事項。
- ASIO Buffer Size 最好保持在 512 Samples 或以上。 0 一定爆音。256 時,有些樂段會爆音。512才穩定。
- 關閉 Hardware Buffer。一開就爆音。
- 關閉 Always Resample 44.1 to 48。無此必要。
- Latency Compensation: In: 0 Samples; Out: 0 Samples. 音質微調。
最後一點,NuForce Icon Mobile 使用 Foobar2000/ASIO 輸出時,最好是專心聆聽音樂。如果開啟其他程式,例如瀏覽器看網頁,都有可能影嚮音樂播放,甚至爆音。這似乎是 USB 音效裝置的通病。我的 TerraTec Xfire 1723 配合 ASIO 輸出時,就不會被其他動作影響。
在 Web 應用上,當瀏覽器向伺服端索取資料,而資料尚未存在或尚未被輸入時,我們通常令伺服端回傳代表目前無資料的訊息,並告知使用者稍候再讀取。當 JavaScript 被帶入 Web 應用程式開發領域後,我們在客戶端設計上,便運用 JavaScript 在間隔一段時間後,主動地向伺服端查詢是否有資料可以讀取。由於這個動作是放在一個無窮迴圈中,令它反覆地向伺服端執行查詢動作,故而我們將之稱為「輪詢」(polling)。
然而這種普遍地解法,實際上是一種反模式(Anti-pattern),也就是把反面的例子當成正確的做法(當我正在思考該如何表達這種普遍地錯誤形式時,我剛好瞄到桌上的《Java AntiPattern》, Anti-pattern 正是貼切描述這種情形的詞語)。在早期,瀏覽器的功能還很單純時,我們沒有別的選擇,只能使用這種輪詢式的解法。但隨著瀏覽器的功能強化與 Ajax 技術的普及,繼續使用輪詢式解法,就是反模式。正確地做法是,我們要在 Ajax 這種非同步設計模式中,導入同步 I/O 行為。在本文中,將說明如何運用 Blocking IO 解決 Ajax 設計中的輪詢反模式。
數位訊源成主流,誰還要做CD-Player?
在會場,我聽到許多廠商掛在嘴上說「現在都做數位訊源播放器了,誰還要做CD-Player?」。講白一點,就是說現在都直接用個人電腦、iPod 播音樂了。新推出的播放器上,USB 端子已經成為標準配置,加上 iPod 插座更是主流趨勢。
上個月,我在抱怨內政部自然人憑證系統僅支援IE瀏覽器時,主張要透過政治手段解決這個問題。三月初,歐盟和 Google 就先後以政治手段「解決」了 IE6。
歐盟
Google
標準化
當我們逐漸把觀看網頁的瀏覽器最低版本提高時,我們並不是在要求設計者與使用者使用那些瀏覽器的獨特功能。相反地,我們希望讓設計者與使用者享受到標準化的好處。因為愈是新版本的瀏覽器,它們對網頁標準規範的支援度就愈完善。儘管那些網頁標準規範已經發佈5年到10年之久了,例如 HTML4.1, XHTML, CSS 1 ~ 3, DOM level 1 ~ 3 ,但瀏覽器的實現腳步則是近一、兩年才逐漸趕上規範內容。造成瀏覽器實現進度落後的罪魁禍首,正是 IE6。現在的趨勢對使用者與設計者而言都是好事。設計者可以用一致地表達方式設計網頁,而使用者可以看到一致地呈現內容。
但是我國從政府機到學術圈,大多數人都未注意到這些問題。因此我國以政治手段解決 IE6 的時候,看來還遙遙無期。
Install Ruby DBus
前往 ruby-dbus ,下載壓縮包 (tarball) 並解壓。
詳細安裝方式請閱讀壓縮包內的 README ,基本上只需要執行下列三個動作:
- ruby setup.rb config
- ruby setup.rb setup
- sudo ruby setup.rb install
Test:
irb> require 'dbus'
true
Cron 是 Unix 平台上的工作排程服務,它有一套特定的時間記述方式,俗稱 crontab (See crontab(5))。例如 * 30 5,12,17 * * *
表示每逢 5點30分、12點30分與17點30分時,執行工作。CronLine 則是使用 Ruby 所實作的一個用於解析 crontab 的類別。它的源碼來自於 Rufus::Scheduler 。
每日建置系統簡化專案交接風險
日前有一位同事要離職,而他負責的案子指派給我接手維護。他負責的那件案子,我之前完全沒有接觸。原本以為專案交接會是一項很麻煩的事,但整個過程出乎意料地簡單,大概只花了不到30分鐘就交接完畢了。為什麼我們那麼快就能交接呢?原因就在於每日建置系統。
去年底完成一件大案子後,我們公司就指示我建立一套每日建置機制 (軟體開發之建置風險的故事 )。在每日建置系統上,只安裝了編譯、建置與安裝的最基本環境,其他 library 一律不裝。並要求所有專案都要實作一套可以在命令列下完成 init, build, package, install, test 動作的建置程序。視專案內容,這套建置程序可能是一份 build.xml(ant), 也可能是一份 Makefile ,或是更基礎的 shell script。重點是,這套建置程序要能交由建置系統自動執行並完成上述所有動作,整個過程不可以有人工輸入的部份。此外,我們定期會還原系統內容,以確保一個乾淨的建置環境。
專案交接時,最常碰到的情形就是接手者無法複製出原負責人的開發環境,以致於專案連建置執行都做不到,也甭提修改維護了。但是每日建置系統讓這個問題消失了。這項專案的交接工作,很幸運地在每日建置系統建立後才發生,因此大幅地減少交接工作的內容。當一個專案的內容,可以在每日建置系統上自動建置時,同時意味著別人也可以在簽出該專案的內容後,直接在命令列下建立起專案的開發環境。即使什麼文件都沒有,也可以接續專案的維護工作。至少,我可以用文字編輯器 (gedit, notepad) 開始修改程式。至少,我還有命令列可以跑 ant, make 。剩下的程式架構說明,都已經按照 Javadoc 形式寫著程式碼。剩下的問題,就是接手人員的功力高低了。
This tool which written by Ruby language publish file to Trac wiki page. It will read the file content then publish to Trac wiki.
Many people use Trac to trace the software projects. When project execution, we will renew the project's wiki page frequently. However, many contents often are written in other documents. For example the API specification, Java will write by the Javadoc form in the .java source code, Ruby has RDoc, PHP has PHPDoc. The update log will write in the Subversion commit message. “The source code is the document”, these methods are quite universal. Because the document content had already existed, we most effective processing mode is with publish tool to read the file and to publish to the wiki page. Remembers, Copy and Paste is not the job which a professional programmer should do.
ThinkPad X200s 是12吋寬螢幕 (1280x800),以正常方向看電子書時,略顯狹窄。如果旋轉90度的話,就可以直立閱讀電子書,剛好可以全頁顯示16開到32開(A5~A6)的書籍頁面。
基本上,螢幕旋轉是顯示器本身就有的功能,不成問題。但是旋轉後的鍵盤方向鍵與小紅點方向並不會跟著轉向,在操作上就會礙手礙腳了。 X200s 的螢幕和鍵盤是一體的,旋轉螢幕後,鍵盤與小紅點的配置方向也會跟著旋轉。但是它們的操作軸線卻沒變,所以我們在操作時就會碰到手眼不協調的狀況。除非我們像金庸筆下的周伯通,可以一心二用、雙手互搏,心中想著游標要向上時,左手可以向右或向左推小紅點。
昨天在公司的小組會議中,我和同事們討論到 JavaScript 呼叫本地桌面程序的問題,提到關於 JavaScript 跨網站執行的關卡。近年來,隨著 jQuery 等 JavaScript 框架的普及,降低了 Ajax 程式的開發門檻,但也同時讓人忽略了一些更為基礎的知識。由於 jQuery 等框架主要利用 XmlHttpRequest 實現 Ajax 能力,但 XmlHttpRequest 在使用時也受限於瀏覽器的相同網域策略 (The Same Domain Policy),所以不允許載入不同網域的文件。但是,要解決這個關卡其實只需要應用到基本的 Ajax 技巧。
所謂 JavaScript 跨網站執行的關卡只作用於 XmlHttpRequest 個體上。在 Ajax 中,我們還有很多非同步機制可以載入與執行來自不同網域的 JavaScript 程式。這些技巧, Google 在用,hackers 也很常用。
ThinkPad 系列筆記型電腦最大的特色就是鍵盤上的中原一點紅,俗稱小紅點的 TrackPoint 指標裝置。除了不能做到多點觸控之外,其他方面它能做得比觸控板更好。例如拍一下小紅點等於滑鼠鍵點擊一次、模擬中鍵捲動。只是在 Ubuntu 上需要做一些校調,才能使用這些功能。
關於小紅點的操作方式,可以參考《(原創) 如何使用ThinkPad的TrackPoint(小紅點)?》。只是該篇文章講的是 Windows 下如何啟用拍擊小紅點與中鍵捲動功能。
2010-09-03: 更新 Ubuntu 10.04 相關內容。
我在過年前買了生平第一台筆記型電腦。打從一開始,我就不打算使用 Windows 作業系統,所以我特地只選擇不附OS的機種來看。而我的第二個選擇偏好是,不要觸控板。我一點都不喜歡用觸控板控制指標,又不想要多帶一個滑鼠,在這個條件下,我唯一的選擇就是 TrackPoint (小紅點),它可以讓我的雙手完全不用離開鍵盤,就能完成所有操作。雖然不附OS的機種很少,又要滿足第二個偏好更難,但非常幸運地,在那極少數可選擇的機種中,偏偏就有滿足我偏好的機種,那就是 ThinkPad X200s 。俗稱小黑。
Linux 延續 Unix 風格,傳統上使用 /etc/network/interfaces(本文以 network/interfaces 簡稱之) 管理網路介面設定。不論那種 Linux 散佈版本都支援這種設定方式, LPI 檢定也是考這一招。而 Ubuntu 近來在桌面環境下引進了另一套網路介面設定管理機制,即 NetworkManager 。本文旨在說明 NetworkManager 的使用要項。
我今天看到洪朝貴教授的 大學不敢談的資訊安全問題 ,文中提到大學線上簽核系統,因為使用了 ActiveX 的控制項,以至於自我侷限於 IE6、IE7 等舊版瀏覽器才可利用。當 Google 被駭事件中,許多駭客利用 IE 的重大安全漏洞侵入許多系統之際,這些自我侷限的線上簽核系統,也正把全校師生的隱私暴露在駭客的眼前。
然而大學資訊系統自甘成為駭客犬馬還不是最危險的。我昨天才在 如何在Firefox上使用自然人憑證系統 中說內部政的自然人憑證系統也是限用 ActiveX plugin ,所以也同樣把自己暴露在IE漏洞之中。內政部自然人憑證系統的牽連影響範圍之廣,遠非小小的大學資訊系統所能相比的。當內政部自然人憑證系統這麼大的系統都在幫駭客扶植入侵民眾電腦的跳板(IE瀏覽器)時,小小的大學資訊系統又算得了什麼呢?
再看到 iThome 的報導 《臺灣已有企業遭受IE漏洞攻擊》提到: 中華電信資安監控中心則發現,臺灣身處複雜的政治環境中,早就是許多駭客針對性攻擊的鎖定對象,對於此次來自中國的攻擊,臺灣使用者並無法倖免
。 現在,除了家境貧困只能用 Ubuntu 免費系統的理由之外,我們又多了一個理由寫信給馬總統要求修改內政部自然人憑證系統,那就是「防止中國駭客侵害台灣人民的隱私」 。各位鄉親,不論你是藍是綠,都要快點寫信了,這就是愛台灣啊。
附帶一提,大多數技術人對隱私權這種政治議題向來是不當一回事的,見雲端運算與自由主義的隱憂。