2007年3月31日 星期六

遇上OpenMoko

週五晚上當我正在tune某個裝置時,收到一則訊息,提及與OpenMoko創辦人Sean Moss-Pultz聚餐的機會,於是週六就邀約Jollen、Mat,以及FourDollars一同前往。關於OpenMoko的報導不少,不過寫得最生動的大概就是Jollen兄的blog:

同時也是FIC (大眾電腦集團) Product Manager的Sean Moss-Pultz,得與同仁面對內外不同的意見,對於這個略有年紀的企業來說,實在是種挑戰。而我有幸在這面對面的對話中,讓原本在我心中的疑惑,透過詳盡的闡述與互動,逐漸獲得解答。其實可參閱mailing-list上的討論"New site about open mobiles: ideas and suggestions",這可搭配OpenMoko於FOSDEM 2007的演講:"OpenMoko",在台灣大學做了一份錄影存檔:"OpenMoko_speech_FOSDEM2007_video.avi" (342Mb)。

OpenMoko作為開放原始碼的手機,有許多堅持,首先就是強調kernel-space的部份必須依據Linux kernel的授權方式,採用GPLv2,這無可避免會造成尋求硬體供應商的困難,但開發團隊正試圖克服。再來就是依據社群需求去制定產品規格,三月底的GTA001就是在初步雛型發表後,廣泛接受各方意見,逐步調整的設計,其SVN版本控制系統也可見到對應的軟體建設。依據wiki指出,主要的軟體項目有:
  • boot loader - u-boot
  • kernel - Linux kernel
  • gsmd - 管理GSM modem的GSM背景程式
  • gpsd - AGPS (Assisted GPS) 背景程式
  • OpenMoko - The OpenMoko distribution
其中OpenMoko distribution又分成若干application與library,而UI的架構部份主要OpenedHand協助開發,後者協助Nokia成功推出Nokia 770系列的產品,而在OpenMoko現在的實做也看出高水準的表現,其LCD panel大膽採用VGA 640x480解析度,顯示頗為細緻,但這也衍生對於多國語文的技術挑戰:輸出與輸入法的支援。

過去顯示的解析度小,所以可以直接用點陣字或者所謂的"pre-rendered font",但是一旦解析度提昇時,就不可能只用兩三套固定尺寸的字體來滿足,勢必需要TrueType的向量字型,不過,這對於這類手持式裝置來說,不僅佔用大量的儲存空間,還需要複雜的運算,也得消耗寶貴的記憶體空間,長期來說,頻繁的儲存空間存取,將可能降低使用年限。稍早於「紀錄:可攜式造字引擎專利釋放暨成果發表會」特別強調的技術困境,既然剎那搜尋工坊 (前身為易符智慧科技)已相當有誠意地釋放專利,並提供社群相關的自由軟體實做與部件字庫,這就是一個極佳的契機,OrzLab的成員在參與自由軟體開發的過程中,奠定對於多國語文處理的能力,所以技術上的分析與實做也已經展開,OpenMoko可說是極佳的技術展現平台,希望近期即可展現這部份的成果。

當然,這次的會晤有尚有許多值得一書的討論,就留在日後詳談了,我也從這個困難度極高、周旋於理想與現實考驗的OpenMoko計畫中,獲得莫大的鼓舞,也希望OrzLab能秉持這些精神,為台灣的硬體創造出更大的價值。

2007年3月20日 星期二

UCIMF正式成為OrzLab專案項目

日前Mat完成了OrzLab的paper work,自此,UCIMF正式成為OrzLab的專案項目之一。UCIMF是個創新的計畫,引入IIIMF與OpenVanilla輸入法架構 (未來會有SCIM) 的終端機輸入環境,但不受限於輸入法,事實上,在開發的過程中,已經補足Unicode輸出顯示能力、視窗管理,以及多種字型描繪機制。以下是UCIMF的授權宣告:

/*
* UCIMF - Unicode Console InputMethod Framework
*
* Copyright (c) 2006-2007 Open RazzmatazZ Laboratory (OrzLab)
* Maintained by Chun-Yu Lee (Mat)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
隨著資訊交換的多元化,在我們的觀察,嵌入式系統的多國語文支援有提昇的趨勢,又因為嵌入系統不僅得考慮到效能,也得將成本與穩定性列入考量,所以往往受制於有限的軟體建設。UCIMF則帶來一個新的途徑,得以在低成本需求的Embedded Linux/BSD上,提供豐富的多國語文處理能力,涵蓋顯示、輸入法,未來也會有印表的支援,更重要的是,符合Unicode標準,所以可消除許多相容性議題。

另外,考量到UCIMF應用的多元性,其IMF (Input Method Framework) 的介面部份採用BSD License釋出,這意謂著其上的輸入法引擎不僅可抽換,也可採用非GPL授權,去除商業應用的困擾。

紀錄:可攜式造字引擎專利釋放暨成果發表會

稍早提及可攜式造字引擎專利釋放暨成果發表會,日前已在中研院資訊所圓滿落幕,雖然許多技術性與實用性的議題尚待克服,但剎那搜尋工坊這項釋放專利的創舉,可望驅使漢字與資訊的整合邁入新的契機。OrzLab也順利展示內建動態組字技術的Linux mobile phone概念機,未來將逐步釋出其原始程式碼。

議程方面,自下午三點,由剎那搜尋工坊 (前身為易符智慧科技) 的大家長陳昌江先生在「專利釋放現場公告」揭露「可攜式造字引擎專利公眾授權條款書」,並有存證信函與拍照留影,為漢字資訊處理界劃下新的一頁,自此,此類動態組字技術將不再受限於特定單位,而能以自由軟體之形式,廣泛流通於新的應用中,感謝與會的貴賓與我們見證這一刻。葉健欣先生 (yap,前朱邦復實驗室成員) 則在「組字研究的簡史」給予清晰的介紹,提及何以漢字系統會面臨窘境、古文訓詁的難題、過去幾十年內相關漢字技術的變遷,以及從易符智慧科技剎那搜尋工坊所面臨的挑戰與技術應用的轉變。

張正一 (魔法設計師) 隨後給予精彩的「組字標準與觀念解說」議程,先由昔日「萬碼奔騰」的時代點題,雖然今日我們已清楚知曉Unicode標準的重要性,但實務應用上難免有所不足,其中以漢字缺字為最,為此,Unicode 3.0以降, 引入新的IDS與IDC機制 (Ideographic Description Sequence/Character)剎那搜尋工坊則以此為基礎並整合以部件為基礎的動態組字技術,張正一先生則率先撰寫符合自由軟體規範的組字示範程式,在議程中發表與展示,藉此為與會的貴賓建立概念。

由於專利釋放之舉也需要配套的自由軟體社群支援,才得以彰顯價值,所以本會也邀請到來自中研院資訊所的林誠夏與胡崇偉 (marr) 探討授權與專案開發的須知,詳見「公眾授權條款簡介」與「開源計畫要如何參與」。最後是OrzLab的議程「應用動態組字於手持式裝置」,首先分析手機一類的移動裝置在成本與多國語文上面臨的難題,再者是來自裝置端與後端的訊息交換議題,再深入探究系統設計,可發現以往的點陣字系統是一大衝擊,不僅增加成本也造成潛在的裝置壽命問題,同時輸出與輸入系統彼此是獨立的。OrzLab引入全向量繪圖系統,試圖克服上述技術難題,目前已經有高效能且低儲存需求的ASCII字型引擎,正銜接Unicode IDS需求,在議程尾聲,展示了一款內建動態組字技術的Linux mobile phone概念機,得以在QCIF解析度 (176x220) 迅速呈現全螢幕漢字輸出。

由於與會賢達來自古文研究、電子產業、出版業、佛經文化、文書處理等領域,所以議程後的討論時間中,激盪了深入的技術與人文性思考。首先是漢書軟體作者施得勝先生提問:「動態組字美觀度可否精進?」yap的回應是:

  • 組字七萬字約佔1MB ,而 TTF 要40~50MB 。美觀是用空間和時間來換取的
  • 常用字只有兩三千字,這些字沒有必要動態組出來,使用既有的方式即可
  • 動態組字使用的場合為呈現系統不存在的字,此時,組字再醜,也遠比空白或亂碼來得好
另一則是關於自由軟體授權的議題,這由中研院資訊所的葛冬梅小姐給予簡要的分析。臺灣師範大學國文系亓婷婷教授則提出美觀度、手寫辨識與組字的整合等問題,就動態組字本質來說,形同一個可提供無窮字形的字型檔,與輸入法沒有關連,亦即可沿用任何既有的輸入法,來輸入構形部件,當然,對於手寫辨識來說,將會有潛在的優勢,因為已經預先作部件的分析。

東海大學資管系林正偉教授
提出澄清專利涵蓋的議題,陳昌江先生則重申專利字號與適用範圍,以茲與眾多漢字學者研究區別,這也引發關於動態組字需要唯一或標準表示的討論,以「好」這個中文字為例,其部件為左邊的「女」與「子」,再行左右組合,但對複雜的字來說,構成方式不唯一,Unicode IDS只是探究其表示法,該如何確認有一致的交換性?多方討論的結果來看,剎那搜尋工坊表示會另行規範,但不在本研討會的議程中。最後是Mat (UCIMF作者) 就實務上詢問動態組字能否與Unicode相容,基本上只要依據Unicode IDS作對應,即可符合相容性,這也意味著,OrzLab未來可能從Unicode console/terminal與FreeType整合的方式,切入動態組字技術的應用。

會後就是BoF時間,也激盪了許多想法,相關的自由軟體實做與部件字庫也會在近日釋出,所以,儘管三十年前謝清俊教授等人就提出構字式的具體研究,但真正能夠讓成果累積並且跨入電腦以外的項目,這是個起點,但我們終於跨出了。

相關資訊:

2007年3月15日 星期四

Unicode版のTeX

TeX 是一套重量級的排版軟體,目前在國際流通的論文,大半是以TeX 所製成,其文件品質有目共睹。XeTeX 是Unicode版的TeX,具有功能特色如下:

使用FreeType和Fontconfig的方式讀取系統字型,直接支援True Type和OpenType字型,不用再作繁複的設定。引入ImageMagick支援,可直接套用JPG、PNG、BMP的圖檔,大幅增加引圖的彈性。語法上,繼承TeX和LaTeX的語法,而不再用\usepackage形式上來處理CJK文字,文件相容性高。
目前XeTeX的使用環境以Mac為主,不過目前已有Linux和Windows的支援。圖上所顯示的正是在Gentoo Linux上所製成文件。

視覺化系統模擬與偵錯

稍早撰寫短文「透過 User-Mode-Linux 來學習核心設計」(Part I / Part II),隨後在「Intel/Marvell PXA27x的系統模擬」提出OrzLab所實做系統層面的模擬環境 (以qemu計畫的qemu-system-arm為基礎),暫定名稱為PXAemu,這些基礎建設對於嵌入式系統開發都有其價值,諸如system prototype、進階分析,以及快速軟體開發,未來我們會增加多種硬體平台的模擬。除了系統模擬器外,視覺化的呈現與偵錯能力也相當重要,在今年一月份,已經成功整合User-Mode LinuxInsight/GDB,大略的呈現如下圖:
當時開發的平台是IA32,引入User-Mode Linux的優點是可快速分析與平台無關的Linux kernel機制,諸如記憶體管理、排程,以及網路堆疊部份。另外,上週於台中一中舉辦的「深入淺出 Hello World 」系列演講第三場,已經公開展示PXAemu與gdb整合的操作,可相當便利的進行分析與偵錯,其運作畫面如下:
以上展示透過Remote GDB連線,設定中斷點於sys_execve函式,這將會觸發於首次由kernel-mode切入user-mode的時機,也就是/sbin/init程序執行之時,當然,gdb強大的命令與功能可以輔助來對kernel作更深入的追蹤,必要時也可改變其執行時期的行為,稍後我將會試著整合PXAemu與Insight/GDB。因為Insight/GDB內建的Tcl/Tk版本老舊,在Linux下對於字型處理不雅觀且不當的XIM處理也容易讓系統崩潰,所以我動手補強並加入Xft的支援,可自行取得patch

除了以上透過既有軟體組合的視覺化環境外,我正在進行一個全新的項目,以Qt4作為GUI library (盡可能減少Win32與Linux平台移植的技術議題),為PXAemu開發frontend,也著手開發相容於GDB Machine Interface的GUI Debugger,如此一來,就可以輕易更換GNU Toolchain,即使是商業版本的MontaVista Consumer Electronics Edition (mvlcee) 也得以使用。

2007年3月14日 星期三

可攜式造字引擎專利釋放暨成果發表會

本週二下午至中研院資訊所,參與「可攜式造字引擎專利釋放既成果發表會」的行前會,確立許多細節,新聞稿已出爐,摘錄如下:

3月17日剎那搜尋工坊將假中央研究院舉行可攜式造字引擎專利釋放暨成果發表會

對於出版、文史研究、教育、甚至科技行業,漢字重重的缺字問題始終是永遠的痛,在經歷30餘年產、官、學的努力下,終於萌生全面性解決方案-部件組字

部件組字在邁向成熟實用化的道路上,剎那搜尋工坊扮演了相當的角色。過去專注於開發漢字搜尋技術,也鑽研缺字問題的全面解決之道,在吸納中央研究院謝清俊教授、朱邦復先生等等諸前人的成果後,研發出「可攜式造字引擎」。該技術內涵為基於漢字字形本質的動態組字,使跳脫以往人為一字一碼的武斷,回復漢字本有的活性架構。不但解決了缺字困難,也同時相容於unicode標準,為一條無痛的漢字數位進化之路。

剎那搜尋工坊鑑於此重大數位漢字基礎技術,乃「站在巨人肩膀上」的成果,為謀求對社會大眾的最大利益,遂藉此會公示將此專利技術無償開放公眾運用,歡迎各界使用與繼續發揚。

會中將說明本技術的沿革簡史、組字的觀念、以及如何參與發展的作法。
OrzLab也提供了十五分鐘的介紹「應用動態組字於手持式裝置」,延續之前blog「動態組字技術於Embedded領域」的觀點,將以實際的案例探討嵌入式系統領域如何由此受益,相當感謝剎那工作坊釋出專利,經過多次的討論後,也看到許多機會,作為華人的工程背景人員,我們有相當大的伸展舞台,同時開放的胸襟加上open source,所激盪出的變革更值得我們關注。

舉辦單位
時間地點

3/17/2007 下午3:00~5:00 中央研究院資訊科學研究所 新館 101會議室

2007年3月13日 星期二

lwkhttpd : Lightweight kHTTPd for Linux Kernel

昨天在SourceForge.net註冊了新專案Ajax/Embedded,做了必要的設定後,開始將之前Proof-of-Concept的程式碼check-in到SVN中。今天開放的項目是子計畫:lwkhttpd,也就是 "Lightweight kHTTPd for Linux Kernel" 之意,以下是該子計畫簡介:

lwkhttpd : Lightweight kHTTPd for Linux Kernel 2.6 series

Copyright (c) 2007 Open RazzmatazZ Laboratory (OrzLab).
Maintained by Jim Huang
Development page: http://sourceforge.net/projects/ajaxembed

[-] Overview

Ajax/Embedded is an experimental design dedicated to perform Ajax applications on embedded systems, such as Wirelss routers. To fit the web traffic on these devices, lwkhttpd is developed as the full kernel-mode HTTP daemon for Linux kernel 2.6 series. Besides handling static requests, lwkhttpd redirects dynamic requests to the user-mode webserver (used for Ajax engine) for extensibility.
儘管Web 2.0並未帶來相當革命性的技術移轉,但我們可以看到Web engine卻有調整與最佳化的空間。在lighttpd開發者的blog有一篇名為 "Faster Web 2.0" 的文章,提出三個方向對Web 2.0應用程式提供更好的效能:
  • Large Response content
  • Pre-generating content
  • Read Ahead
簡單來說,FastCGI的執行模型雖然對OpenWebMail一類的Perl-based Web application有相當程度的效能提昇,但對於Ajax導向的模式來說,還是沒有切中問題核心。Ajax/Embedded底層提供如此一個kernel-mode HTTP daemon,以處理大量的static data,同時也提供 redirect to user-space的機制,讓動態網頁資料 (主要是XMLHttpRequest) 得以「轉包」到我們的Ajax engine,在這之上有豐富的C/C++ Web UI widget set可用。整體效益就如之前blog「Ajax/Embedded」所提,得以建構兼具效能、功能,以及安全性的native Web framework。

對了,Ajax/Embedded計畫項目會參加今年的Coding Jam 2007活動,已提交簡要的ProposalTaiwanCodeJam的wiki page中。希望能快點拿到我們的參考硬體,ARM-based的硬體已開始運作,現在要試試Wifi相關的部份,開發的過程中讓我發現很有趣的現象:現在的computing model逐漸「M化」,不僅是mobile化,也是朝向兩個極端的演化,就Ajax/Embedded專案的適用範疇來看,事實上就是「client比server快上許多」的模式,同時server-side產生相對少量的資料,讓client-side盡情去描繪多采多姿的內容,也對使用者互動方面有了更多的需求。

OpenVanilla套件打包二三事

在寫UCIMF的趨使下,對OpenVanilla的安裝方法並不陌生。雖然手動安裝不難,但總是希望能直接用套件的方式來安裝程式和模組。繼前陣子包了給Debian的實驗包之後,一直也很想試Gentoo的打包。經過幾天的嘗試,幸運的得到初步的成果。一開始的時候,煩惱要怎麼指定程式碼的位置,一般都是給一個tar.gz的URL然後下載解壓縮。不過OpenVanilla主要是用SVN作為存放的方式,所以行不通,於是就暫時寄望在Tarball出現上。這時候剛好遇到psilotum秀了FreeBSD上的OpenVanilla的Ports給我看,才發現Ports已經有人包好這些套件,我便想,Portage上也有類似的工具才對。有了靈感後,很快就找到Portage對於SVN這類的處理方式了。主要的作法是,先 inherit subversion 這個eclass, 然後再用ESVN_REPO_URI的參數來指定位置。遇到比較分散的檔案,則可以改寫src_unpack()以符合需求。不熟悉的地方則可以先參考已經寫好的ebuild,像是uim-svn

回顧這兩次作Debian和Gentoo的Package的經驗,發現製作原理有很多共同的地方。作Debian的包裝時,發現整個OpenVanilla Modules的目錄只要設好一個套件產生的規則,就能把整個目錄下所有的模組都打包成個別的套件。因此原本以為要作10幾個重複的工作,居然一次就作完了。這讓我印象非常非常的好。能在套件的維護者只需要維護一個Source Package的情況下,產生許多Sub Binary Package供使用者選擇,是極大的優點。而Gentoo特別的地方(也是FreeBSD Ports的特色),則是直接抓源本的原始碼來編譯的風格。這個風格的好處是在我開始作UCIMF之後才慢慢有感覺的。因為我體會到,對許多還在發展中的專案,維護一份Tarball是一件很困擾的事。最主要的原因是,許多地方都還在增減修補,很難取捨出一個點作為一個穩定的釋出,而要等套件的製作,更是一個漫長的過程。這時候能夠透過CVS、SVN這一類的方式取得原始碼來編譯,對許多發展中的專案來說,真的是一個很棒的特色。

從一開始的User,到寫專案後學了一些Developer東西,在今天作了這些東西之後,感覺又多了一個Packager的角色。對我來說,在這三者的使用情境中轉換,並不是那麼方便。是不是有個套件機制可以將這三者融合在一起呢? 像是我今天想改一個程式的功能,我能很方便的取得源本的原始碼,在本機修改後,能直接套用在套件裡作編譯和安裝,完成後並能輕易的釋出和分享。今天看來,相關的環境條件都蠻成熟了,說不定已經有這樣子的整合式套件系統架構存在也說不定。

或許在可見的將來,這些開發平台的整合,也能像Wiki對文件發展所帶來2.0的影響一樣,提供開發者一個互動性更高、更流暢的開發環境。

Package 2.0 ? 嗯...

2007年3月9日 星期五

Intel/Marvell PXA27x的系統模擬

上一篇blog「PXA27x Linux計畫」提及在SourceForge.net建立名為PXA27x Linux的新專案,包含系統層面的模擬環境,現行實做以qemu計畫的qemu-system-arm為基礎,暫定此分支命名為PXAemu,主要的參考標的是市面上的PDA或者SmartPhone,當然也不排除開發中的硬體裝置,畢竟模擬環境的彈性較高,要作前期驗證或者針對特定需求的模擬分析 (如:能源變化、網路通訊的異常),都是可行的。剛剛已經將kernel patches置入SVN (/kernel/linux-2.6.20),以PXAemu作系統模擬的畫面如下:
很令人振奮的畫面,稍後會補上一個PXAemu專屬的frontend,並改善LCD controller的處理。對了,RT nanokernel for Embedded Linux也可用PXAemu來進行多項實驗,這也是近期進行的項目。

2007年3月5日 星期一

PXA27x Linux計畫

使用Intel PXA27x (已於2006年七月售出予Marvell,相關產品線資訊可見Wikipedia - Xscale) 進行產品開發大約兩年,接觸了BSP、GNU Toolchain、Wireless MMX、Intel IPP、Graphical Overlays、NIC、... 等項目,也開發了無線網路裝置、GSM手機,以及多媒體系統。開發過程中遇到不少技術問題,雖能大致克服,但也有重複開發的遺憾,是此,建立RI (Reference Implementation) 就是相當重要的議題,於是我們在SourceForge.net建立名為PXA27x Linux的新專案。

雖然Intel早在2004年即提供GNU/Linux (通稱,含binutils、gcc、glibc,與linux kernel) 的patch或相關的修正,但畢竟自由軟體界已經有很大的改觀,同時原本Intel的貢獻中其實有不少bug,所以PXA27x Linux匯集來自許多方的改進,提供除了BSP外,更新且效能、功能最佳化的軟體套件。又,考慮到系統層面的模擬環境,本計畫會提供以qemu為基礎的system emulator,不只模擬PXA27x指令集,還廣泛包含DMA、GPIO、LCD、MMC、PCMCIA、Timer、co-processor (CP0/CP1)、... 等,主要的參考標的是市面上的PDA或者SmartPhone,當然,現在還有很大的改進空間。

今天已將pxa27x-oabi-crosstool子專案置入SVN,以下是其簡介 (取自README檔案):

pxa27x-oabi-crosstool : PXA27x OABI (old ABI) toolchain builder
Copyright (c) 2007 Open RazzmatazZ Laboratory (OrzLab).
Maintained by Jim Huang

The goals of pxa27x-oabi-crosstool are as following:
  • Bug-fixed toolchain for PXA27x
  • Binary compatibility for Intel Integrated Performance Primitives library (Intel IPP).
  • GCC 3.x-based system with enhancements.
  • Providing advanced features such as Application XIP, optimized memcpy, etc.
這是software stack從Old ABI跨入ARM EABI的過渡系統,考量到軟體相容性,諸如MontaVista Consumer Electronics Edition (mvlcee) 等,所以保持採用gcc-3.x與glibc-2.3.2,但陸續做了改良與backports,這些可參考patches目錄。

稍後會釋出的項目是基於OpenEmbedded的Linux kernel 2.6,以及基於qemu的system emulator,期待您的指教與參與,謝謝!

2007年3月4日 星期日

Mutex與火車排班

在我心中,一直有個小心願,能以自己微弱的力量為這個社會多作些事情,包含免費的技術訓練,然而時間、精力是投入了,但不見得有效果,為此,我常常在反省。拜讀對岸高手Pengcheng Zou的blog - 「Linux地鐵」一文,我終於知道為什麼,畢竟技術或理論本身被提出,就是要克服現實問題,所以若能讓訓練本身更貼近現實,這樣才會發揮其價值。以下摘錄「Linux地鐵」一文的部份內容:

今天早上上班,快到地鐵就發現外面站了不少人,有做打車狀,有做打電話狀,隱約聽到有人說地鐵壞了。下到地鐵站台,果然看到兩列車停在那裡,站台上站滿了人。

後來在
北京市地鐵運營有限公司網站上看到了事故原因:

11日早晨755分左右,地鐵2號線宣武門變電站瞬間過載跳閘,造成長椿街信號系統無法正常使用,列車運行方式被迫由自動閉塞改為電話閉塞,通過能力下降,運營間隔加大,造成長椿街臨近的復興門等重點站短時間乘客滯留。819分故障排除,地鐵運營方式隨後按自動閉塞方式運營,運營秩序逐步恢復正常。其間,2號線內外環西直門至宣武門早高峰列車間隔加大,列車最小間隔由原來3分半被迫延長到810分鐘,由於故障發生時正處於早高峰階段,客流本就較大,所以部分車站出現乘客短時滯留現象,地鐵1號線受此故影響有6列車在復興門站通過。13號線、八通線未受故障影響,運營正常。

何謂「閉塞」?寶貝爹地是鐵路的,正好請教。講 了半天,不甚了了。只好再從網上查,得知由車站向區間發車時必須確定區間內無車,還要防止兩個車站在同一線路上向同區間發車。這種按照一定的方法組織列車 在區間內的運行,稱為行車閉塞,用來聯絡的設備稱為閉塞設備。常用的閉塞設備有自動閉塞、半自動閉塞及電氣路籤閉塞等。地鐵採用自動閉塞設備。

這 下懂了,地鐵就是作業系統,所謂區間就是臨界區,閉塞裝置是各種同步機制,自動閉塞相當於spinlock,電話閉塞相當於semaphore。今天早上 效率比較高的spinlock失靈了,只好用效率較低而且不能用於中斷上下文的semaphore。所以導致系統性能下降,進程吞吐量明顯降低,客戶滿意 度下降。不少用戶轉而使用其他
作業系統。

很多唸電腦科學的學生,往往在畢業後還不能理解那些同步理論的重要性,如今,火車排班就是最好的案例。Linux kernel中有兩種mutex (互斥)機制:

  • semaphore
  • spinlock
兩者主要區別是,semaphore在無法進入critical section (臨界區) 時,會引發context-switching,而若有硬體配合 (SMP) 的話,spinlock就沒有context-switching,這是許多教科書會提到的,但聽起來很奇怪吧?我們要思考的是本質,semaphore是process-level的操作,當有process要求進入critical section,好比在上面鐵路案例中,以電話要求區間的發車權,那麼,若critical section沒有被設置旗標,就可佔用並重設旗標,也就是我們可順利發車,但若不幸遇到該區間已經有車班呢?這時候該process就被迫「睡眠」,而本身也會被送入wait queue,這種枯等的經驗,想必很多通勤的朋友都能感受。我們也可以發現,這過程牽涉到process狀態的改變,因為勢必會有資源被釋放的時候 (但不保證),屆時,被迫「睡眠」的項目也會因而被喚醒。

spinlock的本質是busy-waiting,聽起來很沒效率,但為何說在SMP很重要呢?最主要的原因是,沒有context-switch的負擔,沒有牽涉到process的狀態變化,在多處理器的環境下,spinlock相當有效率,而在單處理器上,卻只是disable/enable isr一類的操作。換過來想火車的案例,似乎就簡單多了,用電話通知本身涉及人與人的通訊內容、線路使用量,以及現實因素,可視為單處理器狀態,但如果是自動化,個別單元的協調時間是相當短的,所以可想成SMP架構,自然這兩者的mutex機制也有使用上的落差了。

當然,真的要探討Linux semaphore/spinlock的機制,其實複雜許多,特別在2.6 kernel還添入big kernel lock等新的機制,不過這些都出自典型作業系統理論 (命名可能有出入),只要稍微變化一下,或許也能對應到現實。

2007年3月2日 星期五

動態組字技術於Embedded領域

魔法設計師與marr的引見下,去年於COSCUP 2006有幸認識剎那工坊的陳昌江與yap前輩,談到中文組字技術與嵌入式系統的若干細節,給予我很大的鼓舞。本實驗室今年的計畫中,即有Embedded GUI Framework的項目,原本只是因應RT executive或virtualization需要 (如Linux subsystem尚在啟動或者非運作中的情況下,至少可有輕量級的人機介面與使用者互動),所提出附加性設計,這也就是Xorz/Embedded (展示1/展示2)。但如果能順利整合中文動態組字技術,對於原本即以向量繪圖為核心架構的Xorz/Embedded,是很好的契機,或許可作為低階裝置的UI,同時我們也可以看到,開發中國家如中國大陸,更是需要動態組字技術。

為何我們要重視動態組字技術的原因,除了陳昌江前輩日前發表的大作「等待新漢碼」所提到種種根深蒂固的窘境以及文化傳承的需要,另一個現實的考量是,這類可攜式造字引擎可避免過度的Disk I/O存取,進而大幅提昇儲存裝置的壽命 (NAND/NOR Flash 皆有讀寫次數限制),所以短期內我們應該要在Embedded平台作技術驗證,中期就是銜接現有mobile標準,克服缺字議題。


魔法設計師貢獻了許多教學文件與參考實做,可參考其 blog 之漢字研究的分類,日前張貼的「組字示範程式釋出!」一文即提供了以Java撰寫的教學程式,內含中華民國發明專利號碼第I254863號「可攜式造字引擎」專利的技術與剎那工坊維護之剎那單線體字形檔,經專利權人陳昌江同意,預先提供執行檔與資料檔供測試評估使用,詳細規格可見正體中文網,附帶一提,相關專利可望於近日釋放,成為公共財。

OrzLab很自然就成為受益者,不過小弟目前仍在規劃階段,只有零星的測試程式碼,不過抽離Xorz/Embedded內部的向量描繪引擎就是相當重要的工作,目前已經有個具體而微的向量字型編輯程式,以下是其運作畫面:

另外,也可試著與對岸許多Embedded GUI開發者打聲招呼,其實已經太多重複的工作了。今年真是刺激的一年 :-)

Ajax/Embedded

之前花了一些時間作個 lightweight kHTTPd for Linux Kernel 2.6,也可用作於 HTTP accelerator / redirect server,在kernel mode處理static web data與redirection。這幾天正在實做一個user mode應用程式集,規範一個 Framework,能用 C/C++ 開發 AJAX Web Application,如此可確保footprint 與 performance都有不錯的表現。可應用於Router / Wireless AP / Embedded controller,參考硬體平台為ARM與MIPS,此專案暫定命名為Ajax/Embedded,中期的計畫就是能整合進FON (La Fonera),以及銜接kHTTPd。

今天做了一個Preview / Proof-of-Concept的版本,展示一個GMail-like郵件撰寫與拼字檢查的Web application,連同Web server、Application Framework,以及Ajax engine,大約佔了2Mb的空間,雖然比其他Ajax解決方案來得省,不過很明顯有頗大的進步空間。

對於Ajax/Embedded來說,不僅效能與空間可獲得最佳化,事實上還可避免常見的XSS (Cross-Site-Scripting) 安全性議題,更可沒有負擔地與底層整合,比方說Wireless router查詢硬體狀態的設計就能直接呼叫ioctl。為了避免程式開發者耗費過多時間在調整UI,Web UI Framework本身必須提供夠高階的event-driven model,目前已經有類似Gtk+/Qt的Signals-Slots機制。