google code-beautifer

星期一, 10月 29, 2007

Linux 的Palm及Zaurus Big5/Unicode同步解決方案

Palm OS5上面的中文是Big5,而MAC OS X /Windows XP系統上是Unicode,Evolution也是。直接拿PC 上的unicode 給Zaurus 有潛在的風險,見mfhsieh 寫的[分享] Zaurus 的 UTF-8 編碼

Palm跟Linux同步可以用jpilot 或Evolution + pilot-link (pilot-link 純粹是一個同步的管道)。jpilot則是自成一格的軟體,好處是可以在輸出時選編碼。

我偏好用Evolution,除Linux 外,不但支援Mac OS X,還有win32 版(2.8.簡易安裝版Calendar 好像還沒完成,不過現有2.16自行安裝版)。Mozilla 計劃的Thunderbird+lignting 的方案現階段還不成熟,就暫不考慮。但要把 pilot-link的Big5/Unicode同步搞定。pilot-link裡libpisync/util.c 裡面有這一段

#define PILOT_CHARSET "CP1252"

/***********************************************************************
*
* Function: convert_ToPilotChar
*
* Summary: Convert any supported desktop text encoding to the Palm
* supported encoding
*
* Summary: Convert from Palm supported encoding to a supported
* desktop text encoding. The Palm charset is assumed to
* be CP1252. This default can be overridden by the
* 'PILOT_CHARSET' environment variable.

所以暴力法就是在/etc/profile 下強迫
export PILOT_CHARSET=BIG5
讓輸出同步資料時編碼轉Big5。(注意BIG5大小寫)。其實應該可以用script來作。

這基本上是叫用 iconv ,所以我相信在zaurus 上,只要把這個port 到
KO/Pi(KDE Pim/Platform-independent)
http://sourceforge.net/projects/kdepimpi/
Zaurus 就可以同步Big5資料
不過我猜測可能要給glibc 瘦身,加入
/usr/lib/gconv/BIG5.so
/usr/lib/gconv/UTF-16.so
/usr/lib/gconv/UTF-32.so
/usr/lib/gconv/UTF-7.so
/usr/lib/gconv/UNICODE.so
這些檔...

目前Palm行事曆,連絡人,todo跟Evolution同步都沒問題,但在Evolutiong上的備忘錄(memo)摘要跟描述要完全一樣,不然無法同步。(palm 的備忘錄欄位較少)

星期六, 10月 27, 2007

Sony palm PDA 的軟體安裝跟其他PDA 基本比較心得

有人給我一台 Palm OS5 的舊clie TG-50 ,但是沒有安裝光碟,我在sony台灣網站上找不到軟體下載。感謝PALMisLIFE上網友MailCone 及mfhsieh 提供資訊我才順利完成軟體安裝。這篇是對那些熱心網友的回應。除了基本比較心得外,也對下一代PDA作一些推測。將分段刊出


基本軟體安裝

其中大部分的軟體需要去www.sonyclie.org 找,再針對個別需要Sony 美國的技術支援網下載換裝新版。

但www.sonyclie.org 需要寄電子郵件給管理員才拿得到帳號密碼。其中有原廠CD 的 iso 如tg50.iso,及個別的zip 如 SonyCliePC.zip。

原廠CD 的 setup.exe 程式會去執行 Palm desktop for Clie'.msi
Windows XP 會因為codepage 不同的緣故會找不到法文字母 e' 的檔名。直接跳過setup.exe,直接去執行 Palm desktop for Clie'.msi 是可以的。此外安裝完了時不會顯示正確的完成百分比。只有過一陣子強迫結束程式,重開機。

所以我改裝SonyCliePC.zip中的Clie Organizer for PC (1.0.040113.2)
Clie Oranizer for PC 會要求先去裝Palm Desktop 。不過 Palm Desktop for
Clie (1.00.031222.1)會有安裝完了時不會顯示正確的完成百分比的問題。裝完後,Add or remove Programs 就會正常出現CLIE Oranizer for PC 及Palm Desktop 。為什麼需要多一個 Clie' Oranizer? 因為 Clie' 有多個Clie' memo 提供非文字手寫筆記。這是Palm Desktop沒有的。

目前測試的結果,在英文版(但default codepage 改成中文,事實上等於中文版)上執行一般的同步沒有問題。

同步

第一次 hotsync 時 XP會去抓PalmUSBD,sys,在原廠CD \Drivers\Hotsync\裡有。
Inteliigence Sync Lite 在SonyCliePC.zip中的比較新(2003版),不過好像不支援 outllok express 的 address book 。

鍵盤

tg-50有內建小鍵盤,不過數字鍵要並用功能鍵才打得出,用注音輸入頗不便。但朋友的紅外線palm one universal wireless keyboard是可以搭配使用。上面就有獨立數字鍵,這是我找得到紅外線鍵盤搭配注音輸入最好的一個,裝上palm的驅動程式就能用了。理論上zaurus 也能用,不過還沒試成功。

大容量快閃記憶體支援

palm OS 據說只能認得第一個分割區。大容量快閃記憶體支援是一個問題。據說新版palm 機系統悄悄用了fat32,所以沒問題,有些人還自己把舊機系統改fat32也能用大容量快閃記憶體。Sony 的產品幾乎清一色用memory stick ,又貴又難用。據Sony官方說法,TG-50是不支援4G MS 的,而且2G 還得用高速的 MS才行,還不保證沒問題。真是爛。在美國看了半天,MS 比起 SD 卡還是天價。所以去網路標了片2G sony 的 high speed MS。等收到了再來更新使用心得。

clie 初步印象跟zaurus 與其他PDA比較

比較之下,palm 把最長用的小程式放在動態記憶體裡,切換速度很快。(1 秒)。這點的便利是那些需要 context switch 的大系統比不上的。zaurus 在這一點顯然比不上。出門在外要臨時找資料,palm 的反應時間會比較快。eee PC 就算CPU跑的快,恐怕也是一樣的情況。個人覺得1 秒內的反應時間是一個很重要的臨界點。想用個計算機去超市比價或算個小費要等長於1 秒就會讓人不耐。但是像查字典第一次啟動長於1秒就還好。palm OS 沒有真正的多工,切換反應時間變成瓶頸。
Palm Foleo 計劃掛掉了,無法得知他們對未來的想法。不過我覺得作業系統像palm OS 4/5 這樣有動態記憶體保留給專屬的常用軟體常駐是蠻重要的。

反應時間會比較快相對犧牲下的是功能性,palm一般人是用power run 之類程式把切換反應時間不太在乎的程式移到快閃記憶體裡,要用時再載入動態記憶體。等於回到了虛擬記憶體的作法。 但是每個連結要用去 lk 的動態記憶體。相對之下 TG-50 的 16M (只能用到11M)記憶體實在太小了。我連 gps程式都不太敢裝。而且這樣的做法不是系統原先就在API 裡規畫好的,不太穩定。有時會當機。

公開的手寫辨識程式跟實作資訊

最近在思考一些有趣的事情:中文的部首/字/詞是分別對應到英文的字母/字/詞。不知道中文詞的平均筆劃經過頻率統計加權後的結果會不會比英文詞小?(因為資訊傳達是以詞作單位,而不僅是以字作單位的任意組合)是的話,這到是半理論證明"中文輸入不會比英文慢": 所謂正體中文會妨礙科學進步的論調只是那些不深思熟慮的傢伙不經證明的夸夸之詞。我為什麼直覺這樣推斷?因為直覺上中文字形的的熵(entrop)平均值應該比英文字形的大。假如我的假說成立的話,以手寫來說,中文輸入會比英文快。

我的確是有在著手一些關連到中文的語料問題,這些是解決很多事的關鍵性基礎研究。不過對大多數的人而言,最重要的問題反倒是: 能不能有公開的手寫辨識程式?關於這點,目前看到公開的手寫辨識程式跟實作資訊有:

Palatis 寫了 Chrasis,似乎可以用滑鼠輸入。今年6月 的時候我曾試著在Mandriva 2007.1上編譯看看,但還不成功,後來忙就先擱著。

jserv 寫了這一篇從Chrasis 談手寫辨識引擎在移動裝置的機會,有提到一些相關的問題

歪林 (superylam@netcape.net)為了掌心雷跟百變小蒙恬寫了X Windows手寫板驅程程序及輸入法

根據網路上的說法,蒙恬筆豪華版(LLC 504)隨附的數位手寫版(型號FT-0405-U02),是由知名數位繪圖板廠商Wacom代工。而Linux 在wacom 的支援好像還不錯。臺灣的繪圖板就不知道。

繪圖板蠻貴的,我連每天要用的老舊交通工具都沒錢去修,一時沒辦法負擔得起這種昂貴的玩具。那天要是弄得到不管是臺灣或Wacom的繪圖板時,再來試試看把歪林跟Palatis的成果整合在一起。就看誰要先借我手寫版來開發了。

星期四, 10月 25, 2007

gnome 桌面上的"位置"如何設定

gnome 桌面上的"位置"如何設定

1.0 版 十月 25, 2007
2.0 版 Mar 17, 2008

Mandriva 最早是追隨 debian 的menu架構,後來逐漸轉移到XDG Menu System標準。2008有個工具在處理這些。不過我還沒找到在Mandriva 2007.1 上是如何處理這些。當時每次開gnome-terminal 都跑到~/Desktop 下。有點煩。反正現在升級了就不用管了。

Mandriva 2007.x


~/.mdk-folders
下面有幾個聯結
documents
download
music
pictures
video
就是相對應
"文件"
"下載"
"音樂"
"圖片"
"影像"
的位置

還有相對應的翻譯檔
documents-mdk.desktop
download-mdk.desktop
music-mdk.desktop
pictures-mdk.desktop
video-mdk.desktop

比如說我不喜歡桌面上的"下載"位置是指到 ~/Download/
想搬到 ~/Documents/Download/

我就執行
代碼:
rm ~/.mdk-folders/download
ln -s ~/Documents/Download ~/.mdk-folders/download

然後用utf8的編輯器如gedit 修改 ~/.mdk-folders/download-mdk.desktop裡的
代碼:
URL=file:///root/Download

改成
代碼:
URL=file:///root/Documents/Download

然後重新登入
(註: 用2007.1 當時,只登出/登入 gnome 我的雙螢幕左半桌面會怪怪的 系統重新啟動後就沒事)

Mandriva 2008


MDV2008 現在不用 ~/.mdk-folders了,新版遵從XDG 的式樣。如使用者名稱是加菲貓,那在
/home/加菲貓/.config
下面有 user-dirs

user-dirs locale
為保險起見,我用能判別編碼的編輯器來編輯
user-dirs locale 指定了locale 是
zh_TW
在~/.config/下的user-dirs.dirs檔裡面有幾個聯結,指定了桌面預設檔案夾名稱
XDG_DESKTOP_DIR="$HOME/桌面"
XDG_DOWNLOAD_DIR="$HOME/下載"
XDG_DOCUMENTS_DIR="$HOME/文件"
XDG_MUSIC_DIR="$HOME/音樂"
XDG_PICTURES_DIR="$HOME/圖片"
XDG_VIDEOS_DIR="$HOME/影片"

就是桌面位址相對應的
"桌面"
"文件"
"下載"
"音樂"
"圖片"
"影片"

我相信對應的英文檔名是
Desktop
Doucments
Download
Music
Pictures
Video
不過不太確定了

假如是在 utf-8 編碼, 對應
文件
下載
音樂
圖片
影片
這些位址檔名的逸出字元表示是
file:///home/加菲貓/%E6%96%87%E4%BB%B6
file:///home/加菲貓/%E4%B8%8B%E8%BC%89
file:///home/加菲貓/%E9%9F%B3%E6%A8%82
file:///home/加菲貓/%E5%9C%96%E7%89%87
file:///home/加菲貓/%E5%BD%B1%E7%89%87

假如是在 big5 編碼, 對應檔名的逸出字元表示是
file:///home/加菲貓/%A4%E5%A5%F3
file:///home/加菲貓/%A4U%B8%FC
file:///home/加菲貓/%AD%B5%BC%D6
file:///home/加菲貓/%B9%CF%A4%F9
file:///home/加菲貓/%BCv%A4%F9

(這使用者名稱加菲貓要換成對應的英文)

怎樣查utf8 中文的逸出字元


看到一堆逸出字元怎麼查誰是誰?後來發現一個方便的方式:用python

我在gnome-terminal 下用zh_TW.UTF-8的locale執行python,直接把字串輸入,就會傳回字串utf8編碼

$ python
Python 2.5.1 (r251:54863, Jan 14 2008, 13:07:32)
[GCC 4.2.2 20070909 (prerelease) (4.2.2-0.RC.1mdv2008.0)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> '桌面'
'\xe6\xa1\x8c\xe9\x9d\xa2'
>>> '下載'
'\xe4\xb8\x8b\xe8\xbc\x89'
>>> '文件'
'\xe6\x96\x87\xe4\xbb\xb6'
>>> '音樂'
'\xe9\x9f\xb3\xe6\xa8\x82'
>>> '圖片'
'\xe5\x9c\x96\xe7\x89\x87'
>>> '影片'
'\xe5\xbd\xb1\xe7\x89\x87'

假如是 big5 編碼,改用zh_TW 的locale執行 python

在Nautilus/gnome 下加入更多的捷徑


當然常用的位置不只這些,系統已在~/.gtk-bookmarks下預設了幾個,如2007時的
代碼:
file:///home/加菲貓/.mdk-folders/video-mdk.desktop

我們也可以自己加,如
代碼:
file:///home/data

在gnome 的檔案管理系統會用最底層的目錄名作為名稱顯示萬一不同目錄最底層的目錄卻同名的話,還可以用別名,如
代碼:
file:///mnt/win_e/data wine_e_data

不過一但加入更多的位置捷徑,文件/下載/音樂/圖片/影片這幾個就會從位置的頂層,移到叫"書籤"的下一層位置裡

延伸閱讀


用 convmv 來轉檔名編碼

關於轉移到XDG Menu System,這一篇有一些參考價值
http://wiki.mandriva.com/en/Development/Howto/MenuMigrationToXDG

附錄:


(註: 下面這篇本來名為"mandriva 2006 調校 "發表在CLE
http://cle.linux.org.tw/forum/viewtopic.php?p=2916&sid=b8971dc6c482b78f9ebdc05efdfa0069
不過那邊有人見不得人好,自己一點牛肉都端不出來,卻愛批評別人的燒餅會掉芝麻。還會不時偷看我的文章然後在網路上亂罵人,所以我就懶的過去修改了。時間久了就會自然證明孰是孰非。這只是作檔案存檔,不過gtk 跟更新的部分還是有效的)

有圖有真相

Google 正體中文搜尋 "Mandriva xdg" 這篇文章當時排行第一,現在還是前幾名(不過其他的不是我寫的,就是其他不相干的資訊)。其實我當時就有存檔,只不過跟大眾證明事實,並不比事實本身重要,所以沒有第一時間就拿出來,而是到改版把文章改的更好時才拿出來。那些只會亂批評別人的人,除了會第一時間跳出來罵人,口水一地外,長期看下來,什麼實質東西都沒有。努力工作時間寶貴,我不會隨這種人的污衊起舞,因為事實勝於雄辯。

想瞭解這些人的惡形惡狀,請參考垃圾堆1

星期日, 10月 21, 2007

用Emacs 開發C 程式

Version 1.1

(Oct 21: 1.0版)
(Nov.12 1.1版: xcscope 的深入討論獨立出來自成一節)

最近被學校猛操 C 程式開發,我覺得開發C 除錯的時間要比lisp長很多,非得找方便的開發除錯環境來幫忙不可。理論上我可以用eclispe或anjuta 這種大傢伙來開發,但我一邊開發除錯還要一邊作別的事,那些不是很方便。最好的選擇還是找能跟emacs 搭配的工具。

目前在emacs上裝了
ecb
xcscope
xrefactory (xref-1.6.10)
覺得工作起來順手多了。這三個各司其職:
ecb 比較接近快速的瀏覽 source code 整體本身
靜態的呼叫範圍相關問題用xcscope查
跟編譯比較接近的相關問題用xref
三者都跟emacs 的source buffer 緊密結合

除了這三者外,還有一些其他的工具,其中cbrowser好像很久沒更新。SimpleCallTree 我弄不出來,作者勸我用比較正式的工具代替。

Code Crusader 5.2.1 是商業程式。demo有兩種,一種是限制使用時間,另一種是限制最多開啟5 個檔案跟5 個視窗但還要註冊。我不是很喜歡。

Doxymacs等於是Doxygen + {X}Emacs。我根本沒時間好好弄文件,就先擱著。

還有一些不熟的地方,等日後弄通了再整理出來。參見CategoryProgrammerUtils

ecb


結合gdb, outline-mode...這些說起來話長,先放一張圖片供參考。下面會再提到。可以看到在History 視窗裡某些檔案icon 從綠點變成橘點,表示下面這些檔更動過
hmm.cpp
Point.h
其他沒有綠點/橘點的檔案(如chineseNL.txtP),是其他正在編輯但不相干這個工作目錄的。但在目錄視窗裡可以看到Makefile 被動過,所以在這會從綠點變成橘點,但不是emacs 弄的,所以不出現在History 視窗。


xcscope


跟著cscope 有個 xcscope ,提供cscope 支援,可以讓搜尋變數的過程更簡便。附圖可以看到xcscope 把搜尋viterbi 這個符號的兩個結果同時在%cscope%裡顯示

關於xcsope 的深入討論獨立出來,參見第三部分:xcscope整合。

XreFactory


XreFactory(下面簡稱xref)是 www.xref-tech.com 的產品。其中 c/java 是免費使用。現在是1.6.10版。
C/C++ 版現在是2.0.13版,只有八天合法試用期,過了就該買license。
參見http://www.emacswiki.org/cgi-bin/emacs-en/XreFactory

xrefactory 可以列出沒有用到的變數。當編譯時出現問題時,假如選擇查看 log 檔,*xref-log* 視窗會列出有問題的行。如同 cscope,這時用鼠標移到其中想要跳過去查看的那一行,按滑鼠中鍵或左鍵,主程式視窗列表就會跳到對應的那一行。

XreFactory會在~/下產生 .xrefrc

每次建立一個新project 時會產生一個以
[子目錄]
開頭的區塊,裡面可以設定 編譯的選項。我自己是把 make debug 放進去,在
Makefile 註明 gcc -g 好產生符號表供dgb使用。

三者整合使用


這兩者分別控制獨立相對應的主程式列表視窗。

假如螢幕夠大,建議開兩個frame ,其中一個執行 ecb ,一個不要執行 ecb。因為 xref切frame成左右兩個視窗,建議在沒有執行 ecb的frame執行xref 動作。在有執行 ecb的frame 下切到*cscope* 的 buffer執行cscope 動作

寫好直接在 emacs主選單下選 compile。
編完直接在 emacs主選單下選 tool -> debugger(GDB)

以我手上這個程式為例,跑到最後出現
Program received signal SIGSEGV, Segmentation fault.
0x00002b4736238eab in fclose () from /lib64/libc.so.6
(gdb) where
#0 0x00002b4736238eab in fclose () from /lib64/libc.so.6
#1 0x00000000004016d6 in main (argc=1, argv=0x7fff74d3e1a8) at test.c:488
(gdb)
所以就知道程式死在第488行附近

星期六, 10月 20, 2007

GCC 最佳翻譯徵求懸賞

在我的"現代中央處理器的C 整數長度"blog 文刊出後,蒙 jserv 立即回應參考 "理解 64-bit Programming Model 一文後,才發現了zonble 之前竟然blog了 本日金句:LongLong Long is Too Long」這篇妙文。我決定來個最佳翻譯徵求懸賞,共襄盛舉:

請中文翻譯 mjhsieh 當初碰到這一段gcc 編譯錯誤:
"test.c:22: error: `long long long' is too long for GCC"

原則上要詩/技(geek)意雙全為佳。

我會找幾位自由軟體社群中對文藝有涉獵的朋友作評判,有可能的話還會請一位
詩畫俱佳的藝術家前輩作評判。比賽截止日期暫定 2008 詩人節,我記得我手頭
上還有一本全新鹿橋寫的"人子"躺在某處箱子裡。要是找不到的話,至少會有一本 Linux的書作為獎品。

願意加碼提供獎品,或有其他促進更大參與層面主意的朋友,也請不吝賜教。



我先拋磚引玉:

測試點兮二二行, 編譯錯誤兮信息:
"長兮長兮長整兮、過長兮於姬兮兮"

(註: 行也可讀成 "行"走的音)

星期五, 10月 19, 2007

現代中央處理器的C 整數長度

最近要寫一些C程式處理大筆資料,有點擔心會整數溢位。
寫了個C程式試了下,發現很有意思的事

在AMD CPU 32bit Athlon gcc 4.1.2 傳回
bytes: char:1, int:4, long:4, unsign:4, unsign long:4, long long: 8

AMD 64bit Athlon gcc 4.1.2 傳回
bytes: char:1, int:4, long:8, unsign:4, unsign long:8, long long: 8

Sun Ultra sprac III (64 bit CPU) gcc 3.4.4 傳回
bytes: char:1, int:4, long:4, unsign:4, unsign long:4, long long: 8

看起來Sun 這版gcc 還停在 32 bit

其實一般應用 32 bit signed 整數(-2,147,483,648 到 2,147,483,647)已經蠻夠了。要省空間就用 short int 或 char


short int (2)
-32,768 to 32,767
(K& R 說是 -32,767)

unsigned int (4)
0 to 4,294,967,295

int (4)
-2,147,483,648 to 2,147,483,647
(K& R 說是 -2,147,483,647)

char (1)
256 character values

float (4)
1.2e-38 to 3.4e38

double (8)
2.2e-308 to 1.8e308