竹取js

雖然官方的網頁上是日文,我看不太懂,不過好在他提供的範例很容易了解,看來是不難用。
如果想要用 gtk+webkit+竹取js 來顯示直書,問題大概就會出在翻頁上了。用Space/Shift+Space 或 PgUp/PgDown 都可以翻頁,但如果想改變某些按鍵的行為,如 h/l 、Left/Right、Up/Down 來做翻頁的話,可能就要再找資料來看了。
想用這來改寫pymbook看看。

fcrackzip

正愁不知道怎麼破解密碼,就丟 ubuntu brute zip password extract 這些字到 google 去找,想不到立馬就找到Ubuntu Geek上的這篇:Howto Crack Zip Files Password,用 apt-get 就可以裝好。
使用也很簡單 fcrackzip your_file.zip 就行了。要縮小範圍的話,可以參考 -h 的說明,指定參數來縮小範圍、加快解密的速度。

Lettering.js

剛好看到,就連上去 Lettering.js 看了一下,不覺得有什麼特別的。
看了原始碼,就只有看到呼叫 $(“.your_class”).lettering(); 而已,實在是很簡單,但是網頁上的效果卻又不是圖檔或是flash。再更仔細看網頁的 css 之後,發現有 .char1, .char2….或是 .word1, .word2…等的定義。啊~看來這就是關鍵了,只要你的 css 裡有定義這些 class,再呼叫 .lettering() 之後,lettering 就會幫你把這些 class 套用到 jquery selector 選取的字或詞(參數帶 ‘word’)上。
真的是挺方便的 jquery plugin。

pdftotext win32

幫朋友試的,轉 pdf 為文字檔。本來是要用 pdfbox 跟 iTextSharp 的,無奈 pdfbox 編譯不出 .net 的 dll,而 iTextSharp 的 model 又太複雜。

Linux 下的 pdftotext 正巧是可以轉的,所以首要就先找 win32 版本的。pdftotext 由兩個套件提供,一個是 xpdf,另一個是 poppler,目前 ubuntu 預設是使用 poppler。但是 popper 卻沒有善心人事編譯出 win32 的版本,只有 xpdf 有 (gnuwin32提供)。

所以就先下載來安裝,裝完以後,就有 pdftotext 指令可用,但是轉換時,卻轉不出中文。參考 pdftotext 的使用說明,發現有 -enc 選項可用,但指定以後,卻會出現

Error: Couldn't find unicodeMap file for the 'cp950' encoding
Error: Couldn't get text encoding

看來是少了檔案。
xpdf 官方網頁上有提供 xpdf-chinese-traditional.tar.gz,印象中,linux 下使用時,通常也是要再額外安裝才可以看到中文。那麼,就下載來使用吧。下載以後,把檔案解開放到 C:\Program Files\GnuWin32\share\xpdf\chinese-traditional 下,然後修改 C:\Program Files\GnuWin32\etc\xpdfrc ,加上這幾行:

#----- begin Chinese Traditional support package (2004-jul-27)
cidToUnicode	Adobe-CNS1	c:\progra~1\gnuwin32\share\xpdf\chinese-traditional\Adobe-CNS1.cidToUnicode
unicodeMap	Big5		c:\progra~1\gnuwin32\share\xpdf\chinese-traditional\Big5.unicodeMap
unicodeMap	Big5ascii	c:\progra~1\gnuwin32\share\xpdf\chinese-traditional\Big5ascii.unicodeMap
cMapDir		Adobe-CNS1	c:\progra~1\gnuwin32\share\xpdf\chinese-traditional\CMap
toUnicodeDir			c:\progra~1\gnuwin32\share\xpdf\chinese-traditional\CMap
#----- end Chinese Traditional support package

這樣設定就完成了。
使用的時候就可以用 “c:\Program Files\GnuWin32\bin\pdftotext.exe” -cfg c:\progra~1\gnuwin32\e
tc\xpdfrc -enc Big5 your_file.pdf your_file.txt 來進行轉換了。

註:我是 xpdf 的 setup 檔來安裝,所以會裝到 c:\program files\gnuwin32 下,若你是用.zip檔,那麼路徑請自行調整。

Android Build Number

Settings > About Phone > Build number 跟 TARGET_BUILD_VARIANT 有關係。
如果 TARGET_BUILD_VARIANT 為空,那麼,顯示出來的會是一串長長的字串,由很多東西所組成。
如果 TARGET_BUILD_VARIANT 的值是 user,那麼,顯示出來的字串會依 DISPLAY_BUILD_NUMBER (true/false)來決定是只有 BUILD_ID 或 BUILD_ID + BUILD_NUMBER。(參考 build/core/Makefile)
那麼要怎麼自訂 BUILD_ID 或 BUILD_NUMBER 呢?照理說,應該是要在 buildspec.mk 裡定義,但是在 build/core/config.mk 裡,include buildspec.mk 之後,又 include 了 envsetup.mk 跟 BoardConfig.mk,envsetup.mk 裡有 include version_defaults.mk,這裡有 include build_id.mk 會把之前定義的 BUILD_ID 跟 BUILD_NUMBER 都覆蓋掉。所以比較適合的地方是 device 下的 BoardConfig.mk,只是這樣有個小缺點,就是 make 時,顯示出來的資訊是 build_id.mk 裡定義的。
以上,都是參考 build 下的檔案。

打包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 來轉換,這樣就輕鬆省事多了。