不知道我是不是第一個發明這樣搞的人,但這絕對是個有用的密技
在 C 語言裡面,處理程式的命令列參數,一直是很討厭的事情。
在 UNIX 類系統上,伴隨 GTK+ library 而來的 glib,很方便的提供了現成工具
GOption commandline parser
這在每一台 Linux 桌面的機器上都有,所以不用裝額外的 library
加上在寫 gtk+ 程式時本來就是直接用 glib 現成的工具比較方便
GOption 可以很方便的幫你把 argv 翻譯成各個變數的數值,大幅度簡化程式
不過,這樣方便的工具,還是有他的限制。
當你需要做 single instance 程式時 (我不知道正確的名稱,總之,就是讓
同一個程式多次啟動時,可以共用同一個 process,避免資源的浪費,
例如你打 firefox 指令,並且傳給他網址當參數,他會去找執行中的 firefox
process,然後把參數傳過去開新視窗,避免再重複執行另一個 firefox)
在這種情境下,GOption 變得不方便了,因為他無法處理由其他 process
傳過來的參數,只能處理 main() 裡面的 argv,而且只能處理一次。
第二次再傳給他另一個 argv,就會出問題了,所以無法用在這種用途。
這種設計上的缺陷,大大的限制了他的可用性。
於是,你有兩個選擇:
1. 不用 GOption,自己寫個函數來處理 argv 的參數,這樣從其他 process
透過 IPC 傳過來的參數,也可以用同樣方式處理。
2. 使用 GOption,但是在每個啟動的 process 都先用 GOption parse 過
把 argv 轉成你程式當中的變數,再透過你自己設計的方式,用 IPC
把這些變數傳遞給 single instance 的主 process
不管是哪一種,都很累,也很麻煩。
但是,透過 GKeyFile 的協助,第二種方式將變得簡單。以下是密技:
在 main 當中,先用 GOption 把 argv 翻譯成在程式內有意義的變數
然後,要透過 IPC 傳給主 process 之前,先把他寫成 INI 格式!
這樣一來,在主 process 收到的參數,就不再是一堆無意義的 argv
而是形同收到一個有 key/value pairs 的 ini 檔案。
這時候,透過 g_key_file_load_from_data 這個 glib 提供的 ini parser
可以很容易的,把收到的參數,轉回程式可了解的變數。
使用起來不但簡單,而且程式相當的可讀,乾淨。
比起實做自己的資料編碼/解析方式,透過 GKeyFile,以 ini 格式編碼
IPC 時傳輸的資料,要簡單的太多了,程式可讀性也會好很多。
因為是 UNIX socket 傳輸,而不是寫入 on disk 的 ini 檔
所以實際運作並不會有明顯的效能損傷,但會大幅簡化程式的設計。
適當使用手邊現有的工具,做讓人意想不到的結合,就可以創造出新的價值
以上是對很多人沒有任何用處的 PCMan 私房 GTK+ 密技,
亂無章法,隨手記下,也沒時間寫範例,但希望對看得懂的有緣人有幫助...
成立 PCMan Facebook 專頁
之前常被許多網友要求加 Facebook,但是數量過多難以管理,大部分也都不認識,無法一一加入,所以成立 PCMan FB 專頁。未來長篇的文章還是會放 Blog 上,而平常的小動態會放在 FB。
另外,現在也可以使用 http://blog.pcman.im/ 來連到本網站
另外,現在也可以使用 http://blog.pcman.im/ 來連到本網站
2008年6月17日 星期二
2008年6月15日 星期日
發現有趣的新軟體 - MyPaint
很有趣的新繪圖軟體,有 Linux 和 Windows 版本
http://mypaint.intilinux.com/
操作很簡單,有很多種有特色的筆刷
據說,有支援壓力感應的裝置,我沒有所以無法測試
對專業軟體來說,這很陽春,
但是以一個相當於小畫家等級的軟體來說,這個棒透了!
Screenshot: http://mypaint.intilinux.com/wp-content/uploads/2008/04/mypaint_sshot_v04.jpg
http://mypaint.intilinux.com/
操作很簡單,有很多種有特色的筆刷
據說,有支援壓力感應的裝置,我沒有所以無法測試
對專業軟體來說,這很陽春,
但是以一個相當於小畫家等級的軟體來說,這個棒透了!
Screenshot: http://mypaint.intilinux.com/wp-content/uploads/2008/04/mypaint_sshot_v04.jpg
2008年6月9日 星期一
EeePC 701 實測
今天我實測了手上這台 EeePC 701 的效能,以及電池
Asus EeePC 701 + 重灌 Debian lenny 系統,LXDE 桌面
CPU: Celeron 600 MHz, RAM: 512 MB, 原廠硬體設定,未改裝
用 EeePC 播放 xvid 影片,全速操 CPU
影片是從 DVD 直接用 mencoder rip 下來,
影片長度 1:50,480 x 320,檔案大小約 600 MB
影像用 lavc codec 壓縮 (壓縮率不詳),
音效用 lame mp3 壓縮 (br:128)
在充滿電的情況下,連續全螢幕播放,非常流暢沒有 lag
放完全片約兩小時,還剩下 30% 電力
我重開檔案,重新播放,又放了四十分鐘掉到 10%
出現低電量警示,為了避免損壞,我沒有硬撐到完全沒電為止
昨天我也實測過播放 rmvb 檔案
還外接到投影機 1024 x 768 全螢幕播放,
大致上也還算流暢,沒有明顯的延遲,和網路謠傳的並不一樣。
由此可知到,EeePC 701 的效能表現,在日常用途上
跟一般筆電無異,不但不會慢,而且還非常夠用
電力表現也不輸給一般在3萬到4萬元等級的筆電。
非常低階的硬體規格,相當於七八年前的老電腦
被很多網友批得一無是處,彷彿不升級硬體就完全不堪用
但實際測試的結果,卻相當讓人滿意。
我很好奇這些到處宣稱記憶體一定需要加到 2G 才夠,
CPU 一定要超頻到 900 還嫌慢的玩家,到底都做什麼用途?
在盲目的升級硬體前,不妨先實地測試過,了解自己的需求
而不是跟著網路上的謠言,胡亂的砸錢升級硬體。
像那樣胡亂升級,淘汰很多還很好用的硬體設備,
不過是在浪費錢,又製造更多污染而已。
Asus EeePC 701 + 重灌 Debian lenny 系統,LXDE 桌面
CPU: Celeron 600 MHz, RAM: 512 MB, 原廠硬體設定,未改裝
用 EeePC 播放 xvid 影片,全速操 CPU
影片是從 DVD 直接用 mencoder rip 下來,
影片長度 1:50,480 x 320,檔案大小約 600 MB
影像用 lavc codec 壓縮 (壓縮率不詳),
音效用 lame mp3 壓縮 (br:128)
在充滿電的情況下,連續全螢幕播放,非常流暢沒有 lag
放完全片約兩小時,還剩下 30% 電力
我重開檔案,重新播放,又放了四十分鐘掉到 10%
出現低電量警示,為了避免損壞,我沒有硬撐到完全沒電為止
昨天我也實測過播放 rmvb 檔案
還外接到投影機 1024 x 768 全螢幕播放,
大致上也還算流暢,沒有明顯的延遲,和網路謠傳的並不一樣。
由此可知到,EeePC 701 的效能表現,在日常用途上
跟一般筆電無異,不但不會慢,而且還非常夠用
電力表現也不輸給一般在3萬到4萬元等級的筆電。
非常低階的硬體規格,相當於七八年前的老電腦
被很多網友批得一無是處,彷彿不升級硬體就完全不堪用
但實際測試的結果,卻相當讓人滿意。
我很好奇這些到處宣稱記憶體一定需要加到 2G 才夠,
CPU 一定要超頻到 900 還嫌慢的玩家,到底都做什麼用途?
在盲目的升級硬體前,不妨先實地測試過,了解自己的需求
而不是跟著網路上的謠言,胡亂的砸錢升級硬體。
像那樣胡亂升級,淘汰很多還很好用的硬體設備,
不過是在浪費錢,又製造更多污染而已。
2008年5月20日 星期二
rdate & ntp servers
大家都聽說過用 ntpdate 或 rdate 指令,可以幫 UNIX 系統進行網路校時
不過,ntp server 到處都有,國內也很多,rdate server 卻非常的難找
在某些受到封鎖的網路環境下,可能會無法使用 ntpdate
這時候比較不精確的 rdate 就派上用場了
紀錄一下 Andrew 幫忙找到的 rdate servers:
stdtime.gov.hk
clock.psu.edu
ntp0.cornell.edu
salmon.maths.tcd.ie
原始資料來源:
http://pank.org/blog/2004/08/time-server-list.html
不過,ntp server 到處都有,國內也很多,rdate server 卻非常的難找
在某些受到封鎖的網路環境下,可能會無法使用 ntpdate
這時候比較不精確的 rdate 就派上用場了
紀錄一下 Andrew 幫忙找到的 rdate servers:
stdtime.gov.hk
clock.psu.edu
ntp0.cornell.edu
salmon.maths.tcd.ie
原始資料來源:
http://pank.org/blog/2004/08/time-server-list.html
2008年5月14日 星期三
[紀錄] 5/9 再度應邀,展示 LXDE on EeePC
最近的生活,是不折不扣的不務正業...
上次在華碩總公司展示過我們開發的 LXDE 桌面環境 (http://lxde.org/) 之後,
這次又受邀參加 EeePC Developer Day
(http://seminar.oss.org.tw/eeepc970508-en.html)
主題當然又是展示我們的開發成果,加上一些上次回去後特別做的調校
和這個活動相關的紀錄,可以參考tad 的 blog
http://blog.yam.com/tad0616/article/15107543
(下面用到的照片,全部都是引用自 tad 的 blog)
5/9 號是上班日,所以必須要請事假。
當天早上早早起來 (其實是沒睡,前一晚都在修理我的 EeePC)
馬上衝到行政單位去辦理請假手續,接著拿到單位找人蓋章
弄一弄,到九點,好不容易終於可以從台中出發,馬上趕往高鐵站
本來是可以搭接駁車的,但是要等又很趕因為是 9: 30 的票,
而且反正有人出車錢,我於是... 搭上了小黃,還交代司機開快點。
最後順利在 9: 20 進入高鐵月台,鬆了一口氣。
第一次搭乘高鐵,舒適度還不差,服務也不錯,但速度沒有我預期的快
到台中烏日高鐵站 20 min,等待 10 min,搭車到台北 1 hr,
如果搭乘客運,騎機車到朝馬不到 10 min,等車也很快,行車也 1:40
只快了不到半小時,票價差了 4 ~ 5 倍,實在沒有覺得好多少
但好處是非常舒適,所以我終於在累了一個晚上沒休息後,
可以在高鐵上休息一下,順便「開始」為等一下的演講打草稿
以前是都不用打草稿的可以臨場即興,但這次有點太累,
腦筋有點不靈光,所以只好在高鐵上先想好,做了點小抄...
從台北車站下車後,馬上又上了小黃,直奔會場,偏偏遇到塞車....orz
但最後還是在 10:55 分抵達民生科技服務大樓會場,趕上了我在 11:00 的展示

(照片經作者同意,引用自 tad 的 blog)
不料... 因為現場活動有延誤,加上我的搭檔還沒到,所以賺到了休息時間
從 tad 的照片上可以看到,會場果然充滿了阿宅工程師...

然後,11:20 中場休息,我們就開始準備

接著,在其他團隊成員的協助下,我做了一些 LXDE 的 live demo
其中一項是放了三張簡介專案的投影片

可以發現,用來對照的華碩 Xandros 系統,光是起動檔案總管就要將近 20 秒
更不要說找到簡報檔然後播放了,那樣的使用經驗只能用「非常痛苦」來形容
我們的,當然是一秒起動。在未經過改裝的低階 EeePC 701 硬體上照樣順暢!
誇大的廣告詞,我想我就不用寫太多了,有試用過的人就會知道。
結論:賀 5/9 演說大成功 + 這又是一篇沒營養的流水帳...
上次在華碩總公司展示過我們開發的 LXDE 桌面環境 (http://lxde.org/) 之後,
這次又受邀參加 EeePC Developer Day
(http://seminar.oss.org.tw/eeepc970508-en.html)
主題當然又是展示我們的開發成果,加上一些上次回去後特別做的調校
和這個活動相關的紀錄,可以參考tad 的 blog
http://blog.yam.com/tad0616/article/15107543
(下面用到的照片,全部都是引用自 tad 的 blog)
5/9 號是上班日,所以必須要請事假。
當天早上早早起來 (其實是沒睡,前一晚都在修理我的 EeePC)
馬上衝到行政單位去辦理請假手續,接著拿到單位找人蓋章
弄一弄,到九點,好不容易終於可以從台中出發,馬上趕往高鐵站
本來是可以搭接駁車的,但是要等又很趕因為是 9: 30 的票,
而且反正有人出車錢,我於是... 搭上了小黃,還交代司機開快點。
最後順利在 9: 20 進入高鐵月台,鬆了一口氣。
第一次搭乘高鐵,舒適度還不差,服務也不錯,但速度沒有我預期的快
到台中烏日高鐵站 20 min,等待 10 min,搭車到台北 1 hr,
如果搭乘客運,騎機車到朝馬不到 10 min,等車也很快,行車也 1:40
只快了不到半小時,票價差了 4 ~ 5 倍,實在沒有覺得好多少
但好處是非常舒適,所以我終於在累了一個晚上沒休息後,
可以在高鐵上休息一下,順便「開始」為等一下的演講打草稿
以前是都不用打草稿的可以臨場即興,但這次有點太累,
腦筋有點不靈光,所以只好在高鐵上先想好,做了點小抄...
從台北車站下車後,馬上又上了小黃,直奔會場,偏偏遇到塞車....orz
但最後還是在 10:55 分抵達民生科技服務大樓會場,趕上了我在 11:00 的展示
(照片經作者同意,引用自 tad 的 blog)
不料... 因為現場活動有延誤,加上我的搭檔還沒到,所以賺到了休息時間
從 tad 的照片上可以看到,會場果然充滿了阿宅工程師...
然後,11:20 中場休息,我們就開始準備
接著,在其他團隊成員的協助下,我做了一些 LXDE 的 live demo
其中一項是放了三張簡介專案的投影片
可以發現,用來對照的華碩 Xandros 系統,光是起動檔案總管就要將近 20 秒
更不要說找到簡報檔然後播放了,那樣的使用經驗只能用「非常痛苦」來形容
我們的,當然是一秒起動。在未經過改裝的低階 EeePC 701 硬體上照樣順暢!
誇大的廣告詞,我想我就不用寫太多了,有試用過的人就會知道。
結論:賀 5/9 演說大成功 + 這又是一篇沒營養的流水帳...
2008年5月3日 星期六
修理 blog 系統
網路上有些人真的很無聊,仗著自己技術好破壞別人的網站
之前想說隨便做個簡單的 CAPTCHA,反正這種小站沒人在上
沒想到被外國駭客輕鬆破解,用機器人程式把我的blog灌爆
今天只好找了一些資料,小改了一下我的 blog 系統
把防灌水的圖片辨識做了一些強化,希望會有效。
把之前的垃圾留言一次清乾淨之後清爽多了
希望這次新改的程式,可以撐久一點啊。
可惡...就不要逼我在防灌水圖片裡面顯示中文,
看你們這些老外怎麼用程式破解!
修好我的 blog 系統之後,我終於又可以繼續寫 blog 了 :-)
之前本來有不少東西想寫,都因為 blog 系統故障而打住
有時候想想,幹嘛要活得這麼累呢?我會不會太無聊了一點...
到處都有免費的 blog 可以申請,就算要自己架站
隨便找,也都有別人寫好的費高品質程式可以用
偏偏我就是堅持,要寫 blog,就要用自己開發的 blog 系統
結果我的丁丁網頁系統,最後還是因為時間不夠沒有寫完
寫一半的相簿部份就一直丟在那裡,剩下 blog 和留言板能用
留言板還沒寫完咧... Orz
我說...寫網頁程式還真難啊....
之前想說隨便做個簡單的 CAPTCHA,反正這種小站沒人在上
沒想到被外國駭客輕鬆破解,用機器人程式把我的blog灌爆
今天只好找了一些資料,小改了一下我的 blog 系統
把防灌水的圖片辨識做了一些強化,希望會有效。
把之前的垃圾留言一次清乾淨之後清爽多了
希望這次新改的程式,可以撐久一點啊。
可惡...就不要逼我在防灌水圖片裡面顯示中文,
看你們這些老外怎麼用程式破解!
修好我的 blog 系統之後,我終於又可以繼續寫 blog 了 :-)
之前本來有不少東西想寫,都因為 blog 系統故障而打住
有時候想想,幹嘛要活得這麼累呢?我會不會太無聊了一點...
到處都有免費的 blog 可以申請,就算要自己架站
隨便找,也都有別人寫好的費高品質程式可以用
偏偏我就是堅持,要寫 blog,就要用自己開發的 blog 系統
結果我的丁丁網頁系統,最後還是因為時間不夠沒有寫完
寫一半的相簿部份就一直丟在那裡,剩下 blog 和留言板能用
留言板還沒寫完咧... Orz
我說...寫網頁程式還真難啊....
[KUSO] PCMan 語錄 - 程式設計師生存法則
PCMan 惡搞語錄 - 懶惰程式設計師生存法則
每個程式難免會有 bug,難免會有小故障,但是...
只要還能動,就絕對不修理 <--- programmer 生存守則 1
如果不能動,就絕對不承認 <--- programmer 生存守則 2
如果老闆叫你修,你就崩潰給他看 <--- programmer 最終奧義
如果真的不得已要修,那就修改版本號,在後面加註 Beta <--- 隱藏密技大絕招
崩潰了崩潰了.....一堆 bug 修不完,不想寫程式了啊,怒!
這時候就很慶幸我不是幹這行的...好險好險...
每個程式難免會有 bug,難免會有小故障,但是...
只要還能動,就絕對不修理 <--- programmer 生存守則 1
如果不能動,就絕對不承認 <--- programmer 生存守則 2
如果老闆叫你修,你就崩潰給他看 <--- programmer 最終奧義
如果真的不得已要修,那就修改版本號,在後面加註 Beta <--- 隱藏密技大絕招
崩潰了崩潰了.....一堆 bug 修不完,不想寫程式了啊,怒!
這時候就很慶幸我不是幹這行的...好險好險...
訂閱:
文章 (Atom)