發表文章

目前顯示的是 八月, 2010的文章

Debian/Ubuntu套件打包

很久以前寫過利用dpkg-deb來打包套件,其實這個方法非常麻煩,我後來都改用dh_make了。

利用dh_make加上CDBS(The Common Debian Build System),可以很方便的建立出一個deb包,這也是標準的打包方式。CDBS演變到現在己經非常方便了,打包者幾乎不用作什麼事。CDBS可以處理非常多常見的build system包括GNU Autotools、Python的setup.py、Qt的qmake、make、cmake等等,支援的列表可以在CDBS的Documentation裡找到。

打包的步驟大約如下:
將套件壓縮成 套件名稱_版本.orig.tar.gz,並放在套件目錄的同層目錄在套件根目錄執行dh_make -s -b。-s表示包裝成single binary,-b表示使用CDBS編輯debian/control、debian/rules在套件根目錄執行dpkg-buildpackage -rfakeroot完成。

cbase

之前寫了一個簡單的進制轉換程式叫做cbase。不過那時候架構沒有設計的很好,程式碼也很亂,所以我暑假閒著沒事就把他重寫了一次,這次程式碼短得多了,也比較靈活。

記得那陣子好像常常遇到要對數字做不同的基底變換,所以我才會想寫這樣的程式。cbase是一個非常簡單的程式,估計有稍微學過程設的大家都能瞬間寫出來,所以在這裡現醜了XD。
源碼丟在github,然後我也順便包了個deb包,要用的自行下載吧XD

其實cbase主要目的就是執行數字間的任意基底變換,比如說
IPIP其實可以看成是256進位的數字,所以如果要把他轉10進制(這可以做什麼我應該不用多說了):
~$ cbase -i 256 -o 10 -d . 119.160.246.241
2007037681

Web Crawler

今天無聊就想說來改一下manpages-cpp的crawler
因為原本那個實在是太慢了...
爬過全部的頁面太概要2個多小時@@

原來的設計,cppman -r (rebuild index)這個選項本來就不是為user end設計的
而manpages-cpp裡本身就包含了已經cache好的index database。
所以我在rebuild index的功能上設計得很陽春,基本上只是個簡單的DFS。

不過今天我重新檢視了時間會如此慢的原因,發現原來問題是出在urllib.urlopen()
開一個頁面太概要0.7秒,不過這不是網路速度的問題。原因是在urllib預設的text buffer大小是0
所以每讀入資料就要重新分配記憶體,所以才會花到0.7秒。

我的解法是用multi-thread。不過有個很的問題是linux的thread limit
在我的電腦上最高只能開到323個thread,可是利用DFS隨便跑下去都幾百個thread
所以只好設了thread_max,如果要超過了就先join
這樣大概可以將時間縮短到13分鐘。2小時多到13分鐘這算是非常大的進步了。

cool RegExpr

原文在這裡

判另方程式是否有解ax + by = c => /^(.*)\1{a-1}(.*)\2{b-1}$/ 而被match的文字是用任意字元重覆c次

實測:13x + 19y = 70
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> if re.search(r'^(.*)\1{12}(.*)\2{18}$', '1'*70): ... print 'Has solution.' ... else: ... print 'No solution.' ... Has solution. 想一下其實原理不難。