打包gcin到ppa的心得

我是沿用1.4.6由kanru所寫的debian目錄,kanru大似乎沒考慮到64bit的部份,放到ppa的時候,因為會build出各種arch的版本,所以就需要處理。
我碰到的問題是在於目錄名稱,32bit是lib,而64bit則是lib64,在debian/rules裡,我用 DEB_BUILD_ARCH_BITS 來決定是處理lib64或是lib,原來的gcin.install也改用gcin.install.in,然後用sed來替換,產生gcin.install:

# 略...gcin是先裝到debian/tmp下,後續再用搬目錄方式,搬到debian/gcin下,這個target跑完,dpkg-buildpackage會去包debian/gcin下的檔案。
if [ "$(DEB_BUILD_ARCH_BITS)" -eq "64" ]; then \
mv debian/tmp/usr/lib64/gtk-2.0/immodules/* debian/gcin/usr/lib/gtk-2.0/$(GTKVER)/immodules/  ;\
else \
mv debian/tmp/usr/lib/gtk-2.0/immodules/* debian/gcin/usr/lib/gtk-2.0/$(GTKVER)/immodules/ ;\
fi
# 略
if [ "$(DEB_BUILD_ARCH_BITS)" -eq "64" ]; then \
sed -e s,@LIBDIR@,lib64, debian/gcin.install.in > debian/gcin.install ; \
else \
sed -e s,@LIBDIR@,lib, debian/gcin.install.in > debian/gcin.install ; \
fi
# 略

另外,則是遇到無法上傳的問題,說是因為檔名重複,就被reject掉了,後來是在debian/changelog裡,讓”檔名-版本”的後面多加-lucid0, -lucid1, -maverick0, -maverick1…的方式,硬解了,不知道是不是正解…

如果你需要最新版的gcin,除了Tetralet包的版本之外,也可以試試我包的:

sudo add-apt-repository ppa:elleryq/gcin
sudo apt-get update
sudo apt-get upgrade

編譯gcin

我的環境是 Ubuntu 10.04/10.10。
首先到gcin source code 下載處 下載原始碼,就解開。
確定已經裝了 libgtk2.0-dev, libxtst-dev, libqt4-dev, libanthy-dev 這幾個套件,libqt3-mt-dev可以不裝,大多數的QT應用程式應該都升級到QT4了。
然後就執行 ./configure、make、sudo make install 三部曲。
但是 make 時,應該會吐找不到 /usr/lib/qt4/bin/moc 的錯誤,我不太清楚為什麼要用這個目錄下的,至少,我的環境是找不到,也許 debian 是放在那兒也不一定。這個檔案是在 /usr/bin/moc-qt4,所以把 qt-im/Makefile 、 qt4-im/Makefile 裡的 /usr/lib/$(QT)/bin/moc 改為 /usr/bin/moc-$(QT) ,接著再重新編譯、安裝就沒問題了。

plurklib小記之二

因為要取得噗的所有回應,所以我參考dotplurk的getAllResponses()來取,基本上是用Plurk API 的 getResponses。只是,dotplurk應該是誤解了 getResponses 的用法。他的作法是假定getResponses一次傳回五筆,所以有抓到回應的話,就再把offset累加5,然後呼叫getResponses,就這樣重複,直到抓沒有response為止。但是getResponses並不是一次傳回五筆,而是不定筆數,因此offset的累加我改為累加這次取回的responses筆數,於是這樣就對了。
另外,plurkSearch 傳回的 plurk,裏面有 response_seen 跟 response_count 欄位,我想應該也可以利用這兩個欄位事先得知這個噗有多少回應,來決定怎麼去取responses,只是我就沒有去利用了,畢竟我自己的噗浪回應數都沒超過100(目前最高樓應該還是酪梨壽司那一噗吧,記得有上萬)。除了跟 response 有關的值以後,plurk 裡還有 friends 這欄位,表示參與 response 的人有哪些,從這裡就可以取出 user_id 對應的 display_name,而不需要再呼叫 getPublicProfile 去取得,這樣可以少掉很多往返網路的時間。
應該不會再有下篇了,因為我的備份噗浪到blogger的程式完工了。

Microsoft Security Essential與Proxy

公司的NB一直都沒裝防毒軟體,也不知道要去公司的哪裡下載防毒軟體來安裝。前公司是很貼心,只要一登入公司的網域,如果沒裝公司御定的防毒軟體,那麼防毒軟體的安裝程式就會跳出來,要你安裝。
好吧,前一陣子有聽說Microsoft Security Essential免費又很不錯,就裝上來試試看。裝完以後馬上遇到的第一個問題就是proxy,爬文以後,發現幾乎都是說不支援proxy。但很幸運的在微軟論壇裡找到方法,原來Microsoft Security Essential是用winhttp,而不是會自動使用IE設定的wininet,也就是說要用proxycfg來設定,才可以。
所以看你是要 proxycfg -u 去 follow IE proxy 設定,或是 proxycfg -p your_proxy_server 來設定,就可以了。

plurklib小記

plurklibofficial Plurk API的python實作。
原始碼只有兩個檔案,readme.py就是每個function的使用方法,plurklib.py則是主要的實作。
我主要用到 plurkSearch,plurkSearch 傳回的是一個 dictionary,所以就可以用 keys() 去看有哪些 key,大致上有 has_more、plurks、last_offset。has_more 可以用來判斷還有沒有更多的搜尋結果,last_offset 則是可以在下次 plurkSearch 時帶入,表示要搜索更之前的紀錄。plurks 則是一個 list,裏面每個元素則又是 dictionary。完全不使用 class 的好處是,用 python 基礎型別就可以搞定,不需要再多的檔案,其實也算是作者偷懶吧,因為內部是用 json 來解析結果,而 json 解出來的結果就是 dictionary。
再來就是日期,日期的解析,本來已經打算要用 datetime.strptime 來硬轉了,但還好在 StackOverflow: Converting string into datetime 看到可以用 dateutil.parser 來轉換,這樣就輕鬆省事多了。

電影流水帳(2010/10/28~2010/11/11)

哈哈,本想找電影海報來放的,但是 flickr 跟 picasaweb 上都沒有適合的,算了。

  • Resident Evil: Afterlife(IMDB, Wikipedia),中譯:惡靈古堡IV-陰陽界。延續上一集的劇情,Alice開始卯起來惡搞,開始去挑掉每間保護傘的分公司,結果踢到鐵板,差點掛掉,所以大難不死的她,就去找她之前的朋友。但是到了預定要碰面的地方時,卻找不到,只找到喪失記憶的第2女主角:Claire,於是就帶著她從阿拉斯加往南找,到了倖存者頑強抵抗的一棟監獄。接著,僵屍就衝進來了,然後就一場屠殺。後來從下水道逃出去,到了船上,在船上碰到大魔王,又是一場死戰。死戰終了,救出之前被抓去實驗的人,可是好景不常,保護傘公司的一群直昇機來了,接著就…沒了,請期待下集。
  • RED(IMDB, Wikipedia),中譯:超危險特工。這故事不錯,是漫畫改編的。就已經退休的Frank都已經在把妹了,卻被中情局追殺,沒辦法,為了保護他所愛的人,只能帶著她一邊逃一邊找出真相,最後當然是找出真相,原來是副總統跟他的合夥人在搞鬼。這部電影除了後來改幫主角的小反派:Karl Urban跟演副總統的Julian McMahon之外,其他影星,全部大於45歲,連女主角Mary-Louise Parker也是(保養的也太好了吧,我以為只有3x歲),真的是呼應了主題 Retired。對裏面印象最深的幾個橋段,都是Helen MirrenIvan演的,一開始她邊把風邊跟女主角娓娓道出她為了任務被迫槍殺她所愛的男人,到後來她遇到沒死的愛人,所表現出來的感覺,讓人忘不了。總之,這部片很不錯看。

xml2

今天把 conky 裝起來,然後參考了 To-Dos, Weather, and Twitter on a Linux Desktop 來改,不過,文章裡用的是英國BBC氣象資料,也搞不清楚地區代碼是哪個,所以就乾脆去看中央氣象局的網站,看有沒有資料可以直接撈。

現在中央氣象局網站做的不錯,已經有提供 RSS 了,所以就拿 RSS 來 parse。可是,你知道 RSS 其實是 XML,要parse XML總是麻煩,想在一行之內做完,看來是不太可能。

就想說找一下,看有沒有現成的工具可以用,就用 apt-cache search xml 來找。找的結果,發現有個 xml2 的套件,說明說是 Convert between XML, HTML, CSV and a line-oriented format,應該是合用,就裝上試試看了。

xml2 就很簡單把 xml 轉成文字檔,結果大致是這樣 tag1/tag2/tag3…=node value
所以接著就可以用 awk 開刀了:

curl -s --connect-timeout 30 "http://www.cwb.gov.tw/rss/forcast/36_04.xml" | xml2 | awk -F '=' '/^\/rss\/channel\/item\/title/{print $2;}'

這樣,就可以得到目前的天氣了。用bash真的是很好處理東西~

crosscompile lua

bc 好久都沒出新版了,裏面原本的 configure 對 crosscompile 支援不良,而且因為用到 flex 跟 bison 的關係,這兩個也要跟著 crosscompile,太麻煩,所以就想找一些輕量級的 script 語言來用。
仔細想想,lua 似乎是最好的選擇,就拿來用了。lua 原始碼解開只有 Makefile,原本以為 crosscompile 會很麻煩的,仔細看過以後,發現不難,只要這樣編譯,就可以了。

make CC=arm-none-linux-gnueabi-gcc RANLIB=arm-none-linux-gnueabi-ranlib ansi

用 ansi 的原因,是可以避掉要連結 ncurse、dl 等的 library dependencies,如果用 generic 或 linux 就得要再 crosscompile ncurse。