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.
轉移公告
計劃把 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月6日 星期日
2007年12月29日 星期六
讓 google 幫你作圖表
過去作研究時,為了要看清楚數據的結果是不是與我們所想的一樣,我們會把數值轉成圖表的方式展示,這比起看到 1,2,4.0,8,... 的數字能更快速了解答案的正確與否。
因為以前都是用 matlab 作研究,所以生圖表時,是在單機上生成一個圖檔來看,若不用 matlab 也可以,把生成的數據倒給 gnuplot 一樣可行,或者是直接用 GNU Octave 也成。
我們現在都是用 python 了,而在 python 上也有十分優秀的圖表函式庫 matplot 可以用。
只不過,現在不只是要求數學程式化,我們也要作模式商業化,一個可行的解題方式,我們要讓使用者方便使用,最簡單的方法是讓它變成網站。這時候使用 matplot 就有點麻煩了。
如果可以使用 google chart api ,就會比較輕鬆,而且流量還可以丟過 google 處理。只不過,機密的數據還是不要透過 GET 方法讓 Proxy 儲存到,這時候,還是用 matplot 吧!
打個廣告,歡迎有程式設計能力且數學(離散、管理數學、統計)底子好的人才來我們 lab 唸碩博士,我們 lab 的目標主要是用資訊技術讓工程的品質、生產力提高。考試科目有營建管理概論、工程經濟/工程統計,基本上,我在土木系的大學部也只學過營建管理概論(三學分),工程經濟/工程統計是得自己另外唸的。
因為以前都是用 matlab 作研究,所以生圖表時,是在單機上生成一個圖檔來看,若不用 matlab 也可以,把生成的數據倒給 gnuplot 一樣可行,或者是直接用 GNU Octave 也成。
我們現在都是用 python 了,而在 python 上也有十分優秀的圖表函式庫 matplot 可以用。
只不過,現在不只是要求數學程式化,我們也要作模式商業化,一個可行的解題方式,我們要讓使用者方便使用,最簡單的方法是讓它變成網站。這時候使用 matplot 就有點麻煩了。
如果可以使用 google chart api ,就會比較輕鬆,而且流量還可以丟過 google 處理。只不過,機密的數據還是不要透過 GET 方法讓 Proxy 儲存到,這時候,還是用 matplot 吧!
打個廣告,歡迎有程式設計能力且數學(離散、管理數學、統計)底子好的人才來我們 lab 唸碩博士,我們 lab 的目標主要是用資訊技術讓工程的品質、生產力提高。考試科目有營建管理概論、工程經濟/工程統計,基本上,我在土木系的大學部也只學過營建管理概論(三學分),工程經濟/工程統計是得自己另外唸的。
2007年12月23日 星期日
美國土木工程師證照考試
美國是聯邦制,所以很多東西依州不同而有所不同。像是德州車牌是跟著車走,而俄亥俄州則是跟著人走。在土木技師牌照這邊,也是各州有所差異,但它們的考照方式卻令我十分欣賞,它避免了國內考照方式總讓錄取人流於紙上功夫的缺點。
美國的考照方式,可參考此網頁。
最大的不同是:
2. 這點相當重要,工程知識涵蓋範圍廣大,如果把時間都花在背公式及係數,那有多少時間來想這些公式的延伸應用及實務問題的解決。反正技師執業時,一定會看自己的參考書,那為什麼考試時,不等同處理呢?
3. 美國的土木技師執照多半只有一種(依州別),考試時也是營建、結構、水利…各種題目都考,所以你可能只會大地,那麼把大地題目全部答對,其他的只有小部份答對,你也是拿得到專業工程師執照,而執業時,你要為大樓建築結構圖簽章審核,也沒有人反對,只是簽章就代表負責,建築圖有問題,就是你的問題。
他山之石,可以為錯。那為什麼不作呢! 這就不是一個小土木人知道的了。
美國的考照方式,可參考此網頁。
![]() |
| 備份網頁 |
- 要有實務經驗
- open book
- 依專長負責
2. 這點相當重要,工程知識涵蓋範圍廣大,如果把時間都花在背公式及係數,那有多少時間來想這些公式的延伸應用及實務問題的解決。反正技師執業時,一定會看自己的參考書,那為什麼考試時,不等同處理呢?
3. 美國的土木技師執照多半只有一種(依州別),考試時也是營建、結構、水利…各種題目都考,所以你可能只會大地,那麼把大地題目全部答對,其他的只有小部份答對,你也是拿得到專業工程師執照,而執業時,你要為大樓建築結構圖簽章審核,也沒有人反對,只是簽章就代表負責,建築圖有問題,就是你的問題。
他山之石,可以為錯。那為什麼不作呢! 這就不是一個小土木人知道的了。
2007年12月22日 星期六
2008政黨票該怎麼投呢?
2008年的立委選舉有一點與過去不一樣,不是一階段取代二階段,而是不分區立委的席次將由另一張「政黨票」來決定,不同以往是從各政黨的區域立委得票率得之。
所以就算你所在地點的區域立委都很爛,基本上,只要你覺得台灣還有政黨是可以相信的話,一定要出來投個政黨票。
而不分區的政黨名單有 中國國民黨、民主進步黨、無黨團結聯盟、新黨、台灣團結聯盟、公民黨、紅黨、綠黨、台灣農民黨、第三社會黨、客家黨、制憲聯盟。
其中,中國國民黨、民主進步黨、無黨團結聯盟、新黨、台灣團結聯盟,這些都是比較熟為人知的政黨,我就不談了。
就剩下的 7 個,簡介如下:
公民黨:
網路上只找到這篇文章。
紅黨:
應該是上次反扁(貪腐)勢力的延續。
綠黨:
主要訴求是環保、和平及社會正義。
台灣農民黨:
爭取台灣農、林、漁、牧等四大農民階級在國會發聲,以爭取農漁民利益、促進農業發展與茁壯農漁民組織為目的而成立之階級政黨。
第三社會黨:
沒看到黨綱,看網頁介紹,好像主打第三選擇,也就是不想投國/民黨的,就投他們吧!
客家黨:
望文生意,一看就討厭,我不是討厭客家人,如果有個黨叫「河洛黨」、「閩南黨」,我一樣開罵,這又是在台灣族群撕裂的傷口上繼續灑鹽而已。
為弱勢族群發聲是正確的,像是以「農民」、「身心障礙者」、「窮人」為主要目標來組黨,這非常合理,因為每個人都有機會當「農民」、「身心障礙者」、「窮人」。而如果以「血統」來組黨,那我永遠沒機會了,因為我不是「客家人」(我只是「客家人」的孫女婿)。
所以,我能接受有原委會、客委會的組織來幫助弱勢族群,但我不能接受以血統來結黨這件事。
制憲聯盟:
以憲法為主要目標。
就個人觀點,對「綠黨」及「台灣農民黨」比較具有認同感。還需要再認真研究一下,才能選擇。
所以就算你所在地點的區域立委都很爛,基本上,只要你覺得台灣還有政黨是可以相信的話,一定要出來投個政黨票。
而不分區的政黨名單有 中國國民黨、民主進步黨、無黨團結聯盟、新黨、台灣團結聯盟、公民黨、紅黨、綠黨、台灣農民黨、第三社會黨、客家黨、制憲聯盟。
其中,中國國民黨、民主進步黨、無黨團結聯盟、新黨、台灣團結聯盟,這些都是比較熟為人知的政黨,我就不談了。
就剩下的 7 個,簡介如下:
公民黨:
網路上只找到這篇文章。
紅黨:
應該是上次反扁(貪腐)勢力的延續。
綠黨:
主要訴求是環保、和平及社會正義。
台灣農民黨:
爭取台灣農、林、漁、牧等四大農民階級在國會發聲,以爭取農漁民利益、促進農業發展與茁壯農漁民組織為目的而成立之階級政黨。
第三社會黨:
沒看到黨綱,看網頁介紹,好像主打第三選擇,也就是不想投國/民黨的,就投他們吧!
客家黨:
望文生意,一看就討厭,我不是討厭客家人,如果有個黨叫「河洛黨」、「閩南黨」,我一樣開罵,這又是在台灣族群撕裂的傷口上繼續灑鹽而已。
為弱勢族群發聲是正確的,像是以「農民」、「身心障礙者」、「窮人」為主要目標來組黨,這非常合理,因為每個人都有機會當「農民」、「身心障礙者」、「窮人」。而如果以「血統」來組黨,那我永遠沒機會了,因為我不是「客家人」(我只是「客家人」的孫女婿)。
所以,我能接受有原委會、客委會的組織來幫助弱勢族群,但我不能接受以血統來結黨這件事。
制憲聯盟:
以憲法為主要目標。
就個人觀點,對「綠黨」及「台灣農民黨」比較具有認同感。還需要再認真研究一下,才能選擇。
2008總統大選及立委選舉該怎麼決定 ?
我的好朋友 change po 了一篇「受不了的 2008 總統大選」,我對這篇文章的兩個結論非常有意見,所以也提供一下我對總統及立委投票的想法。
在這次總統大選及立委選舉中,我不會再投給民進黨了(是的,2000、2004我投的都是它), 2000 年時,我想投的是連戰,但因為害怕讓宋先生異軍突起,所以,我投了第二選擇,而 2004 年,則是沒有選擇了,因為連戰和宋先生是一組的,所以,我只好再投陳水扁。
而這一次,我不會再投民進黨的原因是希望讓他們知道這 8 年,其實作的並不好。
過去 8 年,因為總統是民進黨的,立院的最大黨卻不是,所以導致行政立法效率不彰及台灣走向不明,這一點我不怪民進黨,就算他們想作事,也不一定作的好,但是「貪汙」及「枉法」就不可取了。
如果再讓謝長廷當選,我想更會「長」貪汙枉法之「昌」盛了,投「馬英九」是我給民進黨的懲罰。
那麼在立院這邊,因為考量了總統是給國民黨,也應該讓國民黨繼續掌握多數,來趕一下「行政立法效率」及「一貫台灣未來走向」,所以我也會在區域立委這邊,投給國民黨。
好了,上面講的都是不得已的選擇。而有什麼是我可以好好決定的呢? 有,在全國不分區這邊。以往的不分區,是看你所投的區域立委是那一黨的,就當作你對那一個政黨投同意票,但這一次選擇,則是明明白白的切割開來了。
攤開不分區的政黨名單: 中國國民黨、民主進步黨、無黨團結聯盟、新黨、台灣團結聯盟、公民黨、紅黨、綠黨、台灣農民黨、第三社會黨、客家黨、制憲聯盟,共有 12 個選擇,這裡是可以好好評估的地方,不用比爛了。
誠懇的呼籲大家,就算總統、區域立委選不下手,但這次可以多給新政黨一個機會,站出來投票吧!
在這次總統大選及立委選舉中,我不會再投給民進黨了(是的,2000、2004我投的都是它), 2000 年時,我想投的是連戰,但因為害怕讓宋先生異軍突起,所以,我投了第二選擇,而 2004 年,則是沒有選擇了,因為連戰和宋先生是一組的,所以,我只好再投陳水扁。
而這一次,我不會再投民進黨的原因是希望讓他們知道這 8 年,其實作的並不好。
過去 8 年,因為總統是民進黨的,立院的最大黨卻不是,所以導致行政立法效率不彰及台灣走向不明,這一點我不怪民進黨,就算他們想作事,也不一定作的好,但是「貪汙」及「枉法」就不可取了。
如果再讓謝長廷當選,我想更會「長」貪汙枉法之「昌」盛了,投「馬英九」是我給民進黨的懲罰。
那麼在立院這邊,因為考量了總統是給國民黨,也應該讓國民黨繼續掌握多數,來趕一下「行政立法效率」及「一貫台灣未來走向」,所以我也會在區域立委這邊,投給國民黨。
好了,上面講的都是不得已的選擇。而有什麼是我可以好好決定的呢? 有,在全國不分區這邊。以往的不分區,是看你所投的區域立委是那一黨的,就當作你對那一個政黨投同意票,但這一次選擇,則是明明白白的切割開來了。
攤開不分區的政黨名單: 中國國民黨、民主進步黨、無黨團結聯盟、新黨、台灣團結聯盟、公民黨、紅黨、綠黨、台灣農民黨、第三社會黨、客家黨、制憲聯盟,共有 12 個選擇,這裡是可以好好評估的地方,不用比爛了。
誠懇的呼籲大家,就算總統、區域立委選不下手,但這次可以多給新政黨一個機會,站出來投票吧!
2007年12月20日 星期四
原來這就是背包問題呀!
日前(好久前了)提了一個讀研究所時所解決的問題,那時還滿自傲的,畢竟在讀土木的同學中,還沒看到有人會解。
那是一個解決鋼筋裁切的廢料量最佳化所衍生的難題。也就是要列出一根原料鋼筋要切成工地用尺寸的組合問題,如:18公尺的鋼筋若要切成 10, 7, 5, 4, 3 公尺長的鋼筋,則有那幾種切法。
Thinker 提了一個很好的方法來計算它的組合數有多少。不過,因為我要的是有那幾種組合,所以不曉得他的方法能否套用(當然可以)。
之前,我是用 Perl 來解這個問題的,不過,程式已經找不到了,不是我沒作版本控制,那時候用的是 CVS,然而在歷經多次系統安裝, CVS 的儲存庫已經不知在那了。
所以,我用 Python 重寫這個方法。有兩種解法,第一種是用我之前的觀念來解的。第二種是昨天想的,不過,第二種卻比較沒效率。
第二種:
新的觀念是把需求尺寸的倍數尺寸拿來當切割尺寸。如:10公尺要給7, 5, 3, 2 來切的話,我先把需求尺寸變成 7, 10, 5, 9, 6, 3, 10, 8, 6, 4, 2 等尺寸來切,如果在切的過程,剛好又遇到擁有相同因數的尺寸則跳過,像是10公尺已經被 8 切掉了,後來又遇到 2 的話,就停止處理。
在人工演練的過程中,覺得第二種方法所跑的迴圈數比較少,然而寫成程式後,效率卻比較差,且實際的迴圈數也比較多。
== 後記 ==
這裡有最新且更有效率的解法。
那是一個解決鋼筋裁切的廢料量最佳化所衍生的難題。也就是要列出一根原料鋼筋要切成工地用尺寸的組合問題,如:18公尺的鋼筋若要切成 10, 7, 5, 4, 3 公尺長的鋼筋,則有那幾種切法。
Thinker 提了一個很好的方法來計算它的組合數有多少。不過,因為我要的是有那幾種組合,所以不曉得他的方法能否套用(當然可以)。
之前,我是用 Perl 來解這個問題的,不過,程式已經找不到了,不是我沒作版本控制,那時候用的是 CVS,然而在歷經多次系統安裝, CVS 的儲存庫已經不知在那了。
所以,我用 Python 重寫這個方法。有兩種解法,第一種是用我之前的觀念來解的。第二種是昨天想的,不過,第二種卻比較沒效率。
1 #!/usr/bin/env python
2 # -*- coding: utf8 -*-
3 def cut(length, k, tmp):
4 if k == sizeslen:
5 if length >= sizes[-1]:
6 return
7 else:
8 tmps.append(tmp[:])
9 return
10
11 comp = int(length/sizes[k])
12 for i in xrange(comp+1):
13 j = comp - i
14 tmp[k] = j
15 cut(length-sizes[k]*j, k+1, tmp[:])
16
17 from time import time
18 import sys
19 if __name__ == '__main__':
20 bar = float(sys.argv[1])
21 sizes = [float(s) for s in sys.argv[2:]]
22 sizes.sort()
23 sizes.reverse()
24 sizeslen = len(sizes)
25 tmps = []
26 tmp = [0,]*sizeslen
27 time0 = time()
28 cut(bar, 0, tmp[:])
29 print time() - time0
30 print len(tmps)
第二種:
1 #!/usr/bin/env python
2 # -*- coding: utf8 -*-
3 def cut(L, x, k, tmp, num):
4 num[0] += 1
5 diff = L-x[0]
6 if diff > mat[0][0]:
7 if tmp[x[1][0]] != 0: return
8 else: tmp[x[1][0]] = x[1][1]
9 elif diff < mat[0][0] and diff >= 0:
10 if tmp[x[1][0]] != 0: return
11 else: tmp[x[1][0]] = x[1][1]
12 tmps.append(tmp[:])
13 return
14 else:
15 return
16 for (i, s) in enumerate(mat[k+1:]):
17 cut(L-x[0], s, i+k+1, tmp[:], num)
18
19 def sort_by_value(k):
20 return (k, k[0])
21
22 from time import time
23 import sys
24 if __name__ == '__main__':
25 time0 = time()
26 bar = float(sys.argv[1])
27 sizes = [float(s) for s in sys.argv[2:]]
28 lensizes = len(sizes)
29 tmps = []
30 mat = []
31 for (i, s) in enumerate(sizes):
32 comp = int(bar/s)
33 for j in xrange(1, comp+1):
34 mat.append((s*j, (i, j)))
35 mat.sort(key=sort_by_value)
36 tmp = [0, ]*lensizes
37 num = [0]
38 for (i, m) in enumerate(mat):
39 cut(bar, m, i, tmp[:], num)
40
41 print time() - time0
42 print len(tmps)
43 print num[0]
新的觀念是把需求尺寸的倍數尺寸拿來當切割尺寸。如:10公尺要給7, 5, 3, 2 來切的話,我先把需求尺寸變成 7, 10, 5, 9, 6, 3, 10, 8, 6, 4, 2 等尺寸來切,如果在切的過程,剛好又遇到擁有相同因數的尺寸則跳過,像是10公尺已經被 8 切掉了,後來又遇到 2 的話,就停止處理。
在人工演練的過程中,覺得第二種方法所跑的迴圈數比較少,然而寫成程式後,效率卻比較差,且實際的迴圈數也比較多。
== 後記 ==
這裡有最新且更有效率的解法。
2007年12月13日 星期四
訂閱:
文章 (Atom)

