Wednesday, July 26, 2006

WebOS現身


我想自從AJAX大紅後,很多人期待一個WebOS已經很久了
有人覺得會是Google打響第一波
但是看來Google另有打算
沒想到MIT先推出了WebOS: YouOS
這個目前還在Beta的webOS非常具有一個OS的樣子了
他上面有了許多常用的程式(email, chart. IM, browser.....)
甚至你可以安裝新軟體
或是寫你自己的軟體
哇....很棒吧

我想短期內要取代正常OS應該還早
不過我覺得類似Thin Client這類的架構
這將會是非常好用的架構
至少擺脫了RDP這類的私有協定
client device只要有一個browser就搞定
(甚至不需要flash....ㄏㄏ)
申請個帳號試試吧....不過beta版常常會使用人數過多進不去
多等等吧....ㄏㄏ

Monday, July 24, 2006

Live Media Stream library

前幾天跟幾個老朋友去喝咖啡
他們正在弄media streamming的東西
提到了live555.com這個library

live555這個streamming library
我想有在linux上面用MPlayer或VLC聽live stream的朋友應該不陌生
現在幾乎所有linux上的media player都用這個library來處理streamming

live555是一個C++的library
因此你必須用物件導向來設計你的應用程式
(這幾天mail-list有人在問可否將它弄成C code....ㄏㄏ)

基本上你將要面對4類基本物件:
UsageEnvironment, TaskScheduler, Groupsock與LiveMedia
事實上大多數上列的物件很多都是抽象物件
因此你必須利用繼承來實作出一個成品
UsageEnvironment是最外層物件
說他是最外層的原因是他幾乎是其他物件的wrapper
TaskScheduler負責控制觸發的各項event scheduler
(譬如從網路上接收傳送stream data)
而Groupsock負責處理網路層的部份
如果你的service要處理multicast
你必須在此完成
最後的LiveMedia是各種多媒體類型的處理
(基本虛擬類別為Medium)
目前library中有許多常用支援的格式

另外,library提供了一個基本的繼承物件BasicUsageEnvironment
他利用標準輸出入為io實作一個基本類別(BasicUsageEnvironment與BasicTaskScheduler)
我想這是一個提供你demo或是programming doc的作用
(在Open Source世界中,期待有類似MSDN的網頁是不常見的,demo code比較實在)
因此測試程式多用BasicUsageEnvironment
你可以自己去實現自己的streamming環境

利用這個library可以讓你省卻很多功夫而可以輕鬆完成你的stream server(或client)
他是很棒的一個project
我覺得遺憾的是他並不是非常general
某些地方原本以為他會更以STL的style來完成
但是卻沒有
譬如在BasicUsageEnvironment中的HandlerSet
一開始看到code來以為他用STL iterator來做泛型化
不過後來發現他只是一個C++ link-list的wrapper
或許因為這只是個demo功用的物件吧
(泛型化一開始會把事情弄的很複雜...ㄏㄏ)

Anyway....如果你對於network media streamming有興趣
這個絕對是一個可以選擇的Project

Sunday, July 16, 2006

學習Graph algorithm的好工具: Gato


以前在面對數學的Graph theorem的時候
總是覺得缺乏一些輔助工具
例如視覺化工具....沒辦法,想像力太差,所以才會逃出數學系...ㄏㄏ
不過在Open Source的世界裡卻可以幫助你把數學學的更好

Gato基本上就是一個非常棒的工具
他可以讓你試著將你的圖形演算法實現出來
甚至可以讓你看到他實際運作的樣子

Gato是由python寫成
他使用tk作為基本widget
所以你的python必須要有tk支援
(在Gentoo裏面,確定你的USE變數裏面有tk就可以)

你可以把你的graph演算法用python語法寫成一個.alg檔案
(事實上還需要一個相同檔名的.pro檔案)
在編輯一個運作的圖形集合便可以讓你的演算法實際跑起來
Gato有一個視覺化工具可以讓你更方便編輯圖形

喜歡研究Graph嗎....試試吧...真的很酷

Friday, July 14, 2006

你是一個hacker還是engineer

今天我的老闆發了一封mail給我
他的論點我覺得是
當你只會去研究程式架構的人叫hacker
而engineer應該是為了把產品做出來
不一定要有好的軟體架構, 也不一定要友好的軟體效能
重點是很快把產品弄出來拿去賣
(就算你是偷OpenSource的Project然後佔為己有無所謂)
甚至還要有業務與PM的功能(能自己去規劃產品與找客戶......傻眼)

我想我這間公司需要engineer不需要hacker
我是不是engineer?
我也不清楚

記得一位學長不久前跟我說
"我們公司是要作產品的歐"
他的意思也有異曲同工之妙
因為我們要弄產品,所以可以犧牲很多東西
包括品質

我想很多主管級的朋友不會同意我的說法
或許會說"time-to-market"與品質都一樣重要
問題是當兩者衝突時....你會取捨那一個?

還是當hacker快樂....但是我印象中hacker應該是不一樣的解釋
那.....我還是當程式工讀生好了

DjVu

在網路上傳遞的電子書有哪些格式呢?
大家很熟悉PDF吧, PostGhost、html.....甚至image檔案都可以(能看的電子化格式...ㄏㄏ)
但是如果是直接線上閱讀的電子書
事實上連PDF都嫌的有點大

size與清晰度是電子書的兩面考量
size要小的話dpi就不能太高,但dpi太小則看不清楚
DjVu這個格式便是針對網路上的電子書作改良的格式

他的基本想法是
針對不同內容作不同的layer與處理
例如,一般文件中的圖形可以接受較低的解析度
而文字則希望有較高的解析度
因此你可以在DjVu中讓文字是300dpi而圖形是100dpi
這樣一來便可以兼顧size與清晰的需求

OpenSource的DjVu project是DjVuLiBre
它包含一個獨立的viewer與library
還有browser的plugins
但是因為viewer是用Qt當成介面
因此你必須有Qt的library(Qt3)
plugins也是一樣
這倒是我比較不喜歡的地方
因為我的browser根本不是Qt-base

不過還是給這個project用力鼓勵
下次看到用djvu結尾的檔案時
記得去下載來試試
你會發現他的效能真的比pdf好多了

Tuesday, July 11, 2006

用Expat處理你的XML資料(2)

讓我們看看這3個callback function裏面的作法;首先我們先看一個簡單的XML檔案如下:

這個簡單的XML範例為最基本的XML,它沒有DTD宣告也沒有CDATA之類的,只單純的將資料結構化罷了。那Expat的callback function怎麼運作呢?原則上它幫你分好資料與tag的分別,至於你要如何處理資料或是tag屬性你要自己在callback function完成。舉例來說,我們的expatStart函式便會在每次Expat遇到起始tag時去呼叫,而expatEnd就會在遇到結束的tag時被呼叫,中間的資料便會呼叫我們的expatHandler....more

Friday, July 07, 2006

用Expat處理你的XML資料(1)

當你的程式之間需要傳遞資料時,你會怎麼做?譬如說設定檔資料,使用一個最簡單的型式:『id := value』那如果設定值很複雜又有層次呢?我甚至還看過透過網路把整個二進位資料結構memory複製到網路去,由接受端宣告一個一模一樣的資料結構在memcpy......(當然,看到這種程式要我處理我會有想自殺的感覺...)。
其實XML是一個很好的規範,他的可擴充性讓程式可以自己去處理自己要的資料,也不會因為多了一個欄位讓天下大亂(我的世界就處在混亂中...ㄏㄏ)。但是 要你面對XML這類的複雜結構時,我想很多人看到就感到害怕吧。還好這個世界甚麼不多,Open Source的library最多...ㄏㄏ,Expat是一個很不錯的XML parser library,原則上他是一個C library,而且可以在許多平台使用(好啦...有win32版本...不過我沒用過),Expat是一個stream導向的parser library,也就是說他會從data buffer一直讀進資料然後遇到不同的狀態改變做不同的處理....More

Tuesday, July 04, 2006

apache2.2的suEXEC2

最近很勇猛的把我的gentoo接收了~x86的keyword
重新emerge world後確實所有的軟體都是最新的
不過自己也吃了不少苦頭....ㄏㄏ

apache便是一例
我的apache server變成2.2的版本
apache2.2對於安全真是到了龜毛的地步
(不過也是應該啦...server麻)
在執行CGI之類的動作也有很嚴謹的檢查執行者的id
請自己看看這裡

而且gentoo的suexec2的執行檔的權限並不會執行正確
所以必須手動改變
chgrp apache /usr/sbin/suexec2
chmod 4750 /usr/sbin/suexec2
之後......我的apache2.2終於正常可以執行我的CGI程式了

Monday, July 03, 2006

新的enlightenment screenshot


最近把我的kernel換成最新的2.6.17版本
順便也把enlightenment整個升級了
新的DR17中的ibar越來越好了
雖然目前還未release但還是很令人期待
用習慣DR17的操作介面後
慢慢已經不習慣KDE與Gnome的介面
(因此兩陣營的較勁也不關我的事...ㄏㄏ)
加油吧....更多有趣的project將會讓open source的世界越來越多采多姿的