I lost a lot time to add directory in the Mercurial, because Mercurial can't add empty directory to the working base. I search some many web pages to find out how, and the answer is so simple: put a file in the empty directory, and hg add xxxDir.
i lost one hour for that.
轉移公告
計劃把 http://blog.hoamon.info/ 文章全部轉移至 http://www.hoamon.info/blog/ 這裡,而本 Blogger 站台的文章近 500 篇,我預計在 2014-12-31 前移轉完畢,完成後 http://blog.hoamon.info/ 將只作代轉服務,一律把舊連結如 http://blog.hoamon.info/index.html 轉成 http://www.hoamon.info/blog/index.html ,敬請舊雨新知互相走告。
何岳峰 敬上
2008年1月23日 星期三
2008年1月22日 星期二
Trac0.11b1 + Mercurial + Postgresql
基於對 Python 的喜愛,所以想要把 subversion 換成 Mercurial ,但目前還只是測試階段,真正上線使用的還是 subversion 。另外一直都想要找個機會把 Mysql 換掉,到不是說 Mysql 不好用,而是我對於 PostgreSQL 本來就有一分感情,那是在 Mysql3,4 還不支援 UTF-8 時,我用 Perl 寫了一個 unicode 字的查詢系統。
而今天所要介紹的,不過是我在工餘之際把玩的小小玩意,既然成功了,那就作個紀錄。
在 Ubuntu 安裝軟體是一點都不難的(只要有 .deb 檔),所以要裝 Trac + PostgreSQL + Mercurial ,請執行下面指令:
# sudo apt-get install postgresql-client-8.2 postgresql-8.2 python-psycopg2 \
> python-setuptools python-genshi \
> python-psycopg2 python-pygments python-docutils mercurial
接下來,安裝 Trac 0.11b1 主程式
# sudo easy_install http://ftp.edgewall.com/pub/trac/Trac-0.11b1.tar.gz
最後安裝 Trac 控制 Mercurial 的外掛
# svn co http://svn.edgewall.com/repos/trac/sandbox/mercurial-plugin-0.11
# cd mercurial-plugin-0.11/
# sudo python setup.py install
再來是設定,首先我們建立一個 dbuser ,這方面, PostgreSQL 有點奇怪,或許是我 Mysql 用久了,
# sudo -u postgres createuser trac -P
Enter password for new role:
再輸入一次:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
# sudo createdb -O trac trac
並將 pg_hba.conf 中的
local all all ident sameuser
改成
local all all password
這樣你的 trac 程式就可以透過帳號: trac 密碼: trac host: localhost 的方式與 PostgreSQL 連接了。
接下來,初始化 trac 設定目錄及 hg 儲存庫:
# trac-admin /path/to/myproject initenv
# hg init /path/to/myproject/hg
另外在 trac.ini 中加入
[components]
tracext.hg.* = enabled
[hg]
show_rev = yes
node_format = short
用 tracd --port 8000 /path/to/myproject 測試一下有沒有問題,沒有問題就讓 mod_python 來跑吧!
下面則是 mod_python 的設定檔
而今天所要介紹的,不過是我在工餘之際把玩的小小玩意,既然成功了,那就作個紀錄。
在 Ubuntu 安裝軟體是一點都不難的(只要有 .deb 檔),所以要裝 Trac + PostgreSQL + Mercurial ,請執行下面指令:
# sudo apt-get install postgresql-client-8.2 postgresql-8.2 python-psycopg2 \
> python-setuptools python-genshi \
> python-psycopg2 python-pygments python-docutils mercurial
接下來,安裝 Trac 0.11b1 主程式
# sudo easy_install http://ftp.edgewall.com/pub/trac/Trac-0.11b1.tar.gz
最後安裝 Trac 控制 Mercurial 的外掛
# svn co http://svn.edgewall.com/repos/trac/sandbox/mercurial-plugin-0.11
# cd mercurial-plugin-0.11/
# sudo python setup.py install
再來是設定,首先我們建立一個 dbuser ,這方面, PostgreSQL 有點奇怪,或許是我 Mysql 用久了,
# sudo -u postgres createuser trac -P
Enter password for new role:
再輸入一次:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
# sudo createdb -O trac trac
並將 pg_hba.conf 中的
local all all ident sameuser
改成
local all all password
這樣你的 trac 程式就可以透過帳號: trac 密碼: trac host: localhost 的方式與 PostgreSQL 連接了。
接下來,初始化 trac 設定目錄及 hg 儲存庫:
# trac-admin /path/to/myproject initenv
# hg init /path/to/myproject/hg
另外在 trac.ini 中加入
[components]
tracext.hg.* = enabled
[hg]
show_rev = yes
node_format = short
用 tracd --port 8000 /path/to/myproject 測試一下有沒有問題,沒有問題就讓 mod_python 來跑吧!
下面則是 mod_python 的設定檔
NameVirtualHost *:443
ServerAdmin admin@xxx.com
ServerName trac.xxx.com
DocumentRoot /www/trac
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
#PythonPath "sys.path+['/usr/local/Trac/lib/python2.5/site-packages/']"
PythonOption TracEnv /www/trac
PythonOption TracUriRoot /
PythonDebug Off
SetEnv PYTHON_EGG_CACHE /www/trac/tmp
SetEnv LANG UTF-8
SetEnv HTTPS 1
AuthType Basic
AuthName "Trac Server"
AuthUserFile /www/htpasswd_users
Require valid-user
ErrorLog /var/log/apache2/trac_error.log
LogLevel warn
CustomLog /var/log/apache2/trac_access.log combined
ServerSignature Off
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
世界是平的
這本書出了好一陣子囉~兩年前曾在台北某家誠品看到,翻了幾頁,印象最深刻的是作者有談到 Open Source 。前幾天看了朱學恆的 你說《世界是平的》,我知道了,然後呢? 的文章,就想好好地把這本書看完。
花了幾個小時把它看完,似乎沒得到新解,當然不是它沒料,是我太晚看了。很多的觀點,我在其他的趨勢文章、 Discovery 、教育的未來都見過了。或許他們也參考了 Thomas 的書。
現在是資訊爆炸的時代,也因為科技讓我們大部份的人都站在平等線上,這的確是令人煩惱的一件事,因為我們不是起飛中的印度人、中國人。不過看看歷史,就知道這根本不是新煩惱,過去,我的老師解工程問題時,拿的是計算尺、計算機,而我唸大學時是拿計算機,但是現在,我們都用電腦跑程式了。
N年前,蘇軾就告訴我們:「厚積薄發、博觀約取」了,只會用死蠻力耕田,那就種到死吧! 任何一項工作都應該是要拿一部份的精力去學習新的事物,來把你的耕田面積擴大,而不是讀到 18 歲,用蠻力作事到 65 歲退休。只要懂得終身學習,那就可以應用在無窮的未來,是的,只要懂得「終身學習」,不過這對很多人來說是個大問題呢!
雖然說是「資訊爆炸」的時代,但 1000 筆資料中,只有 10 項資訊及 1 種知識,何必怕那日益增加的資料,學會知識就夠了。就拿讀「世界是平的」這書來作例子,我從很多趨勢文章、 Discovery 影片、新聞中也看到了全球化、新科技對未來的改變,但這本書都幫我整理好了,而我只花了 6 個小時多就看完,而且看完後,我只須要記得 10 輛推土機、三大匯流、勞斯萊斯不賣車子、科學教育重要性、開放比壁壘好、人民生活水準提高會不想戰爭及美國政客也很爛就夠了,我不須要記得 400 頁的文字。
「資訊爆炸」及「全球化」不可怕,可怕的是你不會學習。
花了幾個小時把它看完,似乎沒得到新解,當然不是它沒料,是我太晚看了。很多的觀點,我在其他的趨勢文章、 Discovery 、教育的未來都見過了。或許他們也參考了 Thomas 的書。
現在是資訊爆炸的時代,也因為科技讓我們大部份的人都站在平等線上,這的確是令人煩惱的一件事,因為我們不是起飛中的印度人、中國人。不過看看歷史,就知道這根本不是新煩惱,過去,我的老師解工程問題時,拿的是計算尺、計算機,而我唸大學時是拿計算機,但是現在,我們都用電腦跑程式了。
N年前,蘇軾就告訴我們:「厚積薄發、博觀約取」了,只會用死蠻力耕田,那就種到死吧! 任何一項工作都應該是要拿一部份的精力去學習新的事物,來把你的耕田面積擴大,而不是讀到 18 歲,用蠻力作事到 65 歲退休。只要懂得終身學習,那就可以應用在無窮的未來,是的,只要懂得「終身學習」,不過這對很多人來說是個大問題呢!
雖然說是「資訊爆炸」的時代,但 1000 筆資料中,只有 10 項資訊及 1 種知識,何必怕那日益增加的資料,學會知識就夠了。就拿讀「世界是平的」這書來作例子,我從很多趨勢文章、 Discovery 影片、新聞中也看到了全球化、新科技對未來的改變,但這本書都幫我整理好了,而我只花了 6 個小時多就看完,而且看完後,我只須要記得 10 輛推土機、三大匯流、勞斯萊斯不賣車子、科學教育重要性、開放比壁壘好、人民生活水準提高會不想戰爭及美國政客也很爛就夠了,我不須要記得 400 頁的文字。
「資訊爆炸」及「全球化」不可怕,可怕的是你不會學習。
2008年1月13日 星期日
中央民意代表的多樣性
單一選區制讓立委名額愈少對大黨愈有利,約化的效益愈高,也致使立委多樣性降低。
但就立委工作性質而言,如果名額增加則選區的畫分會愈小,如此必使立委專心地方事務的經營,而忽略中央事務。
那麼如何讓立委選區畫分大、總名額少、保持多樣性且不致使小黨泡沫化。
除了區域名額轉移到不分區名額的方法外,我提出另一種想法,這是從 bayesian classifier 中得到的靈感。要建立貝氏分類器,其依據的歷史事件至少要出現一次,否則無法預測。
舉例來說:我們手上有一份歷史資料,是談「年齡幾歲」、…、「是不是學生」與「是否買電腦」的數據,然而在這份資料中,怡好沒發生過「年齡為60~65歲」的人買或不買電腦的紀錄,那麼利用這份資料所建立的貝氏分類就無法預測「年齡為60~65歲」的人會不會買電腦。但不能預測不代表這事件不會發生,所以我們可以透過 Laplacian correction 的技巧,讓我們的分類器可以拿來預測「年齡為60~65歲」的人會不會買電腦。
Laplacian correction 的方法是將所有的「年齡幾歲」事件發生次數都加一。也就是把
「年齡為20~25歲」的出現次數加一
「年齡為25~30歲」的出現次數加一
...
...
「年齡為60~65歲」的出現次數加一
這樣對整體事件出現的機率影響不大,卻變成可以預測「年齡為60~65歲」會不會「買電腦」。
利用 Laplacian correction 的概念,我們把它應用在不分區立委上,設定一最低門檻(一定要比不分區計席門檻還低),假設是 0.5 % 或是 3 萬張選票,只要過此門檻的政黨一律可分得一席觀察員立委,它的職務權利是否等同一般立委可再討論,但如此作來對立院的政黨比例來說影響十分小,以本次政黨得票數來看,用 5 萬張選票作門檻,其新的立委名額分配如下:
由上可知,對大政黨來說,比例影響不大,如國民黨依舊在 2/3 以上,但對小黨而言,卻是無及有的區別,同時,也讓國會的立委來源多樣性,一般選民也可增加對其他政黨的認識機會;讓小政黨提早進入國會實習也有助未來長大之後的立法品質及效率。
但就立委工作性質而言,如果名額增加則選區的畫分會愈小,如此必使立委專心地方事務的經營,而忽略中央事務。
那麼如何讓立委選區畫分大、總名額少、保持多樣性且不致使小黨泡沫化。
除了區域名額轉移到不分區名額的方法外,我提出另一種想法,這是從 bayesian classifier 中得到的靈感。要建立貝氏分類器,其依據的歷史事件至少要出現一次,否則無法預測。
舉例來說:我們手上有一份歷史資料,是談「年齡幾歲」、…、「是不是學生」與「是否買電腦」的數據,然而在這份資料中,怡好沒發生過「年齡為60~65歲」的人買或不買電腦的紀錄,那麼利用這份資料所建立的貝氏分類就無法預測「年齡為60~65歲」的人會不會買電腦。但不能預測不代表這事件不會發生,所以我們可以透過 Laplacian correction 的技巧,讓我們的分類器可以拿來預測「年齡為60~65歲」的人會不會買電腦。
Laplacian correction 的方法是將所有的「年齡幾歲」事件發生次數都加一。也就是把
「年齡為20~25歲」的出現次數加一
「年齡為25~30歲」的出現次數加一
...
...
「年齡為60~65歲」的出現次數加一
這樣對整體事件出現的機率影響不大,卻變成可以預測「年齡為60~65歲」會不會「買電腦」。
利用 Laplacian correction 的概念,我們把它應用在不分區立委上,設定一最低門檻(一定要比不分區計席門檻還低),假設是 0.5 % 或是 3 萬張選票,只要過此門檻的政黨一律可分得一席觀察員立委,它的職務權利是否等同一般立委可再討論,但如此作來對立院的政黨比例來說影響十分小,以本次政黨得票數來看,用 5 萬張選票作門檻,其新的立委名額分配如下:
由上可知,對大政黨來說,比例影響不大,如國民黨依舊在 2/3 以上,但對小黨而言,卻是無及有的區別,同時,也讓國會的立委來源多樣性,一般選民也可增加對其他政黨的認識機會;讓小政黨提早進入國會實習也有助未來長大之後的立法品質及效率。
2008年1月10日 星期四
AM02:00~AM06:00斷網,這很好呀!
我是興大的學生,只不過沒住在宿舍。日前聽說學校為了讓學生「專心唸書」,所以在AM02:00~AM06:00斷網,這個措施備受爭議,後來是延到下學期才開始。
我個人覺得十分可惜,就一個愛唸書、愛上網找資料的學生來說,這項決定太晚執行了,也執行的太晚了。
撇開那些用學網下載非法軟體、音樂、著作的學生來說,就算是在 AM06:00~AM02:00 之間,也不能作這種事情,所以我只談對「愛唸書、愛上網找資料」的學生,其權益受了什麼影響。
我個人認為:根本沒有影響。試想 AM02:00~AM06:00 這四個小時,拿來睡覺都不夠用了,一個「愛唸書、愛上網找資料」的學生,他應該是在 AM06:00~AM02:00 之間好好地唸書、找資料,在學生時代就應該培養一個規律的生活習慣:不熬夜、常運動、多讀書,而最好的睡眠時間應該是 PM10:00~AM02:00 之間的,所以我還認為學校斷網的時間太晚了,應該早一點,移至 PM10:00~AM02:00 。
很多人跟我說,在你寫一個程式或是調一個系統作不出來時就是不干心呀! 是的,我也是這樣,但我們應該要學習放手,你的人生不是這個程式或是系統搞定,就一定成功的,你的未來還有無數的程式及系統要搞。
也有人說:「AM02:00~AM04:00的期間正是文思泉湧的時候,這時候不工作對不起自己的效率」。然而,請仔細想想,是什麼原因讓你在 AM02:00~AM04:00 的期間才文思泉湧的,不就是過去不好的習慣所造成的,同樣地,也可以用好習慣把它調回來。
說到底,為什麼不讓人在 AM02:00~AM04:00 作事呢! 因為我們不是蝙蝠,是日行性動物,我們應該要熱愛陽光的,這是天性,不要逆天而為。
穩健而長遠的學習/工作習慣比較重要。這點請看我之前的文章:0.02秒的差距。
而事實上,對那些家長而已,健康應該是比讀書及上網還重要的一件事,而對學校來說,付學費的是家長,也不是學生,所以我認為學校及家長的決定非常好。
我個人覺得十分可惜,就一個愛唸書、愛上網找資料的學生來說,這項決定太晚執行了,也執行的太晚了。
撇開那些用學網下載非法軟體、音樂、著作的學生來說,就算是在 AM06:00~AM02:00 之間,也不能作這種事情,所以我只談對「愛唸書、愛上網找資料」的學生,其權益受了什麼影響。
我個人認為:根本沒有影響。試想 AM02:00~AM06:00 這四個小時,拿來睡覺都不夠用了,一個「愛唸書、愛上網找資料」的學生,他應該是在 AM06:00~AM02:00 之間好好地唸書、找資料,在學生時代就應該培養一個規律的生活習慣:不熬夜、常運動、多讀書,而最好的睡眠時間應該是 PM10:00~AM02:00 之間的,所以我還認為學校斷網的時間太晚了,應該早一點,移至 PM10:00~AM02:00 。
很多人跟我說,在你寫一個程式或是調一個系統作不出來時就是不干心呀! 是的,我也是這樣,但我們應該要學習放手,你的人生不是這個程式或是系統搞定,就一定成功的,你的未來還有無數的程式及系統要搞。
也有人說:「AM02:00~AM04:00的期間正是文思泉湧的時候,這時候不工作對不起自己的效率」。然而,請仔細想想,是什麼原因讓你在 AM02:00~AM04:00 的期間才文思泉湧的,不就是過去不好的習慣所造成的,同樣地,也可以用好習慣把它調回來。
說到底,為什麼不讓人在 AM02:00~AM04:00 作事呢! 因為我們不是蝙蝠,是日行性動物,我們應該要熱愛陽光的,這是天性,不要逆天而為。
穩健而長遠的學習/工作習慣比較重要。這點請看我之前的文章:0.02秒的差距。
而事實上,對那些家長而已,健康應該是比讀書及上網還重要的一件事,而對學校來說,付學費的是家長,也不是學生,所以我認為學校及家長的決定非常好。
如果不想挑爛蘋果! 怎麼作?
把自己的政見寫成白皮書放到網路上供他人指教,再把工作項目放到 Trac Ticket 中,讓他人追蹤。
最後湊 20 萬(也可從網友中募款)參選吧! 選舉過程中,不插旗幟、不買廣告、不發傳單(也就是不花錢)。然後抱持著「選上是人民的福氣,選不上是自己福氣」的態度等待選舉結果。
如果選上了,好好地把 Ticket 中的工作完成。我想這種人多了點,會是台灣的福氣。
最後湊 20 萬(也可從網友中募款)參選吧! 選舉過程中,不插旗幟、不買廣告、不發傳單(也就是不花錢)。然後抱持著「選上是人民的福氣,選不上是自己福氣」的態度等待選舉結果。
如果選上了,好好地把 Ticket 中的工作完成。我想這種人多了點,會是台灣的福氣。
2008年1月6日 星期日
The problem of moinmoin for adding MathML support
Environment
MoinMoin version: 1.5.8
ASCIIMathML.js version: 2.0.1
I can use $ Z_if $ to show math expression. But when i run to edit page in text mode,the expression was replaced to
<p align="center">\displaystyle$ Z_if }$</p>
by ASCIIMathML.js
Because i don't know the structure of moinmoin, so i hard code the raw source. Around the 1271 line of MoinMoin/wikiutil.py.
Replace the line
user_head = [request.cfg.html_head]
With
----if request.query_string.count('action=edit'):
--------user_head = ['']
----elif request.form and ( request.form.has_key('button_spellcheck') or
----request.form.has_key('button_switch') or request.form.has_key('button_preview') ):
--------user_head = ['']
----else:
--------user_head = [request.cfg.html_head]
Maybe someone else has better solution.
MoinMoin version: 1.5.8
ASCIIMathML.js version: 2.0.1
I can use $ Z_if $ to show math expression. But when i run to edit page in text mode,the expression was replaced to
<p align="center">\displaystyle$ Z_if }$</p>
by ASCIIMathML.js
Because i don't know the structure of moinmoin, so i hard code the raw source. Around the 1271 line of MoinMoin/wikiutil.py.
Replace the line
user_head = [request.cfg.html_head]
With
----if request.query_string.count('action=edit'):
--------user_head = ['']
----elif request.form and ( request.form.has_key('button_spellcheck') or
----request.form.has_key('button_switch') or request.form.has_key('button_preview') ):
--------user_head = ['']
----else:
--------user_head = [request.cfg.html_head]
Maybe someone else has better solution.
訂閱:
文章 (Atom)