Archive for the ‘Hack’ tag
Bibot3 新功能
好吧,拖了很久才寫。
自從 bibot2 從 zion 人間蒸發之後[1],就開始了用 mono 寫新的 bibot3 的計畫,但是對於到底要有什麼功能一直沒有什麼好點子。從 bibot2 的經驗來看,網址自動紀錄大概是最多人在用的功能,我從來沒想到 URL.dot 掛掉之後會有那麼多人詢問…
某天跟 chihchun 閒聊,討論到把網址丟到某個 social bookmarks 服務(像是 del.icio.us) 的可能性,既然 del.icio.us 有公開 API,那麼應該不難實做,甚至比自己刻資料庫還簡單。
於是,在某天下課後查了一下 API 研究怎麼使用,然後就誕生了 http://del.icio.us/bibot。結果比想像中的有趣,因為 del.icio.us 有 tag 的功能,所以可以根據 tag 來判斷某網址是誰、在哪個 channel 提到的,也會自動紀錄時間和更新 title。
附帶一提,tinyurl.com 也有 API 可以呼叫,所以短網址的功能也可以輕鬆完成,不用再自己 parse 網頁的 output。
[1]: 某次停電之後,位在 zion 的 lvm 上的某 vserver 整個消失,只剩下 lost+found ,至今找不到原因。
ASP.NET 2.0
今天下午心血來潮測試了一下 mono 的 ASP.NET 支援,mono 除了有 apache 用的 mod-mono 模組之外,還提供了一個 standalone 的簡單 webserver — xsp/xsp2 ,主要用來做開發測試用。
用 C# 來寫的程式都很正常,不管是 1.0 或 2.0 profile 都可以跑,可是後來想要測試 Nemerle 時卻不斷發生錯誤…
作 .NET compiler 的人應該要提供 Codedom 的 CodeCompiler,CodeGenerator 等等,供其他程式利用內部 DOM 結構動態產生程式碼,主要是用在 ASP.NET
原來 Nemerle 所實做的 Codedom 是從舊的 C# 版本移植的,後來沒有持續更新到 2.0 所以有些地方會出問題,像是沒有使用 partial class,不能把 aspx 與 codefile 分開等等,為了修正這些錯誤下午都在看 Codedom 與 System.Web.Compilation 的東西,現在已經可以正常的用 Nemerle 寫 ASP.NET 2.0
patch 在這裡。
Update: This patch has been applied.
ROTE - Our Own Terminal Emulation Library
librote, 是一個 console 底下的 terminal emulator ,這有什麼用呢?為什麼在 console 下還需要 terminal emulator?
因為它可以內嵌在在許多不同的程式裡面,尤其是 ncurses 的程式,可以把 rote 的 output 直接寫到一個 WINDOW 裡面,對於要內嵌 terminal 功能的程式來說非常方便,甚至還有人利用這個 library 寫出網頁用的 terminal emulator — anyterm。
我是在找有什麼東西可以幫助我完成 console-chewing 的 library 時發現這個的,真的非常方便,剛剛花了些時間便完成最基礎的中文輸入功能。(以 off-the-screen 的方式)
不過對於多位元的編碼似乎無法處理,一些 utf8 的字會被切割,看來還是要花時間 hack 了。
System.Text.UTF8Encoding
在用 SmartIRC4Net 寫 IRC 程式的時候發現,如果把 encoding 設成 System.Text.Encoding.UTF8 會導致無法連上 IRC server。
很好奇的看了 SmartIRC4Net 的 code 結果沒什麼收穫,用的是一般的 StreamWriter 的初始化方法;如果改用 System.Text.UTF8Encoding 就可以正確連上了,而且這是 StreamWriter 預設的 encoding。
到底 Encoding.UTF8 和 UTF8Encoding 兩個有什麼不一樣呢?看了一下 mono 的實做方法,使用上這兩個都是 用 UTF8Encoding 的 instance,只是 Encoding.UTF8 是有 BOM 的,UTF8Encoding 則預設沒有。
就是因為那個多出來的 BOM 導致 IRC server 無法認出正確的指令(因為不是 vaild ascii code),在一般使用上也要注意這兩者的差別。
用 meld 來做 merge
今天在把 libchewing 的 utf8 branch merge 到 trunk 去,發現 meld 用起來真的很方便。
首先因為我是用 svk 來管理的,所以先 export SVKMERGE=meld,這樣 svk 在需要 merge 的時候就會自動呼叫 meld。
然後 svk smerge //mirror/chewing/libchewing/branches/utf8 就會開始自動 merge,碰到 orig 跟 trunk 還有 branch 都不一樣的時候就會呼叫 meld 出來做 3 way merge,我只需要用滑鼠點選要使用哪一個 branch 的更動就可以了,不用辛苦的比對。
SCIM Debug
最近要測試 libchewing 的 utf8 branch ,最好的方法就是平常就用。 一開使用起來都沒什麼大問題,可是跟 scim-chewing 搭配起來有時後過一段時間沒打字,下次要輸入的時候就會在組字的時候 crash 掉,用 genkeystroke 就不會有這種問題。
scim-chewing 最近實在太容易掛了,還好我終於學會怎麼看 scim 的 log o_O。方法就是
- configure 加參數 –enable-debug
- 啟動 scim 時加參數 — –verbose [0-7]
這樣 scim 就會把 –verbose [0-7] pass 給 scim-launcher,進而啟動 verbose 模式。
ASUS Laptop 上的 LED
我這台 ASUS 的 Laptop M24NE C5PDR 上面有四個 LED 燈,分別代表了 power, battery, email, wireless ,在使用 windows driver 時會自動控制這幾個燈號,很幸運的,從 Linux 下面也可以透過 asus_acpi 控制這幾個燈號,例如要讓 email 燈亮,只要 echo 1 > /proc/acpi/asus/mled 就可以,所以我分別設定了有新郵件時,讓 mled 亮,搜尋到 AP 時,讓 wled 亮,非常的方便
底下是 wifi led 設定 script:
#!/bin/sh
#set -x
WIFI_STATE=off
TOGGLE=false
trap 'leave' INT QUIT TERM
leave()
{
echo 0 > /proc/acpi/asus/wled
echo "Wifi Led Monitor: off"
exit 0
}
while true
do
if [ `cat /proc/net/wireless |sed '1,2d'|awk '{print $4}'|bc` -gt 0 ]
then
if [ $WIFI_STATE = off ]
then
WIFI_STATE=on
TOGGLE=true
else
TOGGLE=false
fi
elif [ $WIFI_STATE = on ]
then
WIFI_STATE=off
TOGGLE=true
fi
if [ $TOGGLE = true ]
then
if [ $WIFI_STATE = on ]
then
echo 1 > /proc/acpi/asus/wled
else
echo 0 > /proc/acpi/asus/wled
fi
fi
sleep 1
done久違了,粗體字
距離上次測試 freetype2-CVS 又過了幾天,今天在 Firefly 的討論區看到又有新發展,點陣字部份的粗體支援也已經加進去了,而且都是預設 enable 的,表示下次 freetype2 release 極有可能就有完整的粗體支援了
剛剛興奮之餘,馬上抓了 source 來測試,編譯完之後,又是興奮的重新啟動 X Window ,真是太棒了,馬上體驗到許多的粗體字,畫面很好看,在此謝謝 Chia I Wu 與 Firefly 兩位前輩的努力,讓中文的顯示越來越趨近完美.. Clap!!
我用的系統是 Debian ,所以我是以包成 deb 的方式安裝,有興趣的人可以自己從 CVS source 安裝,或是跟我拿已經包好的 deb
Bibot
嗶啵特機器人,之前就想寫的程式,給 IRC 用的。主要提供一些 Debian 相關的命令,還有報新聞的功能,參考了 gugod 的 jabbot 寫法,但是完全是重新寫的,採用和 jabbot 類似但不同的架構,和 scim 的 socket 介面比較相似。用的是 Perl 的 POE::Component::IRC 與 POE::Component::IKC 模組,文件不多,只好慢慢摸啦
http://OpenSVN.csie.org/Bibot
新版 irssi 的 recode
那裡有新版 irssi ?
debian 上的 irssi-snapshot 有夠舊的,所以你需要到 irss.org 上去找一個比較新的 irssi 來用
開發中的 irssi 有 built-in 的 recode 支援,可以自動對 topic、message、action 等做轉碼動作
可是轉了這麼多,有一個沒顧到,那就是 nick ,可能是因為大多數 server 不允許 ascii 以外的字元作為 nick name 吧,所以作者沒有顧慮到
為了掛 IRC.hinet.net/#gentoo 所以只好下海黑了…
還好 irssi 的 code 結構分明,很容易看,馬上就有了可以 work 的版本,會對 nick 進行 recode,從此,我的 irssi 裡面不再有亂碼問號
patch 已經寄給 upstream author,看看會不會被接受吧 ccc