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 寫的。

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