2007-09-19

Skype1.4.0.99 on Linux

Skype1.4.0.99 beta for Linux版本已經release一段時間,我第一次裝這版本時,它告訴我要qt>4及glibc>2.4,我的Slackware預設環境是qt3, glibc2.3,我想辦法去把qt4.3及glibc2.6.1給build起來,我在編譯qt4時,沒遇到大困難,倒是glibc2.6.1需要我把gcc換成>4.0才能build,因此我又把gcc換成v4.2.1,我沒有自行換過glibc套件,因為我記得系統很多東西都depend到glibc,我怕換掉之後,整個系統開不起來,因此,我也是把glibc編譯好之後,再用export LD_LIBRARY_PATH=...的方式來動態地告訴應用程式該去找那個library,結果這方式可以work,Skype1.4.0.99beta終於可以跑了。

skype1.4的介面與1.3有點差異,變得簡潔許多,原本上方的menu bar不見了,取而代之的是search bar,再接著一個status bar之後,就是contact list,我覺得這一版的skype,整體來說給使用者一個簡單操作的印象,只可惜這一版的skype還是沒有提供付費用戶可以發簡訊到手機,希望下一版的Linux Skype可以加上這功能。

2007-09-16

Acrobat Reader 8.1.1 for Linux

等了好久的Acrobat Reader 8.1.1 for Linux終於來了,困擾許久的效能問題終於解決了,另外一方面,中文語系的支援似乎也不用像在7.x版需要另外再去下載,我是一裝起來就看得到unicode的中文字,很方便。

我用慣了open source軟體,發現open source軟體有個特點,就是某個版本release出來之後,Linux與Windows平台上的版本會在release時同時被支援,像是我常用的OpenOffice, pidgin, firefox, seamonkey等等都是這樣,但,close source軟體就常常不是這樣,Windows平台一定首先被支援,再來就是MAC,Linux平台上的版本就還要等上一些時間才用得到,我常用的Skype與Acrobat Reader就是二例,講到Skype才扯,Windows版本的skype都到3.5.xxxx了,可憐的Linux使用者還在1.4.0.xxx,而Linux 1.4版本的skype還要求 QT 版本要>4.0,glibc要>2.4,我目前用Slackware11,就沒辦法用skype1.4,只能用破破的1.2,我還是skypeout付費用戶呢,一想到要透過skype發簡訊給手機還得重開機到WindowsXP就覺得很無奈。

Acrobat Reader就好一些,我今天下載8.1.1之前,用的版本是7.0.9,還不算太舊,只是效能差了一些,功能都有,就只好湊合著用,誰叫它是close source。

想到前一陣子,Skype的Linux版本因為alsa問題被點出來之後,就有人提到若它是open source,這問題肯定很快被解決,但由於是close source,只能指望skype趕快release新版給我們用,不知道以後會不會有一個open source軟體能夠與 skype 互通,至少是PC對PC,那就真的造褔我們這些Linux使用者了。

2007-09-07

Decode IM content

之前幫公司所代理的一個網路封包解析產品寫一個plugin,這plugin的目的是要能夠把IM的封包內容解析出來,一般的封包解析軟體都只有把raw packet給解出來,這產品當然也不例外,所以我們就想在這上面加一個plugin來做這件事。
在寫這plugin過程中,由於原廠是用.NET2003來開發,也讓我有機會熟悉.NET2003,並用它來完成工作。

原廠有提供一個半成品,這個半成品能處理英文的訊息,中文訊息會變成亂碼,我看了程式碼之後發現其實程式當中已經有做多國語言的處理,包括定義UNICODE,_UNICODE,在把char*丟給CString之前也做了_T,另外也呼叫了A2T等marco,但是看到的就是亂碼。

查了資料後發現Windows 2000/XP等版本已使用unicode當預設的language encoding,所以所有非unicode的字元需轉成unicode才能正確顯示,否則一律當ascii處理,但IM封包內容的language encoding,就我decode的結果發現它其實是以UTF8來encoding,因此我在程式當中加上了MultiByteToWideChar()來把raw packet的訊息部分轉成"寬字元"(?),再丟進CString以及CListCtrl(程式當中的GUI使用CListCtrl來顯示封包內容),這樣才完成所有轉換工作以及最終的正確顯示unicode字元。

這是我之前在改寫這plugin時發現程式得這樣轉才正確,只是不知道是不是一定得這麼麻煩,因為我也找到其他資料發現似乎新版的VC++已不再需要呼叫MultiByteToWideChar()就能正確轉碼,只需透過_T及A2T的轉換就行,但這方式在我環境就是不work。