發表文章

LXDE 的舊金山之旅,參加 LinuxWorld Expo 2008 - Part 3

圖片
今天是 LinuxWorld 展覽的最後一天,人潮明顯變少許多,大多數的 Booth 便在這時到處交流呀!換 T-Shirt 或到處換名片、聊天、拿糖果是今天常見的場景。而且今天有免費的 Beer 無限量供應,有人喝得不亦樂乎。 幾張熟悉的背影,明眼人猜得出來是誰嗎? 老是看 LXDE 也覺得無聊,也到處走走逛逛拍的一些照片。 今天的 Debian Booth 更誇張,桌子椅子直接被拖走,被隔壁的 Joomla 罷佔! 最後大家都在到處合照,是很有趣的場景。:) 這次活動,用破爛的英文介紹 LXDE,練成了一點用英文胡說八道的功夫,希望外國朋友聽得懂我在講什麼呀!如果明年有機會,希望還可以再來!就如會場上的標語 See You Next Year!

LXDE 的舊金山之旅,參加 LinuxWorld Expo 2008 - Part 2

圖片
今天是 LinuxWorld 的第二天,依然人潮不斷呀! LXDE Project 的各位依然努力解說!不少做硬體的廠商和 LinuWorld 的 Speaker 都很有興趣,也有很多教授和外國朋友都說他們知道 LXDE,看來我們還有點小名氣。〔可惡!不知道為什麼我照出來的照片一直有矇朧美 :(〕 話說,這次的 Debian Booth 被 FreeBSD 攻陷了,因為 Debian 的人都去 DebConf ,所以只在 Booth 的桌子上貼了一張紙條: 然後慘被 FreeBSD 催殘呀!被掛上耳朵、桌上放上 DM 和光碟片,慘不人賭。 還有照了很多相,慢慢再來整理吧!

LXDE 的舊金山之旅,參加 LinuxWorld Expo 2008

圖片
世界級且每年一度的 Linux 盛會『LinuxWorld』在舊金山如期舉行,非常高興的是,這次 LXDE Project 的受到 Asus 和 gOS 的贊助,飛到了美國參加這大型的展覽,這真是台灣的小小專案從台灣踏出國際化的一大步。而且 LXDE 在這次的會場中,也有一個小小的 Booth,Mario、Glen、Andrew 以及 CW 都在攤位為好奇的人和廠商解說,但我大部份時間都在到處逛看美女拿贈品,慚愧 :-(。不過總體來說,外國人似乎比我們更重視這個專案呀! 除了 LXDE booth 之外,我也在 gOS 閒晃幫忙,因為 gOS 現在正在慢慢導入 LXDE。可是,因為我不會談他們 business 的東西,只好常常偷跑出去逛。gOS 隔壁就是 OpenMoko booth,也看到了從台北公司來的美女呀! 值得高興的是,今天是來美國後,第一天吃到沒有起士和蕃茄醬的東西,下午偷溜出會場和 Andrew、CW 到處找日本菜!Andrew 一直到處問長的像日本人的女生,好不容易才找到!〔聽說他們前一天還吃韓國烤肉,可惡!〕 展覽正式開始才第一天,繼續加油吧!

Windows 好而 Linux 下不好的地方

活在 Linux 世界,若這樣大力稱讚 Windows ,應該會招來不少毒舌批評。但仍然不可抹滅的是, Windows 在許多地方的確比 Linux 優良,很多不是技術比較的問題,而是歷史演變所造成的既定結果。 相信許多人正在忙著解決 Linux 上,程式視窗太大而超出螢幕的問題。尤於低價電腦的風行,讓螢幕出現了許多不可思議的規格,如 800x480、1024x600 等等。所有的規格硬是比標準的短了點,因此造成許多原本在 800x600、1024x768 下運作正常的程式,都有視窗太大的問題。除了一些 GNOME 設定程式有此類問題之外,其中最嚴重的大概就是 evolution 的對話框。 Microsoft Windows 看起來就沒有這樣的問題,每一個對話框都好好的待在螢幕範圍內,絲毫未超出去。雖然無法保證所有軟體都正常,但至少 Microsoft 自家的程式都是沒問題的,令人不得不去誇讚一下,尤其在改完這麼多 Linux 下軟體的視窗大小之後呀。仔細想想,難道是 Windows 比較聰明?技術比較高超?為什麼可以在事先就想好這問題並避免掉它? 有一個很重要的原因,是因為所有的廠商,都是以 Windows 當基準來設計硬體,當然可以確保 Windows 是正常,而且不會有這種明顯的 Bug 存在。另一方面,是 Windows 打從娘胎起,就是針對 640x480 去設計所有的對話視窗,不僅 Win95 如此,Win98、WinME、WinXP等等皆是如此。當解析度調成 640x480 後,我們可以發現,還是可以正常使用 Windows 的所有功能。 對於不斷追求『效果』和『類 Mac』的 Linux ,可從來就沒想過這問題,大螢幕用慣了,都被寵壞了。一直到了現在,才發現有這樣的問題,不過也好,讓我這種不學無術的人有賺小錢活命的機會呀。 :-)

砍掉重練的 Bootchart

圖片
談到調校開機速度,就不免會提到運用『 Bootchart 』來分析開機狀況,這是一個將開機時的 CPU、IO、Process 等資訊畫成一張圖表的工具,在『 Bootchart 』的網站上就可以找到很多 Sample。其實,『 Bootchart 』的原理是利用一個在背景跑的 Daemon,每隔一段時間就取樣 CPU、IO 等系統資訊,等到開機完畢後,再將這些資訊畫成圖表。 在多數的電腦硬體中,Bootchart 都是可以正常運作的,可是在一些 Embedded System 下就會碰到不少麻煩,在『 elinux.org - Bootchart 』的 presentation 就有提到這一類的議題。其問題出在於取樣的 Daemon 是使用 shell script 所撰寫,不管是 sleep 等待下一次取樣、用 cat 讀取系統資訊或是使用 pidof 取得結束的 process,都會因為產生過多的 process 而造成可怕的系統資源消耗,其情況大致如圖: 在一些資源不多的 Embedded System 中,bootchart 會因為產生太多的 process 和 open IO,造成系統負荷過高,完全無法測得正確的開機狀況。所以,就有一些 clone 的專案,使用 C 語言將 bootchart 裡的 bootchartd 整個重新寫過一遍,『 ubootchart 』和『 Bootchart-lite 』就是因此而產生的專案。 這是利用『 Bootchart-lite 』在 OpenMoko Freerunner 上取樣並畫出來的圖表,因此發現其開機過程相當得可怕。 :P

Lilyterm 大躍進

前陣子提到各家 Terminal 和 VTE 的許多『 問題和缺點 』,其中提到,一個減少 VTE 用量的有效方法就是『多視窗共用 Process』。在當時,已知 gnome-terminal 、xfce4-terminal 和 Roxterm 等幾家 Terminal 有支援,而隨後 LXTerminal 也實作了出來該機制。方才瀏覽書籤,發現新版的『 Lilyterm 0.9.4 』也實作出來了,在作者『 Tetralet 』的 blog 上提到。 另一項重點值得一提:在之前,大多數有同樣機制的 Terminal ,都是使用 D-bus 來達成 options 的傳送,這意味它們就必須要多一個 dependency ,而且在某些情況下, D-bus Launch 也會有一些額外的資源消耗〔太雞蛋裡挑骨頭啦!〕。所以,原生的 Unix Socket 是一個很好的替代方案,由於 Terminal 本來也並不太需要用到 D-bus 的特色,如此省下豈不樂哉。 :D 不過,目前在眾家 Terminal 之中,只有 Lilyterm 和 LXTerminal 鑽牛角尖,使用 Unix Socket。有興趣的人,或許可以參閱 source code。

張張沒特色,張張沒新奇

圖片
過去的鼠繪日子偷懶,連用 Photoshop 畫圖都模組化,畫給 MSN 用人物小圖裡,一張臉孔換髮型再加點料,就可以變成男、變成女,亦或變成各種心情。雖然張張平平無奇,但曾陪伴我在掛 MSN 的一些日子。 要是有是有人不嫌棄,就隨便拿去用好了,沒有任何使用限制條件。 :-)

使用 C 語言實作查表法取代 switch

就階層面來看, C 語言是個不高不低的語言,造成許多語法其實都可以有其他不凡的實作方式。尤其是一個看似基本且常用的方法,其實可能大量的暗藏玄機,值得我們惡搞。而對多數人來說,有一個一定不陌生的語法『 switch 』就相當有趣。在某些情況下,是否能利用『查表法』取代 switch,得到程式效能上的提升?此議題相當具有可探討性。 這是一個簡單使用 switch 語法的例子(switch_sample.c): #include <stdio.h> int main(int argc, char** argv) { int i; if (argc<2) return 1; i = atoi(argv[1]); switch(i) { case 0: printf("Hello! Mr. Zero\n"); break; case 1: printf("Hello! Mr. One\n"); break; } return 0; } 編譯: # gcc -o switch_sample switch_sample.c 實際執行: # ./switch_sample 0 Hello! Mr. Zero # ./switch_sample 1 Hello! Mr. One 仔細觀察該程式的內部運作,發現 switch 語法在編譯後實際執行時,是使用一連串的『比對』、『判斷』和『跳越』動作來達成任務,其實相當耗 CPU 的執行時間和寶貴的運算資源,若是 switch 的『設計龐大』,對 CPU 來說也是個相當可觀的負擔,尤其在許多 Embedded System 上會特別有明顯的影響。 由於 switch 的 CPU 時間消耗驚人,利用查表法來減少些比對判斷或許是個可行的方法。一般來說的查表法,是因為我們的資料需要『大量的運算』才能產生,所以『事先』計算好並建成一個數據表放在程式內部,以便程式在『真正執行』時直接快速提取其結果使用,而不必當場計算所需要的數據。又因查表的過程中,是直接對某個 pointer+N 去做存取資料,所以速度極...

輪子不停重新打造,但我依然原地踏步

轉眼間 2008 年過了一半,時間流逝之快已不必再用言語形容,回想這十多年,自己從小毛頭長高長大到現在,到底有什麼不同了? 還記得 1996 年的某個晚上,手拿著一張磁碟片,憑著一條 64K 的專線,靠著爛到不行的英文能力,一一下載 img 和 tgz 檔,跌跌撞撞的裝著 Slackware Linux 4.0。辛苦到了天亮,終於在下 startx 指令的那一刻,看到滿是 X 符號的畫面,當時心情是多麼興奮。沒想到,一個一點用處的沒有的系統,也能讓人滿是成就感。 我不會寫程式,頂多在 Windows95 下用 VB 拉過幾個像是程式的東西,最多是會寫一點 HTML/JavaScript 及簡單的 DOS 批次檔。當時的我,完全不知道自己可以做些什麼,只會傻傻的看著螢幕上跟著滑鼠跑的小眼睛傻傻的笑,並崇拜著寫這個程式的作者。〔一個小學生的盲目崇拜〕 也忘了是相隔多久,因『偷聽』一些 ISP 的工作人員對話知道了 FreeBSD 的存在,在泡書店時找到了一本 FreeBSD 2.x 的書〔如果沒記錯,應該是黃綠色,作者我已不記得,但前陣子好像有聽人提起過〕。不過嚴格來講,這不能稱作是書,因為實在是沒幾頁,但安裝步驟清楚且詳細,讓我不費吹灰之力就把 FreeBSD 裝起來了。在過程中,很能夠感受到這本書裡所下過的功夫,以及作者的熱情。 或許是當時國內情勢的關係,開放原始碼這時開始快速浮上檯面,陸續有許多的人用『全身上下的熱情』去擁抱,實在好不熱鬧。一股莫明的感動,從為 Linux 中文化而誕生的 CLE、印象深刻的 OLS3 和 perl 的一切,到許多早期活躍於網路上的前輩們身上散發出來,使我至今仍無法忘記。還記得,當時的零用錢,近乎全數放在購買這些 Linux/FreeBSD 相關書籍上,因為這是我唯一得到參與感的方法。 時過境遷,一切卻等不到我學會寫程式。多年前,憑著剛習得的一招半式,在某個論壇提議用新架構,寫一些新的程式,卻被回覆:『這是開放原始碼的世界,不滿意改一改就好。』,那人又道:『有這麼多軟體可以選,何必重新造輪子?況且重新寫不一定比較好。』一席話衝擊並打消了我不少念頭。長久來的憧景和滿腹熱血,頓時消失得無影無蹤。 我好想,好想和當初的前輩們一同 Hacking,好想像當初的人們一同分享熱情,好想和大家一起往前開拓道路,好想,真的好想,可惜的是,我沒有機會...

一年一度的 COSCUP 又夠來囉

你的軟體用起來有問題?請打技術支援電話,由客服人員為你服務,他或許已經儘其所能,但 未必能解決你的問題。如果問題是軟體的臭蟲,你只好痴痴地等待不知幾年後才開賣的下一版 。而你當初之所以選用A軟體而不是B軟體,常常是聽信銷售員(sales)的一面之詞或同儕 的推薦。在這個行為模式下,users 面對的是銷售員和客服,coders 面對的還是銷售員和客服 ,users 遇到的問題要間接地才能反應到 coders 手上,中間還可能會被過濾掉。 破除過往的迷思和痛苦,Open Source 帶來了全新的契機,所以在網路發達的今天獲得許多人的支持。在這不一樣的世界中,歡喜用的使用者,可以和歡喜做的開發者直接互動,可以更準確、快速的將問題和解決方式公開通報,並可以最快速度得到許多軟體開發者和有心人的反應和幫助。如此不一樣的軟體使用生態,令軟體不斷累積自身的價值,也造福了廣大的資訊科技使用者。 :-) 當然,除了從網路上交流,親自出來面對面接觸也是非常有意義的。在台灣一年一度的『 COSCUP 2008 開源人年會 』盛會,就讓樂於擁抱 Open Source 的人能共同來參與相聚。此活動將於『2008/8/23 (六) - 24 (日)』舉行,地點在『台灣大學 應用力學研究所 國際會議廳』,附有茶點,歡迎各界參加。

用 C 語言實作矩陣運算的 Function

業界上常用的 Matlab 軟體,因為本身就是為了做數學運算而設計,所以在數值分析和處理方面非常快速好用,但是在 C 語言就中沒有那些好用的指令和數學函式庫了,得自己打造所有的運算流程和架構。舉例來說,使用 C 語言來做矩陣運算,程式開發者都是先『指定行列數量』建立一個陣列,再『指定行列數量』去對內部的值,一一做處理或高斯消去解方程式,這比起 Matlab 中用兩行就可以搞定一切運算,可說易用性相差甚遠。 所以就想到,要是我們能設計出一套好用的 C 語言矩陣函式庫,是否就可以省下這些重覆設計矩陣運算流程的時間?於是可以做一些實作,來完成這個任務。 基本的矩陣資料結構: typedef struct { int rows; int cols; int total; double *table; } Matrix; 其中定義了幾個基本的 functions 做矩陣的處理: 建立矩陣: Matrix *matrix_create(int rows, int cols) 矩陣最佳化: Matrix *matrix_optimize(Matrix *matrix) 解矩陣的方程式: Matrix *matrix_solution(Matrix *matrix) 顯示並列出矩陣內容: void matrix_print(Matrix *matrix) 清空矩陣: void matrix_clear(Matrix *matrix) 函式的程式碼: void matrix_clear(Matrix *matrix) { int i, j; double *ptr; /* initializing matrix */ ptr = matrix->table; for (i=0;i<matrix->total;i++) *(ptr++) = 0; } Matrix *matrix_create(int rows, int cols) { Matrix *matrix; /* allocate */ matrix = (Matrix *)malloc(sizeof(Matrix)); matrix->rows = rows; matrix->cols = col...

判別WEP的ASCII與Hex型態之密碼

這是之前的一小則心得小記,一直記錄在桌面便條紙上,整理了一下。WEP 的密碼長度分為 40bits 和 104bits ,若是換成 byte 單位是 5bytes 和 13bytes,也就是 5 或 13 個 ASCII 字元。在 Linux 上,我們可以用 iwconfig 來設定 WEP 的 ASCII 密碼: 40bits 用 ASCII 表示: iwconfig wifi0 key "s:12345" 104bits 用 ASCII 表示: iwconfig wifi0 key "s:1234567890abc" 不過有些時候,WEP 會用十六進位表示密碼,因為每個字元由兩位十六進位碼表示,所以我們可以看到很長的密碼,用 iwconfig 來設定的話像這樣: 40bits 用 16 進位表示: iwconfig wifi0 key "AABBCCDDEE" 104bits 用 16 進位表示: iwconfig wifi0 key "AABBCCDDEEFF11223344556677" 由此可見,在一般情況下,只有在 5 和 13 個字元時會用 ASCII 表示,而其它字數時都是 16 進位型態,所以若是我們寫一個程式,判別用戶所輸入的 WEP 密碼型態,就可以用這種規則去識別。