March 27, 2007
Hello World 廣告詞
一直想把「深入淺出 Hello World」系列演講的書面資料與參考文獻整理為 wiki,不過現在只有陽春的 [
HackingHelloWorld] 頁面。其實「深入淺出 Hello World」系列演講的核心想法真的很單純,只是想更深入理解系統運作的原理,並且由最簡單的程式當作出發點,沒想到就這樣一路講到 Part III,未來還會有 Part IV 與 Part V。今天發現本 blog 流量突然增加:(見 2007-03-26 該日紀錄)

於是很好奇去查看 refer 來源,看來是因有熱心的大陸朋友在知名的水木清華 BBS 站張貼名為 [
深入淺出hello world!] 的文章,還提供不錯的廣告詞,節錄如下:
一個 hello world 是很多人寫程序的起點,那麼關於這個hello world 你又究竟理解有多深呢?你敢說自己很熟悉這個簡單的不起眼的 hello world 程序背後的方方面面嗎?
看看來自台灣的 Jserv 展示的關於 hello world 的你未曾想過的不一樣的世界!
發言者是 happyvim (暱稱:那一夜的茶),似乎是不錯的廣告詞,可以拿來用用 *笑*
由 jserv 發表於
01:21 PM
|
迴響 (1)
March 26, 2007
演講:User-Mode Linux 應用簡介 (暫定)
昨天有人問及「User-Mode Linux 應用簡介」的 talk,這裡說明一下。那場原本訂於二月份在 [
TOSSUG] 分享的主題,因為臨時有事走不開,所以該月取消,順延到四月份,詳細資訊請見 [
TOSSUG::心得分享]。
「User-Mode Linux 應用簡介」顧名思義是探討 [
User-mode Linux Kernel] (UML) 的應用,並且在虛擬化技術蓬勃發展的今日,由 UML 這項第一個以 GPL 授權發行的 Linux virtualization 計畫作出發,簡介相關技術。以下是預定的大綱:
- Linux 為基礎的虛擬化 (virtualization) 架構
- 快速建構 UML (User-Mode Linux) 環境
- UML 虛擬網路環境建置 (含多 UML 環境)
- 用 UML 體驗核心開發
- 簡介相關技術:Virtualization、Paravirtualization,以及 Hypervisor
UML 是將 Linux Kernel「移植」到 user-space 的途徑,如此一來,就可將這個修改的 "Kernel" 當作一般的 Linux process 來執行,所以 UML 允許使用者「在 Linux 裡面執行 Linux」,這也意味著 UML 提供一台虛擬的機器,讓使用者可作任何實驗性或者具潛在危險的測試,而不用擔心破壞目前的系統,可參考之前的筆記:
而四月份 (Apr 10) 的心得分享將進一步探討實例,動手建構虛擬的 Linux 執行環境與網路建置,甚至還可佈署虛擬的 PC cluster 作為驗證,最後則是探討虛擬化技術。個人認為 User-Mode Linux 的 talk 是很好的起點,可由此看到虛擬化技術的變革,稍早也在 [
深入淺出 Hello World Part III] (台北場次) 提過這類的設計可有效讓我們掌握 user-mode 與 kernel-mode 的互動,得以在有限的環境下進行具體分析。
稍早在 blog [
新設備購入] 提過,我的實驗室今年重點會擺在 virtualization / Realtime verification、embedded device simulation,以及 automation 等項目,現在稍微有些成果。同樣在四月份 (Apr 14),我將會於 [
OSDC.tw - Open Source Developers' Conference in Taiwan] 研討會分享敝實驗室所開發、概念上類似 UML 的技術,但是針對 Embedded 的主題 [
RT nanokernel for Embedded Linux],也可一併參考。
由 jserv 發表於
05:50 PM
|
迴響 (0)
March 25, 2007
「深入淺出 Hello World Part I/II/III (台北場次)」簡報上線
週日去台灣科技大學作 [
深入淺出 Hello World Part III (台北場次)] 的演講。早上是作 Part I 與 Part II 的複習,而下午才是 Part III,簡報檔開放下載:
Part II 將 system call 的探索歷程概略提及後,Part III 就銜接以 User-Mode Linux 與 qemu 分析 "Hello World" 這樣的應用程式,運作於 Linux 系統時其 User-mode 與 Kernel-mode 的互動又是如何?我們著墨於程式載入、執行的流程,和追蹤系統呼叫。當然,這些還是基本功,但我們踏出「格物」的一大步,在 Part IV 中,會引入 qemu-system-i386 的進階功能,可更清楚的窺見這些微妙的變化。
另外,今天的喉嚨狀況實在頗糟,後來幾乎難以發聲,好可惜阿,難得這麼熱血,所以與會朋友的討論就只好說抱歉了,沒有太深入的回覆。簡報內容關於 virtualization 的部份未來會抽離出來,添增這幾年內重大的技術變革介紹,我想,不久的未來,開發模式也會因此改觀。
由 jserv 發表於
08:21 PM
|
迴響 (4)
March 24, 2007
多餘的話
天氣好轉了,但我卻感覺置身於又濕又冷的牆角,無精打采的苟活著。
不經意翻到以前寫的日記:
這幾周情緒一直很低落。
「忙、盲、茫」
- 忙:總是不知道在忙什麼,永遠趕著計畫的進度,每天難得清閒時,已經深夜,卻只完成一部分,還有太多必須 suspend
- 盲:有太多值得去注意的項目,但我卻視而不見,可悲
- 茫:真的不知道,這樣下去,是我要的生活嗎?我不配而且也沒資格過優渥的生活,不過我的確開始厭倦自虐了。
這樣的日記一直出現,只是轉換形貌罷了,頂多有時候如 [
在瓶中生活] 般,增添了些修辭。一言以蔽之,小貓說得真貼切:「都是沒意義的話」,也就是「多餘的話」,當閉上唇舌時自省:忝為社會蠹蟲二十餘載,到底做了什麼事,一點也無!記得小時在課堂耳聞教師批判楊朱的「拔一毛而利天下,不為也」是自私低下的,但《列子˙楊朱》篇不也說﹕「古之人損一毫利天下,不與也﹔悉天下奉一身,不取也。」,反觀諸己,無法利天下就算了,隨時都在損天下,每天製造了多少垃圾、消耗多少資源,對環境做了多大的衝擊而不自知?!楊朱所實行的全生理論,其實就是「避」的表現,受儒家教育影響,我們指責楊朱學說的退卻與縱欲,然而在《列子》以外的先秦著作,卻持以不同的觀點。作為「欲潔其身」的個人主義,其最高境界就是隱者,天涯浮芥如我者,不過只是個旦夕且死的芒草,不僅沒有價值,還是屈辱的存在,殊不知,連退卻的資格也無,只是個貪婪的蠹蟲,何德何能可指責楊朱呢?
與病魔奮戰了數日,稍微回復體力後,沒多久又感冒發燒與腸胃炎,前幾天又疲倦到在鍵盤上睡著,再度作惡夢。這次夢到拿銼刀對著腹部自殘,等刀柄轉到無法動彈時,內臟也自然流出,一陣又一陣失溫的感覺,痛楚漸漸淡去,我用著最後的力量站起,剎那間,我被砂石車輾斃。這大概就是廢物的下場,人人得而血刃之,於是我驚醒。
信箱中總有回覆不完的電子郵件、工作清單中總有複雜的待作事項,更別談瑣碎的俗務,沒資格抱怨,這是我對這個社會僅能做的一點事情,雖然是如此微不足道,而我仍持續在「損天下」,資質駑鈍者如我,要稍微減輕這等深重的罪孽,唯有持續不斷的工作才能償還。憶及陳之藩教授說過的一段話:
我屢次荒唐的,可笑又可憫的,
像唐吉訶德不甘心的提起他的矛,
我不甘心的提起我的筆來。
我想用自己的血肉痛苦地與寂寞的砂石相摩,
蚌的夢想是一團圓潤的回映八荒的珠光。
談談我所從事的這些計畫,可說挑戰體力與創造力的極限,雖然大部分仍陷入膠著,但都有個共通點,或多或少呈現了我的熱情與希冀,或許就如 Jeff Covey 在 [
How to write a great freshmeat submission] 一文所表示的:
"Right now, it prints 'Hello, world!', but someday, it will be an air traffic control system."
於是,我持著這天真的信念,逐一去設計與實踐,常常抱著倦怠的身軀、壓抑著胸痛,在孤寂的夜晚苦苦奮鬥。喜愛美國詩人 Emily Dickinson 的創作,她生前只出版不過十首詩,可說終其一生默默無聞,但亡後數十載後,因大量洗練凝且意象紛沓的詩作被奉為美國最偉大詩人。魏晉時代的嵇康,曾被同為竹林七賢的山濤薦舉為官,對此撰述《與山巨源絕交書》,表明不與司馬氏合作的高風亮節,後受誣告判死,臨刑前,彈奏了一曲絕響《廣陵散》,千百年後,依稀讓我們感受到餘音繞樑:那寬袍博帶仍風中飛揚,從容優雅的姿態睥睨著冤獄,並於曲終嘆道「廣陵散自此絕矣」,只是,真正斷絕者並非曲譜,而是勇者的傲骨。我缺乏才氣,但仍有基本的操守與堅持,只是用不同的方式去創作罷了,無法希盼何時得以彎腰收成,也許,永遠沒有親眼目睹的一日,而,我活著,得壓榨自己孱弱的身軀,得去全力實現那些計畫。
中共創黨領導人之一的瞿秋白遭國民黨槍斃、共產黨鞭屍前,寫下萬言書〈多餘的話〉,我想,在崩潰或被命運之輪吞噬前,也以此作標題。無論前程如何,既然踏入紅塵,就是我的命運了,是以螳螂檔車的姿態,對時代的巨變奮力一搏,即使瞬間被輾斃,也不足惜,至少這證明自身的存在,我,作為社會蠹蟲,全身投入以作反省與罪贖,灰燼被吹起,那是燃燒過的證據,無欲無求,只要我還能做下去...
由 jserv 發表於
06:11 PM
|
迴響 (9)
藝術與核心
以前修過一些通識課程,不能說沒有收穫,但現在只記得課程名稱,大概就是「藝術與人生」或「藝術導論」一類的,具體內容大概忘光了,然,這些訓練是否能讓工學院的學生,發揮藝術素養推廣到其他領域,值得商榷,但 Linux Kernel hackers 做到了。
前幾天在 IRC 上聊到 LKML (Linux Kernel Mailing-List) 有一份由 Rusty Russell 所提交的 patch:[
Use more gcc extensions in the Linux headers],實在令人讚嘆!在探討這個 patch 之前,稍早在 blog [
sizeof 在語言層面的陷阱] 提及 C/C++ 程式語言可透過 sizeof 運算子來取得陣列的元素個數,比方說 macro 定義:
#define getNumberInArray(a) \
(sizeof(a) / sizeof(a[0]))
想法很簡單,但充斥許多陷阱,首先 macro 根本不能作型態檢查,只是笨笨的代入,當然,能夠從事低階開發者應該不至於犯下這類會造成 pre-processor 無法正確運作的小錯誤。但這類名如 getNumberInArray 的 macro 總是讓人誤解,很直觀就可能把 char * 代入,而非正確的 char [],如此一來,造成的錯誤就相當嚴重 (實際計算一次就知道),在之前的 blog [
C-style 字串的最佳化] 即提過這兩者表示在本質上的落差。
回過來看 Rusty Russell 提交的 patch:
diff -r f0ff8138f993 include/linux/kernel.h
--- a/include/linux/kernel.h Fri Mar 09 16:40:25 2007 +1100
+++ b/include/linux/kernel.h Fri Mar 09 16:44:04 2007 +1100
@@ -35,7 +35,9 @@ extern const char linux_proc_banner[];
#define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1)
#define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask))
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \
+ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \
+ typeof(&arr[0]))]))*0)
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
看來我們一廂情願的簡單寫法被推翻,改為上述由三行組成的 macro 定義。寫個簡單的程式來看其運作的情況:
#include <stdio.h>
#define ARRAY_SIZE(arr) \
(sizeof(arr) / sizeof((arr)[0]) \
+ sizeof(typeof(int[1 - \
2*!!__builtin_types_compatible_p(typeof(arr), \
typeof(&arr[0]))]))*0)
int main()
{
char array[50];
char *ptr = NULL;
printf("array size of array = %d\n", ARRAY_SIZE(array));
printf("array size of ptr = %d\n", ARRAY_SIZE(ptr));
return 0;
}
我們特意把 char * 代入 ARRAY_SIZE 中,看看編譯器會怎麼處理::
$ gcc -o sizeof-new sizeof-new.c
sizeof-new.c: In function 'main':
sizeof-new.c:13: error: size of array 'type name' is negative
"typeof" 是 C99 提出的新運算子,簡單定義就是 "referring to the type of an expression",在 Linux kernel 中也做了相容舊編譯器的 macro,不過這不是本文的重點。第十三行就是 ARRAY_SIZE(ptr),編譯器阻止了 typeof 的操作,因為得到非正整數長度的陣列,也就是說,"1 - 2 * *!!__builtin_types_compatible_p(typeof(arr), typeof(&arr[0]))" 表示式運算結果為 -1。看到 "__builtin_" 開頭的函式就知道,一定又是 GCC extensions,而 __builtin_types_compatible_p 用以判斷一個變數的類型是否為某指定的類型,若是則回傳 1,反之傳回 0,詳情可參考 GCC 文件 [
Other built-in functions provided by GCC],以下節錄重點:
The type int[] and int[5] are compatible. On the other hand, int and char * are not compatible, even if the size of their types, on the particular architecture are the same. Also, the amount of pointer indirection is taken into account when determining similarity. Consequently, short * is not similar to short **. Furthermore, two types that are typedefed are considered compatible if their underlying types are compatible.
所以我們可透過這樣的機制來斷定 char * 與 char [] 的不相容型態,所以我們理解方括號 (也就是 "[" 與 "]" 所包圍的表示式) 中的奧義,那麼,為何最後要乘以零呢?考量到編譯器的語意分析,這個技巧可避免可能的編譯影響,又,__builtin_types_compatible_p 總是回傳 0 或 1,所以上述的 "!!" 事實上可忽略,"!!" 其實就是兩個 "!" (not) 運算子,這也是另一個技巧,想一想 !(! 100) 與 !(! -100) 的輸出就知道為何了,這可確保輸出必定是 0 或 1 二元結果。
因為這些組合實在頗為「花俏」,Linus Torvalds 就 [
回覆] 說:
Rusty, that's a work of art.
However, I would suggest that you never show it to anybody ever again. I'm sure that in fifty years, it will be worth much more. So please keep it tightly under wraps, to keep people from gouging their eyes out^W^W^W^W^W^W^W make a killing in the art market.
嗯,"that's a work of art.",多麼奇妙的藝術啊!我們上了一堂名為「藝術與核心」的課程 *笑*
喔,後面的討論也很有趣,除了中間考慮 Intel C/C++ compiler 的 [
相容性] 外,其他開發者還戲謔的加入 "GCC is awesome." 與 "GCC leaves me speechless." 一類的註解,Randy Dunlap 還正經的補充:
"awesome" can mean "inspiring awe or admiration or wonder" (amazing) or it can mean "awful" (as in terrifying). 8)
事實上,我們也可將上述 macro 改寫為:
#define ARRAY_SIZE(arr) \
(sizeof(arr) / sizeof(((typeof(arr)){})[0]))
簡單多了,先不看裡面的「魔法」(別盯著 "{" 與 "}" 猛看,是的,就是那樣),我們寫個小程式測試:
#include <stdio.h>
#define ARRAY_SIZE(arr) \
(sizeof(arr) / sizeof(((typeof(arr)){})[0]))
int main()
{
char array[50];
char *ptr = NULL;
printf("array size of array = %d\n", ARRAY_SIZE(array));
printf("array size of ptr = %d\n", ARRAY_SIZE(ptr));
return 0;
}
同樣也是拿來編譯,看看有什麼輸出:
$ gcc -c sizeof-new2.c
sizeof-new2.c: In function 'main':
sizeof-new2.c:10: error: empty scalar initializer
sizeof-new2.c:10: error: (near initialization for '(anonymous)')
一言以蔽之,這還是「魔法」,只是工程意味比較重,沒有上面的作法來得「藝術」,但都達到避免 pointer 代入 macro 的功能。作個簡化的程式,用以解說上面的作法:
#include <stdio.h>
int main()
{
char array[10];
printf("Magic=%d\n", sizeof((typeof(array)[10]) { "\0" }));
return 0;
}
編譯並執行:
$ gcc -Wall sizeof-new2.c
$ ./a.out
Magic=100
這裡用到一個 GCC extension,可直接作 assignment,當我們以 typeof 運算子取得該型態後,隨即建立 10 個單元的陣列,並賦予其初始值。事實上我們還可進一步簡化 '{ "\0" }' 為 "{}",然後將第二個 [10] 移去,就接近上述的表示法。分別以 char [] 與 char * 代入時,可發現 GCC 回報不同的訊息,前者可通過編譯 (符合 GCC extension),後者則有 "empty scalar initializer" 的錯誤。
當然,這只是冰山一角,Linux kernel 裡面尚有無窮盡的「藝術」,值得我們去探討。美學大師蔣勳曾說過:「美的本質是創造力」,我想這是 Linux 迷人之處,透過自由開放的發展,將創造力激發得淋漓盡致。
由 jserv 發表於
12:42 AM
|
迴響 (4)
March 12, 2007
演講:深入淺出 Hello World Part III (台北場次)
「深入淺出 Hello World」Part III 日前已經在台中舉辦過演講,三月底會在台科大再提供一場,歡迎有興趣的朋友前來指教。關於議程內容可參考 [
演講:深入淺出 Hello World Part III (台中場次)],時間為 2007年 3 月 25 日(星期日),地點於台灣科技大學-國際大樓 IB-401 室 (台北市基隆路 4 段 43 號)。
順道提一下,因為最近很久沒碰 x86 (致力於 ARMv5te),所以之前台中場次才會臨時改用 ARM 來探討 qemu 的系統模擬,這幾天會抽空複習一下 x86 硬體架構,所以應該不會有「離題」的情況了。如您有疑問可到論壇討論,詳見 [
三月份的 SA@Taipei],謝謝!
由 jserv 發表於
02:18 AM
|
迴響 (2)
March 03, 2007
ethtool 使用實例
最近在做某項 realtime 的研究,因為 NIC 本身的問題,停滯不前,不過我差點忘記,常用的這台 nc4000 就可分析內建網路卡的數據。先來看看硬體:
$ lspci | grep Ethernet
00:13.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5705M Gigabit Ethernet (rev 03)
在 Broadcom 的網站提供不錯的 Linux 指引,詳見 FAQ 條目 [
What are the Linux tg3, bnx2 and b44 drivers?],依據該對照表,我該用 tg3 kernel module (GPL),那麼這跟官方的 driver 相比,有什麼差別呢?FAQ 提到:
There are a few minor differences to be aware of if you are migrating from the bcm5700 driver to the tg3 driver. The tg3 driver does not support the Broadcom proprietary load balancing software module known as BASP. The Linux bonding driver and 802.1q driver provide similar functionalities and can be used with tg3. BASP will also be discontinued. The tg3 driver also does not support module parameters to configure the device (line speed, flow control, ring sizes, etc) but relies on standard Linux utilities such as ethtool. Other than these differences, the two drivers are very similar in terms of hardware support, robustness, and performance.
當然我現在得研究 GPL driver,而且 tg3 的效率很不錯。不過呢,後面的敘述讓我有點印象,記得三年前作 Thin client 時,硬體偵測的部份也有參考到 ethtool,而且 Debian 早已收錄 [
Package: ethtool],通常安裝好就會有該工具,以下是輸出項目:
$ sudo /usr/sbin/ethtool eth1
Settings for eth1:
Supported ports: [ MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 10Mb/s
Duplex: Half
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: g
Wake-on: d
Current message level: 0x000000ff (255)
Link detected: yes
可透過 git 取得最新的 ethtool:
git-clone git://git.kernel.org/pub/scm/network/ethtool/ethtool.git
manpage 提供詳細的使用方式,這裡就不贅述了。
由 jserv 發表於
10:37 PM
|
迴響 (0)
演講:深入淺出 Hello World Part III (台中場次)
「深入淺出 Hello World」Part III 延續去年的演講系列,將在三月份於台中、台北舉辦,感謝 StudyArea 工作人員大力協助,今年終於商借到台中一中的場地,沒想到睽違十年後,我又踏入母校了 :P
以下引述「SA@台中研討會」的新聞稿:
SA@台中研討會:SA@台中 2007/3 歡迎 Jserv 帶來的 「深入淺出 Hello World Part III」課程
新年快樂,小弟在這邊跟大家拜個晚年,祝大家身體健康,有著健康的身體才能繼續努力打拚。今年開春第一炮,將邀請到我們的 jserv 學長,來跟大家繼續去年他所逐步推出的「深入淺出 Hello World」系列,目前規劃有五集唷,而這次他將替各位帶來了一天的演講,上午十點開始,先幫各位快速的帶過已經在台北場講過的「深入淺出 Hello World Part I & II」部份,下午則是完整的「深入淺出 Hello World Part III」演講,希望各位參與的學員們,都能收穫滿載而歸。
大綱:
- 以 User-Mode-Linux 與 qemu 分析系統呼叫
- 探索 Linux Kernel 之 Program Loader
- User-space與Kernel-space的互動
- 效能與記憶體窺探
講師:Jim Huang (黃敬群 / "jserv"),熱血工讀生,閒暇時投入新酷音計畫、Free Java、GNU GCC、X Window System,以及相關自由軟體的開發工作。
講師特別交代之注意事項:
- 本議程基於知識共享之原則,提供 free training,但僅限於 x86 硬體平台,若有 ARM 與 MIPS 平台需求者,請進一步聯繫講者
- Part III 於台中與台北各有一場
- 事先提交問題,可優先解決與討論
- 歡迎招待當地名產,或廣結善緣
時間:2007年 3 月 10 日(星期六) 10:00 休息時間視現場決定 (注意:已更正)
地點:台中一中 科學館 地下室一樓 演講廳, 台中市北區育才街2號 (04)22226081
費用:0 -
報名網址: http://samc.study-area.org
地理位置/交通路線: 台中一中地圖,出台中火車站後往雙十路走就能到達台中一中。
我們將繼續以「實驗觀點」來探索 Linux 系統的內部運作,延續 Part II 對系統呼叫的認知,從 Part III 開始就直接解剖 Linux kernel 了,不過,這次不要你讀 source code,而是善用工具來觀察。關於本議程之細節或建議可在 [
論壇文章] 討論,期待您的指教,謝謝!
由 jserv 發表於
06:17 PM
|
迴響 (2)
Beyond GPLv3 by Georg Greve
前幾天發現網友在 HEMiDEMi 將本 blog 加了 "gpl" 的 tag,其實原本無意在 GNU GPL 議題著墨,但隨著工作類型越來越複雜,再來就是顧問工作也趨向多元 (迴避 GPL 與協助採證 GPL violation 都是業務範圍,不過基於職業道德,所以...),所以也慢慢變成服務的項目之一。之前做了些簡單的筆記:
相關的討論更是沒有看完的一天,那時候才會知道,中國老祖宗的俚語「一種米養百樣人」,更何況世界上還有一群不吃米的老外。
總之,我們還是參考 Free Software Foundation Europe 主席 Georg Greve (也是《Brave GNU World》系列刊物作者) 在 FOSDEM 2007 的演說 "Beyond GPLv3",建議先參考專訪 [
Interview: Georg Greve],這位學習過合氣道的老外,給予我們新的視野 (可從錄影看到有趣的比擬),可以從訪談中大致看出 [
GPLv3] 的時空背景,至於錄影可參考 [
FOSDEM Video Recordings]。原本的錄影檔是採用沒有專利限制的 OGG 壓縮格式,我轉成 DViX/MPEG4,並放到台大的伺服器,請見 [
FOSDEM2007-BeyondGPLv3.avi] (175 Mb)。 [按:光看檔案長度可見 patented 與 patent-free 技術的分野是很大的]
演講開頭引用了過去 DEC 與 IBM 高層對於電腦走入家庭的嗤之以鼻說詞,還有 DOS 時代著名的 640kb「天塹」,而當硬體不再是軟體發展限制時,我們面臨到新的挑戰:
在 [
GPLv3] 提供了相當多案例以茲參考,草案本身甚至被比喻為「地震」,可見其影響力之巨大,同時他認為 2006 年是個重要的一年,FSF(e) Freedom Task Force 與 [
GPLv3] 草案被提出,而 2007 年就是轉捩點,最後的 Q&A 時間也值得一看。
由 jserv 發表於
04:04 PM
|
迴響 (0)
March 01, 2007
文件與簡報整理
之前有個高中生來信,建議小弟的文件與簡報可以集中整理,這的確是很好的建言,不過儘管很早就留意凌亂不堪的分類,但還是缺乏動力去作。收到高中生的來信,會讓我想起我在那個年紀開始研究系統軟體與核心設計的往事,所以就用休假的空檔,稍微建立一個索引,放到 [
DebianWiki] 的 [
User:jserv] 頁面下。目前只提供部份文件與簡報的連結,未來應該會補上在 blog 的技術短文與翻譯文章,這些心得分享文件或在各研討會分享的簡報,皆允許自由散佈,不需事先會知,謝謝。
由 jserv 發表於
08:49 PM
|
迴響 (3)
一尾魚
有時候覺得作人實在太辛苦,或許這是因為上輩子罪孽未償,所以這輩子得如此度過,如果能暫時換個身份,或許就是最大的解脫。去年參加 [
TWDebCamp2006] 時,有幸在台東都蘭山遇見一位排灣族的長者,增長了許多見識。在那位長者的工作坊的桌上有個訪客簽到簿,上面有著一堆各式各樣的魚兒,於是我挑選了一個:

無法說出確切原因,看到這樣式時就有股衝動去「認領」,就這麼將中文名字與 "jserv" 字樣畫上,我想可能跟平常尖銳的言詞、突兀的舉止有關吧,另外就是不斷衝刺的感覺,至於化作魚身的我是否快樂呢?令人聯想起《莊子》中〈秋水〉篇,莊子與惠施進行經典的「濠上之辯」。不過,我終於決定讓自己休假一段時間,所以本週幾乎沒有 coding 與 thinking,充其量只有小量 reading,享受魚兒的生活吧。
由 jserv 發表於
02:27 AM
|
迴響 (0)