過去一年多以來,幾位朋友都固定在週四進行聚會,我們稱為 Hacking Thursday,目的只是號招幾位喜歡動手寫程式一起來剪剪貼貼原始碼。雖說過程中未見產出甚麽偉大的軟體專案,但是在聚會的互動中,大夥都或多或少學到或分享了一些工作、生活上需要的經驗與知識。

最近幾周,我們開始試著將聚會中的心得分享錄影上傳,或許有更多機會把一些有趣的開發想法分享給其他朋友知道。也歡迎有興趣的朋友,參加聚會,或透過電子郵件方式跟開發者聯絡。

這裡是過去三周的心得分享小短片 –

上週六下午,到了強者我朋友沈聖博的工作室拜訪,一方面聊了幾個與數位藝術相關的國外團體,一方面也聽李駿跟聖博分享一些創作的經驗。

上週四曾經聽過聖博展示過他為棉花糖樂團的專輯《小飛行》所開發的專屬互動酷卡軟體 (吉他手沈聖哲是他的弟弟),非常有趣的商業運用。這張專輯裡面附贈了一個特別的卡片,若拿到電腦前面,配合這個軟體與 WebCam,就可以顯示出互動式的 MTV 播放效果。

我最感興趣的是聖博應用了許多開放原碼軟體,像是 Processing, NyARToolkit for processing, MiniM, JMyronOpenCV 等等,目前聖博所釋出的平台是支援 Mac 與 Windows。更重要的是,聖博放出了所有的程式碼!原始碼與授權書說明都擺在供下載的壓縮檔中。

週末的時候,也跟他討了 Linux 版,稍微玩了一番,執行起來相當順利。若你想試試看,在 Debian 或 Ubuntu 中只需要

  • 安裝 OpenCV. 請用 apt-get or aptitude or synaptic 安裝 libcv1, libcvaux1.
  • 安裝 Java Runtime (sun-java6-jre)
  • 若你裝了 pulseaudio, 需暫時先停止. 軟體需要透過 OSS (Open Sound System) 存取音效系統

另外,由於 labeling process 時用的 threshold 是寫死的,因此可能會因為環境亮度的關係反應較差。你或可調整環境亮度或透過更改 Main.java 中的參數來調整。

身為一個熱愛使用各種開放原碼韌體的開發者,我一直很關注各種可以應用第三方韌體的網通硬體產品。若要說起非官方韌體,最早的開放原碼社群起源之一就是 Linksys 的 WRT54G 系列產品。若你也曾尋找類似的產品,你會知道 Linksys WRT54G 一直都是最多開放原碼韌體支援的平台,而且可以採購特定版號 (v2 到 v4) 間的產品,因為這幾款早期的產品,尚未受到後來產品縮減成本的壓力,記憶體與快閃記憶體等硬體資源較多,容易安裝功能強大但佔用較多記憶體的第三方韌體版本。

雖說這款產品已經在市場上流通相當久,其中原廠的早期硬體版本早以斷貨。但是在拍賣網站或中國市場依然可以找到大量的早期硬體版本,甚至是裸版,價格有點渾亂,從接近原廠售價到幾乎是 BOM 成本的價格都有,數量不限。若稍微仔細查看,會發現產品上面的序號欄位是空白的,甚至沒有原廠品牌。原來這是傳說中仿冒原廠電路板與外觀設計的山寨版路由器。

令人聯想的是,為甚麽一般的 SOHO 家用等級無線路由器產品,技術門檻顯然比手機低許多,但卻沒有演化出同山寨手機一樣的複雜多樣性市場,反而更多還持續行品牌仿冒、產品複製的山寨老路。

筆者想主要的因素恐怕是毛利率與網通單調產品的特性。網通產品同手機不同的是,消費者不因為不同的外觀,或功能性潮流更換設備,許多網通設備都是安裝之後,在硬體故障前都不會進行異動或升級,除非需要有納入新技術的需求,如轉換至 IPv6 或 802.11n 等,才會考量因相容性而進行產品升級。

即便廠商在有限的變化中極力追求產品差異化,設計不同的外型,或特殊的韌體功能,但是相對太多多樣性的產品,也會造成製造、庫存等運營成本提高,利潤跟銷售量不見得會因此提昇。最終,能夠影響銷售量的,還是端看行銷資源的投入多寡。

於是這些中國山寨網通設備製造廠商,除了為其他自有品牌商代工外,最有穩定的利潤莫過於重複製造一些具備固定市場的特定模組產品。這些設備的固定族群來自進階使用者與系統整合商。以 WRT54G 而言,網路上有許多開放原碼的韌體系統,包含了 OpenWRT, DD-WRT, HyberWRT (已停止維護) 等,都支援此硬體平台。因此進階使用者或小規模系統整合商,甚至是無線網路分享社群,都有機會客製化自己的功能,並可以調整一些在原廠韌體中不予開放的選項,適用於不同的需求與應用。
Continue reading

朋友的介紹下,知道了法國的 /tmp/lab 正在籌辦 Wireless Battle Mesh 2009。身為一個 OpenWRT 使用者,以及 802.11 Wireless Mesh Networks 的技術評估人員,一直都持續私下地嘗試不同的 Wireless Mesh Network 通訊協定的不同組合,希望能夠找到一組技術本質上最適宜 Urban Wireless Network 使用的方案。除了開放原碼的協定外,也有機會測試一些台灣廠商所自行開發的私有協定。

l1000459-small

Source: http://n0rg.org/wbm2009

不過礙於資源與時間的限制,只能作一些業餘程度的實驗,還沒有機會可以設定起不同的協定做效能評比。很高興可以聽到在法國巴黎,有一群人,實際的選用了三種不同的 Mesh Network 路由協定 OLSR, BatmanBABEL,並為三種不同的協定各自設定了 25 個節點進行測試。

其中 OLSR 與 BABEL 都是 Layer 3 mesh protocol,算是單純的 IP-based mesh routing protocol。在這個活動之前,我並不知道關於 BABEL 這個協定的資訊,據聞是巴黎第六大學 (Universite Pierre et Marie Curie, ‘Universite Paris 6’) 的 Juliusz Chroboczek 所開發,比較大的特色是 BABEL 可以同時支援 IPv4/IPv6 dual stack, 不像目前有些 Mesh Protocol 都僅能單獨支援 IPv4 或 IPv6。無法同時支援兩種 IP 協定。如 Batman 在 batman-adv 版本中才支援 IPv6, OLSR 則只能單獨支援 IPv6.

Source: http://n0rg.org/wbm2009

你若曾經研究過幾種不同的 Mesh Network Protocols,應該會知道由於協定的差異與不同演算法實做,常常造成 CPU、記憶體的耗損上有極大的差異,進而影響網路的延展性。另外,由於路由協定考慮的變數不同,有的協定容易造成非常容易斷線的狀態,或者由於考慮變因太多,使的路由的收斂時間變長,甚至因為路由中的黑洞問題,造成路由無窮迴圈。又或者,控制網路的封包過大、過多,結果造成網路上被控制封包佔據,傳輸效能不彰的現象。

即便上述許多現象可以透過演算的方式測試,但是更多時候,若能夠實際的架設一個實驗網絡,是最能夠進行效能校調,以及務實的進行效能評比的了。而 Wireless Battle Mesh 2009 的目的就是如此,為了能夠測試每一種協定的差異,公平的使用同一套 Linux 套件系統(BSP) OpenWRT 與同樣等級的硬體平台。

Source: http://n0rg.org/wbm2009

Wireless Battle Mesh 2009 Wiki 上的說明提到,本次測試使用的硬體有 FON Fonera, Linksys WRT54GL, Linksys WRT54GS v4, ASUS WL-HDD25 等。根據小道消息,Batman Adv 的效果比 OLSR 與 BABEL 都好一點,儘管這跟我期待的結果一樣,不過還沒看到數據之前,我自己也還無法信服阿。更多關於 Wireless Battle Mesh 2009 的圖片與影像紀錄可以於找到。

類似的無線測試計畫,我還注意到柏林自由大學 (Freie Universität Berlin)Distributed Embedded Systems (DES) testbed,目前建制了七十個節點,最終希望建制到一百個點。多種開放原碼的路由協定也都會被置入此測試平台中,目前利用此測試平台所研究的十六篇論文都已經發表在網站上。從DES Testbed 的相關研究一頁,我們看到有許多大學也曾經或正在設置過類似的研究平台。如 Leipzig Wireless Mesh Testbed, USCB MeshNet, UMIC-Mesh.net, 韓國 WiSEMesh(Wireless Scalable and Efficient Mesh network) 等。

其中部份大學的研發動力,也演化成社區的自治無線網路基礎,變成一個更廣大的使用者族群。或是像 MIT 的 Roofnet,脫離學術網路變成獨立的商業公司 Meraki Networks, 將技術商業化到全世界市場,算是相當成功的轉型案例。

另外一個我特別注意的測試系統是 ORBIT Lab (Open-Access Research Testbed for Next-Generation Wireless Networks),這個系統有趣的是除了設定 20×20 的測試節點陣列,使用者可以利用終端端設定每一個節點要載入測試的作業系統磁碟檔案,也可以透過 API 控制、查詢每個節點的狀況。是我目前見到最先進的測試環境了,先前曾經找過國內的大學、研究機構,都還沒看到有機構投資這樣的測試環境。不愧是美國國家科學基金會花了五百四十五萬美金分四年所投資的 Networking Research Testbeds (NRT) 研究計畫阿。

X200 入手之後,基於某種固執的看法,不裝 X86_64 (amd64) 而裝了 IA32 (x86) 版本的 Debian sid,且為了擴增的 4G 記憶體,換裝了啟用 PAE2.6.28 核心。

雖說 2.6.28 中,已經納入了 GEM Memory Manager for GPU memory,不過由於啟用 PAE 後,記憶體傳址的相容性問題,造成 GEM 被關閉,無法使用。若此時執行 glxgears,系統會同你抱怨 ‘Failed to initialize GEM.  Falling back to classic.’

我所使用的 Thinkpad X200 上所使用的顯示晶片組是 Intel GM45 (4500MHD),用 lspci 顯示的訊息是

00:02.0 VGA compatible controller [0300]: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller [8086:2a42] (rev 07) (prog-if 00 [VGA controller])

照理若因為無法啟用 GEM 而造成無法利用 EXA 加速的話,Xorg 的 Intel 驅動程式會改用 XAA,不過實際上似乎是完全只用軟體作描繪,因此速度奇慢無比。除了一般的桌面軟體反應緩慢外,時常使用 Firefox 瀏覽網頁時,Xorg 會吃滿 CPU 資源。甚至,開啟某些含有大量表格的網頁時,Firefox 甚至會停止反應好幾分鐘。

為了改善顯示效果,我試著升級了 Xorg (1:7.4+1), xserver-xorg-video-intel (2:2.7.0-1), libdrm2 (2.4.9-1), libdrm-intel1 (2.4.9-1) 等軟體套件。同時為了可以充分利用記憶體,於是裝了 linux-image-2.6.29-1-amd64 核心,但系統部份 (userland) 依然沿用 IA32,重新開機後一般的應用程式執行上沒有太大問題。

改用了新的核心後,預設使用 EXA 效率上比錯用 PAE 核心的狀況好很多。有些人測試 UXA 說有些問題,但是我改用 UXA 後,特別是 compiz 的速度改善相當多,用 compiz benchmark 大約是 144 fps. 使用 Firefox 時網頁繪製的速度也快多了,Xorg 相對的只佔用少量的運算資源。順道測試了 KMS 的效果,很遺憾的結果是開機後一片漆黑,只好暫時打消玩弄超絢麗 Plymonth 的念頭。

你若也想測試一下新的驅動程式,目前在 Debian Sid 中,都可以找到上述的軟體版本。剩下的只是稍加修改一下系統設定,主要是 /etc/X11/xorg.conf 中的 Device 一節,如使用 UXA 則改為

Section "Device"
... omitted ...
Option          "AccelMethod"   "UXA"
... omitted ...
EndSection

若用 EXA 則是

Section "Device"
... omitted ...
Option          "AccelMethod"   "EXA"
# Option          "MigrationHeuristic" "greedy"
... omitted ...
EndSection

其中 MigrationHeuristic 之設定據聞在舊版 Intel 驅動程式中可以加速顯示速度 (但也可能引起其他問題),你可以依照自己的版本增改。由於搭配的驅動程式版本、設定眾多,且不同的搭配,所造成的優劣各有不同,並沒有一個最佳的設定,因此在此不多加說明我個人的測試。在 Phoronix 上的 Does A Greedy Intel Driver Improve Performance? 做了相當詳盡的全方面測試,若可參考文中的數據。你若使用不同的顯示卡,而想嘗試 EXA 的效能,請參考 Intel Graphics DriverExa Status 一文來了解你的顯示卡支援程度。

在測試過程中,我也修改了其他的設定,主要是為了同步垂直掃描頻率的問題。可以利用 DriConf 更改了同步垂直掃描頻率 (vblank_mode) 的設定,我的系統預設設定是開啟的,這種狀態下啟動 glxgears 後,系統會出現 ‘Running synchronized to the vertical refresh.  The framerate should be approximately the same as the monitor refresh rate.’ 只會得到 60fps,必須關掉後才能得到數據。此外,我也更改了 Compiz 中的 sync_to_vblank 設定,可以在 CompizConfig Settings Manager 的 /General/Display Settings 設定。

整個效能測試過程中,我用到了幾個測試工具,包含了

  • sysprof 可以用來觀察設定前後,Xorg 與 Firefox 的資源佔用比例。
  • x11prefgtkpref 來測試 2D 的繪圖效能。
  • Compiz Benchmark (包含在 compiz-fusion-plugins-extra 中),用以測試 3D 的繪圖效能。
  • PeaceKeeper 用來測試 Firefox 的顯示效能。

若想進一步了解本文中大量使用的縮寫意義,請參考 Pavel RoitbergEXA, UXA, DRI, GEM, TTM 一文。

去年年中試用過 Adobe AIR for Linux beta 後,從去年年底 Adobe 發行1.0 正式 版,一直都沒有安裝新版。剛剛又再度試玩一下,比較有趣的是,Adobe AIR 跟系統本身的軟體套件管理系統高度整合,例如你裝了一個新的 Adobe AIR 軟體時,他會自動封裝並安裝成 dpkg ,於是你若使用一般的套件軟體管理工具如 aptitude / synaptic 也可以移除 Adobe AIR 軟體。

之前提到的 Adobe AIR XIM 問題已經修正 (當初回報的論壇文章已經被刪掉 ?!),至少在 twhirl 下可以正常輸入中文,不過一併測試了 Balsamiq Studios 的好用軟體打樣工具 Balsamiq Mockup,結果發現這個工具還是無法接受 scim 的中文輸入,真可惜,只好繼續用英文設計版面。相較於其他的軟體版面打樣軟體,Balsamiq Mockup 算是最直覺簡單的一套,而且隨便拉一拉做出來的成果還算美觀,有手繪筆記的風格。在 Mockups To Go 上,還有不少人分享設計樣板可供參考。

若是想嘗試更多的 Adobe AIR 軟體,Adobe 建了一個 Marketplace,可以直接下載安裝不同的軟體,許多軟體都是免費授權使用的。