April 28, 2006

SA@台中五月份 AJAX & Ruby on Rails 心得分享

[酷!學園] 討論區的公告 [SA@台中 5 月份 AJAX & Ruby on Rails心得分享!],很吸引我,引用心得分享資訊:
    本次的主題有兩個。

    AJAX全稱為「Asynchronous JavaScript and XML」(非同步JavaScript和XML)是一種創建互動式網頁應用的網頁開發技術。它使用:
    • 使用XHTML+CSS來表示信息
    • 使用JavaScript操作DOM(Document Object Model)進行動態顯示及交互
    • 使用 XML 和 XSLT 進行數據交換及相關操作
    • 使用 XMLHttpRequest對象與Web伺服器進行非同步數據交換
    • 使用 JavaScript 將所有的東西綁定在一起
    來源: [Wikipeida::AJAX]

    主題:AJAX 心得分享
    講師:jameschih
    大綱:
    • AJAX的基礎的開發和原理的說明
    • DOM模式
    • CSS BOX模型介紹
    • IE與FIREFOX開發外掛的使用
    • javaScript prototype1.4 函式簡易使用說明
    • 簡易支援PHP的AJAX框架使用
    Ruby 是一個純物件導向的直譯式語言。擁有強大的功能,簡易的語法,遵循著最直覺原理設計的 API。讓你能夠專注於手邊的工作而不必和你的工具纏鬥。 Ruby 是程式設計師的最好朋友。

    RubyOnRails 是一套開發 Web 應用程式的框架。它有簡潔清楚的架構,卻沒有煩瑣的設定。它讓你能愉快的開發美麗的程式,大幅提高你的生產力。

    主題:Ruby on Rails 簡介
    講師:contagious
    大綱:
    • Rails 有多紅
    • Ruby on Rails 到底是什麼
    • Ruby 如何讓 Rails 與眾不同
    • Demo
      • 簡單的 Blog 程式
      • Rails 的 AJAX 支援
      時間:2006年 05 月 13 日(星期六) 13:30 休息時間視現場決定~
      地點:清水國小(視聽教室) 清水鎮光華路125號
      費用:0 -
      [報名網址]
如果沒有意外,我應該會出席 (調整行程中),看看能否激發新想法,還有順便去拜訪台中的朋友,以及遊覽台中科學博物館。
由 jserv 發表於 09:01 PM | 迴響 (3)

中國麒麟作業系統與 FreeBSD 的比較分析

[Dancefire] 對號稱「中國自主」的 [麒麟作業系統] 做了一份精彩的比較,詳見 [麒麟操作系統內核同其他操作系統內核的相似性分析],可以找到些「自主」的「創新」,與關鍵性的差異等,不過文後也提到:
    如果單從函數名比對的統計上看的話,14399個函數,只有79個函數可能是原創的。與FreeBSD 5.3在函數名上的相似度有99.45%。這個相似程度十分驚人,但是僅憑函數名相似不足以說明邏輯上相似,因此,在分析報告中,這個分析數據只作為參考數據放到附錄中。感興趣的朋友可以進一步的分析。
嗯,繼續觀察。
由 jserv 發表於 07:53 PM | 迴響 (1)

April 26, 2006

愛上 UNIX

之前的 blog [UNIX 家族簡介] 提到:
    日本人也很喜歡 UNIX,不過他們似乎想到其他地方去了,請參考 [http://www.unix.co.jp/],好美的 UNIX Program 阿,讚嘆!
Yen Seiner 在他的 blog [ Who says *nix isn’t sexy?] 提到他拍攝的圖片:

他的 blog 還有幾張類似的圖片。美女人人愛,所以 UNIX 化身為圖中佳人後,沒有理由不愛吧? :-)
由 jserv 發表於 11:23 PM | 迴響 (1)

MPX:Multi-Pointer X Server

先說一個故事,以前我在 W-Channel 服務時,當時有個國內的大客戶要求一個相當特別的功能,希望能在我們的 Linux-based Thin client 中同時做到「前景顯示、前景部份操控」與「遠端顯示、遠端完全操控」,細節就不提了,設計頗 tricky,並且也 hack 了 X Extensions 才克服,結果沒多久,客戶說很滿意,期望再加入「多點操控」,簡單來說,就是希望能夠每個遠端登入都擁有自己的 cursor 並操控應用程式。

從事那個專案的開發,讓我學到頗多 X Window System 的內部設計與限制,前述的要求即 Multi-Point,在兩年前,類似的解決方案不多見。現在,來自南澳大利亞大學 Wearable Computer Labs 的 Peter Hutterer 成功實做 [The Multi-Pointer X Server (MPX)],他所要克服的議題,就很類似兩年前那個專案的需求,引用網頁介紹:
    The Multi-Pointer X Server (MPX) is compatible to legacy applications such as the GIMP, the Firefox web browser and numerous other applications. Each mouse device that is connected to the host computer can be configured to have a distinct system cursor. All cursors can operate on all applications. This allows for two-handed interaction and/or collaboration on a single display.
而,所謂「一圖勝千文」,咱們看看以下示意圖:

圖中有四個 Xeyes 應用程式,並且硬體提供四個 mouse,這四個 X Input device 彼此獨立,亦即系統配置四個 X cursors,上圖即展示在 [MPX:The Multi-Pointer X Server] 達到的效果。
目前的實做以 Xorg 為基礎,同時,為了更適合 Multi-Point 操控,Peter Hutterer 還發展了 Multi-Pointer Window Manager (MPWM),連同 patch 與 release tarball 都可自網頁取得。

注意到 FAQ 所提到的:
    Limitations?
    ...
    Some applications (e.g. xterm) stop listening for events when a LeaveNotify is received. Even if multiple mice are within the window, if one mouse leaves the window, xterm will not receive events. Finally, the X Protocol does not allow to specify devices on GrabPointer or QueryPointer requests. MPX has to guess which pointer to use. In some cases, this can be a semantically wrong choice.
也就是說,如果我們要發展更好的 Multi-Point 機制,勢必還得處理 XEvent expose/notify 的議題。
由 jserv 發表於 08:50 PM | 迴響 (0)

謝謝你,Scott McNealy

Sun Microsystems 的 CEO 暨共同創辦人 Scott McNealy 在週一宣佈,辭去 CEO 職務,並由 Jonathan Schwartz 接任,相關的新聞與討論可參閱: 大學時代我曾閱讀《昇陽傳奇:麥克尼利和他的電腦王國》,才逐漸理解那個網路(伺服器)技術蓬勃發展的年代、BSD 大放異彩的時代、封閉系統結束的時代,以及 Java 開創的新時代,Bill Joy 的故事也引人入勝。

Sun Microsystems 在 1980 年代對抗 Alpha server 奠定基礎至今,累積許多重要的影響力,而我打字的同時,使用中的 NFS、X Window System、OpenOffice、GNOME/Gtk+、... 的很大部份是 Sun 所貢獻的,謝謝你,Sun Microsystems 與 Scott McNealy。
由 jserv 發表於 11:18 AM | 迴響 (0)

April 25, 2006

寧靜的春天

週一才要開始寫程式時,遇到 system-level 程式編譯上造成 ICE (Internal Compiler Error) 的問題,追了一下,似乎是之前改 RTL optimization 造成的結果,所以我又得分心去修這個問題。東摸西弄,五個小時過去了,問題是修正了,可是也深夜了,我到現在才能真正作 programming,唉,江郎才盡,落得如此下場。等待 regression test 的時候,讀了不少文章,其中 [荒野保護協會] 理事長李偉文撰寫的文章 [永遠的春天],讓我陷入許久的思索。文中提及 Rachel Carson 的著作《寂靜的春天》我尚未拜讀,只能從書評與網路上的資料作參考,不過最近正在閱讀 Jared Diamond 的《大崩壞》,我想或許部份的資料是相互重疊的,可貴處都在於重新闡述艱澀難懂的科學技術、盤根錯節的環境變化,以及萬物變遷的奧義,轉化為淺顯易懂的文字敘述,並提醒並呼籲人們重視這些大自然的崩壞現象,以行動力去改觀,誠然,如果我們像過去人類社會那樣踐踏生態環境,將會淪落什麼下場?

我沒有興趣唱高調,也沒有特別的期許,相反地,我是自私的,只希望能多活一日、一時,甚至一分一秒,而非毀於天崩地裂的絕望中。北上工作後,抬頭仰望是高樓大廈,瞻前仰後則是到處穿梭的交通工具,對一個鄉巴佬如我者,實在難以苟同,佇立於交通號誌旁,時常沒多久就因為臺北盆地的濕悶氣候,伴隨大都市的種種毒害,幾近昏厥... 交通費用對我來說,其實只是可忽略的開銷,然而,有一日在 Taxi (剛來台北,實在搞不清楚該如何搭乘公車) 中閱讀《綠色資本主義-創造經濟雙贏的策略》,車程中我一直思考「共犯結構」,為何我非得因為如此小事,加害於這美麗的寰宇?後來,花了很大的時間改變了生活習慣,也對自己做了要求,沒有一絲困擾,相反地,自私的我,至少能更坦然面對大自然。

即使讀了一些科普書籍,總覺得對生活的這塊土地認識不深,特別是年紀增長,更有此遺憾。蓋亞,也就是大地之母,孕育了這美麗的藍星種種生機,記得從中學課本讀過一些環境污染的數據,然而,越是讀書參考,越是發現差距益增,甚至還有數量級之譜,杞人憂天沒有意義,重點是,我們如何重新檢視問題,並提出改善方式。

當我試著基於自私、為了能多見到這美麗的瑰土幾眼,常常會發生如之前 blog [塞翁失馬焉知非福、失而復得焉知非禍] 的事情,相當可恥的是,我到今日,還是不能完全貫徹環保措施,每日還是浪費寶貴的資源、製造出遺害萬年的毒素,但我還是能逐漸調整步調,比方說用腳踏車代步,雖然,常常成為台北的交通的受害者,寫這篇文章的同時,大腿還隱隱作痛,因為上週才又出車禍。

這種「螳螂擋車」的行為到底有何意義呢?我不知道,我只知道,我自私地愛這塊土地,故鄉對我來說,有種莫名的趨力,讓我願意撰文歌頌 [南庄神仙谷風美瀑布群] 與苗栗的一草一木,然而,穿越我短暫二十多年的瞳孔、映入眼簾的光景,則有了大幅度的改變,曾幾何時,好山好水不再,工業區林立,溪流出現重金屬堆積,杜牧的《阿旁宮賦》述及秦皇后宮后妃美女洗胭脂的水,將渭水都染成紅色,而今,我竟得以看到相似的景觀,不同之處於,胭脂換成石化、光電耗材,以及難以計數的污染物...

愛因斯坦嘗言:
    「人類所能經驗到最美最深的感情,是神秘的感覺,它是所有科學的起源,無法認識這種感覺的人,不再肅然而立,歎嘆宇宙奇妙之工,這種人活著與死了沒有什麼兩樣。」
或許,因為沒有受過高等教育,愚昧的我,一直對大自然存有一份敬畏。高中開始研讀核反應工程,給予我頗大的震撼,也曾一度認為自己掌握這無比的知識力量,有朝一日,人類得以意識與科技改變這一切,然,這是何等的謬誤?!作為一個無神論者,雖然不直接接受超自然力量,但也願意花費畢生的精力,去探尋真理,並追隨「美」給予人最深沈的感受,我想,這是我存在的原因。

此際,我突然想到高中一年級的數學老師,簡秋蓉老師,當時老師設立一個很特別的獎勵制度:每次期中考成績公佈,班上數學成績最高分的同學可獲得贈書。我運氣很好,僥倖成為那一年唯一拿過兩次贈書的人,喜歡電腦程式設計的我,滿心期待老師會贈送當時嶄新的 Internet 技術書籍,然而,簡老師竟然拿了一本環保的書籍,見我一臉詫異,在扉頁提筆:
    敬群,
    當你以後有機會回顧此書,或參與環保活動,希望你能將綠還給大地...
屈指一算,也快要十年了,那本書籍其實塵封許久,老師的話語也只能憑記憶寫出一些,不過說是啟蒙書籍,一點也不為過。

悲觀的我,面對這些來自大環境的巨變,很高興我有勇氣,親身力行最低限度的環保措施,當然,還有太多需要改進之處。凌晨兩點的春季,這一切是如此的寧靜,但心中澎湃難以止息,的確,何嘗不可堅信自己的理想、在有限的生命大聲疾呼呢?

寂靜的夜晚、寧靜的春天,還有平靜但不沉默的自我。
由 jserv 發表於 01:54 AM | 迴響 (4)

April 24, 2006

QQ Win32 client 輸入韓文的方法

只能說太 tricky 了。剛剛瞥見 [如何在QQ中輸入韓文及韓語打字練習軟件],竟然使出大絕招,透過自訂表情符號,將 1059 個展開的韓文放進去,看文字沒感覺,咱們看看示意圖:

所以,韓文符號就是這樣一個接著一個塞入!我想,[Jouston] 賢伉儷看到後,應該會吐血吧。

那麼,誰來告訴我,Global IME 到底設計來做什麼呢? XD
由 jserv 發表於 09:51 PM | 迴響 (4)

April 23, 2006

理解 64-bit Programming Model

話說去年 zonble 寫了 [Long Long Long is Too Long],一開始 mjhsieh 測試 long long (依據 C Standard,至少要有 64 bit 的資料寬度) 的「加強版」,也就是 "long long long",結果 GCC 很雞婆的抱怨 "too long",後來大夥竟然認真演繹其中的哲理。不過,邁入 64-bit 的新紀元,的確有很多思維必須轉換,首先我們會遇到的問題就是 Programming Model,IBM alphaWorks 的 [Porting Linux applications to 64-bit systems] 是一篇很好的入門文章。

就 IA32 來說,4G 的記憶體定址就是受限於 32-bit Model,甚至還可能面臨經典的 [Year 2038 Problem] 。64-bit Programming Model 到底有什麼優點呢?在提及細節前,先來看個希臘拉丁字首:Exa-(E-),也就是 2 的 60 次方,在 64-bit 架構下,應用程式可直接存取 16 Exabytes 的 RAM Addressing,而 Linux kernel 到目前為止支援到 64 Gb 的定址,詳情可參考 Wikipedia [64-bit]。

在 system bus 的 data access 來說,IA32 或類似的架構,其實已經因應 SIMD 的需求,提出 64-bit 或 128-bit 的 register,比方說 MMX、MMX2(ext)、SSE,或者 Wireless MMX。[Porting Linux applications to 64-bit systems] 提到三種 64-bit Programming Model:LP64、LLP64,以及ILP64,對有看台灣新聞的朋友來說,這幾個名稱實在很容易記憶 *笑*。

L 表示 Long、LL 表示 long long,而 I 表示 Integer,LP64 則規範 Long 必須為 64-bit wide,其他 data type 則是較低的 data width,同理 LLP 就是說 long long 必須 64-bit wide。在另一篇文章 [64-Bit Programming Models: Why LP64?] 則提到為何 UNIX Open Standards 要採用 LP64 Programming Model,而 IBM 的文章則提到移植既有 32-bit 應用程式到 64-bit 架構需要注意的九項議題:
  • Declarations
  • Expressions
  • Assignments
  • Numeric constants
  • Endianism
  • Type definitions
  • Bit shifting
  • Formatting strings
  • Function parameters
其中,Assignment 很容易因為強制轉型造成潛在的問題,再來就是 Function parameters,這也可能因為混雜 32/64-bit 表示法而產生非預期的結果。
由 jserv 發表於 07:00 PM | 迴響 (1)

以電腦科學為志業

之前的 blog [軟體工程師近況] 談到引用 CNN Money 的資料指出,軟體工程師被認為是美國最好的工作,並輔以薪資與產業成長的參考數據。IBM developerWorks 刊載了 [two-year-old Academic Initiative enhances computer science curricula, seeks to reverse student decline] 一文,由 IBM Innovation and University Relations 的 VP - Gina Poole 的訪談作出發,提及以電腦科學 (也包含所謂的「資訊工程」) 為志業,並探討當今 out-sourcing、自由軟體運動、開放規格,以及運算型態的轉變等衝擊,一個初入 IT 產業或者與企業合作的大學院校學生,該以何種心態面對,而這些也是促成 IBM Academic Initiative 創設的原因。

中文提到的 "You name software engineering as the fastest-growing occupation in coming years. Where is most of this growth taking place?",Gina Poole 給的回覆很有意思:
    he growth is everywhere. The U.S. Bureau of Labor Statistics has identified computer-based jobs as one of the hottest areas, and those involving specific skill sets -- systems analysts, database administrators, computer scientists -- as some of the fastest-growing occupations through 2012, with growth rates anywhere from 40 to 70% in the U.S. alone. Further, at least 1.5 million additional IT field professionals will be needed by the end of this year.

    Another factor: approximately 70 million baby-boomers will leave the workforce over the next 15 years, with only 40 million new workers coming in, and that will make the shortage of computer-skilled folks even more dramatic. Canada and EMEA foresee similar retirement rates. And even looking at India or China or Russia, where there are explosions of activity, they are trying to move as quickly as possible from agricultural to manufacturing to services economies. In developed nations in Europe and North America, about 70% of the economy is based on services and knowledge workers, and this is where India, China, and Russia would like to be.

    Over 50% of students entering university in India and China select degree programs in science, technology, math, and computer science, but they still don't have enough skilled workers to meet the demand.
這個分析數字,之前曾在〈商業周刊〉的 BRIC 金磚四國看過相似的報導,後面的篇幅則探討到 IT 產業的 out-sourcing 趨勢,以正面的態度回應,並銜接 open source / open standard 的發展,選擇以電腦科學為志業,將有機會一同改寫未來的歷史。
由 jserv 發表於 03:34 PM | 迴響 (0)

調整 UNIX 系統效能的技巧

William B. Zimmerly 撰寫的 [Performance tuning UNIX systems] 一文,篇幅不長但很值得參考。我們知道傳統的 UNIX 將優先權劃分為 -20 到 +19 等數值 (當然,如 QNX 一類特殊的 Realtime UNIX 又有額外的規範方式),本文提示如何善用 renice 來調整工作的優先權,以改進工作效率。以外,作者提到:
    "Another important way to tune a workstation's performance is to identify features and functions you don't use that might be running on your workstation."
文後即提示如何善用 locate / updatedb 與 UNIX 指令組合,改進工作站導向的使用。
由 jserv 發表於 09:42 AM | 迴響 (0)

此群非彼群

記得入伍服役時,因為愛好唸書,並勤於寫日記,自認沒有述及軍事機密,但不少是關於社會主義與抽象數學,常常被抓去約談 (唉,就是有人會認為這些數學符號可用來洩密),大概就是圍繞在思想方面,那一年多下來,約談紀錄已經厚到可整理出書了。剛剛一位大陸網友給了這個網頁 [戰友通訊錄],還真令我無言:

說這位同胞的年紀與我相仿、服役期間也接近,我的祖籍也在福建,雖然我以前也被士官長辱罵為「死老共」,不過「此群非彼群」阿,我是下士退伍的,而且職務頭銜聽起來響亮多了 :P

結論是,不要亂用 Google 找資料,這一點都不好玩... XD
由 jserv 發表於 01:40 AM | 迴響 (1)

April 22, 2006

2006 Spyware 技術研討會

Birdman 告知 [大同大學資工所 - 2006 Spyware研討會],詳情可參考 [2006 Spyware 研討會],Birman 會介紹「間諜程式的技術分析與對抗策略(Fighting with Spyware/Rootkit)」這個議題,期待 :-)

會議資訊:
  • 時間: 九十五年五月五日(星期五)、下午13:00~17:00
  • 地點: 大同大學尚志教育紀念館
  • 主辦單位:大同大學資訊工程學系
由 jserv 發表於 04:28 PM | 迴響 (0)

April 21, 2006

來自阿拉伯的佳音

早上打開 Windows Desktop,發現昨天有位朋友透過 MSN Messenger 向我問候:

認識這位朋友純屬意外,只是因為對方是個 Linux 愛用者,找資料時發現本 blog 的文章 [Tk XIM 修正] 與 [「Linux 國際化與區域化發展」簡報上線] 對他有幫助 (真欣慰),然後他就透過 email 和 MSN 與我聯繫,於是,我就多了一位來自阿拉伯的朋友。

阿拉伯文是在兩年前因為某一個專案需要,稍微接觸。阿拉伯文屬於閃含語系,在沙烏地阿拉伯、埃及,以及中東十餘國為官方語言,約有兩億使用人口。兩年前學習的時候,面對這個綜合型語言,一邊聽錄音帶、一邊看教材,而不時滿臉詫異,其構詞與構型有獨特的變化規則,而詞一般由三個字母構成,但可再添前綴、後綴,或者使詞的內部音位變化與插入其他音位,再構成新詞。阿拉伯語有八個元音,二十八個輔音,特色在於其多頂音和喉音,又獨具 dad (達德) 此頂音,而被稱為「達德語言」,我記得當時真快抓狂了 (唉,賺錢真不容易阿)。

因為我跟那位朋友,一直搞不定語音對話的方式,所以只能傳送文字訊息,不過這已足以讓我回憶名詞、動詞,以及虛詞等三大類詞性,接觸過德文,看待名詞的陰性與陽性似乎比較有概念,但是阿拉伯文的虛詞實在複雜到讓我頭昏腦脹,因為我要處理的不只是 bidirection,還得處理式的變化,書寫方式更是變化多端。

不過呢,即便是我這個井底之蛙,還是可以管窺天,體驗不同文化的差異與特性,很有意思。
由 jserv 發表於 11:20 PM | 迴響 (1)

透過 Xserver 存取 video RAM 的安全性議題

來自法國 Information Systems Security (SGDN / DCSSI / SDS) 的 Loïc Duflot 在 Xorg mailing-list 發佈他對於 Xserver 安全性議題的分析 [Security issues],他以 OpenBSD 作為概念驗證的平台,這個途徑可將存取 video RAM 的 PIO 權限提昇為 kernel/ring0 權限,可參考論文 [Using CPU System Management Mode to Circumvent Operating System Security Functions] (PDF 格式) 與簡報 [Security Issues Related to Pentium System Management Mode] (MS-PowerPoint 格式)。此外,從 slides 中也可得知 80386 保護模式與 RealMode / Virtual 8086 切換方式,與 MMIO 一類的操作方式,並且示範了在 OpenBSD 上要如何透過 /dev/mem 與 /dev/xf86 來取得 ring0 權限。就 Loïc Duflot 表示,除了 OpenBSD,NetBSD、FreeBSD,以及 Linux Kernel 2.6 都有此安全議題。
由 jserv 發表於 06:09 PM | 迴響 (0)

Orz Programming Certified 標籤

之前的 blog [Orz Programming] 提到我想要個 "Orz Programming Certified" 的標籤,結果今天 caleb 即告知 [orzマーク] 已經有做好的圖例:

看起來好棒,該圖示以 CreativeCommons 自由散佈。
由 jserv 發表於 04:56 PM | 迴響 (1)

取得 B# embedded virtual machine


之前的 blog [初探 B# embedded virtual machine] 提到 B# Programming Language toolset 已經提供下載,那該如何取得呢?[DeepObjectKnowledge.com] 的首席科學家兼主任架構師 Michel de Champlain 來信告知:
    Dear Jim,

    The B# compiler is generating byte-code that has the prime quality of being very compact. The B# embedded virtual machine instruction set is optimized for small footprint embedded systems, and takes roughly half of the equivalent Java or C# code space. There is a minimum requirement in terms of memory space: at least 16KB ROM and 8KB RAM. In terms of CPU requirements, some 8-bits uCs will do if their clock is fast enough. The B# niche is where EC++, C++ and Java cannot fit (too big footprint).

    The official public domain release (and the B# book with Newnes/Elsevier) is planned for June 2006. We have selected many beta testers that are currently working on porting the B# embedded virtual machine to many uCs.

    If you are interested to be part of the bank of beta testers that could be contacted: Please send me a short bio, covering your expertise on which uCs/target boards that you possess if you want to contribute the port of the B# embedded virtual machine.

    Thanks for your interest in this project.
今年六月會有 B# 專書隨附 B#EVM 的 SDK 等,在這之前,可以申請為 beta tester。
由 jserv 發表於 01:30 PM | 迴響 (0)

GCC-XML:GCC 的 XML 輸出

[GCC-XML] 是個相當特別的專案,官方網頁的簡介如下:
    Development tools that work with programming languages benefit from their ability to understand the code with which they work at a level comparable to a compiler. C++ has become a popular and powerful language, but parsing it is a very challenging problem. This has discouraged the development of tools meant to work directly with the language.

    There is one open-source C++ parser, the C++ front-end to GCC, which is currently able to deal with the language in its entirety. The purpose of the GCC-XML extension is to generate an XML description of a C++ program from GCC's internal representation. Since XML is easy to parse, other development tools will be able to work with C++ programs without the burden of a complicated C++ parser.
依據 [GCC-XML::Links] 所示,至少有兩個專案採用此成果:
  • [pyste] - Boost.Python wrapper generator based on GCC-XML.
  • [pygccxml] - Python parser for GCC-XML output
在概念上,[GCC-XML] 並不算嶄新,比方說 SWIG 一類的 toolkit 就可以協助開發者跨越諸多程式語言的限制,然而,[GCC-XML] 採用 XML 作為 GCC output 卻是相當特別。相較於 SWIG 以 callback 為基礎的途徑,[GCC-XML] 可更有彈性,並且作為一個 portable intermediate representation,這允許更複雜的語法使用。

Debian 已經有收錄 [Package: gccxml],我們實地寫一個 C++ 程式來測試:
    $ cat example.cpp 
    #define _out_ __attribute((gccxml("out")))
    
    class DummyClass {};
    
    int single_function(_out_ float f, DummyClass e)
    {
    }
    
    int main(void)
    {
      return 0;
    }
    
依照 [GCC-XML::Running] 的指示,產生對應的 GCC XML 輸出:
    $ gccxml example.cpp -fxml=example.xml
    
以 mlview (GNOME-based XML viewer) 查看其內容:

我們可以從中窺見 GCC compiled symbols、builtins,以及 C++ mangled,比方說圖中的 mangled 即:
    $ c++filt _ZN10DummyClassC1ERKS_
    DummyClass::DummyClass(DummyClass const&)
    
也就是 G++ 所產生的 default copy constructor。
由 jserv 發表於 12:06 PM | 迴響 (0)

April 20, 2006

初探 B# embedded virtual machine

之前的 blog [B#:作為嵌入式系統的輕量級程式語言] 提到的 B# Programming Language,其設計者 DeepObjectKnowledge 公司在 Embedded.com 刊載的文章 [B# - A programming language for small footprint embedded systems applications: Part 2],將重點置於 B# embedded virtual machine (B#EVM)。簡單來說,B#EVM 的系統架構如下圖:

這篇文章提到了 Memory Manager、Stack Machine,以及 Multi-Thread Kernel。

之前的 blog 提到:「B# 並非 C# 的簡化,其語言規範還考慮到絕大多數 ISO/IEC standard 的硬體架構的應用,提供了 Device Registers 與 Interrupt Handlers 等語法上的支援,這些如果要在 C 語言層面實現的話,就得像 Linux kernel 一般依賴 GNU Extensions,並佐以一系列的 macro 與 programming manner。所以,B# 的提出就是希望一勞永逸地 (至少有限度的) 解決這種問題,設計 Device driver 不免會有 HAL (Hardware Abstract Layer),無論哪個作業系統,基本上都會採用 Object-based 的思維 。」B#EVM 基於這個思維方式,展現以下的 memory model:

這裡節錄幾個設計的重點:
  • T o efficiently allocate this space and to diminish fragmentation, the memory manager of the B#EVM uses a hybrid of static and dynamic allocations.
  • The code memory space of the B#EVM consists of those subsystems that actually execute the application. These systems provide the B# language with the low-level support to access device registers, create threads, and handle interrupts.
  • To help satisfy the bounded time constraints of embedded systems, a byte map is also used to manage the allocation, deallocation and search for free blocks. The main advantage of this approach is its relative simplicity and efficiency in finding the first free block of N consecutive free blocks.
  • Each partition has a byte map and each byte map is implemented as a linked list. Because the linked list has a maximum fixed length, the search for available memory is also deterministic.
  • B#EVM is a stack-machine interpreter that executes virtual code generated by the B# assembler. Values are pushed onto the stack, operations take values from the stack, and the results are pushed back where they are available for future calculations.
  • Although a single-thread application may contain several namespaces and classes, only one class contains the main entry method and implicitly becomes the main thread. In a multi-thread application, each object (instance of a class) with its own block of code may potentially become a thread (i.e. an active object) and therefore, requires a stack for saving its own context. Any object that does not become a thread shares the stack of the thread to which it belongs.
  • Other virtual machines, such as the Sun JVM and Microsoft IL, have polluted their instruction sets with instructions that embed their information type.
  • The operand stack of B#EVM represents all values as 32-bit elements, regardless of their type. Therefore, to convert from one type to another is quite simply a question of “tagging” the stack element with a particular type.No descriptors are required since the type is set when the value or the reference is allocated on the stack. To store this information, an additional stack within the B#EVM maintains the type information of the corresponding elements in the operand (runtime) stack. In this way, we eliminate the cost of wrappers (in terms of space, access, and allocation time) and avoid the definition of an hybrid type system that requires a clear distinction between value types (bool, char, int, uint, and float) and reference types (ioregs, arrays, strings, and delegates). Another important reason for maintaining type information in this way is to reduce the size of the instruction set.
  • Seven instructions are required where only one instruction is required in B# since arithmetic operations are all promoted to 32 bits. Also, the type conversion instructions that are required before doing any arithmetic calculations are reduced since the add instruction in B#EVM is done within the instruction while checking and promoting (if necessary) the operand types. Although there is additional overhead, the instruction set and the generated code size are reduced.
B# Programming Language toolset 已經提供下載。
由 jserv 發表於 05:07 PM | 迴響 (0)

April 19, 2006

Google 研究員談數學之美

Google 研究員吳軍在《數學之美》系列文章,提到如何將數學應用於資料檢索與自然語言方面,相當精彩,他提到:
    我是一名科學研究人員 ,我在工作中經常驚嘆於數學語言應用於解決實際問題上時的神奇。我也希望把這種神奇講解給大家聽。當然,歸根結底,不管什莫樣的科學方法、無論多莫奇妙的解決手段都是為人服務的。
目前有三篇文章: 第三篇提到 Hidden Markov Model 的介紹非常好,擺脫過去教科書無趣的陳述,有實際的應用模式,很值得參考。
由 jserv 發表於 08:05 PM | 迴響 (1)

軟體工程師近況

Jack G. Ganssle 在 Embedded.com 撰文都相當有意思,剛剛讀 [Best Job In America] 一文,更是如此。文中舉出 CNN Money 的報導,也就是軟體工程師被認為是美國最好的工作,Jack 也引了數據作薪資與產業成長的探討,國情不同,不過這點也值得思考。文後他提到:
    There’s important advice for managers on the CNN site: “Workers who expressed satisfaction at work had substantially better conditions across the board, with easier unscheduled time off, schedule flexibility and better telecommuting options.”

    No doubt software developers engaged in IT projects or web development can do their work with toes dug deep in the sand at any beach sporting wi-fi, but a lot of embedded people need access to expensive target hardware one is unlikely to find at a Starbucks hotspot.

    Perks count. Workers at New Belgium Brewing get a free case of beer a week. If it’s distributed on Fridays, I wonder what time employees straggle in Monday?
老外的工作型態畢竟不同,而軟體工程師的工作型態也變得多元,能夠 Programming 的標的也變多了,比方說最近很熱門的項目就是 ActionScript,搭配美工人員的 action/video frame,作一些邏輯上的調整,這些工作聽起來很好玩,而且如果能在 Starbucks 品味香醇的咖啡更有助於開發,重點是,這也是被鼓勵的行為,沒有必要一定要在辦公室,對能源作無謂的消耗。

不過,對於搞 Embedded Systems 的開發者來說,即使現在的硬體都大幅度「縮小」,我可不敢抱著 RF baseband、EVM board,或者幾十萬的 ICE,去 Starbucks 借一堆延長線,然後展開工作的內容 :P
由 jserv 發表於 06:22 AM | 迴響 (1)

從 DRM 看 Free Software 與 Open Source 的差異

標題的 DRM,當然不是 Direct Rendering Manager module (詳見 [Direct Rendering Infrastructure] 術語),而是 Digital Rights Management。Andrew Orlowski 撰寫一篇名為 [Lessig, Stallman on 'Open Source' DRM] 的報導文章,開創 Free Culture 運動的 [Lawrence Lessig] 與 Free Software 的開創者 Richard Stallman,分別對於 DRM 與 Sun Microsystems 日前的 open-source DRM,也就是 [Open Media Commons],提出的見解,而我們也可窺見,Free Software 與 Open Source 雖然在途徑上有很多相似處,但基本論點上,卻有很大的差異。

關於 DRM (Digital Rights Management),我沒有興趣多談,一方面是因為工作相關,另一方面是已經很多先進談過了,比方說 DarkKiller 的 [Open Source DRM] 與 [「DRM 無效論」的說明],不過,另外一個 DRM (Direct Rendering Manager module) 是非常歡迎討論的。fr3@K 寫了一篇短文 [Free Software vs Open Source],澄清這兩者常被混淆的誤解,細節這裡忽略,不過可以發現這兩者在情境上截然不同的觀點,以 Sun Microsystems 在 [Open Media Commons] 計畫的論點,他們或許會說:
    「因應數位多媒體的應用,例如 IP-TV 的蓬勃發展,我們有別於其他封閉系統,提出 open source 的 DRM 解決方案,讓客戶得以有更自由的 DRM 整合能力。」
而依據 [Lessig, Stallman on 'Open Source' DRM] 一文,Richard Stallman 基於「軟體的自由」(話說回來,中文用詞有彈性許多),提出以下論點:
  • If you think that the important thing is for the software to be powerful and reliable, you might think that applying the OS development model to DRM software is a way to make DRM powerful and reliable.
  • But as far as I'm concerned, that makes it worse - because it's job is restricting you. And if it restricts you reliably, that means you've been thoroughly shafted.
  • If you look at the issue from the perspective of the FSM, you come to a completely opposite conclusion, which is: the whole point of DRM is to deny your freedom and prevent you from having control over the software you use to access certain data. That's the direct opposite of our goal. So our goal is not served by having a free program that implements DRM. It doesn't make anything any better for our freedom. So from the point of the Free Software movement in general, a TiVoized program is not good at all, because it doesn't deliver the freedom that Free Software stands for.
  • We're not very concerned with how a program was developed, we're concerned with what people are allowed to do with it now.
用口語的說法,就是「okay,我想你之所以認為 open source 是個好的途徑,就是因為這給予軟體自由的表現方式,然而,當你去實現 Digital Rights Management 機制的同時,就侷限了軟體應有的自由:不論目的為何,都要能使用或執行軟體。」

這個論點在 GNU GPLv3 修訂的過程,就已經提出很多次了,不過令我好奇的是 [Lawrence Lessig] 的看法,在去年寫了 [Free Culture 和賦予與支配的權利] 後,就有段時間沒有更新資訊了。以下從報導中節錄:
  • If all one says is (a) 'Sun's openDRM is great,' that's praising DRM," says Lessig . "But if one says (b) 'we should live in a world without DRM, and we should be building infrastructure and laws that render DRM unnecessary, but if we have DRM, then Sun's is better than Hollywood's,' then that's not 'praising DRM' but identifying a lesser evil. Again, what I did was give a speech at Sun conference where I said (b).
  • There's no disagreement about where we should end up - No DRM.
  • The only real disagreement is about the dynamic consequences - how this new kind of DRM affects the ecology for DRM generally. About this, I think honest people have to say no one knows, but we each have our own hunch. My view is openDRM pollutes the control freaks' plan so significantly that it can't achieve what they want - a general infrastructure of control built into the technology. Of course, I could be wrong about that.
  • How do you say free on the Apple platform? How do you even have the argument? There is no doubt some version of DRM is with us over the next 5 years at a minimum. I want it to be possible to wage the war for free culture in that space as easily as it can be waged in this world.
  • We can win the battle against it without eradicating DRM from every corner of cyberspace. Instead, I view 'the battle' about DRM much like I view 'the battle' over free software. Free software (in the Stallman sense of that term) 'wins the battle' when it is the major platform upon which software development is done. In that sense, free software has already won in certain important fields of battle, and in that sense, I certainly think free software will 'win the battle.' But when it wins, it won't trouble me that there are machines out there that are running Windows. To close the loop on the analogy, once 'the battle' against proprietary software is lost, Windows will have lost its virulence.
措辭很強烈,並且更廣泛地指出 DRM 的影響力,Debian 的 Benjamin Mako Hill 則針對現實面與 Apple iPod 的例子回應:
  • I think what Lessig is seeing is that everybody who buys an iPod buys a machine with DRM, and there's a billion songs out there that have DRM on them, and he’s saying there are all these hundreds of millions of devices that use DRM, so do we want it to be an open source, friendly DRM? It can only take certain fair use rights into account if it’s going to be effective at all.
  • I think what he got was a promise the system could be used in a way that protects fair use. But media producers have the right of choosing which implementations they want. Do you think Time Warner will allow their media to play on machines that allow people to copy things?
所以,一言以蔽之:「Open Source 只是一種方法,一種軟體開發的方法。而 Free Software 是自由的追求,是個社會運動」,而這個社會運動,早已不限於技術領域,而是,深入文化藝術等角落。
由 jserv 發表於 05:37 AM | 迴響 (1)

FMJ - Freedom for Media in Java

Ken Larson 在 GNU Classpath 的 mailing-list 提到重要的貢獻 [FMJ: new open-source alternative to/implementation of JMF],[FMJ] 是個以 revised BSD license (GPL 相容) 授權的 Java Media Framework 實做,初期完成 javax.media 的 class skeleton/implementation。或許稍後可以整合進 KMM branch,不過現在看來,有很多途徑都在補強 JMF 許多先天設計的不足。
由 jserv 發表於 04:39 AM | 迴響 (0)

快速堆積式程式設計?

拜讀 qing 前輩的 [Google時代的程式撰寫] 一文有感,彷彿時序交錯於十歲到二十五歲之間,依稀,我看到國小開始撰寫的那些小程式、中學時設計的 qBase、大學時代瘋狂 coding,以至於前幾周為了排除 compiler optimization 的問題,一行又一行去追 generated code 的歷程。人總是會進步,而我,總覺得自己充其量還是在原地踏步罷了。

以前知識取得的方式受限於紙本書籍,我國中才開始學英文,可是國小三年級就可 programming,使用 GW-BASIC 與 Turbo Assembler,那時候是在完全不懂英文的情況,半夜偷偷起床,用自己的方式去猜測原文手冊的語意 (一直到國中,才逐漸修正自己看到英文 "J" 字母會念成相似形狀國字「丁」的錯誤念法),然後一行接著一行 key-in,哪怕是簡單的九九乘法表 (我第一個寫的程式),都讓我感動不已,更別說神奇的 BIOS 中斷向量,有一度,我覺得那是世界最美妙的「文字」。上了國中,看了許多 shareware,也因受 Bill Gates 成為家喻戶曉的大人物的影響,我決定寫一套跟 dBASE 或 Clipper 相似但是更有效率的資料庫管理系統,以便在家中那台老舊的 386 電腦運作,老實說,難以想像當時怎麼會有如此的勇氣,總之,命名為 qBASE (quickBase) 的軟體經過無數的改版,接近可用的階段,後來所謂的「Windows 時代」已悄悄地來臨,像我這種死守 DOS/386 Protected Mode 的人,成為極少數的異類,很灰心,自己寫的軟體都還沒拿出來賣,竟然就沒有市場了...

上了大學,才有決心繼續寫程式,那時候也是網際網路進入火熱化的時代,過去是很紮實的一行接著一行撰寫,現在是如之前的 blog [Copy-n-Paste Programming] 一般,好像東貼西補就可拼湊程式一般。而以前撰寫程式的方式,就如司馬遷之於《史記》的藏諸名山,或如美國詩人 Emily Dickinson 一般,亡後才大量出版詩作,而現在好像有個想法,大概做了五成或稍有突破,就趕快號稱支援 XXX 規格、實做 YYY 重大功能,總之,這一切都改變了。

正如 [Google時代的程式撰寫] 一文所及,這個時代中,以下能力獲得大幅度的提昇:
  • 學習的速度
  • 錯誤排除的速度
並且 qing 舉了一個漸入我們軟體開發型態的例子:「在過去,對程式員的訓練也許不甚重視追蹤原始碼以及拆解原始碼。大家重視的是如何撰寫可讀性高的程式,以及設計出具彈性、重用性高的程式。但在開放原始碼的世界中,有太多的程式不僅可讀性低,而且不具彈性、重用性也不高-往往只是為了專門的需要而hack。如果具備了追蹤程式碼的能力,除了可以透過現成的程式碼學習新的技術之外,也可以做為拆解程式碼的基礎設施。而要拆解程式碼的第一步,自然是看懂程式碼,看懂之外,要進一步判斷那些是自己要的,那些不是,同時評估怎麼調整這些程式碼的架構,可以去除掉自己不要的部份,保留自己要的部份,又毋需對現有程式碼做過大幅度的更動。」

如果我現在是文明人,那我的確是從茹毛飲血的野蠻人演變過來的,而分野時間點至少在中學時代,或許這就是所謂的「進化」,然而心中總難掩「快速堆積式程式設計」的失落感,看起來雖然作過許多計畫,也獲得相對的報酬,但是感覺是如此不踏實。

我永遠忘不了那時候成功透過 int 2Fh 將 qBASE 的 Protected Mode Memory management 實做出來的那幾天,依然,我是在晚上偷偷爬起床,一行又一行 key-in 所完成的,那種成就感竟然成為絕響,往後,即使獲得高額獎金或專案報酬,我很清楚,不過只是組合的比其他人快一些罷了,而作什麼事情都與時間在競賽,或許這就是所謂的「實務」吧。

這也是我認為,至今仍原地踏步的緣故,或多或少,我們的心態都轉變了,種種方法論被提出來,也有不少成功的案例作為佐證,強調專業分工的前提,應該要更能深入某些技術細節作耕耘,但事實上,「快速堆積式程式設計」反而是比較務實的方式,相當有趣。
由 jserv 發表於 04:15 AM | 迴響 (3)

April 17, 2006

OpenWengo:以 GPL 發行的 VoIP 客戶端

下午找 speech codec 的資料時,發現了 [OpenWengo] 這家法國公司,他們有個以 SIP (RFC 3261) 為基礎的 VoIP 解決方案,相當有趣的是,[OpenWengo] 的 client 端是以 GNU GPL 發行的,有 Win32、Linux,以及 MacOS X 的版本,另外還提供 Firefox 的 extension,可參考 [ Firefox 的 OpenWengo 擴充套件]。依據法文版 Wikipedia [OpenWengo] 詞條的說明,[OpenWengo] 的後台是 [Neuf Télécom],而詳細的說明可參考 DQ Blue 的介紹 [OpenWengo],引用其中的比較圖:

至少可粗略知道同類型 VoIP 解決方案的差異。[OpenWengo] 的 client 以 Qt 撰寫,目前已經有 Debian / Ubuntu 的 package,直接安裝即可,以下是我的執行畫面:

就預設的組態來說,audio codec 有 AMR-WB、ILBC、PCM a-Law/u-Law、AMR,以及 GSM,後兩者應該只是 payload 不同,video codec (是的,[OpenWengo] 支援視訊交談) 有 H.263 與 MPEG-4,同時,[OpenWengo] 也有個開放性的設計,允許作有限度的擴充,比方說 [MBDSYS] 日前實做了 Verona。

原本有使用 Skype 服務的我,現在試著改用 Wengo phone 看看,我的帳號是 "jserv.tw",這上面主要還是以歐洲語系為主,尤其是法國與德國的朋友最多,又是練習外語的好機會了 :P
由 jserv 發表於 01:46 AM | 迴響 (2)

April 16, 2006

真是有效率

素聞對岸對於某些關鍵字眼相當敏感,許多大陸網友口中的 GF 可不是 Girl Friend,而是 Great Firewall,對浩瀚的 WWW 加諸了許多限制,之前曾打壓 SourceForge (據說只因為有 freenet 這類保障網路資料交流安全性的系統軟體) 與 Wikipedia 一類的大型服務,而我今天隱約見識到了:

這是網友針對之前的 blog [憑弔胡耀邦總書記 -- 仙逝十七週年] 的回應,真想知道對岸用什麼系統來防堵,真有效率,不得不刮目相看,如此的細節都這樣扎實了,看來中國黨政軍的改革成效真好呢 *笑*

我還打算繼續撰寫好幾篇關於中國共產黨幹部的生平簡記,看來透過對岸 GF 有效率的運作機制,這裡的 traffic 大概會降低許多,這樣我也省得維護系統 *笑*。有些網友也開始使用之前提過的 [Tor : 第二代 onion routing],讓自由意識得以在網路上逃竄,不過,還是得感謝這一系列的「改革開放」,讓這類的軟體激發了高度鬥志,持續發展下去。
由 jserv 發表於 11:30 PM | 迴響 (9)

dangerdeep:二戰德國潛艇模擬


[Danger from the Deep (dangerdeep)] 是個以 SDL/OpenGL 打造的二次大戰德國潛艇模擬程式,授權方式為 GNU GPL,[Gallery::Danger from the Deep] 網頁可看到執行的畫面,雖然計畫處於 Alpha 階段,但是美工與模擬的效果感覺還不錯。

[Download::Danger from the Deep] 提供了原始碼與 Debian package 下載,簡單的安裝方式如下:
# wget  \
http://nchc.dl.sourceforge.net/sourceforge/dangerdeep/dangerdeep_0.1.1-1_i386.deb
# apt-get install libsdl-net1.2 fftw3
# dpkg -i dangerdeep_0.1.1-1_i386.deb
操作方式可參考 [Documentation::Danger from the Deep],key binding 實在很不好記,操作的同時,我隱約想到以前看過的電影〈K19〉,儀表版更是有種身歷其境的感受。
由 jserv 發表於 05:31 PM | 迴響 (0)

April 15, 2006

憑弔胡耀邦總書記 -- 仙逝十七週年

再度聲明,我不是中國共產黨黨員,只是對中國近代史的觀察與紀錄。

第一次注意到胡耀邦總書記,是從國小四年級社會課本關於「六四天安門事件」的描述所發現,普遍認為,1989 年胡耀邦逝世成為六四天安門民主運動的導火線,更明確來說,這是第二次天安門事件,首次 (1976) 於之前的 blog [憑弔周恩來總理 -- 仙逝三十週年] 提及過。就一般的認知 (手頭資料很有限,所以只能用這樣含糊的用語),中共高層就如何處理肇因 1989 年四月 15 日胡耀邦逝世、學生悼念胡耀邦而演變成六四天安門民主運動,產生了嚴重的分歧和權力鬥爭,最後,主張鎮壓的強硬派出動軍隊、血腥鎮壓,導致數百人喪生,當然,國小課本的措辭既要淺顯,又得要考慮種種政治因素,所以只用簡短的篇幅帶過,不過正因如此,這讓我對於這個已故中國共產黨中央總書記的生平事蹟,投以高度關注。

下筆的同時,我想到王安石的《元日》:
    爆竹聲中一歲除,
    春風送暖入屠蘇。
    千門萬戶曈曈日,
    總把新桃換舊符。 
    
王安石作為唐宋詩詞八大家之一,留給後世的不僅是豐富的絢麗詞藻,更有變法維新。中學時代,正值青春叛逆期的我,開始研讀《資本論》、《共產黨宣言》,以及列寧發表於共產國際的著作,同時也對中國共產黨史產生高度興趣,許多歷史紀錄片至今在腦海中難以磨滅,我記得有一幕是,慶祝解放週年,家家戶戶唱誦著「紅紅太陽高高照」,到處都是爆竹聲響,紛紛張貼標語,男男女女高興迎接新中國的到來,不過,沒多久,大家就知道所謂的真相,舊中國積習的弊端不僅延續著,而且隨著資產階級的易位,萌生更多新衝突。

「爆竹送舊」、「春風送暖」、「新桃換舊符」,種種民間傳統和節氣規律,詩人用洗練的文字,通俗平易又精到地描繪元日的民間風俗,紀錄片刻劃的歡樂場景久久屏蔽於視角所及之處,歷史上此起彼落的權利核心不斷上演血淋淋的戲碼,對普羅大眾而言,這些都是「新桃換舊符」,如同二十四節氣一般自然,然而當權者常常倒行逆施、積弊不改,或者衍生各式生靈塗炭的惡行。相當巧的是,在我出生後到尚未受文化洗禮的那段時間,是胡耀邦出任中共中央總書記的時期,也就是 1981 年六月至 1987 年一月,爾後稍有歷史文化的意識後,曾做了相關新聞的剪報,以我的認知是,這六年間,胡耀邦的三大政策是:
  • 思想解放大討論
  • 平反冤假錯案
  • 吸納青年知識分子入黨
對於歷經「反右」、「三年自然災害」,以及「文化大革命」的人們來說,胡耀邦的「新桃換舊符」是驚鴻一瞥,隨後學生追憶胡耀邦的仙逝活動更是醞釀了六四天安門事件。1981 年以來,中共終於出現開放的曙光,而非只是文化大革命一般充滿民粹的恐怖時期,胡耀邦與其他開明的領導者秉持改革開放之風,衝擊著整個校園,鼓舞新一代的青年,就這點而言,胡耀邦已跳出了傳統共產黨領導人一貫沒有勇氣糾正錯誤的作風,一言一行留下珍貴的政治遺產。以兩次天安門事件劃分中共的編年史,依據美國紐約城市大學教授夏明的說法,概略分為三階段:
  • 1956 到 1976 年:國家罪錯嚴重氾濫的時期
  • 1978 到 1988 年:中共糾正自身罪錯最有成效的時期
  • 1989 年至今:新的階段,此間中國社會和經濟都取得了許多驚人驚世的進步,但中國政府的一些作為和失職也釀就了許多新的國家罪錯
「知恥近乎勇」,知錯需要有反省的勇氣,而傲慢的執政者在血液中沒有反省意識的成份,也因此,這樣的執政者往往易犯錯又難糾錯,而二十年前。胡耀邦在當時低迷的環境中,對共黨幹部表示:「善於傾聽實踐的呼聲,及時猛醒,努力改正,力求避免再發生全局性和長期性的錯誤,奮起掃除我們隊伍的一切陰暗面。」與「如果仍用人民授予的權力掩蓋和否認已經存在的錯誤,那麼這種掩蓋和否認比那些錯誤本生更不可原諒」,此等從挫折和錯誤中汲取教訓的原則更是具體地實現於執政上。

依據《人民心中的胡耀邦》紀念文集,胡耀邦的政績還有:
    胡耀邦糾正的冤獄包括共產黨執政前和執政後兩段歷史時期,涉及幾百萬案子,牽涉千萬家庭,波及上億人。面對紛繁複雜的大小案件,他不滿助於成績是主要的,因此可以容忍少量失誤;他也不滿足於大多數冤獄得到了解決,因此可以忽略涉及小人物的少數冤案。正是他執著的徹底糾正每一個冤案的人文關懷使得八十年代民心振奮,人道主義復萌。在他去職後接近生命末期時,胡耀邦對張揚 —— 一個他解救的作家說:「我可以不做事,但是我還要做人。」在胡耀邦看來,「做人」比「做官做事」更為重要。一個黨,一個體制可以不讓你做官,也可以不讓你做事,但它沒法阻止我們做人和維護做人的尊嚴。選擇做好人,選擇人的尊嚴,自然就會選擇人文關懷。
這對中國近代化,可謂創舉,試看二十年後的今天,對岸的領導者到底學到多少教訓呢?

〈亞洲時報〉在去年的報導指出:
    胡耀邦和趙紫陽是改革的急先鋒,當年的困難和阻力都非常大,反對改革的勢大盤根錯節,改革之路充滿荊棘,政治風險特別高。但兩人的拼勁、狠勁,替中國的改革殺出一條血路,先從農村承包制開始,再到企業改革,放權讓利、開放沿海城市等,莫不造成一波又一波的改革高潮。胡耀邦絕對中國改革開放的奠基者之一,他對改革的熱情、執着,在中共政壇無出其右,甚至因為極力主張政治體制改革而開罪鄧小平。因此,胡耀邦可說是為改革而捨身成仁的。
簡述胡耀邦奮鬥一生:1915 年十一月 20 日生於湖南瀏陽,1933 年加入中國共產黨。「萬里大長征」期間與之後長期擔任共青團工作,對日抗戰在軍隊政治部擔任領導職務。國共內戰期間,他出任晉察冀軍區的政務工作。1949 年後擔任團中央書記處書記,1956 年在中共八大上當選中央委員後,一直擔任團中央第一書記至文化大革命前夕。文化大革命期間,胡耀邦與其他中共領導人一樣受到衝擊。文革後期、鄧小平復出期間,胡耀邦主持科學院的工作,對一定程度上恢復正常的科學研究和培養青年人才起到了重要作用。1981 年六月至 1987 年一月,胡耀邦出任中共中央總書記,1986 年,中國大學生的選舉活動引發全國範圍的學生運動,被當局定性為「資產階級自由化」。胡耀邦被認為要為此負責,在1987 年被迫辭職,1989 年因急性心肌梗塞辭世。

至於本文為何要選 17 週年呢?因為 17 是奇數,用來表示胡耀邦在眾多中共領導人中的「奇」數。

參考資料:
由 jserv 發表於 10:37 PM | 迴響 (2)

淺談 x86 開機流程

[jasonmel] 寫了一篇很好的文章 [X86 開機流程小記 ],從一些重要的 BIOS interrupt vector 作出發,介紹實做一個 boot loader 所需的技術細節,並佐以 DOS / FreeBSD / Linux 的開機流程,文章提及 16-bit x86 Assembly 作為示例,可以搭配 qemu 一類的 system emulator 來實驗。

不過需要注意的是,就目前 x86 的應用發展來說,boot loader 的複雜度更高了,像是 GRUB 一類都必須切入 Protected mode,才得以讀出更大區域的資料,也因此是 16-bit / 32-bit 混雜。或說回來,Intel EFI 捨棄了傳統 BIOS 設計的思維,而在第三代 Intel Xscale 家族的 Monahans 中,更是改寫了 bootup sequence,由此可見,bootloader 與 driver model 正值新的變化局面。
由 jserv 發表於 07:59 PM | 迴響 (1)

工作狂一記

又是在午夜時分回家,專案進度還是遲滯不前。到內湖住所附近的永和豆漿吃宵夜,難得可放鬆一下,大口享用時,看到電視機在放映霹靂布袋戲,而我竟然有種衝動:
    我要回去 tune codec...
這後面有一段故事的,不過在完成全部的軟體建設前,先行略過,只能說,我放不下工作。目前來說,尚有不少效能改進的空間,不過體力實在有限,想到兩年前的日記:
     標題  工作狂                                                           
     時間  Sat Jun 12 13:00:39 2004                                               
    ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
    上週,小貓告訴我,我是工作狂。
    
    本來是沒什麼在意,反倒是昨天喝點酒後,
    昏睡到今天早晨,之後,就深深有種感觸,
    是的,我是不折不扣的工作狂。                            
    
    而且,我也搞不清楚工作、計畫,與興趣的分野。
    
    這樣下去精神狀況一定會有危險,所以週末不工作了。
    放假中。               
    
經過很久的訓練 (大概是從服兵役開始),我的物質慾降低許多,而我也有閒錢作些投資或公益,工作已不全然為了金錢收入,尤其對我這個曾經輕易用雙手游移於鍵盤即可賺入大把鈔票的人來說 (學生時代出賣靈魂),現在的我只求扎實地工作,行有餘力則希望能用微薄的力量,回饋這個社會,雖然是癡人說夢,但我很高興能用孱弱的身軀去力行。

我也忘記從什麼時候開始,成為所謂的「工作狂」(應該要有個明確的定義才是),看到兩年前的日記,總覺得很恐怖,這現象絲毫沒有改善,或許,我沒有資格過安逸的生活,只有努力燃燒自己,才能彌補過去所犯的錯誤與罪惡。

以上就是一個無聊男子的自白,還有他如何苟且偷生地作為一個工作狂,可笑吧!
由 jserv 發表於 03:28 AM | 迴響 (7)

April 14, 2006

創新:風險與失敗

EETimes 上有篇淺顯但值得玩味的文章 [Inventor imparts 'rude realities' of innovation],採訪 [Deka Research and Development] 公司總裁 Dean Kamen,該文有繁體中文翻譯 [Segway發明家:想要創新就要能容忍失敗]。

[Segway] 是 Dean Kamen 應用並改善動態平衡科技,開發出的新世代交通工具,以下節錄他日前在 Embedded System Conference 的談話重點:
  • 在創新的道路上,單一的偉大技術是不夠的,因為創新的過程總是充斥著無法預料、風險與失敗,應要有實幹苦幹的精神,並要在黑暗的創新之路上堅持直到黎明的到來。
  • 「管理是創新的扼殺者」:今日的企業文化強調時效、懲罰紀律、迂迴的處理方式、不能接受創新需要容忍失敗等都是值得檢討的。
      愛因斯坦:「天才和愚蠢的區別在於天才是有極限的」
  • 善用在其它產業所使用的技術:若能借用其它技術來解決問題,那麼就盡管去做。
  • 創新需要透過組織來培育,而管理是將事情做好,而主導者則是做正確的事情。
換言之,「創新」另一面即是風險與失敗,「創新」是堅持突破的過程,而且該做正確的事情。
由 jserv 發表於 01:32 AM | 迴響 (1)

April 13, 2006

空軍軍歌

今天早上醒來,睜開雙眼之際,耳畔突然浮現空軍軍歌的聲音 (?!),我實在難以解釋,竟然順勢就唱起空軍軍歌:
    凌雲御風去,報國把志伸,
    遨遊崑崙上空,俯瞰太平洋濱,
    看五嶽三江雄關要塞,
    美麗的錦繡河山,輝映著無敵機群,
    緬懷先烈莫辜負創業艱辛,
    發揚光大尤賴我空軍人,
    同志們努力,努力矢勇矢勤,
    國祚皇皇萬世榮。
    
    盡瘁為空軍,報國把志伸,
    哪怕風霜雪露,只信雙手萬能,
    看鐵翼蔽空馬達齊鳴,
    美麗的錦繡河山,輝映著無敵機群,
    我們要使技術發明日日新,
    我們要用血汗永固中華魂,
    同志們努力,努力同德同心,
    國祚皇皇萬世榮。
    
唱法可參考 [懷舊軍歌 Part II]。下部隊後反而少有機會唱誦空軍軍歌,主要還是下部隊前的士官訓練時期,雖然已經退伍兩年多,但是軍歌對我來說,還是如此清晰,好像五分鐘後就要早點名一般。出門,向遙遠的東方行舉手禮後,哼著旋律踏著淑女車徐徐前進...
由 jserv 發表於 04:20 PM | 迴響 (5)

好個「太極」廣告

凌晨兩點,我還在改某個專案的軟體設計,覺得很悶,打開有一段時間沒閱讀的 mailing-list,發現一封 SPAM:

這讓我想起上週遇到 ycheng 時,他給我一些指引,建議我可試試學太極,沒想到連 SPAM 都來提醒。

太極為無極所生,先天一生。老子有一氣化三清,羲皇一本散萬殊,無極生太極,太極生兩儀,兩儀生三才,三才生四象,四象生五行,五行生六彌,六彌生七宿,七宿生八卦,八卦生九宮,九宮至十圓。十又生陽,陰即合,陰陽合成十二周天。因此太極化和萬物,生生息息周而復始。
由 jserv 發表於 02:34 AM | 迴響 (1)

Trolltech 員工對於 OPIE 與 GPE 的比較

Trolltech 的員工 Lorn Potter 在兩篇 blog [ Blazingly fast FUD busters] 與 [fud busting part II] 中,對 Qt/Embedded 為基礎的 [OPIE] 與 Gtk+/X11 為基礎的 [GPE] 做了初步效能比較。他一開頭就說:
    Over the last 5 years of my handheld development experience, I have heard quite a lot of FUD about Qtopia and it’s offspring, Opie. Today I heard a doozy, “We didn’t use Qtopia because GPE is blazingly fast”.

    I have had enough of hearing that Gpe and X are so much more faster than Opie and Qtopia. I know from 5 years of experience in the linux handheld development world, that is just not true.
而這兩篇 blog 也提供令人印象深刻的數據,不過呢,Florian Boor (GPE/Maemo hacker) 回應:
    Nice you found out how to make GPE applications dead slow. You should have tried a kernel that doesn’t use these ancient RAM drives… But well - if you go on like this you will never find out why GPE is much faster than what you noticed… Good that it’s you who needs to feel ashamed for what you publish ;-)
至於實際的運作情況,還是要視組態設定而定,就我個人的經驗,GPE 是很有機會跑得比 Qtopia 略快,當然問題就是關鍵性應用程式。
由 jserv 發表於 12:40 AM | 迴響 (1)

April 12, 2006

kerubuntu 桌布

walkingice 在他的 blog [kerubuntu] 提到,他以 Ubuntu Desktop 的想法搭配 Keroro 弄了以下的桌布: (click to enlarge)

看來之前提到的 [Keroro Desktop Environment] 有不錯的桌布可用了,真好。
由 jserv 發表於 11:32 PM | 迴響 (2)

Evil software:逃避 GNU GPL 的途徑

這個標題光看就很邪惡,更別說內容了。今天去中研院資訊所分享「Evil software - 逃避 GNU GPL 的途徑」,簡報 slides 可 [在此取得] (PDF 格式)。所謂「知己知彼、百戰百勝」,這個 talk 中,我試著整理過去從事軟體開發,所見到「迴避 GNU GPL」的奇淫怪技、旁門走道、... 等途徑,這些無一不是要利用 GPLv2 文字上的盲點或造成舉證的困難,而在 GCJ (GCC for Java) 的例子中,是我最近試著模擬的情境,而的確也建構在「GPL 確保執行的自由」這個前提上,「轉化」GPL'd software 為 closed-source software。

其實浮上檯面的案例也不少,更有不少公司游移於模糊地帶、玩文字遊戲,所以,還有許多值得我們去反思之處。「魔高一尺,道高一丈」,GPL version 3 的制定就是希望能用更具體的規範,釐清這些模糊地帶,當然,我們也希望能確保軟體自由,又符合 IT 產業需求的雙贏局面。
由 jserv 發表於 10:43 PM | 迴響 (0)

April 10, 2006

Orz Programming

之前在 [Copy-n-Paste Programming] 提到 "Orz Programming",而前兩天參加 [Open Source Developers' Conference in Taiwan],唐鳳與 Ingy 提到許多 Perl 重大突破,而 [orz.pm] 更是驗證某些概念的突破,引用網頁的介紹:
    NAME
    orz - Total Failure
    
    SYNOPSIS
        use orz;
        # failing code here
         no orz;
    
    DESCRIPTION
    
    When you just can't get your code to work, 
    admit you are a total failure.
    
這個陳述真是太棒了,運作的效果更是有意思,而在 [PCMan X pure Gtk+ 2.x] 計畫中,也有個 [orz.py],作為 PCManX 內嵌 script engine 的展示。陸續實做 Xorz、Xorz/Embedded、Morz,以及 Orz MMI (private yet) 後,害我不禁考慮弄個 "Orz Programming Certified" 的標籤 (有人願意幫我弄一個嗎? Orz)。

您說、您說,寫程式是不是很有趣? Orz
由 jserv 發表於 01:26 PM | 迴響 (0)

「從 Web Browser 與 3D 技術發展看未來桌面系統的挑戰」簡報上線

之前的 blog [OSDC 2006 議程出爐],提到我的 session「從 Web Browser 與 3D 技術發展看未來桌面系統的挑戰」,slides 已經上線,取得 [PDF 格式] 或 [OpenOffice 2 Impress 格式]。

依據慣例,我的 slides 都是當天才開始打,而這份是在早上七點打的,前一天沒睡好 (該死的蚊子,而且前 N 天也沒睡好過),邊打邊點頭,還好早上騎了一小時的淑女車,終於比較有精神,到了會場一邊聽唐鳳講 Perl6 一邊打簡報。中午終於把 Morz (hacked version of Mozilla on 3D Living World via Xorz) 改好,鬆了一口氣,可是頭很暈。13:30 準時開始,session 應該有 80 分鐘,不過我耍笨看錯時間,還沾沾自喜認為時間控制剛剛好,所以被 hc 消遣... XD

由 jserv 發表於 12:53 PM | 迴響 (3)

April 09, 2006

VC-1 標準確立

Embedded.com 的新聞 [VC-1 standard finally arrives] 一開頭就提到:
    after two years of suspense worthy of a Hitchcock movie, the Society of Motion Picture and Television Engineers (SMPTE) has released complete specifications for the VC-1 video compression standard.
SMPTE 終於完成 VC-1 視覺編碼標準,這也是 Microsoft WMV9 的基礎演算法,而 "after two years of suspense worthy of a Hitchcock movie" 就將這兩年的等待比喻為英國緊張電影大師 Alfred Hitchcock 的製作歷程。就最近使用於多媒體應用的 video coding 方式來說,H.264、VC-1,以及中國的 AVS1.0 提案都熱烈地被比較與實做,據 TI 的 Ajit Rao 表示:
    TI's Rao, in comparing VC-1 and AVS1.0 with H.264, said that "VC-1 achieves a compression ratio similar to H.264 but at lower complexity." In contrast, China’s AVS1.0, while similarly reducing the complexity compared to H.264, "loses a little in compression efficiency," he added.

    Rao said that when compared to the H.264 Main Profile, China’s AVS1.0 is "about 0.3 dB worse in average for progressive sequences" and "up to 1.2 dB worse for interlaced sequences." China, however, is currently defining a new profile in AVS1.0 to resolve such quality issues, he added.
由此可見,無論是 IP-TV 或者中階多媒體應用而言,VC-1 video coding 是很有競爭性的演算法,特別是標準已經確立的今日。
由 jserv 發表於 02:36 PM | 迴響 (0)

April 07, 2006

Tip: vim + ctags + taglist + cscope + cppcomplete + global

[vim+ctags+taglist+cscope+cppcomplete+global] 是篇很不錯的文章,介紹如何在 vim 中搭配 vim macro 加上 cscope / cppcomplete / global 工具,提高開發效率,執行畫面如下:

快速鍵:
  • Ctrl-] : 查詢 function prototype
  • F8 :Auto-complete
由 jserv 發表於 05:48 PM

Unichart : 印列 Unicode 字型的小工具

剛剛拜讀李果正前輩的 blog [Unicode 中文部首起始碼位],相當佩服他對中文字型與排版的堅持,那篇文章整理中文部首的起始碼位,我對於 LaTeX 與 Ruby 不甚熟悉,但是我知道 Cairo 提供多種 backend 作為向量繪圖輸出,所以可將 anti-aliasing 描繪字體印列為簡單的表格。因此,我寫了一個小程式 [unichart] (12k),其輸出範例如下:

使用方式可參考 sample.sh 這個 script,需要留意的是,字型品質良莠不齊而且排列的順序多少會有出入,所以輸出或許會是不正確的,當然,也可能是我程式沒有寫好,歡迎討論,謝謝!
由 jserv 發表於 12:05 AM | 迴響 (0)

April 06, 2006

Bill Gates 的工作方式

許多書籍探討 Bill Gates 與 Microsoft 成功的故事 (可惜 Microsoft 合夥人的細節總是交代不清楚),但沒有提到這位日理萬機的世界首富是怎樣工作的,而 CNNMoney.com 刊載了 Bill Gates 的親身說法 [How I Work: Bill Gates]。

Bill Gates 已經完全電子化,所以他說很少需要在辦公室用紙,而且他很重視同步化工具的使用,這都是我目前無法達到的,對我來說,分析 codec algorithm 需要以紙筆演繹、分析 reports 需要以筆作眉批、填寫公文需要無謂的用紙、... 這些都很不環保而且沒效率,應該要好好改進才是。

日本趨勢大師大前研一在新書《專業:你的唯一生存之道》提到一個特別的觀點:邁入日新月異的科技時代,AC 與 BC (耶穌誕生前後紀元) 的重要性可能會被 AG 與 BG (Bill Gates 在 Microsoft Windows 的成功) 所取代,這是一個新的指標,或許誇大了些,不過這也明白地聲明,唯有更妥善使用新紀元的科技、以更有效率的方式去克服挑戰、用寬廣的心胸看待種種變化,以及加強特定領域的專業,才是在 AG 紀元生存之道。
由 jserv 發表於 01:50 AM | 迴響 (6)

在 Linux 上使用 WirelessLAN 的經驗

剛剛瞥見 Eason 的 blog [Linux Supported Wireless Adapter Chipset Directory] 提到由 HJ Heins 所整理的 [Linux wireless LAN support],這是很棒的 native Linux WLAN driver list。我第一次在 Linux 使用 WirelessLAN,是在「某公司」(其實也沒這麼神秘,只是「某公司」已經消失了),使用 PRISM2 chipset,時間是 2002 年春季。兩年前從事 Linux-based Thin-client 開發,考慮到產品的多元,開始提供 WirelessLAN support,執行畫面類似下圖: (click to enlarge)

使用的 chipset 除了 Atmel AT76C5xx 外,也包含 PRISM2/3 與 TI ACX100 系列,有部份成果已經 merge 到 upstream。據我記憶所及,當時在 CeBIT 展覽的迴響還不惡,也是當時少數 Linux-based Thin-client 有內建無線網路的解決方案 (其實我一直沒有看到其他也具備的)。在去年,以 GPLv2 釋出相關的計畫 [Linetconf - Linux Network Configurator],這是全新的 codebase,與兩年前直接用 ioctl 驅動 iwpriv 的 dirty-hack 是截然不同的,離職後,手頭沒有保有 source code,我也忘記自己到底用了多少 tricks 與 workaround 了。

開發的過程發生了一個插曲,當時就讀交大資工系的小貓,利用暑期來到前公司作工讀生,協助我作 driver development & testing,同時也維護一部分 WLAN Kit 的 user-space application,不過或許是因為我對小貓的期許較高,而我忽略小貓還有其他計畫要忙,結果我就在辦公室把小貓罵哭了... 有時候,lover 與 partner 的角色還是分開比較好,到現在才學會這點,為此,還是覺得很愧疚。

後來在去年年初的休假中,我接觸了幾款 ACX100 / ACX11x 的 chipset,起初驅動不是很成功,後來在許多前輩的協助下,最後達到可用的境界,再來是玩了 Atheros 的 chipset,這部份的 Linux/*BSD driver 可參考 [MadWifi],這是非常優秀的專案計畫,展示如何跨越平台對 close firmware 做出完整的 WLAN 驅動支援。說到這裡,又要炫耀一下,在參與 2004 年的 Asia BSD Developer Conference 時,跟 [MadWifi] 核心開發者 Sam Leffler 前輩要了親筆簽名與合照,從此以後,遇到的 Atheros chipset 運作都相當順暢,所以收集簽名還是有點用的 :P

以上提到的是有 native Linux driver support 的 chipset,至於 close-source driver 的部份,我用過 VIA Solomon 系列,以及最近 P 公司與 M 公司的解決方案,說來也很有趣,Linux driver 有時候反而是先 ready,過好一段時日才有 Windows Mobile 的 WDM,而且現在大多也全力支持 LWE (Linux Wireless Extension),才過兩年,發現這些通訊與硬體廠商的態度有很大的轉變,這是值得欣慰之處。有時候也幫一些朋友修改 Linux driver,比方說之前在 blog [3Com 3CRWE62092A 驅動],就是在手頭沒有硬體時 hacking 的,沒想到還因此幫了 Jouston 與一個老外的忙,前幾月也幫了某公司處理,也是瞎子摸象亂改 driver,運氣還不差,最後有驅動。

我個人的感覺是,Linux kernel 2.6 在相關的 API 與 driver model 有收斂的趨勢,雖然每次改版還是忍不住罵一下,但隨著相關廠商的釋出善意、大量 WLAN 相關 Free/open source 軟體的現身,以及 Linux Desktop 的整合,才短短兩年間,這些變化是巨大的,衷心期望明天會更好。
由 jserv 發表於 01:25 AM | 迴響 (8)

April 05, 2006

缺月掛疏桐

手頭仍有一堆未完成的工作,晚餐用畢,在內湖住所附近徒步散心,仰望一彎殘月,不由自主出神。

歷經牢獄之災、不斷被下放的蘇軾,曾作〈卜算子〉:
    缺月掛疏桐,漏斷人初靜。
    誰見幽人獨往來,縹緲孤鴻影。
    驚起卻回頭,有恨無人省。
    揀盡寒枝不肯棲,寂寞沙洲冷。
    
相關的賞析可參考 [賞析蘇軾的清峻詞 ─ 卜算子],因「烏台詩案」而入獄、同年底獲釋,隨被貶謫黃州,向來豪放曠達者如蘇東坡,竟也寫出「缺月掛疏桐」之句,孤寂憂苦之情難以遏抑,李太白嘗言「今人不見古時月,今月曾經照古人」,月是周而復始,而人事物卻代代更迭,千年後的我,望著月光,竟也沉浸於孤寂痛楚中。

不過李太白畢竟是謫仙人,詩名〈把酒問月〉道盡這一切,又在〈將進酒〉提到:「古來聖賢皆寂寞,惟有飲者留其名」,庸俗者如我,大抵只有以酒精來解放感官,生命還能不寂寞嗎?
由 jserv 發表於 09:54 PM | 迴響 (3)

人間四月芳菲盡

連續兩週,工作陷入膠著,投入比以往多上 N 倍的精力去 tune performance,也因而發現自己對 architecture 的掌握度還不足,光一個 pipeline 所造成 instruction clock cycle 的差異,就有一定程度的落差,更別說這些微妙變化累積起來對整體的衝擊。往往用完中餐後陷入 coding / profiling / debugging / benchmarking 的深淵後,猛然抬頭,往往已經是深夜,上週還弄到清晨五點,始曉的日光已經悄悄透入辦公室,我才又是懊惱、又是難過,伴隨幾分失落感,結束這十幾個小時的工作。然而,即使每天都投入一段時間在作,似乎沒有太大的突破,雖然我的工作本來就有點難度,思考一個突破性的演算法很花時間,更別說要在 target 上驗證具體的效能提昇。

雖然組合語言程式專案也寫過一定規模的數量,不過,嚴苛地追蹤、分析,以及反省,還是因為這個計畫,我從過去 per procedure benchmarking,轉變成 per instruction benchmarking,甚至還親手抄寫與估算具體的 clock cycle,一次又一次地複習以前學過的計算機組織與結構的課程,這過程實在是非常痛苦,不過,我想,是我個人本職學能不足所致,又不是第一天寫程式、也不是第一次接觸 ARM-based 的硬體,怎麼連 backend optimizations、instruction scheduling 或 data cache 明確的效能變化都沒辦法清楚地說出,這樣怎麼有資格說自己在做 embedded system 呢?我還是不夠紮實,只好亡羊補牢,慢慢加強,儘管如此,這些日子似乎又感受到「燃燒」的感覺。首先,長期盯著螢幕猛看,發現視力嚴重退化,再來精神狀況也不好,連做夢都還在想這些細節,密集寫 test case 與 single-stepping,導致雙手也受傷了... 不該再作無謂的自憐,一切都是自己的問題。

週二晚上還是持續陷入這深淵,離開辦公室時,也接近週二當日的尾聲,在寂靜的瑞光路上徒步,腦袋還是無法閒著,雙手則是恣意伸展,試圖抒發這段時間的挫折感,突然碰到路旁的花叢,此情此景讓我聯想白居易的《大林寺桃花》:
    人間四月芳菲盡,山寺桃花始盛開;
    長恨春歸無覓處,不知轉入此中來。
    
當然,詩中的四月與目前的時節並不一致,而詩人是在峰頂一千七百公尺的廬山上創作的,所以桃花才會在農曆四月破苞綻放,白居易以淺顯但深刻的文字,道出他對於大自然細緻的體驗。置身於冰冷的瑞光路,也就是台北內湖科技園區的核心區域,在台北流浪一段時日的我,在忙碌中總是被麻痺的,任憑時光消逝、漠視周遭的變化,更對情感漸入冷卻,這一切對我來說,就好比自己是個強迫接受高量照射的蘭花,在激素的催化,根本忘記原本的時序,而只是一味消耗養分,個體成長了,但是內心則是更加空虛。這是我的寫照,虛有其表,雖然作過一些計畫、保有一些小聰明,但都不甚紮實,連個基本的認知都不足,猛然抬頭,BENQ 的招牌光鮮地投射於眼簾,而我也逐漸想起,三年前,我剛踏上這個區域,陸續到幾家公司面試,準備在空軍役期結束後,能得以發揮所長,這一千個日子,就這樣流逝,而我,究竟與三年前有什麼不同呢?沒有,只是持續接受麻醉、只是更加空虛,只是離應有的時序更遙遠...

感謝幾家公司企業願意收留與施捨,所以我可以工讀生的身份在台北街頭維生,而「長恨春歸無覓處,不知轉入此中來」此等心境的變化,會在何時發生呢?我不知道,肯定很遙遠,至少要等我有資格當個工程師再說。最近的心情很低落,陸續也收到像是 feature request、bug report,或者是來信指教,這裡也必須說聲抱歉,由於進度的延宕,導致其他項目幾乎沒辦法兼顧,雖然每天騎淑女車回家時,總是會在深夜的街道上自我催眠地喊著:
    Cheer up! Cheer up!
不過,回到家,稍微盥洗後,頂多隨手翻閱書籍,就只是疲倦得入睡,過一段時間後,又陷入工作循環的狀態,特別在夜晚,更是有「人間四月芳菲盡」的感受,彷彿這花花世界對我來說,只剩下凋零的殘影,雖然繽紛色彩曾加諸於斷枝殘花之上,而此時此景,我充其量只能寄望另一偶綻開的桃花堆,屬於自己的青春呢?早已老去,我步入人生的黃昏末期,或許還有些值得欣慰的小成就,然,「夕陽無限好,只是近黃昏」,不消多少時辰,燃燒殆盡的我,化作灰而飛揚...
由 jserv 發表於 01:47 AM | 迴響 (7)

April 02, 2006

Video Coding 演算法評估的盲點

專注於 DSP 設計的 Berkeley Design Technology Inc. 總經理 Jeff Bier 日前撰寫了一篇短文 [Scaling video processor power gets squirrelly],以簡單的概念破除我們評估 Video Coding 演算法複雜度的盲點。EETaiwan 提供了一份該文的繁體中文翻譯 [視訊演算法常見的設計盲點],引用如下:
    這是相當有趣的問題。當你要建置一個特別的視訊壓縮演算法時,您得考慮要多少的運算效能才夠,雖然網路上有你所需的數據,但其所假設的情況卻往往與你的設計不完全相同,更何況該數據可能是針對比想像中還小的訊框要求。

    你或許會想:「雖然沒有我需要的正確數據,但我只要用一個比例因數 (scaling factor) 乘以手中數據,就可以彌補實際運算負載量的差異。」但這種做法,卻往往正是出狀況的主要原因。

    假定你的數據是代表小訊框,視訊框卻有四倍大,您只能以四這個因數乘以處理器下載的數據。但要注意,可能較小的訊框適於晶片上記憶容量,較大的未必適合。一旦視訊框超過晶片上的記憶容量,效能即可能遭受巨大打擊。每個情況在那點所需處理的功率可能呈現非線性關係,你的比例因素也就沒多大意義。

    實際上,由於視訊演算法多半採用極大量的數據,晶片上記憶規模與外部記憶頻寬常會對效能帶來限制。其他因素會更複雜化。例如,在典型的視訊壓縮演算法(如H.264規格)中,大部份區塊(block)是依畫素運作,但人們不了解很重要的一點是:熵編碼(entropy coding)區塊是依係數運作,並非畫素。也因此,其下載處理乃是壓縮位元率的一項函數,並非畫素率。

    可能您只是沒注意到這個區塊,但卻是個錯誤。視訊壓縮演算法的熵編碼消耗整個演算法所需處理功率可能高達三分之一。也因此,您若將位元率增加一倍─即使每秒畫素維持不變─還是需要更多的馬力。而且,即使您所發現的效能數據恰好符合情況需求,但也有可能是錯的。許多微妙的因素也會影響視訊演算法的下載處理,您也無法經常擁有足夠的資訊對數據相關性進行評估。

    例如,假設您計劃納入H.264 編碼規格 (H.264 Baseline Profile),該編碼規格提供每秒30訊框的影像圖形陣列(VGA)畫面。同時假定處理器廠商擁有針對某一情況所需的效能數據。那是有助益的,但也要等到其他眾多變數確定後,將您觀察的數據與報告出來的數據相互比較,才不致帶來更多誤導。這些變數包括如視訊品質、解碼視訊內容的型式和外部記憶頻寬。未對各種情況下衍生出來的數據深入了解,將無法準確預測效能。

    工程師常習慣於對數據做外插的計算推斷,但就視訊處理而言,得小心處理,要不然就最好不要。
底線是我自己加入的,在我還沒實地去 implement 與 optimize 手頭那些 video / speech codec 前,我也犯了同樣外插預估的錯誤,後來經過血淋淋的教訓 (包含 coding 到眼睛紅腫、回家的路上還不斷思考 benchmark 的落差,而導致車禍、...),才得以理解這微言大義。

引用這篇文章的另一個原因是,之前曾與國內某個 codec 大廠有接觸,甚至還跟其 software R&D 的 VP 打交道,可是對方評估系統效能的方式,似乎也...?好吧,是我太嫩了,還是別輕妄置喙,那位前輩研究 Image processing 的時候,我還在吸奶嘴呢。
由 jserv 發表於 11:37 PM | 迴響 (1)

Mozilla Re-licensing 完畢

Mozilla Foundation 日前宣佈,Mozilla codebase 由原本的 MPL (Mozilla Public License) 轉換為 MPL / GPL / LGPL 三重授權模式,換言之,開發者或者應用對象可擇一再散佈 Mozilla 為基礎的軟體,這可克服困擾許久的 GPL incompatible issues,詳情可參考 [Mozilla Relicensing FAQ],Great!
由 jserv 發表於 11:11 PM | 迴響 (0)

淑女車里程之量化

我知道專業的自行車有里程測量的設備,而且所費不貲,但是我不服氣,難道價值台幣一千元出頭的淑女車沒辦法嗎?WindRiver 最近炒得火熱的 Device Software Optimization (DSO) 不就在挑戰 Device 的能耐嗎?淑女車就是我的 Device。陸續利用空檔,除了之前提到 [與淑女有約:內湖到陽明山的散步] 與 [與淑女有約:內湖到北宜公路的散步] 外,還到了大台北地區的零星區域,比方說從內湖騎到淡水、從內湖騎到頭城,以及去年去花蓮渡假時,當日往返花蓮火車站、太魯閣、鯉魚潭、七星潭、花蓮空軍基地,以及東華大學等地 (當然,還是騎淑女車)。以花蓮渡假那次而言,看了地圖,路程應該破一百公里,然而,仔細想想,事實上應該超越這個數據,因為我不是走直線,而且有繞遠路,至於如何量化?如何客觀測量,至今還未有好方法。

剛剛看 descriptor 的 blog [跑步 - 長條圖 (bar graph)],覺得非常有意思,也獲得頗大的啟發。有跑步的習慣的 descriptor,每次都會把跑步的秒數記錄下來,他還用 pic 繪圖語言將這些數據描繪成長條圖: (click to enlarge)

而我其實也可以應用積分的概念,將我騎淑女車的運動量與移動量分佈曲線予以量化,以回歸曲線修正估計值,嗯,有空來規劃看看。
由 jserv 發表於 03:21 AM | 迴響 (2)

April 01, 2006

貓也會的 Design Patterns


我讀過最好的 Design Patterns 書籍,首推葉秉哲博士翻譯 GoF 四人幫的著作,不過畢竟主題嚴肅,所以有些項目難以下嚥 (這是我個人問題)。剛剛瞥見結城浩的網頁 [ギコ猫とデザインパターン / A GIKO CATalog of Design Patterns],用了很可愛的 Ascii 構圖來闡述那經典 23 個 Design Pattern,像我一直學不會的 Chain of Responsibility,看了 [ギコ猫とChain of Responsibilityパターン],雖然還是沒有頭緒 (Design Patterns 貴在應用阿),但不禁莞爾。

由 jserv 發表於 11:59 PM | 迴響 (1)

書目 - 2006 年第一季

邁入 2006 年 Q2,我列出上一季所閱讀的書目,所幸趕在 deadline 前唸完: 為了拜讀以上著作,也購賣相關的參考書目,這裡就略過 (不在規劃內),對紙本刊物越來越偏食的我,這三個月只唸了一點書,充其量也只是拾人牙慧,還沒有深刻的體悟。
由 jserv 發表於 11:29 PM | 迴響 (0)

保有瞬間的永恆

剛瞥見 gslin 長輩的 blog [Lets do it!],有此壯麗之景: (click to enlarge)

這讓我想到英國詩人兼畫家 William Blake (1757-1827) 的作品〈Auguries of Innocence〉:
    To see a world in a grain of sand,
    And a Heaven in a wild flower,
    Hold Infinity in the palm of your hand,
    And Eternity in an hour.
    
試作中文翻譯如下:
    於一粒砂土窺見世界;
    自一朵野花體察上蒼。
    掌握無窮於手心;
    永恆停駐於瞬間。
    
登上白暟雪峰而佇立,領會大自然的神秘。往遠處眺望,綿綿不絕的峰嶺窮盡了視野的涵蓋,此時此際,人們是何其渺小和短暫呢?然,縱身而下的瞬間,位能與動能的轉換,給予我們強大的力量感受,這瞬間,是永恆的。
由 jserv 發表於 06:34 PM | 迴響 (0)

李維前輩的 blog

寫完 blog [Delphi:易主的神殿?] 後,有朋友告知李維前輩的 blog [IT:是工作還是嗜好?],光是標題就很吸引我,而我也一直想問同樣的問題,對我這個在 IT 產業打零工的工讀生來說,什麼都是假的,只有入賬的薪餉單據才是真的。[IT:是工作還是嗜好?] 自然免不了提及 Delphi 開發工具的動向,有以下三篇跟 Borland 日前的大動作有關: 拜讀完 blog 上的文章後,感覺... 這個 Delphi 跟我在國中時代深感驚艷的 Borland Delphi,差距好遠、好遠,我還是乖乖回去寫 device driver、搞 codec,或者當作什麼都沒發生吧。
由 jserv 發表於 01:42 PM | 迴響 (0)

《Hotel Rwanda》

盧安達飯店》影片的官方網頁 [Hotel Rwanda] 羅列部份相關資訊,相關的介紹與報導可參考: 依據 [盧安達飯店] 內容所及,預告片可 [在此下載] (480x260 24bpp 24.000 fps,Sorenson Video v3 [SVQ3] 格式,17 Mb),我在台大計中做了 [一份 mirror] (格式同上)。《Hotel Rwanda》取材自真人真事,描述 1994 年盧安達種族大屠殺期間,一家飯店業主 Paul Rusesabagina 嘗試拯救一千多名盧安達難民的動人插曲。

1994 年四月 6 日,一架載著盧安達胡圖族 (Hutu,佔該國人口的 85%) 總統哈比亞利馬納和布隆迪總統的座機,在盧安達首都 Kigali 上空被火箭擊落,兩位元首同時罹難。四月 7 日,空難新聞在盧安達國內立即引發了胡圖族與圖西族 (Tutsi,佔該國人口的 14%) 兩族的互相猜疑,從而爆發了一場規模空前的武裝衝突和種族大屠殺,是此,震驚世界的人間慘劇拉開了帷幕。由胡圖族士兵組成的總統衛隊殺害了盧安達女總理、圖西族人烏維林吉伊姆扎納和三名部長。此後三個月中,先後有一百萬人死於非命,其中 94% 為圖西族人。這部份史實的評論與種族衝突探討,可參考李安山的論文 [論民族、國家與國際政治的互動] (PDF 格式)。

當一個國家陷入了瘋狂,世界村其他地區也閉眼姑息時,Paul Rusesabagina 這位飯店業主卻敞開了溫暖的懷抱,他經營著當地 (Kigali) 一家雲集著歐洲游客和軍界政要的 Mille Collines 飯店,八面玲瓏地運用著一切手腕,盡心地呵護著飯店的顧客們。Paul Rusesabagina 是胡圖族人,而他的妻子塔莎娜卻是圖西族的,對他而言,在動蕩的時局中,保護他的圖西族的親戚與朋友成為了一生中面臨的最大使命與挑戰。

聯合國維和部隊的失當,以及該事件與世界媒體的隔絕,使得 Paul Rusesabagina 夫婦和在飯店中避難的 1268 名當地居民在絕境中展現了存活的勇氣與決心,從劇中的人物脫口而出:
    「我們一定讓全世界都無地自容地去採取應有的行動。」
MSNBC 的報導 [Hotel Rwanda: A Hero Will Rise] 提到當時聯合國的列強普遍的謬誤:
    The importance of the story "Hotel Rwanda" has to tell shouldn't put it above criticism—the exposition can be clumsy; Nick Nolte is miscast as the Canadian general in charge of the ineffectual U.N. troops, and, by turning the Hutus into the villains and the Tutsis into the good guys, the script simplifies a complex history in which the roles of oppressor and oppressed were once reversed. Yet, ultimately, one's reservations are overwhelmed by the story's urgency; it's impossible not to be shattered.

高達一百萬人成為這次種族屠殺的犧牲者,而 Paul Rusesabagina 經營的 Mille Collines 飯店卻成為了嗜血荒漠中的一片生命綠洲。1994 年後的十餘年間,各地的政客前往盧安達祈求倖存者的寬恕,並一再立下 "never again" 的誓言。2004 年三月 26 日,聯合國秘書長安南,在紐約聯合國總部舉行的「盧安達大屠殺十周年紀念會」上發表講話,呼籲國際社會採取行動,防止盧安達大屠殺事件重演。他希望各國人民響應盧安達政府的提議,在每年的四月 7 日中午十二時默哀一分鐘,以追思過去、警示未來。然而,諷刺的是,在蘇丹、剛果等地,視性命如草芥的殺戮卻一而再地發生。
由 jserv 發表於 12:22 PM | 迴響 (0)

算命

這幾天忙著改良 codec 演算法,主要是針對 DSP programming model 的最佳化,再來就是寫了幾百行組合語言,花了好幾天用 single stepping 與 GDB 搏鬥,到深夜才有空檔。好不容易可以逛逛網頁,瞥見 [飛黃騰達心靈開運網 ],基於好奇,所以我也來算算,以下是我的結果...
性別: 男 生辰:1981年6月11日 9:10

八字
 時   日   月   年 
 劫財      偏財  劫財 

 辛   庚   甲   辛  
 巳   申   午   酉  

 七殺  比肩  正官  劫財 
 偏印  食神  正印     
 比肩  偏印         

您是屬於寶劍命
    ◎您是王者的寶劍,勇往直前,執行力強,充滿魄力與義氣,願意為大家服務。喜歡有禮貌,有智慧的人。個性帶點霸氣,有主導權與領導能力,對於現狀的不滿,能勇於突破。◎

    根據命理來分析您的個性,潛意識,以及行為模式,您是屬於「寶劍命」,因此您天生具有寶劍的特質,有魄力、義氣,與霸氣。您也十分有才幹與領導能力,富有公平心與正義感,喜歡保護弱小,不喜歡恃強凌弱,受人恩惠,必定回報,不願意辜負別人,也不願意占人便宜。寶劍雖然外在感覺比較強勢,但內心卻很溫暖,吃軟不吃硬。寶劍銳利無比,因此您對於現狀的不滿,能勇於突破,抗衡壓力,改變環境,掌握自己的命運,但是寶劍有時後使用不當,也會傷到自己人,因此您有時候會太過積極,造成身邊的人過大的壓力。

    此外,您喜歡有聰明智慧,才華創意的人,不喜歡懦弱沒有擔當的人,而能讓您佩服的人,多半是有領袖特質,能夠犧牲奉獻,講求公平正義的人。您的一生,像寶劍一樣,但是要成為真正的寶劍,寒光射天地,劍氣沖斗牛,是需要經過反覆的淬煉。沒有經過淬煉的寶劍,只能成為廢鐵。然而要經過淬煉,需要有浴火鳳凰的精神,不怕痛苦與磨難,只要您經得起外在的考驗,不怨天尤人,進而學習成長,一旦通過考驗,您的成就將不可限量,是領袖級的人物,風雨不能影響您,困難不能障礙您,成為不敗的常勝軍。

    ◎您本命五行金太旺,呼吸系統機能比較弱,容易呼吸不順,感冒咳嗽,或有氣喘等症狀。◎

    根據命理分析,您天生呼吸系統功能比較差,在年輕的時候不會有太大的問題,頂多是容易鼻子過敏、流鼻水、咳嗽、感冒、胸悶、腹瀉或便秘,但是如果您現在不照顧呼吸系統,隨著年紀越來越大就很容易導致鼻竇炎、氣喘、肺炎、支氣管炎、大腸息肉、直腸炎等問題。因此您不能過度勞累,而且千萬不能抽菸,要維持正常作息,早睡早起,才可以保護先天比較弱的呼吸系統。

    此外,所謂「病從口入」,人類大部分的疾病來源都跟飲食有關,根據中醫理論,食物可以分成金、木、水、火、土等五種五行。您可能偏好吃重口味,辣口味的東西,像是麻辣火鍋,四川菜,應該都符合您的口味。因此,您的細胞中,充滿太多「金」的五行,會導致健康,財運與事業的不圓滿,建議您平時最好能飲食均衡,菜色均衡,則陰陽五行調和,生活美滿幸福。

    ◎但是您八字缺水,先天水的機能也比較弱,容易疲累,要注意泌尿系統的保健。◎

    根據命理分析,您天生腎水系統比較差,所以容易感覺疲倦,冬天常常手腳冰冷,體力似乎不如人,因此無法從事需要大量勞力的工作。在年輕的時候不會有太大的問題,但隨著年紀越來越大,腎水系統需要更多的照顧,不然很容易有血壓、心臟的問題,甚至容易導致失眠、憂鬱、腦神經衰弱、聽力異常、腎功能異常、膀胱炎、尿道炎、攝護腺腫大、或其他心血管功能疾病等問題。因此您不能過度勞累,要維持正常作息,早睡早起,多接觸陽光,多走出戶外,少吃油炸食物,才可以保護先天比較弱的腎水系統。此外,由於體質偏向燥熱,您會想要喝冰的飲料,但是千萬不能喝,此外也要避免房事太頻繁,以免傷了元氣。

    此外,您是屬於行動派的人,不喜歡拖泥帶水,拐彎沒角。因此,您做事快速有效率,但是欠缺縝密的思考,運氣好的時後一帆風順,運氣差的時候白忙一場,所以一生常常起伏不定。如果您想改變這種現象,最好每天要留一些時間給自己思考,多想想平常沒時間思考的問題,這樣可以有助於您做出正確的決策。只要您做事能三思而後行,有正確的方向,再加上您的行動力,那您的命運將會有很大的改變,身體健康,財運順利,事業圓滿,家庭幸福。

    ◎簡易愛情分析,您是屬於雙方平等,保持距離的愛情。您的愛情不是屬於濃情密意的那一型,反而有一點像朋友,雙方地位比較平等,相互間追求一種平衡。您不太容易找到那種小鳥依人、百依百順的對象。◎

    您愛情的模式,根據命理分析,您對於心儀的異性,很容易心動,但不容易成功,常常無疾而終,因為要兩個人都一見鍾情確實有點難。一般來說,異性對您的第一印象都不會太深,您是需要經過交往的階段,異性才會發現您的優點與內在美。換句話說,您很容易第一眼就喜歡上一個人,卻不容易經過長時間相處而喜歡上一個人。相反地,您的戀愛對象不容易第一眼就喜歡上您,卻很可能經過長時間相處而喜歡上您。因此,如果您在等待美好的愛情,您可以試著把自己的內在美透過各種方式表現出來,多參加各種活動,多培養各種興趣,多接觸不同人群,如此您會在不知不覺中,讓您的內在美隨時展現,愛情才會更順利。

    在人生的旅程中,您的戀愛或結婚對象很有可能是先經由親友介紹或相親而認識,因為您對於愛情比較不太有經驗,也不善於包裝自己、行銷自己,有時更怯於表達自己的感情,碰到喜歡的人也多半停留在欣賞的階段,不容易積極主動的展開追求,更不會死纏爛打,因此不僅錯失許多機會,更在心中產生既期待又怕受傷害的感覺,反而更不容易擦出愛的火花。您若是對象還沒有出現,不要心急,在您身邊確定有人正喜歡著您,只要真心誠意去追求,幸福就在您身邊。

    ◎簡易財運事業分析,您會賺錢,但不容易守財,也不容易經由儲蓄累積財富。您對於生命比較達觀,不會對自己或家人朋友太小氣。◎

    根據命理分析,您會賺錢,但是不容易守財,也就是不容易經由儲蓄累積財富。您對於生命比較達觀,因此不會對自己,也不會對家人或朋友太小氣。在您手頭比較緊的時候,該花的錢您還是會花,不會一毛不拔;在您手頭比較寬裕的時候,您花錢會很大方,不會對自己、家人或朋友小氣,正因為如此,您當然不容易存錢。此外,您很容易因為朋友的介紹而做了某些投資,而且常常虧本。這是因為您的個性交遊廣闊,也認識很多人,所以當朋友來找您投資時,您不容易分辨風險,也不容易拒絕,所以當然很容易虧本。如果以一生的時間來衡量,您今生大部份的財富會被您拿來做自己想做的事情,您會認為您使用過的錢財才是您真正擁有的財富。之後,您不會遺留太多的財富給後代子孫。
前面似乎是算命常有的恭維話,與真實有極大出入。想到自己這幾天苦無進展,還因為長時間 coding / debugging,導致外套衣袖因手肘過度摩擦桌面而磨損的悲情工程師生涯,這個「寶劍」還不如來個「保健」有意義吧,或許算命網站就是得要這麼寫,才會有人看。

後面提到的特質似乎都很糟糕,好吧,我承認某些方面很精確,特別是短處的描述方面 (或許那是現代人的通病,所以結果都很相似?),所以呢,一言以蔽之,我是「生鏽的箭矢」。
由 jserv 發表於 01:22 AM | 迴響 (1)