成立 PCMan Facebook 專頁

之前常被許多網友要求加 Facebook,但是數量過多難以管理,大部分也都不認識,無法一一加入,所以成立 PCMan FB 專頁。未來長篇的文章還是會放 Blog 上,而平常的小動態會放在 FB。
另外,現在也可以使用 http://blog.pcman.im/ 來連到本網站
顯示具有 電腦資訊 標籤的文章。 顯示所有文章
顯示具有 電腦資訊 標籤的文章。 顯示所有文章

2016年12月17日 星期六

PIME 輸入法 v0.16.1 釋出,穩定性改善

PIME 輸入法 v0.16.1 釋出,穩定性改善不少,敬請下載升級。
下載: https://github.com/EasyIME/PIME/releases/
為了改善 PIME 穩定性問題,我開發了自動化測試工具,針對新酷音,用程式自動測試大量切換視窗,切換中英文模式,開關輸入法,以及選字 (見影片)。本次釋出前已通過 5000 詞彙的自動輸入測試,目前沒有發生當機情形。


主要修正項目如下:
  1. 部份修正打字經常無故失效問題
  2. 修正記憶體錯誤造成當機
  3. 修正 windows 7 登出會有錯誤訊息
  4. 改進新酷音詞庫編輯程式 (感謝 ottokang ottokang@gmail.com)
  5. 修正新酷音中英文狀態顯示錯誤
關於防毒軟體的聲明:
  • "本程式不含惡意軟體",有完整程式碼供檢閱證明。
  • 作為輸入法,本來就必須攔截使用者鍵盤輸入,再加上後端使用網路技術開發,又沒有憑證簽章,可能被防毒誤判為惡意側錄使用者輸入而阻擋,請手動排除。
  • 做應用程式簽章可減低誤判機率,但購買簽章每年約需台幣 6000 元,非無捐款的免費專案可負擔。若有企業願贊助簽章,歡迎聯絡。

2015年8月15日 星期六

8/15 COSCUP 演講 - 用 "Python" 快速開發 Windows 的中文輸入法 (會後資料釋出)

今天早上在 COSCUP 2015 大會演講圓滿結束 :)
據朋友轉述,門外像是演唱會在排隊一樣排了兩圈
這麼無聊的題目,真感謝大家捧場 XD


專案的程式碼網址在:
https://github.com/EasyIME/PIME

這裡有編譯好可以直接下載安裝試驗的版本 (使用前需先安裝 python 3 和 python 的 pywin32 套件):
https://github.com/EasyIME/PIME/releases/download/v0.01/PIME-git-setup.exe

注意:目前安裝好後 python server 並不會自動啟動,所以無法打字,需要自己手動執行 server.py 才能進行測試

歡迎有興趣研究的朋友一起參與
之後會找時間包安裝程式釋出方便試用和測試

以下是這次 presentation 的投影片

PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)

程式的雛型都可以正常運作了,但目前文件還比較缺乏
有興趣有空的朋友也歡迎幫忙撰寫
Patches are welcomed!

2015年7月31日 星期五

8/15 COSCUP 演講 - 用 "Python" 快速開發 Windows 的中文輸入法

今年 8/15 將在 COSCUP 開放原始碼 2015 年會發表新專案
這次的題目是:PIME - 用 "Python" 快速開發 Windows 的中文輸入法


是的,你沒有看錯,真的是用 Python! 而且這能跑在 Windows 下。開源的中文輸入法框架,在Linux下選擇很多樣化,也已蓬勃發展多年,但在Windows 上則相對缺乏,尤其是 Windows 8 之後,新的 TSF 架構實做有相當的困難,使得很多開發者空有設計輸入法的構想,卻無法落實到很多人使用的 Windows 系統上。新的 metro mode 又加諸了許多限制,使得輸入法開發變得相當困難。本議程將介紹 PIME - 第一個嘗試在 Windows 上用 python 開發中文輸入法的架構,底層採用 C++ 開發的 LibIME (取自新酷音輸入 Windows 版),幫助有志於改善中文輸入環境的朋友,在不了解太多細節,也不用會 C++ 的狀況下,也能用 Python 語言設計新的輸入法。
有興趣在 Windows 下開發中文輸入法的 COSCUP 會眾,歡迎可以來參加!
將會現場 demo 實際使用的方式 :-)

2011年6月4日 星期六

最近接受了 iTHome 電腦週刊,iT人甘苦談單元的訪問

刊載於 5/31 日出刊,505 期的 iTHome 週刊,目前於網站上已有全文
http://www.ithome.com.tw/itadm/article.php?c=67918

感謝該出版社的介紹和撰文,幫忙紀錄下 PCMan BBS 連線軟體的開發故事。

不過關於這篇報導的內容,有幾個比較大的錯誤需勘誤:

  1. Telnet 通訊協定是 RFC 854,不是 1854 (補充,854 只規範基本的通訊協定,至於可用的一些 Telnet options 是另外散落在其他 RFC 通訊協定內,所以只讀 RFC 854 並不夠)
  2. Telnet 的指令並不是很長的英文,而是簡短的幾個位元組,但都是二進位資料,不是英文。很長的英文是指那份原文的參考文件
  3. GTK並不是 Linux的圖形介面開發指令,而是一個用來開發圖形介面的函式庫
  4. 有重新改寫 PCMan,轉移到 Linux 上時,一開始是用 wxWidgets 重寫過的 PCMan X,不是原本的版本。
參考資料:RFC 854 Telnet Protocol Specifiation

2011年3月18日 星期五

[分享] 學習正確醫學英文發音的好工具

國內的醫學教育以英文為主,歷年多採用美國之教材,但國內之大多數教師及臨床醫師,對於醫學英文的正確發音並不了解,加上老一輩的師長,常是以自行想像的"台語+日語"發音來教導學生,於是以訛傳訛,有樣學樣的結果,知道這些醫學英文字正確發音的人,就越來越少了。
為了解決這個問題,我一直在搜尋相關網路資源,後來找到了 Merriam-Webster 的線上醫學辭典
http://www.merriam-webster.com/medlineplus/
這個辭典是英-英辭典,有提供正確的音標,還有發音示範可以聆聽,相當好用,唯一美中不足之處是,上面顯示的音標,並不是國人慣用的 KK 音標,而是該出版社自創的音標,閱讀不易,所以我就寫了個輔助查詢的小程式,幫他自動轉換成 KK 音標。

有圖有真相:


黃色字體部份就是由程式轉換出來加入的 KK 音標,歡迎醫學相關人士下載使用:
https://docs.google.com/leaf?id=0B4BhmC8V2mivMmQxZWUyNmItYjViMS00YzRjLTg5MDUtNDhiMzRjNWViYjNk&hl=en

若有 bug 歡迎回報,不過因為我的 HTML 和 Javascript 學得並不好,(正確來說是沒怎麼學過)所以都是土法煉鋼,如果有高手願意幫忙改,非常歡迎,這個小程式是 GNU GPL 授權。

2010年9月22日 星期三

Blog 搬新家

終於還是放棄自己寫的 blog 系統,搬到 blogger 了

在大學時代,我一直都使用BBS做為對外發布消息的窗口。Blog 開始流行之後,我也跟大家一樣開始用了無名小站,不過隨著無名小站開始發生一些事情,大家紛紛出走,我也因為不認同該公司的經營理念所以決定搬遷,當時正好想學 php,於是在 2007 年時,就自己動手寫了一個 blog 系統,當作範例練習。

程式碼現在在網路上還找得到:
丁丁個人網頁平台 (Ding Ding Web System)
歸類在「系統開發日誌」下的文章就是那時候一邊開發系統一邊寫的,雖然我已經換用blogger,還是把這些文章留著紀念。

後來因為開始工作,實在太忙,很少有空寫程式,當然也沒有空去維護這些尚未完成的php程式碼,又因為經常受到Spammer攻擊,最後就決定讓這個使用了三年的自製 blog 系統走入歷史。

大家在轉移 blog 的時候,最大的問題就是,如何保留舊文章?幸虧坊間有許多熱心的作者製作轉移工具,而主要 blog 品牌大多有匯入對手 blog 的功能。不過,我是使用自己寫的系統,自己的資料庫格式,那要怎麼轉移?我研究一兩小時的 Google Blogger API 可是覺得這不是我要的東西,最後找到了由大鳥(大貓?)網友製作的工具 Blogtrans
當然,這個工具只有提供匯入無名小站和 Pixnet 到 Blogger 的功能,但是...他有提供程式碼,而且還剛好是我會寫的 python 程式!在這裡要特別感謝這位大貓網友,我取了他的程式碼稍做修改之後 (其實實驗了好幾個小時),從我自己的資料庫讀出資料用程式轉檔,終於順利把所有舊文章,包含文章分類、留言、和張貼日期,全部成功匯入到 Google Blogger 了。

總之,從現在開始,我會改用 Google blogger 來寫 blog。如果有人在看這個 blog 的話,請改用新的網址 http://pcmanx.blogspot.com/

2009年12月19日 星期六

發現好用的 Source Code Formatter

UniversalIndentGUI
http://universalindent.sourceforge.net/
這是圖形介面,支援 Windows, Linux, Mac


可以搭配各種不同的 indenter 使用
我是用這個
Uncrustify
http://uncrustify.sourceforge.net/

功能強大,搭配所見即所得的圖形介面,重整程式碼的時候相當好用

2009年11月23日 星期一

[軟體] PCMan Telnet/BBS for Firefox 2009 全新套件

最近突然心血來潮,想學習怎樣寫 Firefox extension,
順便學習之前一直沒有學的 Javascript,於是,就重寫了 PCMan 作為練習
經過長時間的研究 + 三天密集 coding + 參考 FireBBS,目前已經初步可用了

PCMan Telnet/BBS extension for Firefox,誕生!
專案網頁: http://code.google.com/p/pcmanfx/

功能還不夠完整,但是該有的基本功能都有了,彩色顯示也很正常
重點是可以支援中文雙色字,顯示效果也很接近原 PCMan 系列。
當然效能和記憶體用量遠不能和原版 PCMan 相比,但是對於用純
Javascript 寫成的套件來說,目前的執行效率還在可接受的範圍。

歡迎大家測試或給予意見,或者是...最好可以有熱血的朋友加入開發,
小弟最近很忙,可能會沒有時間繼續寫完。
目前程式碼相當短,而且最困難的核心部分我幾乎都已經寫完了,
剩下就是許多小地方的補強。 這次是純 Javascript,
有能力改寫的人應該就很多了吧! 快加入吧!

主要特色:
1. 使用 Javascript + XUL + 少量 html 開發
2. 程式簡潔,可讀性佳,模組化,初版僅 1000 行,
易讀,易改,相當適合想學習 Telnet 程式撰寫的朋友,
作為學習的參考。
3. 雖然是使用 Javascript,執行效率仍在可接受的範圍,
操作上有接近原生軟體的表現。
4. 支援一字雙色的顯示,畫面呈現效果優良,接近原生軟體。
5. 跨平台,目前確定可運作於 Windows (優) 和 Linux (可),
Mac 及其他 Firefox 能運作的平台尚未測試,理論上可用,
但顯示效果會略有出入,中文輸入部分可能會有些小問題。
6. 開放原始碼,以 GNU/GPL V2 自由授權釋出。

想加入開發的朋友,請和我聯絡,加入這個專案。

[閒聊] PCMan BBS 連線軟體全系列的發展史

很多意外的進步,常都是在不務正業,以及無心插柳當中,
陰錯陽差獲得的,不過成果並不是偶然,而是長期累積的結果。
平日累積的經驗和研究,可能毫無成果,看似白費,一無所獲,
但一旦等到了時機適當的時候,就能在短時間內立即展現出來。

PCMan BBS 連線軟體系列,堪稱地球上版本最多的 BBS 連線軟體
從主要的 PCMan Combo/Lite 系列,由 2001 年發展至今
已經演變成自由軟體,成為開放原始碼的 Open PCMan 專案
後來我還使用不同的開發工具和程式語言,重寫了好幾次,
這些支援各種平台的版本並不是用移植的,而是每次都是重寫。
反覆重寫一樣的程式,看似沒有太大意義,但是在這個過程中,
雖然沒做出什麼新東西,我學會了使用幾種不同的工具。

原本 2001 年的時候,我只是在學習 socket programming 而已
因為要測試連線,腦中又只記得學校 BBS 站的 IP,隨手輸進去
才意外發現,這樣程式竟然可以接收到 BBS 站的畫面,
這幾行隨手用來練習用的測試程式,最後變成了 PCMan 全系列。
http://pcman.openfoundry.org/
http://pcman.ptt.cc/index2.html (舊網址)

後來看到可跨平台的 wxWidgets (當時叫 wxWindows) 程式庫,
就有打算要嘗試使用看看,還在評估研究的時候,
幾個月後又看到有位網友真的用 wxWidgets,開發出了另一套
BBS 連線軟體 BBMan,證實了這件事情的可行性。

於是我也學著用 C++ 配 wxWidgets,重寫出 PCMan X,
可跨 Windows, Linux, 和 Mac OS X 三大主流平台,
這在當年可能是台灣第一個支援 Mac OS X 的 BBS 連線軟體,
本來計劃用這個取代原本的 PCMan,不過後來因為種種原因
現在已經廢棄不用,但我在其中學會了如何使用 wxWidgets
也因為這個原因,我才開始摸 Linux 下的程式設計,
也是這樣陰錯陽差變成 Linux 系統的使用者,一直用到今天
又是因為當時嘗試修正 wxWidgets Linux 版的中文輸入問題,
所以意外開始學 GTK+,到今天變成都改寫 Linux 下的軟體
http://pcmanx.sf.net/

因為自己本身變成了 Linux 的使用者,所以之後開發的軟體
都是以 GTK+ 進行,並且專門開發給 Linux/X11 使用。
所以就用 GTK+ 重寫出 PCMan X GTK+2,是目前 Linux 下
主要使用的版本,使用 C/C++ 搭配 GTK+ 2。
http://pcmanx.csie.net/
http://code.google.com/p/pcmanx-gtk2/

後來,意外看到 Firefox 瀏覽器外掛程式的文件,想到似乎
可以把 PCManX 的程式改寫,用外掛的方式塞進瀏覽器裡面
經過實驗之後,PCMan for Firefox 的外掛就產生了
這個版本是使用 C/C++ 搭配純 Win32 SDK/API 撰寫,
所以很小很快,但目前似乎和最新版 Firefox 有點相容性問題
http://pcmanmoz.mozdev.org/

(這個 BBS 外掛所引用的技術,後來被我用來開發知名的
IE Tab for Firefox 外掛程式,不過後來因為沒有空
又不再使用 Windows,我就沒有繼續參與開發,而讓另一位
合作的開發者 yuoo2k 維護後續的新版了。)

作為台灣地區第一個把 BBS 連線軟體塞進 Firefox 的人,
我當然是不會因此滿足,畢竟我是 Linux 使用者,
所以,幾個月後,Linux 版 的 PCMan X GTK+ 2,
在一些高手的協助下,也發展出可以塞進 Firefox 的外掛
變成可以內嵌到 Firefox。
http://pcmanx.csie.net/

在 2007 年初原最古老的 PCMan 系列開放程式碼,
變成 Open PCMan 專案,以自由軟體的新姿態重新出發。
在整合進網友貢獻的新功能之後,我就淡出沒再開發這些軟體了
平常的重心已經轉到醫療工作上,還有 Linux 平台
主要的心力投入在開發 Linux 上的 LXDE 桌面環境。

2009 年,有些熱心的網友重新活化了 Open PCMan 專案
為這個專案注入新血,並且由他們推出了 2009 年版。
也就是大家今天會在網站上下載到的版本。

2001 年開發了第一版 PCMan 軟體,到 2009 年完全淡出,
其實我還是會手癢的。 於是...在下班後稀有的閒暇時間,
還有中午飯後的休息時間,我又偷偷打開了編輯器,輸入了
一些簡單的程式碼。而這個無意間的舉動,又意外的,
衍生出一個新作品。

說意外也不全然是,我調查相關的技術,和翻閱相關文件
累積相關資訊也有幾個月了,不過本來還在觀望的...

這兩天我原本只是一時興起,想練習一下 Javascript,
因為這個廣泛被應用在網頁上的程式語言,現在正火紅
但是我其實從來沒有學過,也不太會用,加上我一直想要
學習怎樣用 Javascript語言,撰寫 Firefox 瀏覽器的
擴充套件。所以,在看過相關的教學文件之後,
也就是官方網站上的那個簡陋的 Hello World 範例,
我就開始動手,把在腦中勾勒已久的程式寫下。

三天內寫了九百行,很簡短,但是一個新的 BBS 連線軟體
初具雛形了。 這是最新的 PCMan for Firefox 擴充套件,
可以讓使用者在 Firefox 裡面開啟 telnet:// 上 BBS

這不是先前 PCMan plugin 的新版,這是完全 from scratch
用完全不同的程式語言,所重寫的新軟體。

PCMan for Firefox 現在是純 javascript 程式,
沒有夾帶 plugin 了! 目前功能還很簡陋,不過大致上可以用了
剛剛已經放上專案網站: http://code.google.com/p/pcmanfx/

在退出 PCMan 系列的開發兩年之後,很高興這個歷久不衰的
系列作品,又有了新的成員出現。

詳細介紹請看下篇。

2009年6月20日 星期六

2009年6月18日 星期四

glib/gio 研究心得

之前本來覺得 glib/gio 的 local 檔案系統實做有點問題
後來發現,其實沒有 gvfs,本地端檔案確實還是可以運作的,
只是會不太完整。 因為雖然 g_local_file_copy 裡面
只會顯示「不支援此操作」的錯誤,但 g_file_copy 裡面還暗藏了
fallback 的程式碼,而這部份是可以運作的。
所以大體而言,沒有 gvfs,glib/gio 的檔案 I/O 還是可以
對本地端的檔案提供最基本的支援。

不過,經過實地測試,gio 即使是操作本地端的檔案,
在某些操作上,效能都不是很理想...也比使用 POSIX
的 system call 要慢上非常多倍。看來 gio 還是需要加油啊。

2009年5月18日 星期一

之前寫的網路廣播收聽程式 Hinedo 修好了

我很久以前開發了一個用來免看網頁廣告,即可輕鬆收聽 Hinet 網路廣播的軟體
叫做 Hinedo,有不少愛用者

下載網址:http://of.openfoundry.org/projects/814/download
相關介紹:http://azo-freeware.blogspot.com/2007/06/hinedo-hinet-radio-10.html

但因為 Hinet 的 HiChannel,經常在變更收聽方式,
所以同類軟體經常會失效。
這次 Hinet 的 HiChannel 廣播又大改版,所以我們的程式也要
做出對應的更改。
最近工作有點累外帶有點提不起勁弄程式的東西,所以就暫時沒去動他
今天總算還是把他修復了! 使用者不需要重新下載安裝,
只需要重新啟動 Hinedo,相關的部份會自動線上更新。 (如果有正常運作)

目前坊間有許多用來收聽 Hinet 廣播的軟體,那 Hinedo 特別的地方在哪?
Hinedo 和其他同類程式最大的差別就是,改版不用重新下載新版程式。
當下次重新啟動 Hinedo 的時候,程式會自動線上更新用來抓廣播網址的指令檔。
對使用者來說完全不用重新安裝程式。

就程式開發的觀點來看,Hinedo 的設計還是很獨特,是唯一同時提供雙平台支援的
Windows 版本用 Win32 SDK + MFC 以 C++ 寫成,抓網址的部份是 VBScript,
都是系統內建元件,程式輕巧,且不需要依賴額外的程式庫。
C++ 和 VBScript 的異質性媒合是很有趣的新嘗試,很少人這樣做。

Linux X11 版本我則是用 gtk+ 以 C 語言寫成,抓網址的部份則是 Python,
透過這樣獨特的設計,可以達成常駐的主程式極輕巧,不需要依賴額外元件
而經常需要變更的抓取網址程式,是用 scripting language 寫成
可以經常線上更新,並且非常易於維護、閱讀和更改。

所以這個簡單的小程式,看似簡單,其實是有很微妙的神奇設計在其中的 :)

2009年1月24日 星期六

[賀] 有強者出來接手 PCMan BBS 軟體開發了,出現 2009 年新版!

PCMan 2009 年最新版本即將推出,這種後繼有人的感覺真好!
從我 2007 年把過去幾年留下的所有程式,全都上網公開開放之後,
兩年後的今天,終於有強者願意出來接手了
現在的開發已經完全由 Ptt 上的網友 ceshine 等人接手
新版本也被他改名叫 PCMan Novus (9.1.5)

網友 rocet 也製作了全新的網頁,所以 PCMan 官方網站現在煥然一新了!
http://pcman.openfoundry.org/

雖然我個人是沒有很喜歡 PCMan Novus 這個名字
不過倒是很讚賞 ceshine 願意出來接手

這樣我就可以繼續好好的當我的醫生,繼續開發 Linux 上的軟體
也不用擔心過去幾年在 Windows 上留下的成果消失了 :)

加油吧! ceshine! 我等著用你改的新版!

2008年11月20日 星期四

騙人的 glib/gio

Glib 在新版當中引入了 GIO,作為檔案操作和 streaming 的 lib
官方網頁寫了一大堆的優點,並且宣稱得多好多好,其實...
雖然號稱是 Glib 的一部分,而 Glib 理論上是跨桌面跨平台,
但少掉了 GVFS,GIO 其實就完全的不會動了...
而 GVFS,其實前身就是 GNOME VFS。
GIO 雖然宣稱可以在沒有 GVFS 的環境下運作,其實真相並非如此
Volume management 的部份就不會動了,而且磁碟的掛載
內部是直接「寫死」呼叫 gnome-mount,沒有這些 gnome 的工具程式
存在時,相關的部份根本完全都不會動。
沒有 GVFS 它是可以「編譯」沒錯,但實際上幾乎所有功能都廢了...
另外像是檔案操作的部份,雖然文件上宣稱,少了 GVFS,GIO 仍然可以運作,
只是會剩下只支援本地端檔案,而不能支援各種通訊協定,但是...
讀過程式碼之後,就會發現這是謊言...

glib-2.16.5/gio/glocalfile.c, line: 2305

static gboolean
g_local_file_copy (GFile *source,
GFile *destination,
GFileCopyFlags flags,
GCancellable *cancellable,
GFileProgressCallback progress_callback,
gpointer progress_callback_data,
GError **error)
{
/* Fall back to default copy */
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Copy not supported");
return FALSE;
}


所謂的沒有 GVFS 還剩下本地端的支援,只是秀個錯誤跟你說:「對不起,不支援這個功能喔...」
所以,雖然宣稱是 Glib 的一部分,雖然表面上作成跨桌面,不需要 GNOME,但實際上,
少了 GNOME/GVFS,基本上你很難讓 GIO 真正發揮功用,大部分的功能,其實都是故障的。

2008年10月14日 星期二

libunique, 協助撰寫 single instance application 的好物

之前沒有用過,今天才發現有這個,看來是個有趣的東西
透過這個小 lib,處理 single instance 的 gtk+ 程式
就變得非常的簡單了。
http://live.gnome.org/LibUnique

2008年8月7日 星期四

我們的 LXDE 計畫,順利到舊金山 LinuxWorld 參展

今天,我的心情非常複雜。
兩年前,我因為一些因素,意外創立了 LXDE 計畫 (http://lxde.org/)
希望可以提供一個輕量級的 Linux 桌面環境。
2006 年剛開始那時候,很淒涼,幾乎 95% 程式只有我自己一個人在寫,
大部分的東西也處在沒辦法用的狀態,中間更是因為私人因素停頓一年多。
到了 2008 年,因為有新血的加入,我們重新投入了這個專案的研發,
經過幾個月的奮鬥,和無數的熬夜,半年內我們完成了真正可用的解決方案
我已經記不清楚我前後到底花了多少私人的時間在這上面,
雖然沒有時間,但難得有機會把它做起來,還是得犧牲重要的私人時間來弄。
畢竟現在我還是得維護 LXDE 裡面超過六成的程式,而專案目前還在長大當中...
最核心的部份,還是有許多待解決的問題,但目前也沒有人能夠接手。
幸好,這些努力並沒有白費,最後的成品終於得到一些使用者(和廠商?)的肯定
雖然投入超過兩年,我個人除了有拿到一兩台贊助的機器之外,口袋沒半毛進帳,
但我最大的心願並不是錢,而是這個來自台灣的作品,有機會躍上國際舞台。
今天,我們做到了。

在某些單位的贊助,和 Joy Tang 等許多朋友的努力奔走之下,
我們的作品終於有機會,參加在舊金山舉行的 LinuxWorld Expo
向國外的朋友介紹來自台灣的自由軟體專案,正式的走向國際化
原本,這天我應該是最開心的,因為多年的心願之一,在這幾天,終於實現了,
但今天,我其實心情有點失落。

專案的重要成員 Andrew Lee 和 Fred,和我們的好朋友 CW,目前人在舊金山
和來自美國的 Glen 和德國的 Mario 正非常努力的,在跟參觀的國外朋友介紹。
而在這個對我們來說最重要的一刻,這次,我卻缺席了。
看著 Fred 拍攝的展場照片,看著 Andrew 等人發出的 Press Release
身為專案創始人及主要開發者,本來我應該要在會場和大夥一起努力的
但現在,我卻像個局外人,除了透過網路,偷看他們的進度之外,
一點都無法參與了。 有點不知道該感到高興還是難過。
最近都不敢開 E-mail 信箱,太多關於軟體開發的信了,
國外翻譯者寄來的軟體翻譯,我到現在沒有時間整合進我們的專案
我真的深怕一開啟這些東西,就會玩個沒完沒了,打亂我的讀書計畫。

今天,我是內科住院醫師了,我正在醫院上班,手上有需要照顧的病人
無論發生什麼事情,我有責任,在這裡堅守我的崗位。
想要雙重身份,就是需要付出雙倍代價。外人所看到的光鮮亮麗永遠只是表面
現實和夢想,有時不能兩全,而工作,就是這麼回事。
因為責任,所以得放棄很多自己喜歡的事。
我想,離開學校後,我失去的不只是一張學生證而已。

接到好友訴說新工作不順的電話,我還可以若無其事的給予安慰
但實際上,我心理現在也有種說不出的失落感...
也許再過幾年,我就會忘了程式要怎麼寫了吧...

今天下班前,又去巡了一次我負責的病人,確定他們狀況都穩定
閒聊了幾句,看到病人笑著說謝謝,心理的失落感也少了些。
晚上 call 機響了,本以為是醫院的事情,卻意外發現是接到某好友的簡訊
人生有些事情很無奈,但在無奈之中,還是會有些事情讓人感到溫暖的吧。
加油了!明天是要值班的日子,希望一切順利。

2008年6月17日 星期二

[程式] PCMan 私房密技 - 用 glib 的 GKeyFile 來處理 IPC

不知道我是不是第一個發明這樣搞的人,但這絕對是個有用的密技

在 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+ 密技,
亂無章法,隨手記下,也沒時間寫範例,但希望對看得懂的有緣人有幫助...

2008年6月15日 星期日

發現有趣的新軟體 - MyPaint

很有趣的新繪圖軟體,有 Linux 和 Windows 版本
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 還嫌慢的玩家,到底都做什麼用途?

在盲目的升級硬體前,不妨先實地測試過,了解自己的需求
而不是跟著網路上的謠言,胡亂的砸錢升級硬體。
像那樣胡亂升級,淘汰很多還很好用的硬體設備,
不過是在浪費錢,又製造更多污染而已。

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