PageRank



轉移公告

計劃把 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 ,敬請舊雨新知互相走告。

新文章只發佈在 http://www.hoamon.info/blog/

何岳峰 敬上

2007年4月30日 星期一

0.02秒的差距

曾在一中商圈附近看過一個平面廣告。內容是游擊手手套擺放在二壘壘包前,等待盜壘跑壘員滑向二壘,右上角的標語:「0.02秒的差距」。廣告中的游擊手就是鐵人 Cal Ripken, Jr. 。他的連續出賽場次達2130場,記錄是從1982年開始,在此期間共經歷三位美國總統,五位台灣行政院長,八位日本首相。能達到如此多場次的因素只有兩個:身體健康不受傷、打擊守備表現好。

這廣告的涵義應是說明棒球是一種細微的運動,勝負差距往往只差幾公分。

但我有另一種想法:事前練習比拼命比賽重要。如果沒有事前的練習,那就不該拼命地比賽了,拼了也就是爛命一條。

在廣告中,跑壘員如果拼命地跑,這 0.02 秒的差距是不是可能補足?是/不是都有可能,但以喜劇收場的日本漫畫通常都是可以補足的。只要拼了命什麼都行,我印象中最深刻的就是「 魁!!男塾」,在一次與他校比賽中,有一個男塾學生以意志力背著一名老婆婆跑贏了全力準備的馬拉松冠軍選手,嗯~的確是漫畫。

如果生命中就只有一場比賽,贏了當然是可以沒命的,但生命中往往有著不停的比賽,這一場結束,下一場開始,為什麼要在第一場就把命給拼掉了呢!!能夠經歷長長久久的比賽,不二法門即是賽前的練習。

鐵人 Cal Ripken, Jr. 能保持連續出賽的紀錄就在於事前的練習。練習時,就把體能、柔軟度、耐力、意志力保持在比賽水準,到真正比賽時,他的每項動作:快跑、接球、傳球能流暢地複頌出練習時的劇本,他何須拼命。或也可以說,遇到某些緊急狀況非拼命不可時,他的受傷機率也會比別人小,結果會比別人有效。

這概念也可用大學期考來舉例,一個平時不看書、不上課的學生,到考前一天才準備,你覺得他 pass 過的機率與一個平時認真上課、回家複習,而且考前一天也認真準備的學生來比,那個高?

我不是想勾起大家唸書時的痛苦,而是現在社會趨勢改變就是如此,工作中所需的知識佔你大學、研究所學會的比例逐漸降低,你必定是作中學、學中作。

這現象在資訊界更是明顯,程式設計/電腦科學是一門日新月異的行業,有人痛恨它是因為要一直一直學習,有人愛上它是因為可以一直一直學習,如果你覺得一直學習是件苦差事,建議你該換個不同類型的工作了,但我想不需要持續學習的工作應該也不會是個「好工作」。

所以,在你的專案結束而下一個還沒進來時,不要只是在玩你的 wii 、打 msn 、 沈迷在 Online Game 的世界,把瀏覽器開起來, Google 叫出來,查查 Web Framework 、 REST 、 AJAX 、 Open ID 、 CSS …,你會有一堆文件可以看,這些對 Web Programmer 都是不錯的。

0.02 秒的差距就靠事前準備補足。而且這樣你的軟體生涯才玩的久。

重開機

這一兩天聽到了一些親戚朋友發生了意外,而週四帶媽媽看病時,回途中看到了一場車禍,如果不是我順便要到美村路拿 NB ,我想我會晚點出門,而且走得也是中彰,算算時間差不多也是2點多經過那裡。所以我想寫下這篇文章。

我自認為我是一個合格的 Linux 系統管理員,在我們測試機器的時候,有時候會給它一點「不合理」的要求,或是發生未知的「意外」導致它當了,如果有秀出錯誤訊息,千萬不要忽略,耐心地看完它,並試著解決它。然而有時系統會當到鍵盤、滑鼠不聽使喚、用遠端 ssh 連也連不入,這時候,我通常不會給它太多時間自行回復過來,直接就把 Power 鍵按下去了。重開機後,往往沒事,如果還有事,一定是本來硬體就有問題,所以我也搞不定。

上述的流程,有一個重點:那就是如果它能說出它怎麼了,就給它機會;如果它無法表達自已了,那就不客氣,趕快重開機吧!

* 為什麼寫在 blog 上,因為我還沒有律師,也希望看到的朋友能給 Grace 多點勇氣。

常常有人問我 Linux 的問題

在朋友當中,我是比較早進入 Linux 環境的,從 Red Hat -> Mandrake(現在叫 Mandriva) ->Fedora 一直玩到 Ununtu ,常常會有人問我說:「這個 Linux 怎麼不跟 Windows 一樣?」

我常為此費一番功夫解釋。好啦!現在不用了,有個大陸人說得比我還好,就聽他解釋吧!而且有趣的是,這篇文章是2003年發的,到現在還是說的通。

http://kmserv.com/qa/read.php3?num=10&thread=945&action=2&%20linux%20%3E%20windows

怕這篇好文章會不見,所以用 Firefox + Screengrab 套件抓圖: http://down.hoamon.info/LinuxVSWindows.png

2007年4月18日 星期三

CMCLass: 派送問題(2)

如果派送問題(1)改成每個軍事基地最多可容納2個舊空軍基地,那麼怎麼算呢?
 1  #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 def caldest(From, To):
5 from math import sqrt
6 dest = []
7
8 for start in From:
9 subdest = []
10 for end in To:
11 subdest.append(round(sqrt((start[0] - end[0])**2 + (start[1] - end[1])**2), 0))
12 dest.append(subdest)
13
14 return dest
15
16 def optima(coef):
17 from pulp import *
18 (Dest, var, obj) = (coef, [], 0)
19 prob = LpProblem("dest", LpMinimize)
20
21 for i in xrange(len(Dest)):
22 var.append([])
23 for j in xrange(len(Dest[0])):
24 (str_i, str_j) = ("%03d" % (i + 1), "%03d" % (j + 1))
25 var[i].append(LpVariable("var"+str_i+'_'+str_j, 0, 1, LpInteger))
26 obj += Dest[i][j] * var[i][j]
27
28 prob += obj, 'OBJ.'
29
30 for i in xrange(len(Dest)):
31 st = 0
32 for j in xrange(len(Dest[0])):
33 st += var[i][j]
34 prob += st == 1
35
36 for j in xrange(len(Dest[0])):
37 st = 0
38 for i in xrange(len(Dest)):
39 st += var[i][j]
40 prob += st <= 2
41
42 #prob.writeLP("dest.lp")
43 prob.solve()
44
45 print "Status:", LpStatus[prob.status]
46
47 for v in prob.variables():
48 if v.varValue >= 1:
49 print v.name[3:6] + ' => ' + v.name[7:10]
50
51 print "objective=", value(prob.objective)
52
53 if __name__ == '__main__':
54 A = [[1130, 863],
55 [1705, 1283],
56 [1326, 1736],
57 [975, 825],
58 [1286, 807],
59 [909, 1143],
60 [1579, 1608],
61 [1162, 1118],
62 [876, 1573],
63 [1198, 1748],
64 [801, 1134],
65 [956, 1226]]
66
67 B = [[1031, 1206],
68 [1046, 1000],
69 [1803, 1809],
70 [1588, 1821],
71 [1300, 1482],
72 [1939, 1228],
73 [1147, 1703],
74 [1319, 1254],
75 [1300, 1182],
76 [1817, 1269],
77 [1945, 1605],
78 [1349, 1488]]
79
80 dest = caldest(A, B)
81 optima(dest)
在第40行的地方改成 <= 2 即可

2007年4月17日 星期二

生物調查資料庫

剛剛聽了一個建置台灣生物調查的推動計劃。有一點想法,這個計劃如果由政府推動,有兩個缺點:
  1. 機關首長及主事者會換,有可能這個計劃會死在某個人手上。
  2. 政府機關常只照顧 IE 用戶,漠視其他瀏覽器。像這個計劃的主辦單位的某些網站( http://twd.tesri.gov.tw/twd/ )就無法使用 Firefox 瀏覽。
這個建置計劃的主要內容是,希望教育一般人(通常是中小學師生)協助建立住地附近的生物GIS資訊,把什麼時間那裡看到什麼生物記錄到 Excel 表去,然後上傳到機關網站。我個人相當欣賞這個計劃,除了「政府機關」及「Excel」二個部份。

就像維基百科一樣,全民貢獻自己一點點的知識,可為億人造福。

建置這個生物資訊的技術與圖書管理系統有點相似,每種生物都有物種代碼,就像書有 ISBN 一樣,而那些地方擁有那些生物,就像那些人擁有那些書一樣。而且學生在建置生物資訊時,可以離科學近一點,可以學著作點事,可以萬古流芳,好處實在多多。

如果能用 Open Source 的概念來建置這個系統,然後由一般人來建置資料,那才能長長久久,死不了。

2007年4月13日 星期五

Eclipse + PyDev

一直以來,都是用 Vim 作編輯的:寫網頁、 Perl 、 Python 、 shell script 、設定檔…,但學弟妹們還不會用 Vim 就要求他們拿來寫 Python ,這有點為難。對很多人來說,「鍵盤」絕對是「沒有生產力」可言的。

那如果不用 Vim 的話,那麼我的第二選擇會是 Eclipse ,因為它是 open source ,是 IBM 拱的,可以跨平台,也適合拿來寫網頁、 Latex 、 Python 、 PHP ...。

寫了一份簡單講義教他們如何在 Windows 上搞定 Eclipse + PyDev 。結果自己在 Ubuntu 平台上卻搞不定 Eclipse + Subclipse ,問題是出在我使用 Gnu 的 Java Run Time ,而它在 ssl key 的部份會發生無法接受過長的 ssl 憑證,卡在這裡非常久,試著安裝 javahl 函式庫,但我不知道到那裡改設定( Eclipse 的選項實在太多了,雖然我現在終於知道要到那裡改了),所以我放棄了 Gnu 的 jre ,改用 sun 出的 j2se sdk 。裝完後,在啟動 eclipse 前,先作如下設定

export JAVA_HOME=/usr/local/jdk1.6.0_01
export PATH=$JAVA_HOEE/jre:$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib

即可。

我打算給 Eclipse 一個機會,讓我在跑 Python 程式時能更有效率,編輯的部份當然還是得靠 VIM 了。

2007年4月11日 星期三

書籍管理系統:還不夠完美!

朋友傳了一個連結給我參考,那是一個我很久以前就好想作的服務:「書籍管理+意見分享」。那是我在裝了 Movable Type 時,發想的。

其實之前看到豆瓣時,就知道這世上,已經有人作出我夢想中的一部份,只是還不夠完美。這些服務在我的理想系統中,還缺了兩個元素:
  1. 刷書系統 用瀏覽器作刷條碼系統,會不會扯了點。事實上, AJAX 出來後,這個夢想不會假了。
  2. 獨立安裝 理想中的書籍管理系統,不只是給個人用的,還要能給圖書館用。
條碼機不過就像自動化鍵盤一般,當你刷了 ISBN 後,它就送出1串數字及1個 [Enter] ,所以用了 AJAX 程式,的確可以讓整套系統的使用方式,就像你家隔壁的租書店系統一樣,借還書、盤點就靠條碼機搞定。我的確也打算將這個系統應用在租書店,或是其他使用條碼機管理的零售商店上。

如果你有機會到竹山鎮欣榮紀念圖書館走走,你會發現館內絕大部份使用的個人電腦都是裝了 Ubuntu 的,這是一個很棒的圖書館,惟一美中不足的地方是:「圖書管理系統」是裝在 Windows 上,而且查詢系統是用 ASP 寫的。

我理想的圖書管理系統是能夠提供圖書館級的管理能力。所以除了線上提供服務外,能夠寫出一套系統,讓一般使用者也能自行安裝,那就美了。從一般使用者的安裝、使用問題上,可以加速回饋系統開發,這樣我會更有能力提供圖書館現有系統的更換。等到有圖書館使用了這套系統後,我就可以把原圖書館的書籍編目資料轉進這個系統,擴充書籍資料庫,如此一來,就可以節省一堆館員及使用者自行輸入資料的力氣,也提高書籍資料庫的正確性。大家就可以把填寫書籍資料的力氣省下來,多寫幾篇書評了。

2007年4月3日 星期二

第一個latex檔案:我的履歷

要考博班了,須要寫一篇履歷。花了不少時間,終於把網頁上的自傳履歷改成 latex 版。

範例: http://down.hoamon.info/resume070403.tex
成果: http://down.hoamon.info/resume070403.pdf

可惜有幾個地方,我作的還不夠好:
  1. 腳註不能放在最下面。第5頁的內容明顯不多,但腳註卻不能調整到最下面。
  2. 表格跨列處理的非常不好,以致於我略去 multirow 的指令。在生涯規劃的表格中,有幾個表格應該是跨列的,但不管我這麼調,它都不能依欄寬將一大段的文字斷行,所以我暫時放棄。

2007年4月2日 星期一

另一種Latex套件:TexLive2007

發現另一種似乎比 cjk-latex 好用的 tex 套件。它也可以處理 utf8
的文件,且據說它嵌入字形檔的方式是比較好的(原諒我,我還不太懂 tex),另外安裝也比較方便。

請 tex mirror 站下載 live-CD (
http://ctan.cdpa.nsysu.edu.tw/systems/texlive/Images/ )。

將 images 檔掛載到你想要的目錄如 /mnt/iso

$ sudo mount -t iso9660 -o loop /path/xxx.iso /mnt/iso
$ cd /mnt/iso
$ sh install-tl.sh
$ [按下d,以選擇安裝路徑]
$ [按下1,選擇 /usr/local/texlive,如果你沒有系統管理員的權限,就選擇你可以寫入的目錄]
$ [按兩次r離開]

這樣子,你就可以部份安裝好 texlive 了。為什麼是部份安裝呢!因為這樣的安裝方式,在你移除了 /path/xxx.iso
後,就無法使用了。但這種方式對我來說無所謂,因為我的 /path/xxx.iso
就放在硬碟裡,不會不見的。這樣只有一個缺點:比較浪費硬碟空間。

接下來我們要設定系統環境。下面是 texlive 可以運行的環境:

alpha-linux HP Alpha GNU/Linux
hppa-hpux HPPA HP-UX
i386-darwin x86 Mac OS X
i386-freebsd x86 FreeBSD
i386-linux x86 GNU/Linux
i386-openbsd x86 OpenBSD
i386-solaris x86 Solaris
mips-irix SGI IRIX
powerpc-aix IBM RS/6000 AIX
powerpc-darwin PowerPC Mac OS X
powerpc-linux PowerPC GNU/Linux
sparc-linux Sun Sparc GNU/Linux
sparc-solaris Sun Sparc Solaris
win32 Windows (32-bit)
x86_64-linux x86 64-bit GNU/Linux

我的是 i386-linux ,所以要在 ~/.bashrc 中設定:

PATH=/mnt/iso/bin/i386-linux:$PATH; export PATH
TEXMFSYSVAR=/usr/local/texlive/2007/texmf-var; export TEXMFSYSVAR

就這樣完成了。

下面是測試範例:


1 \documentclass[12pt]{book}
2 \usepackage{CJKutf8}
3 \begin{document}
4 \begin{CJK}{UTF8}{bsmi}
5 \tableofcontents
6 \chapter{here}
7 本常問問答集~(FAQ list)~是從一些經常被問到的問題及其適當的解答中,以
8 方便的形式摘要而出的。跟上一版不同的是,其編排結構已徹底改變。
9 \textbf{有關新結構的細節,可參考「如何閱讀本問答集及了解其編排結構」
10 該項中的說明。}
11 \chapter{CJK 巨集套件}
12 這是一個測試,關於CJK package 的測試。\LaTeX
13 \chapter{桃花源記節錄}
14 初狹,纔通人;復行數十步,豁然開朗。土地平曠,屋舍儼然。有良田、美池、%
15 桑、竹之屬,阡陌交通,雞犬相聞。其中往來種作,男女衣著,悉如外人;黃髮、%
16 垂髫, 並怡然自樂。見漁人,乃大驚,問所從來;具答之,便要還家,設酒、殺雞、%
17 作食。村中聞有此人,咸來問訊。自云:「先世避秦時亂,率妻子邑人來此絕境,%
18 不復出焉;遂與外人閒隔。」問今是何世;乃不知有漢,無論魏、晉。此人一一%
19 為具言所聞,皆歎惋。餘人各復延至其家,皆出酒食。停數日,辭去。此中人語%
20 云:「不足為外人道也。」
21 \end{CJK}
22 \end{document}
經 pdflatex 後的成果。如果你使用上面的範例來跑 pdflatex 時,你會發現編譯時有錯誤訊息。這是 pdflatex 還無法正確處理中文目錄(應該是 bug ),所以你只要手動修改 xxx.toc 檔,換上正確的中文即可編譯了。

2007年4月1日 星期日

好久沒上微軟課程的講習了

大家都知道比較「不聰明」的使用者偏向使用 windows 系統的作業系統(註1),所以你常常可以遇到不太精明且是用 windows 的工程師。

當然,還是有一些精明且使用 windows 的工程師,而且他們很會演講,這類型的人比例也不少且比 un*x 工程師多(註2),但今天的這一位講師剛好不是屬於這一類的人。

為什麼我會這麼惡毒。首先是說話技巧,他每講幾句話,就會帶一句「可以嗎」,這句話是問句,但他從不期待有人回答。所以這會讓人非常煩燥,如果你認真聽講,你就會想要回答他,但他從不等你的回應,所以你只有忽略他這句話,同時也把其他的話一起忽略了。

再來是簡報,他拿的是巨X其他講師的簡報,如果他乖乖地照著別人簡報報告那也沒什麼問題,但他似乎不認同這份簡報,所以常常講的跟簡報上的文字沒有關係,那這樣我眼睛盯著簡報也沒有意義了,因為他不一定講簡報上的內容。

我忽略了他的說話也忽略了他的簡報,所以我在課堂上寫這篇文章及其他的文章。

註1:感覺上是這樣的。但是我卻常迷失在 windows 的畫面中,而找不到可以用的選項。所以,這是別人說的,我個人是覺得 Linux 伺服器是比較不花腦袋就可以使用的。

註2:據統計,1位 un*x 工程師可以同時管理 44 台伺服器,而 windows 工程師只有 10 台,也就是說,這世上的 un*x 機器與 windows 機器一樣多的話,那麼 windows 工程師一定會比 un*x 工程師多。

終於裝了Latex

從我學 Linux 開始,看到許多教學文件不是用 Docbook 就是用 LaTeX 排版的,
一直很心動,想學好 LaTeX 語法,然後把我的文章、論文、報告…全部轉成 tex 格式的。

唸(想念)了很久,也買了 cwTex 的書,但一直沒有真正花時間來學。直到現在,要唸博班了,
一定得寫很多報告,還是早學早超生。

學之前,總要把 LaTeX 裝起來吧!要不然怎麼實作呢!這就是痛苦的開始…

一般來說,各家的 Linux 套件都會附 LaTeX 程式給你,只是這些程式不支援 utf8 中/日/韓文。
因為要讓 latex 支援中文,並不是直接 hack tex 及 LaTeX 的核心,都是以外掛套件的方式處理的。
所以你得要處理外掛套件及字形檔的問題。

參考很多網頁文件及 MyCJK.pdf ,事實上,還是沒搞清楚 cjk-latex 如何安裝。
所以我是用 debian 的 .deb 檔來作安裝的。請到 debian 的 testing 套件檔下載如下檔案:

cjk-latex_4.7.0+cvs20061019-2_all.deb
latex-cjk-chinese_4.7.0+cvs20061019-2_i386.deb
latex-cjk-chinese-arphic-bkai00mp_1.15_all.deb
latex-cjk-chinese-arphic-bsmi00lp_1.15_all.deb
latex-cjk-chinese-arphic-gbsn00lp_1.15_all.deb
latex-cjk-chinese-arphic-gkai00mp_1.15_all.deb
latex-cjk-common_4.7.0+cvs20061019-2_i386.deb
latex-cjk-japanese_4.7.0+cvs20061019-2_i386.deb
latex-cjk-japanese-wadalab_0.20050817-11_all.deb
latex-cjk-korean_4.7.0+cvs20061019-2_all.deb
latex-cjk-thai_4.7.0+cvs20061019-2_all.deb
tex-common_1.0.1_all.deb

然後在 ubuntu 中下:

$ sudo dpkg -i *deb

這樣就裝好了。測試範例如下:
 1  \documentclass[12pt]{report}
2 \usepackage[T1]{fontenc}
3 \usepackage{CJKutf8}
4 \usepackage[USenglish]{babel}
5 \usepackage{CJKulem}
6 \newenvironment{TChinese}{%
7 \CJKfamily{bkai}%
8 \CJKtilde
9 \CJKnospace}{}
10 \begin{document}
11 \begin{CJK}{UTF8}{}
12 \begin{TChinese}
13 \chapter{here}
14 本常問問答集~(FAQ list)~是從一些經常被問到的問題及其適當的解答中,以
15 方便的形式摘要而出的。\uline{跟上一版不同的是,其編排結構已徹底改變。}
16 \textbf{有關新結構的細節,可參考「如何閱讀本問答集及了解其編排結構」
17 該項中的說明。}
18 \chapter{CJK 巨集套件}
19 這是一個測試,關於CJK package 的測試。\LaTeX
20 \chapter{桃花源記節錄}
21 初狹,纔通人;復行數十步,豁然開朗。土地平曠,屋舍儼然。有良田、美池、%
22 桑、竹之屬,阡陌交通,雞犬相聞。其中往來種作,男女衣著,悉如外人;黃髮、%
23 垂髫, 並怡然自樂。見漁人,乃大驚,問所從來;具答之,便要 還家,設酒、殺雞、%
24 作食。村中聞有此人,咸來問訊。自云:「先世避秦時亂,率妻子邑人來此絕境,%
25 不復出焉;遂與外人閒隔。」問今是何世;乃不知有漢,無論魏、晉。此人一一%
26 為具言所聞,皆歎惋。餘人各復延至其家,皆出酒食。停數日,辭去。此中人語%
27 云:「不足為外人道也。」
28 \end{TChinese}
29 \end{CJK}
30 \end{document}

經 pdflatex 編譯後的 pdf 文件

嘿~開始認真學 Latex 了。
Related Posts Plugin for WordPress, Blogger...