2007/08/29

[Linux] 問題記錄

WARNING: terminal is not fully functional

每次要 man 東西的時候就會跑出來,現在看 LinuxQuestion 上的解釋 ,好像說是
apt-get install ncurses-term
就可以解決。

[Programming] 自動偵測編碼

有參考到 Tsung 的 blog 裡頭寫到的 php.net 上的 function ,不過顯然還不大行:
$str ="中文測試";
echo mb_detect_encoding($str)."\n";
$str = iconv("utf8","big5","中文測試");
echo mb_detect_encoding($str)."\n";
echo $str."\n";

執行下去你就知道了... 對我們而言,偵測最重要的就是分出 utf8 跟 big5 的差別。
但是連這麼單純的字串都分辨不出來,就不用提後面的部份了。
所以 php 應該先淘汱掉(?) *註

然後 Ticore提到另外兩個工具,結果他已經寫了出來。

用Google一找,找到兩個
分別是 Chinese Encoding Guesser 與 Mozilla charset detector
後者就是 Mozilla 在用的編碼檢測 Java 版

試用的結果 前者效果似乎不錯
但是它只會得到一個偵測結果
而 Mozilla 版的效果欠佳
尤其是 Big5 編碼偵測結果幾乎都錯
難怪 Mozilla、Firefox 瀏覽器自動偵測效果不好.....

不過它的特色是幾乎涵蓋大部分編碼種類
而且猜測的結果不只一個
也可以預設猜測的語言種類

這兩種都可以針對位元陣列、檔案或者是一個URL來作偵測

不過 Java 的部份我不熟,所以先行跳過。

Jserv之前也有提過一個 pcmanx 的 addon:

我初步將 NSPR (Mozilla Runtime) 一類的包袱去掉,並且用 G++ 的 -fno-rtti、-fno-exceptions,以及 -nostdinc++ compilation flags 來編譯 ,如果將 -lstdc++ 換成 -lsupc++,還可進一步得到 C-only library,目標是作成一個 add-on,讓 [PCManX] 可透過 dlopen 來操控內部實做,初步完成自動偵測文件編碼與測試程式,名為 [charset-detector] (bzip2 tarball)。


不過在 make 的時候出了問題:
nsSBCSGroupProber.cpp:(.text+0x18f): undefined reference to `free'
/usr/bin/ld: .libs/chardetect.so: hidden symbol `free' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
make: *** [chardetect.la] Error 1


看起來是 linker 在 libstdc++ 上找不到 free ?
不過不懂為什麼,所以還是沒得用。

最後用到 python-chardet
>>> import urllib
>>> rawdata = urllib.urlopen('http://yahoo.co.jp/').read()
>>> import chardet
>>> chardet.detect(rawdata)
{'encoding': 'EUC-JP', 'confidence': 0.99}

import glob
from charset.universaldetector import UniversalDetector

detector = UniversalDetector()
for filename in glob.glob('*.xml'):
print filename.ljust(60),
detector.reset()
for line in file(filename, 'rb'):
detector.feed(line)
if detector.done: break
detector.close()
print detector.result


不過,這個工具還是有問題....
我丟 Big5 進去,它會回 ASCII....

所以這部份還是很麻煩....

--
更新:
參看過這篇之後,把 encoding_list 再修了一下順序:
function detectCharset($str){
$encoding_list = 'ASCII, BIG5, EUC-CN, UTF-8';
return mb_detect_encoding($str, $encoding_list);
}
$str ="中文測試";
echo detectCharset($str)."\n";
$str = iconv("utf8","big5","中文測試");
echo detectCharset($str)."\n";

現在測試出來的結果應該是這個最能滿足,暫時先用這個看看...

2007/08/26

[Linux][初學者] Windows 加灌 ubuntu 記錄

由於小猴子要出國,所以為了省錢,我提議跟小猴子的 Notebook 交換,把我的 Notebook 給她。如果她出國之後還是有問題,再買台 notebook 過去給她。當然接著問題就來了,我的筆電換做小猴子用的比較簡單,把 Ubuntu Linux 裡面的資料備份下來,接著把 Linux 跟 grub 砍掉就好了。整台電腦就是小猴子熟悉的 Windows 。不過,我的需求就沒那麼容易滿足了。我需要的是 Windows/ Linux 並存的筆電。

所以我的計畫應該是:
1. 用 LiveCD 開,用 gparted resize partition
2. 灌 Ubuntu Linux
3. 把之前的資料從隨身碟裡再拿出來,灌回去。

結果執行的時候,先是遇到了 LiveCD 無法使用,試過 ubuntu linux 7.04 , 6.10, 6.04 都無法開啟 graphic mode。再用 B2D 2005(同樣無法使用)。去翻了一下 ubuntu 官網的說明,改用 alternative CD 來做 text mode 的安裝才解決。接著在 mount 隨身碟時發現到我的 home data 沒有保留下來(小猴子帶回屏東了 ... 囧)

沒辦法,只好從公司那邊 scp 回來。 (狡免有三窟咩,我怎麼可能把重要的資料只放一邊?)
一開 Xwindow ,進來的是 gnome 的 splash 畫面。(幹…好慢)看起來 Gnome 是不能接受的了。
只好先不管個人資料的部份,先把 fvwm-crystal 的資料先 scp 回來。(因為 fvwm-crystal 官版的 script 有很多我不能接受。 ◀ 像是 alt + F4 不是 close/destroy window ,我在 .fvwm-crystal/preference/Startup 裡面又不能用 Key 指定,還有 AllToDesktop 跟 WindowList 的 button 等等)

等到我把 WM 搞定,隨即發現,我的很多 service 在浪費我這台筆電上面很有限的資源:
像是 cupsys 其實平常沒在用,可以關掉。bluetooth 我根本沒在用,也關掉。
wacom 有在想要買板子來玩玩,但是還沒入手,也不用開。關了七八個 service 之後就發現到我的 dm (display/login manager)開著也是一種浪費。我的 notebook 只有我一個人在用,不需要用到 daemon 來管理我的帳號。

所以用 google 找了一下文章(AutoLogin to Xwindow

簡單的說,就是讓開機(boot)完,自動 su 成 anton 就 startx 。這樣的做法有安全上的顧慮,不過一來自已家裡應該還 ok 。二來 fvwm 允許你在啟用後執行自已喜歡的 script ,我們可以在那個時候啟用 screensaver lock 或著是 xtrlock 之類的程序來給 Xwindow 上鎖。

不過這邊文章討論到 /etc/inittab 在 ubuntu 裡面不存在的事情。這是因為 ubuntu 已經把 sysvinit 從系統裡面用 upstart 取代了。本來想把 sysvinit 灌回來,後來發現這樣 /dev/initctl 會出問題,所以後來還是放棄。

X: user not authenticated 的問題上面也可以看這篇文章的解決方式。
就是
vi /etc/X11/Xwrapper.config
# 把 allowed_users=console 改成 allowed_users=anybody


startx -- :1

另外由於 im-switch 是在 /etc/X11/Xsession.d/ 底下啟用。所以 startx 的時候沒有引用到這個部份的功能,所以必須在 .xinitrc 裡頭追加
source $HOME/.xinput.d/zh_TW,這樣才能讓輸入法正常使用。

這些東西做完,我還有 pcmanx 跟 pidgin 要重新 compile , firefox 裡面的 extension 跟 plugin 都要重新安裝。還有一堆密碼要追加回來。

噁... (結論是: 重灌好累。)

2007/08/24

[Programming] 用 PHP 畫條碼


之前對 PHP 的概念一直沒有很好,只是把它當作一個方便的工具而已。
後來有好朋友 johnney 用了 php 上的 套件工具 (Pear) ,就覺得 .... (PHP 已經肥大了,還用到這麼肥的套件,一整個反感。)

今天為了找畫 barcode 的 php script才發現 pear 自已發展出了一套 package manager ,你可以 list/search/upgrade/install/remove 等等對你的 pear module 作管理的動作。 pear 總還是有頭腦的。

拉回來講 php 畫 barcode 怎麼畫?
很麻煩嗎?答案是:如果用 pear 其實很簡單:
require_once("Image/Barcode.php");
$bc = new Image_Barcode;
Image_Barcode::draw('1234', 'int25', 'png');


才三行?

西底~ 就是這麼簡單的三行結束。

2007/08/22

[Linux] 衝 IP 事件記錄

話說系上有一台 windows 2000 跟 linux 撞在一起了。
為了這台機器,學姐幫我跟計中那邊的負責人要求讓 gateway 只讓我的 "00:0D:61:51:56:A7" 這台 mac address 的機器通過。
不過還是有問題,因為系辦跟這台機器在同一個 LAN 底下,所以系辦還是常常看不到這台機器。
為此,我又只好寫一個 script 再來發 broadcast 給底下的機器。

(我自已的 linux 機器會比較好辦點,就
arp -v -s x.x.x.x 00:0D:61:51:56:A7就可以把往 x.x.x.x 的封包通通指定往 mac 為 00:0D:61:51:56:A7 的機器去。

好煩,學姐怎麼會忘了要註冊這個 ip 啊...
現在補註冊了還一堆事留給我擦... 囧

2007/08/16

[Linux] Pidgin 2.1.0 Bug Found!

這幾天看到 pidgin出了 2.1.0 的版本,很高興的跑去下載來用。
雖然 Ubuntu 要自已下 source 來 compile ,不過還算 okay 。 (反正習慣了...)

不過一起來就 crash 還 dump 一堆東西出來是怎麼回事?
乾脆再 ./configure --enable-debug 來看一下 debug verbose 的訊息好了,結果還是:

Thread 1 (Thread -1222191408 (LWP 17824)):
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb754b3d1 in select () from /lib/tls/i686/cmov/libc.so.6
#2 0xb76d14a0 in g_spawn_sync () from /usr/lib/libglib-2.0.so.0
#3 0xb76d186c in g_spawn_command_line_sync () from /usr/lib/libglib-2.0.so.0
#4 0xb6e5c732 in ?? () from /usr/lib/libmono.so.0
#5 0xbfeb9970 in ?? ()
#6 0xbfeb9958 in ?? ()
#7 0xbfeb9954 in ?? ()
#8 0xbfeb9950 in ?? ()
#9 0x00000000 in ?? ()
#0 0xffffe410 in __kernel_vsyscall ()


=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================

已經終止

真是奇怪... 去 google 了 pidgin 2.1.0 的版本 bug report ,好像都沒人回應這種鳥問題。

只好自已來找一下,結果才發現 pidgin 已經把 log 跟 config 都放到 .purple 裡面了,原本 .gaim 裡的 msn/gtalk log 都還留在那裡。
嗯…也是啦,都換了名字了,早該換用別的位置了。 (不過為什麼是用 libtool (libpurple)的名字,而不是用軟體名(pidgin)呢?
pidgin 的開發團隊還有別的計畫要共用哦?

嗯,這是題外話,接下來我用 pidgin -n 不啟用任何 account 的設定來檢查 pidgin 是否是因為 config 的關係才不能啟用,
結果果然看到正常的 window ,然後再比對發生問題的地方,馬上就猜到是 Gmail Notification 的問題了。

結論:
ubuntu/pidgin 2.1.0 請先 disable Gmail Notification 的功能。(新郵件通知☑ <--- 不要勾)

以上記錄。
--
後記,本來想再上去 pidgin 官網發 feedback ,結果又不巧遇到 pidgin 網站掛點:


好吧,我沉默就是。

[Windows] 好用的小工具: AutoHotKey

做為一個 Linux 的愛好者,轉移到 Windows 上面的時候,往往難以適應 Windows 調整快捷鍵的方式,所以 google 了一下,結果發現很多人愛用的 "Auto Hot key"。不多說,就來給一個範例說明如何使用 Auto Hot key 來...