Tuesday, December 27, 2005

一邊寫程式 一邊寫文件: Doxygen

開發一個自己的Open Source程式
有的時候當別人希望你有文件可以讓他更容易了解時
我想對於大多數的engineer來說都是很痛苦的
但是有一個project卻可以幫你解決這個問題
doxygen是一個程式注釋文件系統
當你開始寫程式時
一邊把注解以doxygen的格式寫在程式碼中
最後只要簡單的編輯一個doxygen設定檔
(doxygen也可以幫你產生基本設定檔)
只要執行doxygen
一個完整的文件便可以產生
doxygen可以產生html, latex與rtf格式的輸出
非常的方便

想讓你的project有一個很棒的reference網站
還是想要給一份很正式的programming文件嗎
doxygen絕對是你不能不去試試的東西

Monday, December 19, 2005

Gaim2.0 beta1釋出

在最近Gaim釋出了2.0 beta1的版本
自從IM的世界開始大戰之後
我就覺得Gaim實在太棒了
因為他是一個支援各種IM protocol的軟體
大概你有在用的即時通軟體他都支援
(MSN, Yahoo Messager, Google(jabber), ICQ, Zephyr..)
新的版本UI做了些變化
我覺得最值得期待的是2.0後將gaim-vv整合進來了
因為早期Gaim的問題是他並無法作video與audio的通訊
而Gaim-vv是Gaim的另一版本, 使得Gaim具有AV的功能
另外, 這個月15日google釋出了google talk的API library
(libjingle, jingle是jabber的延伸版本)
可以期待將來Gaim將會有google talk的語音功能
反正現在Sean Egan已經在google上班....ㄏㄏ
(Sean為Gaim的maintainer)

One Standard or two?

今天在OSNews看到一篇文章: Is One Standard Always Better than Two?
他探討的是前陣子大家熱烈討論的文題
微軟新的document格式與OASIS的Open Document格式之爭
起因在於因為OpenDocument的格式已經越來越被重視
加上近期OpenOffice2.0的聲勢也勢如破竹
今年稍早的時候原本微軟宣佈新的Office要支援OpenDocument格式
但是後來又決定使用自己的格式XMLRS
微軟宣稱它會是一個OpenStandard
所以他的論點是: 兩個OpenStandard比一個好, 使用者可以選擇
但可以想像引起Open World社群一陣討論
對於文件格式有興趣的朋友可以看看這篇文章
我覺得我的想法也跟他很像
我也不太管有幾個standard, 只要是Open的
我想微軟會讓大家不信任是因為他有太多不良歷史紀錄吧

Friday, December 16, 2005

淺談Abstract factory

最近又開始把C++拿出來用(太久在linux system中都是使用C),重新在開始寫C++卻發現以前對C++coding有很多不是很好的習慣。以前一開始使用C++比較多其實是在我剛出社會時做windows engineer的時候,那個時候因為都是寫些小程式,所以習慣用UI的角度看整個程式,常常都是以UI為中心,所以程式的靈活度很低......Read More


PS. 我的網站改版了歐, 去看看吧

Monday, December 12, 2005

cat on TCP/IP

別誤會, 我沒有要賣貓
習慣使用Unix-like command-line的朋友
一定對於"cat"這個指令十分熟悉
他可以把檔案的內容顯示在terminal中
(device node也可以啦, 其實大概可以open與read的VFS都可以)
但是如果我不想把結果放在本機端顯示
而想要透過網路傳送到另一個machine呢?
我想Gnu-netcat是你的好選擇

簡單來說, 這個程式其實與cat沒兩樣
只是他將結果傳送到網路罷了
所以說, 你可以將本機上的一些資訊傳送到其他地方
有啥用途呢?
看你怎麼用吧....ㄏㄏ

舉個簡單的例子: syslog
雖然syslog可以用-R的方式將log message送到遠方的logserver
但是如此一來本機將沒有log file
利用本機端的cat或tail指令, 配合netcat可以構成一個簡單的solution
另外, 如果兩邊都用cat來顯示與存入
也是一個簡單到不行的"單次"ftp
(傳完一個檔就結束呀...ㄏㄏ....好啦, 我知道有wget比較好用)
甚至於例如在工廠中, 遠端可能使用一個embedded device或是laptop
可以將一些serial port的資訊直接送到後端server
(例如barcode scanner, GPS mouse, RFID reader, Card-reader....等等)
運用上就看你的智慧了(或是PM的智慧....ㄏㄏ)
Anyway...這是一個很棒的小程式

Sunday, December 11, 2005

SQLite3的C++ wrapper

最近使用SQLite3來做一些自己的東西
因為是使用C++當作程式語言
所以找了一下網路上有沒有相關的project可以利用
(建立sqlite3的database程式我用C語言解決)
果然讓我找到一個(Open Source萬歲)
Sqlite Wrapped
我在SQLite3中試過滿好用的
可以用object的方式處理database又不用自己寫wrapper
有在C++使用SQLite3的朋友可以試試

Wednesday, December 07, 2005

GNU screen

我的工作環境雖然大多已經在X window下運作
但是依然有大量的時候必須使用CLI(command line interface)
之前我最愛gnome-terminal
因為可以開一堆tab window在同一個gnome-terminal之中
但是有些時候當X不在執行的時候
當然gnome的程式也無能為力

後來看到GNU的screen這支程式
真是愛死了
他是一個讓你做到類似上面所述的功能
甚至在沒有X可使用的情形下
你可以開啟許多虛擬的screen執行不同的工作
在各個screen中copy-paste文字
支援unicode
太好了, 這樣的工具喜歡用CLI工作的朋友怎能不試試

Tuesday, December 06, 2005

簡介Cairo


從一開始我發現Cairo這個drawing library後
一直覺得一定要花時間好好研究一下
因為他一定是一個明日之星
看到Gtk+-2.8已經開始使用cairo當成backend
越來越覺得可以思考一下他的利用

最近試了一下gtk與cairo的整合部份
其實gtk並沒有將cairo包裝起來
而是你可以利用cairo的一樣寫法在gtk程式中

舉例來說
我使用一個drawingarea來示範

GtkWidget *target;
cairo_t *cr;

target = lookup_widget((GtkWidget *)button, "drawingarea1");
cr = gdk_cairo_create ((GtkWidget *)target->window);

cairo_move_to (cr, 10, 10);
cairo_line_to (cr, 150, 20);
cairo_rel_line_to (cr, -50, 100);
cairo_close_path (cr);

cairo_move_to(cr, 150, 100);
cairo_show_text (cr, "中文測試");

cairo_stroke (cr);

cairo_destroy (cr);

(PS. gtk都是使用UTF-8編碼, 所以中文沒問題)
這是一個簡單的glade所完成的gtk+程式(執行畫面如最上方圖)
你可以看到除了得到cairo_t的部份外, 幾乎都是cairo原身的語法
其實gtkmm似乎有在完成cairo的widget元件
但是我其實還挺欣賞這種作法的

gtkmm也可以直接使用cairo的function
唯一差別只在取得cairo_t的方式
對於GUI後端顯示技術與向量式繪圖有興趣的朋友
不妨去看看cairo吧