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/

何岳峰 敬上

2008年12月21日 星期日

VirtualBox: 在命令列下,將 host os 中的 usb 設備指定給 guest os 使用

如果我們把 Windows 開在背景中執行,這時得用遠端桌面連線來控制它的。

但如果我們臨時想要為 Windows 加入一 usb 設備的話,該如何處理? 原本若依正常的使用方法,在 VirtualBox 程式中開出 Guest OS 時,它在右下角視窗外會有添加 usb /光碟/硬碟…的按鈕,但在背景中執行時,這些按鈕則見不到了。

其實很簡單。首先查出你要添加的 usb 設備的 uuid 。

# VBoxManage list usbhost
UUID: aead9d43-12fb-4faa-8c83-8e810217210c
VendorId: 0x0ca6 (0CA6)
ProductId: 0x0010 (0010)
Revision: 0.5 (0005)
Manufacturer: CASTLES
Product: EZ100PU Smart Card Reader
Address: /proc/bus/usb/001/003
Current State: Captured

接下來,在指定的 guest os 中啟用它。
# VBoxManage controlvm {{YOUR_GUEST_OS_NAME}} usbattach aead9d43-12fb-4faa-8c83-8e810217210c

你就會在 Windows 中,看到一 usb 設備被找到了。

而移除它的方法則是如下:
# VBoxManage controlvm {{YOUR_GUEST_OS_NAME}} usbdetach aead9d43-12fb-4faa-8c83-8e810217210c

2008年12月12日 星期五

在無 X window 下,在 Linux server 中安裝一個跑在 VirtualBox 上的 Windows XP

有時候,就是很無奈,得裝上一個自己不喜歡的東西來討人歡心,要不然生不出人家想要,且是一模一樣的封閉格式檔案。所以只好在 Linux Server 上裝個 VirtualBox 來跑 XP 。但問題是,它沒有 X window 耶,怎麼辦? 很簡單,照下面指令一樣畫個胡蘆就成了。

# 製作一個近 6g 的硬碟檔案(virtualbox用的vdi檔)
VBoxManage createvdi -filename GuestOSName.VDI -size 6000 -register
# 註冊你要使用的 WinXP 光碟檔
VBoxManage registerimage dvd /home/hoamon/WinXP.iso

# 創建一個虛擬機器,名稱是 GuestOSName
VBoxManage createvm -name GuestOSName -register
# 設定 GuestOSName 所用的記憶體為 768MB 、使用 dvd 、使用 nat 、
# 使用 GuestOSName.VDI 為 hda 硬碟、並在 3389 port 上使用「遠端桌面連線」來作控制虛擬機器、
# 在光碟機中放入 WinXP.iso
VBoxManage modifyvm GuestOSName -memory 768MB -acpi on -boot1 dvd -nic1 nat -hda GuestOSName.VDI -vrdpport 3389 -dvd /home/hoamon/WinXP.iso

# 開啟虛擬機器,然後你就可以連入 XXX.YYY.ZZZ.WWW:3389 去安裝 Windows XP 了。
VBoxVRDP -startvm GuestOSName &

# 強制關機
VBoxManage controlvm GuestOSName poweroff

在這個過程中,有一個非常棒的設計,那就是這個遠端桌面連線並不是 Windows XP 的遠端桌面連線,它是 VirtualBox 所提供的遠端桌面連線,所以當我們一打開 GuestOSName 時,以 3389 連線進去是可以看到 BIOS 畫面,但此時 Windows 都還沒啟動。

因為是 VirtualBox 所提供的桌面連線,所以如果你的 Guest OS 裝的是 GNU/Linux 、 *BSD 之類的作業系統,一樣都是用遠端桌面連線來控制。

接下來若是要開放 Guest OS 連線請參照用 VirtualBox 讓 Windows Server 偷偷(背景執行)跑在 Linux Server 上

2008年9月16日 星期二

「政治文」:危橋的定義是「颱風就倒」?

斷橋新聞請看 http://www.libertytimes.com.tw/2008/new/sep/15/today-t1.htm 。

大家對后豐橋為什麼會斷,應該是沒有疑問,因為它是「危橋」,只是我不懂的是,它前年就被宣告「危橋」了,為什麼這次遇到辛樂克才斷,難道是阿扁神力護佑,所以換總統後,新總統神力不夠,活該它斷。

那又為什麼甲仙大橋沒列「危橋」,但這一次颱風來,卻也斷了。雖然沒有死人,不過,從新聞畫面看來,有輛車在橋斷前緊急迴轉,怎麼那位司機就不罵公路單位沒有事先封橋(或許有罵,只是記者沒報)。

依政府預算編列、採購相關規定來看,后豐橋前年被判定「危橋」,去年編列預算,今年發包施工,看起來是沒有問題的。大家在罵的好像是「太晚封橋了」,如果被判定危橋後馬上封橋就不會有雷工程師事件。可是我們看看下面的 google map 。連接后里鄉及豐原市之間的橋有三座,由左至右分別是「中山高」、「后豐大橋」及「長庚大橋」。如果前年就封橋了,那麼真如交通部長所言的,必須開放機車上國道,那會有多少的用路人會開罵呢!


檢視較大的地圖

又大家都大聲地說:「判定危橋了,為什麼不趕快拆了重蓋?」

那一下子這麼多危橋要重蓋,可以加稅嗎? 這時候又沒聲音了。只有我心里喊了兩聲:加徵證所稅以及加徵石油附加稅吧!

2008年9月10日 星期三

「政治文」:證交稅打折?

「利益揭露」:因為我想要買股票,所以我希望股市大跌。

「證交稅打折」這個風聲讓我的股票市值回升了不少,不過,我不樂見。如果政府聽從那些大企業建言冀望使用證交稅減半來提昇大盤指數,那就等著看真正調降證交稅後,那些說話大聲的企業家賣股票吧。

如果真的很想拉抬指數,那應該是提高證交稅(因為它是賣股票時才課徵的),然後把多徵的稅補貼給買股票的股民,藉由獎勵買股票; 懲罰賣股票的手段來推昇指數,這才是「王道」吧!

事實上,我希望劉內閣應該對股市少干預,像之前沒什麼聲音不是也很好。回顧過去八年扁政府作了多少指施、喊了多少口號,結果還是不景氣,我相信馬政府上任半年,花多少力氣也不可能「馬上回昇」,會相信「馬上好」的,不是麻痹自己的理智,就是本來沒理智的。「治大國,若烹小鮮」,如果換了一個總統,底下公務員要從東邊,改往西邊走,那什麼時候,才可以到達終點呀! 還是建立正確的文官制度會比較好,真正是「文官治國」,不是總統,只是總統往往是那個敗壞國格的人

如果真的覺得沒喊口號、沒改個制度,會對不起選民,那我建議在股市低迷的現在,取消證交稅,但放個風聲恢復「徵收證所稅」(註1)吧! 沒錯,是讓台灣證券交易史上創下連 19 根無量跌停的「證券交易所得復徵所得稅,一方面符合賦稅公平(實際上,這是對散戶無所謂,但對大企業、證券大戶是種大傷害的政策),再方面,過去四大基金操作績效太差,可以在無量下跌時,大量買進股票,如果真的跌到四大基金也救不回時,再視情況宣佈「不徵證所稅」了。當然,我也會和四大基金一樣進場買股票的。

註1: 事實上,這是不可能的事了。請見實話實說證所稅。立法院諸公們肯嗎??

== 2012/04/28 後記 ==

多年後,再回顧這篇文章,發現我的確算是『一以貫之』的人。

2008年8月5日 星期二

別再叫我立可帶了!

常聽到有人說「立可帶」,但對一個從「原子筆橡皮擦」過渡到「立可白」時代的青年人,這個字彙實在很難想像。

「立可帶」到底是立刻可以帶什麼? 帶水果? 滿福堡? 還是 XO?

立可白全名原為立可白液,當我們省略名詞,至少還有副詞及動詞讓我們了解它是用來「白」什麼的。

但「立可白帶」的簡寫居然是把動詞省略!留了兩個副詞及名詞,而不是「可白帶」或是「立白帶」。這對國文還可以的我來說,實在覺得奇怪。

所以,我都叫它:「修正帶」。

2008年8月4日 星期一

「政治文」:民主政治的價值

民主政治的價值:「不在群體智慧的體現,而在於群體共享決策的後果。」

在民主選舉制度中,有許多你覺得荒謬的事,但它的的確確會發生,各位可以在這部電影「年度風雲人物( Man of the year )」中體會。

當我們選出一位首長時,我們期待有所改變,我們把所有的希望寄託在一個人的身上,然而一個美國總統上任需要決定七千個位置,他手頭上如果沒有預選名單,那麼如何在短短一、二個月之內把對的人放到對的位置。而大部份的人對自已爸媽都沒那麼了解了,為什麼我們會要求一個首長必須對他選出來的人的私人生活負責。

孔子也說:「君子不以言舉人,不以人廢言」。這句話白話的說是:「會說話不代表會作事,而爛人也不一定講爛意見。」且這世界上是難得找到會說話又會作事且私生活良好的人,就算有也不會這七千人都到美國政府幫忙。於是只能有所取捨,只要他能把事作好,那麼長得醜沒關係、有小老婆沒關係、有外國護照沒關係、不孝順沒關係,只要他作對台灣好的事,就夠了。

事實上,政府的運作是靠團隊在運作,但卻有人不相信,只認為這是首長個人的事,如果他不在,那政府就完了。在民主制度下,目前我們的民眾還是以為「人治」而非「法治」(註1)。

但沒關係,民主制度就是提供了一群笨蛋可以有選出另一個笨蛋的權利,而被選出的那個笨蛋有責任滿足一群笨蛋的幻想。這可貴之處就在於所有人共同承擔多數決決策。

* 註1:也可以從另一個角度來看台灣人喜歡「人治」而非「法治」。大部份的老闆都喜歡看到員工在表演「作事的態度」,注意! 是表演,不是作事。所以,如果某個場合員工沒出現,那他就連表演的機會都沒了,這對把事情有條不紊安排好的員工來說,是吃虧的,他不會有加分的機會,就算他可以不出現,但他還是得出現,而且往往比那些事前不準備,出事才表演的流汗流血的員工還不如。再補一個例子:民眾往往認為在颱風天,如果沒看市長穿著皮鞋踩在比車輪高的水中,那就覺得他沒在作事,如果首長沒親眼看到文旦落果、西瓜泡在水中,那他不會了解水災的嚴重性。

我是小氣的人, 20 元就可以讓我計較很久了。

最近我把網路線接到客廳看 MOD ,因為想要也可以在這裡工作(其實已有 FON 無線網路了),所以需要一個 hub 。這不是一件急事,所以在 pchome 上鎖定了這個 430元的產品後,我跑到「埔里燦X」逛逛,看到它們也賣 430 元,雖然沒有附購物袋,不過,想說價錢一樣,就順便買了。

然而,到了櫃台,小姐說我的會員卡過期了,要不要辦續卡,續卡 400 元,但有送小家電,我看了看小家電,好像家裡都用不到,所以想說下次買東西,再看老婆要不要續卡好了。

於是,小姐刷了產品條碼後,告訴我 450 元,我當下有點愣住了,原來沒續卡馬上就被懲罰 20 元。結果,我還是遞出了我的信用卡,待我走出門時,一直後悔,我為什麼沒說:「我不買了。」

唉~沒有下次了。

2008年7月18日 星期五

運動家精神: 中華職棒部份球員還不夠!

中職史上兩次無安打比賽,「苦瓜」許聖杰都有參與,而且兩次都幫別人「成就」紀錄…(全文: 自由時報 )

如果一項完美紀錄,是靠對手有心成全,這跟打假球有什麼不同。

要不,聯盟六隊抽個籤,看誰當一下苦主,幫我們成全一下「完全比賽」吧!中職還沒有這項紀錄呢!

= 2012/06/19 後記 =

對比人家的完全比賽: http://mlb.mlb.com/video/play.jsp?content_id=22272193 ,那最後三個出局數可是認認真真把球打出去呀!  這才是運動家精神。

2008年7月16日 星期三

Zotero - add-ons of firefox

這個周末 7/19 應該是在關渡與狐迷朋友們共同慶祝 Firefox 3 的成功。也答應要簡報一個套件 Zotero 給大家。不過卡玫基颱風亂了我們的計劃,本來是要在周五時就住在淡水並遊遊北海岸的,不過,颱風來了,還是在家躲雨看 MOD 好了。

所以,我就把 Zotero 的簡報錄了下來,在線上為各位介紹囉~



不過 Google video 上的影片不是很清楚,要看清晰版的,可下載
  1. http://down.hoamon.info/zotero.avi (90mb)
  2. http://down.hoamon.info/zotero.mpeg (34mb)

以下是文字講稿,但部份與影片不同。

如果各位的 firefox 中,還沒有 zotero 套件的話,請上 zotero 官網 www.zotero.org 中下載並安裝。

安裝後重啟 firefox 後,可以看到右下角的狀態列中多了一個 zotero 按鈕,點選它後,會出現三欄的畫面。

最左欄有資料夾及標籤的總覽,中間則是你的資源,右邊則是你所選擇資源的詳細內容。

三欄的上面則是 zotero 的工具列,首先讓我們先設定 zotero ,把它預設存放檔案的位置改成想放置的資料夾,我是把它放到我的版本控制器的資料夾,這樣電腦重灌時,比較不會忘了備份 zotero 。設定好了,接下來,我們就開始使用 zotero 。

點選這個[黃色筆記]圖示來新增一個筆記,填寫些內容,若這個筆記與其他的資源有關係,可以選擇 [Related] 將它們關連在一起。將來要找尋的話,兩個會一起被找出來。

另外,如果你在瀏覽網頁時,發現不錯的文章,你可以使用這個[鏈結圖示]將網址記錄下來,右下方則是你加上備註的地方。又如果你害怕這個網頁將來可以不存在,那麼就使用[拍照圖示]將它快照起來,並放入 zotero 的資料庫。

在所擷結的資源,內容較豐富時,或是它會關連到你電腦中的文件時,那麼我們使用[白色文件圖示]來新增一個項目,這個項目可放入多個筆記及其他附件。

每一種鏈結、網頁快照、項目都可以新增筆記,紀錄你當下的想法; 設定標籤及相關資料,方便日後搜尋。

搜尋的方式非常簡單,你可以依當初定義的標籤來搜尋,也可以搜尋資源中的文句,或是交叉搜尋,要再更精細的搜尋,則是使用工具列上的[放大鏡圖示],來作進一步搜尋,你可以依題目、摘要、日期…等屬性作搜尋。

除了紀錄想法、文件、網頁外, zotero 也可以保存結構化文件,讓你輕鬆紀錄作者、摘要、出處…等,只要 zotero 有支援的格式都行。

以書籍來說,台灣大學圖書館有提供 zotero 解析的文件,所以你可以簡單地將「惡童日記」的基本資料抓下來,而外文書資料則可以上 amazon 抓。只要你瀏覽的網頁在網址列後有出現 zotero 的圖示,就表示它是可以將文章明細匯入 zotero 的。

而另外一種結構化文件就是「期刊」,在台灣,多數碩博生要畢業的要件是寫一篇論文,而這份論文當中,一定會有引用的期刊,因為我們都是站在巨人的肩膀看世界的。

首先我們利用 google 的 scholar 來找篇期刊來玩玩,「Comparative study of artificial neural networks and multiple regression analysis for predicting hoisting times of tower cranes」這是一篇塔吊作業最佳化的期刊,我們可以看到i這個網頁的網址後有出現 zotero 的圖示,這表示它可以匯入,匯入後,它的作者、摘要、出處、期刊名、關鍵字等已分門別類清楚地放入 zotero 中,這樣我們,可以在閱讀期刊時,順手將想法、疑問、待引用文句先紀錄在筆記中,待最後要寫論文時,打開 google docs ,使用拖拉方式即可將它列入參考文獻中。如要更改格式,可至 preference 去更改匯出格式。

除了電子化資源可以擷取外, zotero 也提供手動輸入的功能,請[綠色加號圖示],其中可供你選擇書、雜誌、期刊、報紙…等格式,讓你把非數位資源納入 zotero 管理,也因 zotero 的透通性,所以可以快速匯出給其他軟體使用,達到 「type once, use anywhere」。

以上是 zotero 簡單介紹,謝謝你的聆聽。

指數化投資第二階段檢視

在 9037 點(也就是馬總統上任後幾天)買進三支股票後,累計到目前的報酬是 -25.9% ,沒錯!大盤是 -24.4% ,我的股票也沒好到那裡去。

但這是一個不錯的開始。這樣三十年後,我跟孫子講說:「別把時間浪費在股票上,要多花點時間在自我投資上。」時,他不會回我說:「爺爺,你的簡單指數化投資之所以成功,是因為馬前總統上任後,大盤漲到一萬二千點的關係,而並不是你的策略成功。所以,應該還是要花時間研究一下經濟情勢等外界因素來決定什麼時候是買進/賣出股票的時機。」

好了,花了十五分鐘寫這篇文章,現在我要回工作崗位了。別花太多時間在股票上呀~

相關閱讀:
簡單指數化投資
指數化投資第一階段檢視

延伸閱讀:
台股的長期觀點(TAIEX for the Long Run)
台股的長期觀點(TAIEX for the Long Run)---續1
台股的長期觀點(TAIEX for the Long Run)---續2

2008年7月8日 星期二

退了中投有線,改辦中華電信 MOD

就價格上來說,MOD 年繳 982 元,而中投有線年繳約 6900 元,當然是 MOD 便宜多了。而就節目上來說,我多是看新聞及大聯盟棒球,而且 MOD 現在還有 NFL 重播,所以 MOD 真的是便宜又大碗。

不過,不知道將來 MOD 成氣候後,會不會和有線電視業者一樣財大氣粗,那我就不知道了,反正先綁約一年,明年再看看情況如何。

我等著看 NFL 經典賽了。

2008年7月6日 星期日

如果我不唸中興土木?

從毛毛的回憶大學聯考,讓我想到當初可是一意孤行地選擇了「土木系」。剛剛查了一下 85 學年度的大學錄取標準,發現當時 323 的分數,除了台大、交大完全上不了外,其他的國私立學校或多或少都有科系可以唸,可見當時我有多一意孤行,居然沒把清大、成大放在心裡,真正落實選系不選校的觀念。雖然以現在的想法來看,唸什麼科系得到的知識都一樣重要,但際遇卻會有所不同。

高四時,我只有在「電機」、「建築」及「土木」三個科系中決擇,因為那個時候,大學科系的資訊沒那麼豐富,我大概了解知道的應用科系中,只有這三個,而其他「物理」、「數學」又因為我不想當「老師」(註1),且家人也不願意我唸「非師範系統的物理系」,所以直接刪去,要不然我是很喜歡物理的(註2)。

高中時因為「大時代」港劇,了解了「人棄我取」的觀念,所以在選擇「電機、建築土木」時,我是以「電機為熱門科系,而建築業正不景氣」的理由,放棄了電機,而在「建築、土木」(註3)部份則是因為我上不了東海建築,所以就選擇了「土木系」,但後來多了解了「建築系得讀什麼」後,我就知道我根本不是那塊料,所以我很慶幸考不上東海建築。

那為什麼會是唸中興而不唸中央的原因則是我父親以「重金」利誘我,希望我能唸中興大學,離家會比較近(註4)。

以上的種種因素讓我唸了中興土木。只是唸了後,才發現我不喜歡「土木」。我在光學以後的物理概念比古典力學好,我也比較喜歡愛因斯坦勝於牛頓,再加上與初戀女友的遠距離戀愛,讓我在中興土木的成績表現上非常地不理想, 6 個學期(截至大三)的平均排名為 49 名,而全班人數只有 50 人,最後初戀女友也分了。

因為在學成績差,當我要考研究所時是無法考傳統熱門的結構、大地、測量、水利等類組,要追回3年的基礎實在太難了。還好那時候出了一個新興組別:「營建管理」,它與大學課程相關的只有二門課:營建管理概論及工程統計,而另外得自修工程經濟,還好我的營建管理概論修得不錯,要補得只有工程統計及工程經濟,而其他土木系學生也多半要自修工程經濟(註5)。

還好最後如願考上營建管理,我才發現了另一個春天。唸大學時,我才發現我的興趣真是多:財經、管理、經濟、程式設計、抽象代數、歷史、圖書資訊…。而唸營建管理,可以讓你從其他學科中找方法來解決,所以我可以用選擇權解 BOT 權利金、可以用賽局解廠商競標、可以用組合數學解專案排程、可以寫網站讓營建作業網路化…。營建管理基本上,就是包山包海,只有一個限制:要解決營建問題。

所以如果我不唸中興土木,那麼我父親過世時不能在台中照顧我媽,那麼我不會進營建管理,也無法留在台中與麗敏相愛相惜,也可能不會寫程式。誤會的組合不一定是錯的

我想歷史無法重來,所以永遠也不知道走另一條路是否真的比較好或是比較爛,珍惜目前所有的會是對的。

註1: 我很不喜歡教到笨學生,我是個很沒有耐心的人,小時候教我妹二元一次方程式求解時,因為她一直聽不懂,所以我打了她好幾個巴掌。不過,因為我現在脾氣比較好了,又發現我好像很喜歡「教」別人,所以如果當初就笨笨地聽姑姑的話,選了彰師大數學或是彰師大物理,好像也不錯。

註2: 我的聯考物理分數排名約 1148 名。而且我後來才知道,唸物理不是只有寫書的份,是可以到竹科作晶圓的。不過還好我沒唸物理,因為我實在不喜歡科學園區,我覺得那裡是高級工廠而不是高科技工廠。

註3: 建築與土木很像,但又不一樣,建築是依需求(美感、機能)來決定建築物的外表,而土木是依力學、施工法來決定建築物如何實作,土木的產品也比較多樣,包含橋梁、隧道、道路、下水道、水庫…。

註4: 真的很近,走路不到 30 分就到了。

註5: 那個時候,營建管理真的是新組別,所以在當時各大學土木系排課中,並未包含它所有的基礎課程。

2008年6月30日 星期一

我就是那麼粗心,十幾篇看過的文獻就這麼沒了!

已經使用 zotero 來管理我研讀期刊、網頁有好一陣子了,幾天前終於把我的小黑昇級成 Ubuntu 8.04 ,用得很開心,只是今天我終於想到 firefox 中的 zotero 資料夾我並沒有作備份,呀! 一整個悶,嘿~只有再讀一遍了。還是趕快把資料夾交給 mercurial 管理吧!

什麼,你不知道什麼是 zotero ,那趕快看這裡這裡還有這裡

2008年6月29日 星期日

problem with django: use __year or not && use subversion or not

when i put the new sources in the remote web server, and something happened!

the query result had nothing!! when i 'diff' the environment of server and mine, i got one thing difference. one is python 2.5.2 and the other is 2.5.1, but i have no idea about why!

the problem is 『__year』, i set a datetime field in a django model, and i can query it by year with suffix parameter __year like filter(date__year=datetime.date.today().year). and it's work for mine but not for remote server. so for the general case, i changed the code to two queries like below:

filter(date__gte=datetime.date(datetime.date.today().year, 1,1), date__lte=datetime.date(datetime.date.today().year, 12,31))

then i changed 5 files in my application. before svn commit, i use svn diff to see what i modified and found a error.

Can you see??


--- apps/supervise/views.py (revision 1256)
+++ apps/supervise/views.py (working copy)
@@ -145,7 +145,8 @@
if h.has_key('year') and h['year'] != '':
Y = Year.objects.get(id=h['year'])
try:
- sc = sc.filter(date__year=Y.date.year)
+ sc = sc.filter(date__get=datetime.date(Y.date.year, 1, 1),
+ date__lte=datetime.date(Y.date.year, 12, 31))
except:
pass
........


if i have no subversion, i will write a bug after a debug.

2008年6月23日 星期一

firefox's plugin: better gmail2

很習慣用 firefox 上 Gmail 。而這個外掛可以讓你在瀏覽 Gmail 時,有更好的感覺,像是在信件列表時把附件格式秀出、區別 Label 顏色、修改佈景主題…等,使用很簡單,裝好後滑鼠點點就行了。右圖是我的新 Gmail。

2008年6月20日 星期五

「政治文」:第十二任總統選舉結束了

從新聞畫面中,看到有些選民哭了,而每個人都有該哭的理由,但這只證明了我們的民主政治「還不夠成熟」。

回憶一下, 8 年前、 4 年前的選舉結果也讓有些人哭了,但從現在來看,當初那些哭的人現在還會覺得輸了真有很大的關係嗎?人生不是只有一場選舉,知道結果時,第一件事是檢討,永遠會有下一場選舉要看。

而我們選民最錯誤的示範則是『太重視選舉結果』,而忽略歷程了。想想看,現在那些笑的人,是不是在馬蕭當選後就會高枕無憂,是不是對馬蕭四年作為就不再監督。

監督政府不只是反對黨的責任,支持者也有一份義務讓落選者的支持者認知到這是一場政策之爭,選舉只是讓多數人所決定的政策有執行的機會,所以勝選的這一方應該強迫當選者執行政見。

選舉的目的,不只是有人當選,有人落選,而是要在一個時點上,讓我們了解全國人民究竟想要的是什麼! 知道結果後,就應該力行。

後記:

而在這一次選舉結束後,令我失望的是競選幕僚團隊紛紛求去,當初這些人幫馬英九制定競選政見,勾勒未來藍圖,現在換了劉老大,怎麼知道他喜不喜歡「愛台 12 建設」,會不會推動...,如果他不喜歡,會不會表面上推動,實際上搞破壞。

另外,我們換個角度來說,競選團隊不等於施政團隊那不是擺明了:「行政能力不等於競選能力嗎?」雖然從台灣過去選舉,讓我們隱約知道這件事,但這次馬團隊卻是赤裸地攤開它,還好馬總統喜歡內閣制,所以把實權交給了他心目中德才兼備的劉院長,這我就相當贊同了。

2008年6月18日 星期三

美聯投手不會跑壘?那為什麼國聯投手就會!

建仔好不容易跑回個人生涯第一分,不過付出的代價卻是要休息十週。洋基隊小老闆漢克也大力抨擊國家聯盟堅持不使用DH制度,是十八世紀落後制度的產物。

不過,我們回頭想想,國聯投手就難道沒有暴露在危險之中嗎? 他們也是自己拿球棒、跑壘。之所以會造成美聯投手在跨聯盟比賽中受傷,問題不是出在投手打擊,而是出現在美聯比賽有「指定打擊」,而國聯沒有。如果今天的兩聯盟都有「指定打擊」或是都沒有「指定打擊」,那麼這個問題根本不是議題。

錯就錯在,美聯投手在球季約三十五場比賽輪值中,須為二到四場的國聯主場比賽作打擊、跑壘訓練,而訓練的效果還是可能讓美聯投手在打擊區的表現比不上「我」。

所以,我認為不應該要求國聯使用 DH 制度,但可以要求在跨聯盟比賽,一律使用 DH 。要不然也可以在國聯主場時,只列出 8 個擊球員,投手自動跳過。

Google Toolbar for Firefox3 is release!

配合 6/18 firefox3 download day, Google Toolbar 也總算出了向上相容 firefox3 了。

2008年6月15日 星期日

234+4378-2390+4012 = ?

遇到三位數以上的加減乘除時,我會直接把 python 直譯器打開,然後問它…

hoamon@ibmhoamon:~$ python
Python 2.5.1 (r251:54863, Oct 5 2007, 13:36:32) [GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
>>> 234+4378-2390+4012
6234

我的腦袋已經不太對這類型的問題有耐心了。

小時候,在各學科的考試中,我只有數學是不須準備的,只要憑著老師上課教學的記憶及乖乖完成作業,我就可以上場考試了。而且在「數學」這個領域往往不會落後到三名之後。

還記得小一還是小二的時候,老師說要考九九乘法表,而在我還不知道什麼是九九乘法表時,已經有小朋友說,他幼稚園時已經背過了。記得那時候還覺得為什麼我的幼稚園跟別人不一樣,我只是在期待有熱狗、熱魚點心的下午趕快來到。

後來,老師解釋所謂的 2 x 2 就是把 2 加 2 次的意思,當我記住這個原則後,我就可以在腦中堆疊出 9 x 9 的答案,所以當我睡覺前還是沒事幹的時候(註1),我就開始回想九九乘法表,忘記答案的話,就用加法把它算出來。

記住原理比記住結果的樂趣還高,只是這種習慣讓我到了高中時,就遭受很大的挫折,記得是某次的高二物理考試,我花了一節課的時間,推導了一個公式,好讓我解一題 15 分的應用題,如此可想而知,我的高中成績應該是非常不理想的。

好了,要講我的重點了。每每看到了有關珠心算的新聞時,我就會想起九九乘法表的往事,到底我們的小朋友學會在腦中運行一個11位數以上加減乘除的目的在那裡? 打發時間、學好數學還是證明人比計算機強。

數學可以是很抽象地,就像埃米·諾特的對稱性定理,而這不是用珠算把所有 11 位數的數字作加減乘除練習後就會懂得。
  • 註1,這也就是我為什麼不用讀數學的關係,因為我還花滿多時間想數學的。

2008 Python Conference on Taiwan

研討會資訊: http://wiki.python.org.tw/PycTW2008

5:40 - 起床
6:00 - 坐上新埔里線往高鐵的專車
7:12 - 高鐵台中站
7:22 - 坐上高鐵列車
8:12 - 高鐵台北站
8:33 - 捷運木柵線中山國中站
8:50 - 研討會會場
13:50 - 捷運木柵線中山國中站
14:12 - 高鐵台北站
15:26 - 高鐵台中站
16:40 - 到家

平均來回時間是 3 小時。有高鐵的確有比較快。

今天聽了三場講題,心得如下:

* 少用 python forloop ,可改用 numpy 。之前用 Matlab 時,對資料結構的想法就是當矩陣,但是學了 Perl 後,就是當 dictionary, list。轉 Python 後也就對 list, dictionary 很熟練了,今天聽了這堂課後,發覺 numpy 不只是方便數值運算,它也對這些函式改寫成 C base 的程式以加速執行時間。
* python 的動態特性實在是太奇妙了,以致於我還參不透,但這應該是很有用的東西。
* 我終於申請到 Google App Engine 了。

除了聽講外,最大的收獲是能和 Python 高手們見個面、聊個天,這當中,我看到了 willie, thinker, yungyuc, lanma, luors, rex, mat。與 OSDC 2008 相比,在 PYC 中因為主題較集中的關係,大家比較容易找到一樣的話題來講,所以我們中午吃飯時,聊了很多 Django Model, Python intepreter, Web Programming…,也發現原來大家都用 VIM 來寫 Python ,真是太棒了,可惜沒機會和大家分享一下 vim 針對 Python 的設定檔設定。

在這個研討會中,也發現相當多的人都還在唸碩班、博班,或許下一次也可以來談談大家如何把 Python 應用在科學研究中。

ps 3G還是追不上高鐵的速度,希望高鐵未來能在車廂中提供 WIFI ,當然最好是用 FON AP 。

「實在」是太高興了:我拿到 Google App Engine 帳戶了

今天上 lanma 的「Python on Google App Engine」課程,才知道現在可以透過 SMS 手機認證的方式拿到帳戶。

方式很簡單,先上 http://appengine.google.com/ 去申請,它會要求你輸入手機(886+XXXXXXXXX)的號碼,只要你的手機沒用可攜的話(就是原本中華,但門號不變卻改成遠傳)那就可以收到一則驗證簡訊。再把簡訊內的驗證碼輸入即可。

2008年6月7日 星期六

找出舊 user id 的檔案,並全部改成新使用者的

sudo chown -R hoamon:hoamon `sudo find -uid 500|head -n 100`

因為找出來 uid=500 的檔案數太多了,所有用 head 截取前 100 個,多作幾次上面的指令就可以把目前目錄下 uid=500 的檔案擁有者改成 hoamon 了。

2008年6月6日 星期五

指數化投資第一階段檢視

我在 9037 點時買進三種股票,目前指數來到 8768 ,約下跌 2.98% ,而我的股票總值約下跌 2.9% 。果然有跟著指數在走,這表示我選的股票,還滿相異地。

而其中,最有趣的一個現象是,這三支股票中,我最『看好』的,卻是跌最多的,也是惟一下跌的。

使用指數化投資,真的可以作到手中有股票,心中無股價,負擔少了點,工作更用心。

建議你們也試試。

2008年6月2日 星期一

版本控制器不只是用來管程式碼,一般可編輯的辦公室電子文件也可以

我的工作除了寫程式,還得寫文件,最近與其他人一起作文件編輯的動作,覺得很令我難受。

subversion 我已教過 N 遍了,但使用者用起來就只是把它當成 FTP 來用,註解也不寫,光是改檔名。這說明了他們根本沒學會『版本控制器』。

唉~年紀輕輕地,腦袋就裝不下了。

我很失望~

這讓我想起,之前還是社會新鮮人時,面試工作時,我都會說:『請給我一個學習的機會,我會認真學習的。』我可是確實作到。

2008年5月24日 星期六

我的第二張運動彩券(五場命中)(誤)

我的第一張運動彩券後,朋友相繼要求我下次購買運彩時,務必告知一下。所以,請注意啦,這次我買的是:

台灣 2008/5/25 賽程
#6001 西雅圖水手+1.5 @ 紐約洋基 -1.5 => 主勝
#6003 洛杉磯天使+1.5 @ 芝加哥白襪 -1.5 => 客勝
#6015 聖路易紅雀+1.5 @ 洛杉磯道奇 -1.5 => 客勝
#6013 波士頓紅襪-1.5 @ 奧客蘭運動家 +1.5 => 主勝
#6009 費城費城人-1.5 @ 休士頓太空人 +1.5 => 客勝

= 後記 =
這一次卻是五場皆中,實在是令人難以相信。只不過獎金算來,這張彩券只值 1189 元,賠率連 8 都不到。最後還是提醒大家,運動比賽的結果是沒有計算公式的,如果有的話,那就不值得花三個小時期待了。下注運彩,快樂就好,別太認真。

= 後後記 =
兌獎時,居然只有 270 元,再仔細地比對賽事結果,才發現『#6009 費城費城人-1.5 @ 休士頓太空人 +1.5 => 客勝』這場我看錯了,所以實際上,我只中了四場。



順便提供一個可以快速計算獎金的 Python 程式:
 1 #!/usr/bin/env python
 2 # -*- coding:utf8 -*-
 3 class Combination:
 4     def __init__(self, list, num):
 5         self.line = []
 6         list = range(len(list))
 7         self.Line(list, len(list), [], len(list) - num)
 8
 9         self.combination = []
10         for l in self.line:
11             l.sort()
12             if l not in self.combination: self.combination.append(l)
13     
14     def Line(self, ori, level, res, limit):
15         if level == limit:
16             self.line.append(res[:])
17             return
18
19         for i in xrange(len(ori)):
20             res.insert(0, ori[i])
21             tmp = ori[:]
22             null = tmp.pop(i)
23             self.Line(tmp, level-1, res, limit)
24             res.pop(0)
25
26 def _product(list):
27     product = 1
28     for l in list: product *= l
29     return product
30
31 if __name__ == '__main__':
32     """ 以下設定適用於 6X42, 5X16, 4X5, 3X1 的情況 """
33     ori = [2, 1.46, 1.6, 1.7, 2.1] #有猜中的賠率
34     dollar = 10 #每注金額
35
36     result = []
37     for i in xrange(3, len(ori)+1):
38         C = Combination(ori, i)
39
40         for j in C.combination:
41             r = []
42             for k in j: r.append(ori[k])
43             result.append(r)
44
45     sum = 0
46     for r in result: sum += int(dollar * _product(r))
47         
48     print '中獎注數: %s' % len(result)
49     print '可領彩金: %s' % sum

2008年5月21日 星期三

很難相信,但還是得接受

在軟體領域,年齡就不是那麼重要了。影片是一場在 Google 的演講,講題是 JQuery ,講者是一位 12 歲的年青人。

2008年5月8日 星期四

我的第一張運動彩券

比賽結果如下:
五場皆墨,證明了我的眼光真是獨到,這機率可是只有 1/32 呢!

2008年5月5日 星期一

Python 不支援 Big5 擴充字(誤)

"""README: 感謝使徒提姆,我居然天真地以為 Python 沒有作到 Localization 。下面第一段文是我在放屁,請見諒! 就把此文當作是 os.popen 的一段小範例吧! """

有 7 個 Big5 擴充字:碁, 銹, 裏, 墻, 恒, 粧, 嫺,無法透過 Python 的 unicode 函式作轉換。所以我只好呼叫外部 iconv 程式來作轉換。

一開始,我選用 os.system 來作轉換,但 os.system 的所得到的回傳值是 subshell 執行程式的狀態,而不是轉換後的 utf8 碼,後來就改用 os.popen 。

程式範例如下:
try:
value = unicode(str(v), 'big5')
except:
value = os.popen('echo "%s"|iconv -f big5 -t utf8 2>&1' % v.replace('`', "'").replace('\n', '')).read().replace('\n', '')
if 'iconv: ' in value: value = unicode(str(v), 'big5', 'ignore')
一開始先嘗試用 unicode 函式轉換,不成功後才使用 os.popen ,並將 stderr 的訊息轉到 stdout 去,如果在得到的回傳值中發現了 iconv: 的字串,則再使用 unicode 函式作『錯誤 ignore 』的轉換。

這樣就能兼顧程式效率及轉換正確率了。

2008年4月24日 星期四

Ubuntu 8.04(堅毅的蒼鷺) LTS 正式推出了

歡迎大家使用 bt 下載,愈多人用愈快下載完畢,種子檔網頁如下:

http://torrent.ubuntu.com:6969/

8.04 屬於長期維護版,在桌面版部份保證維護 3 年,而伺服器部份則是 5 年。雖然比不上 windows 久,不過在考慮重灌次數後,會發現 ubuntu LTS 比較划算,因為 windows 就算支援 10 年,可是每半年就得重灌一次(事實上,我的學弟妹們還不到半年呢),這樣比起來,還是裝個 ubuntu LTS ,1~3年之間重灌一次會比較省事。

2008年4月22日 星期二

hoamon 58 index fires!

簡單指數化投資一文中,我找了 58 家公司作為標的物,今天(2008/4/22)正式啟動,我將會陸續買進該集合中的公司零股來力行指數化投資概念。

紀錄一下今天的大盤指數為 9037.25 。那麼,我們就先等個 10 年吧!

2008年4月12日 星期六

Google App Engine

這幾天 Google 發佈了一項服務: Google App Engine 。其目的是讓程式設計師可以容易地將網頁程式 upload 到 Google Cluster 中,交給 Google 代為管理。程式設計師可以除去系統管理的苦差事,只要專心寫程式即可。

目前它只提供 Python 語言的程式,但將來定會增加其他語言。

這對我來說真是一項天大的好消息(當然也對其他用 Python 或不用 Python 的設計師一樣),但壞消息是我到現在還沒拿到入場卷,心急呀!

不過,還沒拿到資格,也不代表只可用時間來期待,現在正是讀手冊的好時機,這名額過少的缺點,我倒認為是 Google 深思熟慮呀! 想想看,推一個新服務,總是有未知數,不知該用多少工程師或管理工具來維護整個 Google App Engine 系統,也不知道使用者對這系統的反應到底有多熱烈,所以先給少數人用,看看反應,收些回饋訊息,而最重要的是, Google App Engine 在使用上並不像 Gmail 一樣。使用者是不能快速上手的,須先了解系統架構、 API 介面、管理工具等等,反正現在給了名額,對程設師來說,也不是『馬上』就能生個系統出來,不如慢慢給,也給程設師時間來多讀點手冊。

Google App Engine 對 Django 使用者來說,最大的改變是使用 Model 的方法不同, App Engine 一律使用 Google Big Table 來儲存資料庫資料。

為了讓數以千計(未來可能是億計)的 App 妥善運作,當然是讓它們跑在 Google Cluster 上來得簡單,而不是跑在 Virtual Server Hosting 上。以後者來說,一個 App 需對應一個 http deamon, database deamon 及一個 chroot 環境,這樣雖對使用者是富有功能性的(允許使用者自行增加套件及修改系統設定),但這樣犧牲了管理系統的簡單,OSDC.tw(2008) 中所介紹的 openfoundry 正凸顯了與 Google App Engine 使用觀念上的不同。

目前在 App Engine 中操作 Big Table 的 Model 方法還依賴 GQL ,希望將來能將它改得比較像 Django Models ,或是在 Djanog Models 上直接支援 Big Table 引擎。

2008年3月28日 星期五

英語對小學生是不重要的

老婆發過一個文:超額教師辦法會議後記,因為有人提了意見,而我又回覆她,所以我想拿這個引子繼續說。

以我這個年紀、作的工作來說,英語/英文實在是太重要了,這一點是不可否認的。我得用英文來找新的技術手冊、學新的觀念,甚至寫英文文章,未來也希望透過英語賺英語系國家的錢。對我來說,不用英文,就是讓我沒有競爭力。

但是,有一天我老婆強迫她的姪子(一個小四,一個小五)唸英語時,我問他們倆一個問題:「我肚子餓,我想要吃漢堡的英語,怎麼講?」他們支支唔唔地拖了很久,事實上,這問題他們應該要會的,我是從他們的英語課本中拿出來問他們的。接著,我告訴他們答案,並說:「其實,美國乞丐會講的食物更多種,還不只是漢堡,他們也會說牛排、可樂、薯條…,那這樣子,你們覺得為什麼要學會英語呢?又或者他可以講比你們還多的英語詞句那為什麼還要當乞丐而不是去當醫生、程式設計師、會計師、水電師傅、建築師呢?」

差別就在專業能力,而專業能力的基礎是不須要英語/英文的,在台灣,你絕對可以找到中文的教科書來教會你專業能力,而為了要看懂這些中文教科書,小時候更應該專注在國語、數學、社會、自然上。等你學好國語、數學、社會、自然後,再好好學會英語/英文,最後精進你的專業能力才是。

學英文(或是其他外語)的目的,不是和他人對話,而是博覽群書。

PS我大學聯考英文 28 分,經過一年重考後,我的英文是 24 分,但又如何呢!小時候英文不好,不影響我唸大學(第二次考試結果我是可以填中央土木或中興電機的,只是我選了中興土木,如果你想問為什麼,那這又是一篇 Blog 了)!但是現在英文不好,會影響我的競爭力。所以,我比小學生更應該在英文上下功夫。

檯面上沒有青發,我們該胡九萬的

-- 我們沒有權利討論周女士的選擇,她也沒有這個義務滿足我們的想法 --

第十二任總統選舉終於結束了,不管是新聞還是談話性節目,著墨最多的都是馬總統的家庭,而熱門的又是『馬夫人是否該辭去『周處長』的工作』。我認為這夠了。

在選票圈選欄中,我明明只看到『九萬』,沒看到『青發』,為什麼大家拼命想『胡』青發呢!!

試想,如果我們選擇的是一個單身的總統,那麼要找誰作『第一夫人』呢?所以憲法、法律根本不會制定『第一夫人』的工作是什麼,那麼為什麼有這麼多的嘴巴對『周女士』的未來該作什麼工作有意見呢?

我們來看看過去吳女士的作為,在她健康良好的情況下,她會去宣慰僑胞、國會致詞、出席國宴…,但她生病後,有作到任何一項工作嗎! 台灣還是可以照常運轉,所以『第一夫人』作什麼是不重要的。

如果你覺得『第一夫人』一定要作什麼事,才能讓台灣婦幼地位及環境提昇,那麼『馬蕭』的婦女政策就是個屁話了。『第一夫人』不須等同『婦幼部部長』。如果你還有『母儀天下』的想法,那就回到封建時代,沒有民主了,台灣也選不出女性總統了。

又如果你認為『周女士』擔任兆豐銀法務處處長,在兆豐銀將來與政府有利益衝突時,會對法官或是整個司法制度有所影響的話,那麼你就是瞧不起『台灣司法』了,天子犯法與庶民同罪,這是司法的基本。

或許你還是有疑慮,認為『第一夫人』有工作總比沒有工作對政府的影響比較大,那麼我們再回頭看看吳女士的例子,她是沒有工作的『第一夫人』,而她卻與『國務機要費案』及『SOGO禮卷案』有關,於此,你還覺得沒有工作會比較好嗎?

我的結論是『沒有第一夫人對台灣也沒有關係』及『對政府的影響力不是取決於第一夫人有沒有工作』兩點。就這個議題,我希望台灣媒體可以夠了,別再談了,不要讓人民轉移了焦點,現在最重要的是民進黨政府『平穩』地轉移政權及國民黨政府『積極』地帶台灣向前行。

檯面上沒有青發,我們該胡九萬的。

2008年3月24日 星期一

How to connect MS SQL Server with Python in the Linux OS?

Basically, the general method is using ODBC Interface. In the Unix environment, we can use unixODBC library, but i had tried in failure.

So... another method is using hard core TDS protocol of Sybase Server. because MicroSoft buy the MSSQL server source code from Sybase, so they use the same protocol. maybe there are some difference between the servers. but i could not found it as far.

and i wanted using Python to program, so the requirement is below here:
  • freetds(http://www.freetds.org/): TDS protocol library written in C
  • python-sybase(http://www.freetds.org/userguide/python.htm): python interface for controll freetds library
  • python-devel (using in compile python-sybase)
Installation in Ubuntu is so easy, try apt-get install python-devel first. and then install freetds and python-sybase. command is below here:

# tar -zxf freetds.tgz

# cd freetds

# ./configure --prefix=/usr/local/freetds

# make

# sudo make install

# tar -zxf python-sybase.0.37.tgz #PS i try 0.37, because 0.38 is having something wrong in my server

# cd python-sybase.0.37

# sudo SYBASE=/usr/local/freetds \
CFLAGS="-DHAVE_FREETDS" \
LD_LIBRARY_PATH=/usr/local/freetds/lib:${LD_LIBRARY_PATH} \
python setup.py install


OK! installation is done!

try the freetds library is OK!

# /usr/local/freetds/bin/tsql -H {ServerIP} -p 1433 -U {Username} -P {Password}

> EXEC sp_databases

> go

this 『EXEC sp_databases』 command will show the all databases that this {Username} can read.

> use testdb

> EXEC sp_tables

> go

this 『EXEC sp_tables』 command will show the all tables of testdb.

> EXEC sp_columns @table_name = 'users'

> go

this 『EXEC sp_columns @table_name = 'users'』 command will show the all fields of table 'users'.

if everything seen OK! you can try Sybase module in the python interpreter.

# SYBASE=/usr/local/freetds CFLAGS="-DHAVE_FREETDS" LD_LIBRARY_PATH=/usr/local/freetds/lib /usr/bin/python
 1 import Sybase

2 class DictCursor(Sybase.Cursor):

3 def row2dict(self, row):

4 d = {}

5 for i,elt in enumerate(row):

6 d[self.description[i][0]] = elt

7 return d

8 def fetchall(self):

9 rows = Sybase.Cursor.fetchall(self)

10 result = []

11 for row in rows:

12 result.append(self.row2dict(row))

13 return result

14 def fetchone(self):

15 return row2dict(Sybase.Cursor.fetchone(self))

16 def fetchmany(self):

17 rows = Sybase.Cursor.fetchmany(self)

18 result = []

19 for row in rows:

20 result.append(self.row2dict(row))

21 return result

22 class Connection(Sybase.Connection):

23 def dictcursor(self):

24 return DictCursor(self)

25 db = Connection(ip:port, account, password, dbname)

26 c = db.dictcursor()

27 sql = "select * from sometable"

28 c.execute(sql)

29 rows = c.fetchall()

30 for row in rows:

31 for k, v in row.items():

32 print k, v

33 print 'done'
OK! this is real done!

2008年3月18日 星期二

社會不是靠著錢滾錢來成長地,靠的是你我日復一日的工作

引自 同門對決---The Great Debate between Jeremy Siegel and Zvi Bodie讀後感


"""人們不可能從金融市場裡,從投資的行為中,得到每年十幾趴的真實報酬,那會讓太多人,在有點本金之後,投資所得就可以維持生活,而放棄本業,以投資過活。不過,人類世界,不是靠大家在金融市場忙進忙出就會有錢,有真實價值跑出來。有真實價值的東西,是人們從事本業,所提供的服務與製造的產品。絕大多數人,將從投資的行為中,得到失望的結果,不如意的報酬,而失望的繼續工作,推動人類社會的運轉。每年 20%?!那只是用來賣雜誌、賣建議、賣whatsoever的情緒性字眼。

我的建議是,找個自己喜歡的工作,然後理性的認知,投資只是個讓資產有機會緩慢成長的管道。"""



這與我在 投資不只是「錢滾錢」而已 中提到『如果你還沒有投資自己,就不應該去投資別人』的觀念是不謀而合,不同的是我以正面方式敘述,該文以負面方式敘述。

而我也是確確實實地從投資行為中得到失望的結果,才了解到應該找個更能發揮自我、熱情的工作來做,更有希望賺到大錢。

2008年3月17日 星期一

x的,所有的糟糕事都擠在一起出現

今天早上,心血來潮,把線性規劃套在 51 個城市旅行問題上,演算法應該沒寫錯,但這個題目應該會跑很久。所以,我在程式寫完的那一刻要把它 commit 到我的版本控制器上,但發現網路不通。原來是,學弟們超流了,被計中斷網。

索性直接跑吧! 從上午 11 點一直跑到下午 4 點,才覺得這可能無止盡,想說還是把程式放到家裡的閘道器去 run 吧!反正它本來就不關機的。下面是我下的指令:

# /usr/bin/python2.4 TSP-51_byLP.py > TSP-51_byLP.log
# cp -rf TSP-51_byLP.*

原本在 TSP-51_byLP.* 後面,應該還要跟著一個資料夾的,但我太快按下 [Enter] 了。所以…。

x的,寫了一個早上的程式就變成它 run 出來的 log 。

x的,還是趁現在沒忘掉前,再寫一個吧!

2008年3月11日 星期二

寫作業是『學會』的基石

有一天,我的小姪子說:「好希望我現在就是國中生了,這樣三年級的數學題目,就變得很簡單。」

我笑笑地跟他說:「為什麼長大了,就什麼都會?那如果這樣的話,阿公應該是最會寫作業的人囉!」接下來,我就和他解釋,國中生覺得小學三年級的數學很簡單,那是因為他在三、四、五、六年級的時候寫了很多的作業,因為這樣的練習,讓他學會了小學數學。所以,如果你什麼都不學,到了國中的年紀其實你還是什麼都不會。學會的重點在作業(練習)。

我們小時候不明白這個道理,等到我們長大了,卻疏忽『作業』的重要性,我們比較崇拜『腦內計算機』,而輕視『動手作』,所以學習的效率降低了。

有人跟我說該讀的書要在 30 歲以前就要讀完, 30 歲以後,記憶力、理解力都下降,這時候才讀書太晚了。我倒覺得多『動手作』就能讓你的記憶力、理解力維持在水準之上。

所以, Python 的書看多了,還是要搭配寫個程式來練習,達到相輔相成的效果!

用 iptables 來開防火牆的洞!

題目有點聳動,事實上,並沒有開洞,只是利用原來的洞作不同協定的事。

因為工作的關係,總是會幫別人代管主機,然而大公司有大公司的政策,所以代管主機通常只能露一個洞出來給大家用,也就是 80 port 。要用 ssh 管理主機時,得用 VPN 連線到公司的 VPN Gateway ,再作連線動作。

但目前我遇到的 VPN Gateway 有仲琦、思科兩家,我在 Linux 上實在找不到可用的 VPN client ,所以一直得用 VirtualBox 上的 XP 來作維護工作,這令人很不愉快。我只想打指令,卻得開個 GUI 來礙眼。

只是,答案早就在那了,我到昨天才撿起來。

/sbin/iptables -A PREROUTING -t nat -p tcp -s ${自己電腦的IP} --dport 80 -j DNAT --to ${伺服器IP}:22

先利用 VPN 連線進到主機中,加入這條規則,之後你就可以不用再透過 VPN Gateway ,直接從 ${自己電腦的IP} 遠端連入了。

若是你想要使用 https 連線,一樣的道理,規則改成如下:

/sbin/iptables -A PREROUTING -t nat -p tcp -s ${自己電腦的IP} --dport 80 -j DNAT --to ${伺服器IP}:443

只是這麼作只能用一個外部 IP 換得一個伺服器上的 Port 。

所以就把腦筋動到 netfilter-L7 模組上,正想大刀搞搞,結果看到官網上一句話:

"""Warning: Some users have reported kernel crashes when they using SMP with l7-filter. (Some have also reported that their SMP systems run fine.) If you have a multi-CPU machine, test carefully before putting it into production with l7-filter."""

興致全減,因為我代管的主機都是雙核心,我可不想費這個風險。還是拿 ip 換 port 吧!

P.S. 測試過程中,有個插曲,本想利用 apache 的 R-Proxy 功能直接作 http => https 的工作,然後花了很多時間才發現 R-Proxy 只能作到 http => http 及 https => https ,而不能作 http => https 及 https => http 的工作。

2008年3月5日 星期三

雪山隧道錄影



年初走南橫環繞北台灣時,經過雪山隧道所拍攝的。

進一步資訊請看 wikimedia:雪山隧道

ps 本片全長影片 12:09 ,本來是要放到 youtube 去的,沒想到它們不收大於 10 分鐘以上的影片,還好它的哥哥 Google Vedio 可以放。

2008年2月29日 星期五

subversion 的 commit log 寫錯了。

把伺服器中的 svn/hooks/pre-revprop-change.tmpl copy 一份成 svn/hooks/pre-revprop-change ,並且要給它可執行的權限。

然後在自己 co 出來的專案資料夾中,打

# svn propset svn:log "xxxxxxx" -r 903 --revprop

即可把 903 版的 log 變成 xxxxxxx

2008年2月17日 星期日

沒資源的公司要懂得運用 Open Source

有個朋友在國內某單位作事,他的工作是寫出 sis191 的 Linux 版 Driver 。為了作這件事,他和 SIS 要些規格書來參考。

這讓我想到 SIS 公司應該是比較沒有資源,所以只能寫出 Windows base 的 Driver ,而對 Linux 就沒法度了。接著我就想到這會不會造成劣幣驅逐良幣的現象。因為 SIS 不須要花成本在 Linux Driver 上,所以它可以賣比較便宜的價錢給主機板廠商,而主機板廠商當然也會把這項優惠分享給消費者,於是市面上,擁有 sis191 的晶片的電腦佔有率會較高(以上僅用經濟學的供需理論來推導),然後就有許多公家單位在採買電腦時,會進一堆 sis191 晶片的電腦進來(因為它們買東西是不能鎖廠商的,只能鎖規格,而 sis191 的電腦通常會是供應商選擇的配備,這樣供應商賺的比較多),像最近南投縣採買的電腦主機都是 sis190/sis191 的板子,所以安裝 Linux 的時候,就是會有些問題,而且它們完全不能跑 DRBL , X 的,這件事讓我搞很久,最後還是放棄了。

讓別人花資源幫 SIS 寫 Linux Driver ,似乎看起來是 SIS 公司賺到了。但想了想,這應該是它們比較沒技巧,所以到現在還沒搞出 Linux Driver 。為什麼我會這麼說呢!我的 r60e 用的網路卡是 broadcom 5751m ,而它並沒有使用受限制的驅動程式來 RUN ,而是用 Open Source 的 Driver ,也就是 Broadcom 公司早就利用 Open Source 的團隊來開發出 Linux Driver 了,而 SIS 到現在才要作這件事。

我想,如果公司沒資源,就應該學會和 Open Source 相處才是。

2008年2月16日 星期六

firefox add-ons: 「It's All Text!」

在網頁上留言,寫到一半時,電腦當了,你會不會覺得很 X 。

請使用 Firefox 擴充套件: It's All Text!

它讓你在編寫 <textarea> 輸入框時,可以另外叫出你偏愛的文字編輯器,然後在存檔時,它可以同步回原本的輸入框。

這麼作,有兩個好處:
  1. 是使用順手的編輯器寫文件,像我實在超喜歡用 VIM 的,我就可以在任何網站寫文章時,還是使用 VIM 。
  2. 是當你存檔時,它可以在你的個人電腦上存一個備份,這樣,就算你打字到一半,電腦當了,你所打的文字都還會在個人的硬碟裡。
下圖紅線所劃即是文章內容存在我電腦裡的位置。

hoamon _Atˍ hoamon.info's PGP public key(ID: 0x244E7AEB)

pub 1024D/244E7AEB 2008-02-04
uid hoamon (hoamon.blogspot.com)


-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.6 (GNU/Linux)

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
w3w1ZQ==
=lcDA
-----END PGP PUBLIC KEY BLOCK-----

2008年2月15日 星期五

我開始使用 PGP 作郵件的簽章及加解密了

如果你也想使用 PGP 作郵件的簽章、加解密的話,可先參照下列幾個連結
或是 google:// pgp key

我的作法是在 Ubuntu 7.10 上使用 Firefox + FireGPG(firefox extension) + GnuPG 來完成 Gmail 信件的簽章、加解密。

安裝步驟如下:
  • 確定你的電腦裡有 gnupg ,沒有的話,請使用 # apt-get install gnupg 來安裝
  • 產生自己的公私錀: # gpg --gen-key
  • 將公錀上傳到伺服器,0x244E7AEB 是我的公錀 ID ,請不要照用: # gpg --server subkeys.pgp.net --send-key 0x244E7AEB
  • 匯出公錀並放到他人容易下載的空間(我的是放在0x244E7AEB): # gpg -a --export 0x244E7AEB > hoamon.public.asc
  • 下載 firegpg 程式: # svn co svn://svn.tuxfamily.org/svnroot/firegpg/firegpg
  • 編譯 firegpg 程式: # cd firegpg; ./build.sh
  • 安裝 firegpg 程式: 打開你的 firefox 瀏覽器,選擇安裝擴充套件 firegpg.xpi 。並重新啟動 firefox 。

使用方法:
  • 先下載它人的公錀(0xB1E55D7E這是我老婆的公錀): # gpg --server subkeys.pgp.net --recv-keys 0xB1E55D7E
  • 進到 Gmail 信箱中,開新信,然後寫下內容,待寫畢,點選上面的「加密」按鈕,這時候會要求你選擇用那一把公錀加密,選完後,信件內文就會變成下面這個樣子了。

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: http://firegpg.tuxfamily.org

hQQOAyQbH/dVXCNHEA/7B2AfasQx9MDO+bXi48fn9YoEuQwNkpKsayxXNhEg9Kom
KDYWk6nXr0tbYZuyxYdjY4e42AxuOZ28Ym59OtyOHikZ2TQoqGkjroiVtP+QgcnJ
QEUe3YhTadKr7OCmgIcd94SkOI45KjOgB29VtG3qYQm0rXMM38h9x/zMdbRl51T2
oTCvYeuwJECHg4H+NZNL/XM5ISndIzyuqfescsPbAv/dp6vV7UyB3uQU0RUJ2SwN
vX2W8mPJRklFOzStB0WZNGrGdWnokOeO+iqcbH8eyBeD78t2cm8DNs4W/bjQXLXU
s77CqWYG8jbuV3uNuhdBYw4DD+EOPYuCXZJkQus4dk6eAB3osn4fcP3GjIu7Ln79
rEZ2fBgOT/XJNkvia6jhexsdIodaEYLPYEb64UBYkLZbYZYC1yh2iUGZVdIg1MZJ
YuVLafBfvTn6/d5qpLPc0SmPaj68mDnxrGzNU2G1yUx5Z32xqB5Hp1J+j3EihlAB
R8/yB0ygmZZL3bR/TAqSjenaOj4xcOXZqxeHnaUrWfWstTp72G06w+pLdJ2RRMx3
EPidkHval8uf7SfOaPO2n2jJBNZd6uxycorWPXjTZ4kerg2npuYBu3rStI8bCHi9
Y6xElo0cs8zFcvKoyFA4zSZvfrysaqK9uFfH4VscBoK0lKoKwJb3QOYDAeVVIKsQ
ANaDqdQK5LiP0gWittEkgNVWeHWSldf5F062p+XVsGsrT5bo8IGdeTMeN5BPTMSZ
m/QfTprdEOgsditzO0gHoKioPgyFm7Cu3f+zl9sCyG73oW4/G8dQwCXm5ltElidX
rOcA+6mWfmcnCQChtRrKtVNrJ1DrtItgbzPIYqSV+6VrTo7tlOJPNagvTEUWHyGk
hWW9PwU8x0JMrfGGMzFqiy/mQqO8G6MJvYsYYYWZUkT4wtsbWQArEE2d8qdN0qq3
47oXc1YBIk9A/zEpeCq56+G48qvIBGbFXqylbn7thv3FhC5WYMGumpCZ8gAAyrEm
EdEuU9dVp3gb0GJqLkxlvyjby+Cnp4bvFXfX3teOcfejQ9JS4u84Pu1Zdo7kn3Xo
uii/ZkOWkQoPMjV/Uca/AicQLmMLDEkxJClqf6vgLKDCjh6yzzzyJWkjMQa0HY11
bQrqoxRASzcTPo+VGF8yLaD+xshKW9BZF5uhAbjWdyTUKceEp5PkSpEyAdB4ki+Y
FWc3Qc/DL8dqQrAyFBt2IovqMVzHhHR5vZc0By+qkS2c51aD2Wx/jjELNfqDAidP
c42zB+DRJMxubSFymKD7azf2fDJI7Pmu/k7Ku1ShpwKkMhK3mFHBTVYRNap9hb2e
FN+7kFz2c+rNN0/Hl3frSsxBaPdpW0n+rlh0RFNq+wVs0mABG8lUqL98yElXHbxL
6Ft5rxyJ1Js8/gU61MVJytGAxCnTQVBnPNyy2AmZR1FrYXZ636qa80KbUmf46Gg0
bbx1pNf1dd3WYE/xBcG6SYGXNMpPiO8u3FqhqlrcWyAcMCc=
=iaH4
-----END PGP MESSAGE-----

上面的內容,只有我老婆的私錀才可以解開。其他人一定不會知道內容是「我愛你」。就連我自己也不能再看到它的原始內容了,因為我沒有老婆的私錀。

有一個觀念很重要:「私錀是用來簽章及解密,而公錀用來加密」。因為我的公錀是所有人都可以下載的。如果拿私錀來加密信件的話,那麼我的網路管理員,只要知道信件是我發的,就可以拿我的公錀來解密了。

2008年2月14日 星期四

DVD rip and encoding to .avi on Linux

just take it, don't ask me. i have no patience to understand vedio encoding principle yet.
  1. First the sound:
    # mencoder -dvd-device /tmp/dvd dvd://1 -ovc frameno -o frameno.avi -oac mp3lame -lameopts abr:br=128
  2. First pass:
    # mencoder -dvd-device /tmp/dvd dvd://1 -nosound -oac copy -o /dev/null -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800:vhq:vpass=1:vqmin=1:vqmax=31 -vop scale -zoom -xy 640
  3. Second pass:
    # mencoder -dvd-device /tmp/dvd dvd://1 -oac copy -o file.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800:vhq:vpass=2:vqmin=1:vqmax=31 -vop scale -zoom -xy 640
after steps above here and you get the '''file.avi'''

But, this method don't get the subtitle.

在 linux NAT 上擋 p2p

使用 netfilter + ipp2p module。

安裝:
  • 將 Makefile 中的 IPTABLES_SRC 變數設定成你放 iptables.h 的資料夾,該路徑下有 include/iptables.h 。如果你沒有 iptables.h 的話,可上 netfilter 官方下載你所使用的 iptables 版本的源始碼。
  • # make
  • 複製 libipt_ipp2p.so 到 iptables 的 lib 資料夾 (通常是 /lib/iptables/ ,底下應該已有 libipt_mac.so 檔案)
  • 複製 ipt_ipp2p.ko 到你的 kernel modules 中的 netfilter 資料夾(我的是 /lib/modules/2.6.17-1.2142_FC4/kernel/net/ipv4/netfilter/ )
  • # sudo depmod -a

下規則:
下面的規則是直接把所有的 p2p 封包擋下
  • # sudo iptables -A FORWARD -m ipp2p --ipp2p -j DROP

如果你要個別擋的話,請參照
  • # sudo iptables -m ipp2p --help


PS 此軟體可能無法擋下中小學教師常用的 FOXY 封包,因為這個 ipp2p module 是外國人寫的,而外國人不太用 FOXY ,但其他常見的 ed2k, bt 應該是沒問題,這點我會繼續觀察。

PS2 經實驗證明,它也可以擋下 Foxy 了。大家給它拍拍手。

2008年2月13日 星期三

在公車上看教學影片

沒錢買 XO or EeePC (也沒這必要啦! 沒小紅點的 NB 我也用不習慣),所以就把我的 R60e 改成 Flash ram base 的,這樣我在公車上就可以看我喜歡的影片而不是公車司機挑的爛電影了。

這樣就不怕硬碟在公車上震壞了。



其實在公車上看書也不錯,只是有時候晚上回家時,公車上的燈不夠亮。

2008年2月11日 星期一

簡單指數化投資

從「綠角財經筆記」及 漫步華爾街一書中得到不少投資策略,其中最重要的是「隨機選股不見得輸給專家選股」, 不管是「基本分析專家」還是「技術分析專家」都一樣。

而指數化投資又可比隨機選股來的保險,也是最省事且可輕鬆獲利的方法之一。如果你還不懂什麼是「指數化投資」,請自行到「綠角財經筆記」充電。

為體現我對指數化投資的認同,理該到 www.firstrade.comwww.zecco.com 等網站註冊並開始購買指數化基金,然而因兩項理由, 我必須延後這項計劃:

  1. 小額匯款的手續費太高
  2. 美國對「境外投資人的稅率」為 30 %

第一項理由成真的原因是,我手邊的閒錢還不夠多,將 1000 塊美金匯到美國銀行帳戶,約需 43 塊美金,而 3000 塊美金匯到美國帳戶也是 43 塊, 所以如果單筆匯款金額夠大的話,交易成本比例才能更低。

第二項理由則是,我對課稅還不夠瞭解,對那些部份要課,那些部份不用,尚在研究中。

事實上,我在乎這二個問題,也是指數化投資人最常在意的,對我們來說,「費用」是我們的最大敵人,而不是「風險」。

基於這兩個問題及我對台股尚有信心,所以本階段會將指數化投資法應用在台股上。我的選股策略很簡單, 將台灣寶來50成份股加上我個人覺得「正派經營」的公司混在一起,然後以本益比排序來購買零股, 「零股」! 為什麼是「零股」,因為這些股票我都可以買個一張的話,我就直接買美國基金了。

當然這種買法,一定會有時間差的問題存在,不過換個想法來看,這個時間差的效應會在我買齊了所有股票後,開始減弱,所以在長期投資中(10年以上), 這個問題就不用考慮了。

台灣寶來50成份股

1101

臺灣水泥

1102

亞洲水泥

1216

統一企業

1301

臺灣塑膠

1303

南亞塑膠

1326

臺灣化纖

1402

遠東紡織

2002

中國鋼鐵

2301

光寶科

2303

聯電

2308

台達電

2311

日月光

2317

鴻海

2324

仁寶

2325

矽品

2330

臺積電

2347

聯強

2353

宏碁

2354

鴻準

2357

華碩

2382

廣達

2408

南科

2409

友達

2412

中華電信

2454

聯發科

2474

可成

2498

宏達電

2801

彰銀

2880

華南金

2881

富邦金

2882

國泰金

2883

開發金

2885

元大金

2886

兆豐金

2887

台新金

2888

新光金

2890

永豐金控

2891

中信金

2892

第一金

2912

統一超商

3009

奇美電

3034

聯詠

3045

台灣大哥大

3474

華亞科

3481

群創

4904

遠傳

5854

合庫

6505

台塑化

8046

南電

9904

寶成工業

我個人再加的股票:

1311

福聚

1710

東聯

1905

華紙

2010

春源

2204

中華

9921

巨大


有趣的事,學土木出身的我,居然一支營建股都沒選。

接下來,就是讓我寫一個抓股價及 eps 的軟體,把這 56 支股票的本益比算出來,再慢慢買囉!

2008年2月8日 星期五

我看MicroSoft 併購 Yahoo!

我十分希望 MS 能真的買下 Yahoo! ,但應該還要讓 MS 再多花點錢來買,或許等 Yahoo! 把廣告業務批給 Google 後,再賣給 MS 會更好。

理由如下:
  1. 網路世界留下兩強即可
  2. 我不喜歡 MS 和 Yahoo!
  3. MS 會失去世界第一的光采

第一點: 就像民主黨與共和黨一樣,兩元化的世界比較簡單。就像 Un*x 與 Windows 一樣,你爭我奪就夠,如果還有個「他」來湊一腳,會比較礙眼。

第二點: MS 就不提了, Yahoo! 令我討厭的原因,就在於它的購物平台沒 PChome 方便, Email 服務技術不如 Google ,雖然我用了 YUI 函式庫,不過,目前也想換成 Jquery 了。總之, Yahoo! 技術沒一項獨強,該被淘汰吧!兩者放在一起,我就只須要討厭一個就行,「小小」併購就讓我心頭上少一塊贅肉,令人大快。

第三點: MS 併下 Yahoo! 後,必然有陣痛期,兩家公司員工本來就不是同流的,且你看看,會有多少台 FreeBSD 會被換成 Windows 2003 Server 呢! 想到這點,我就開心, MS 的工程人員必須花相當大的內耗才能把兩家公司的炮火集中,而在這之前, Google 不知道又可以跑多少了。就算 N 年後, MS 併 Yahoo! 的效益浮現,但我可預期的是,在浮現之前, Google 已能奪下資訊服務的寶座。

延伸閱讀:
下面這篇文章則是以 MS 的角度來看的,它也是認為 MS 併下 Yahoo! ,其實是對 MS 不利的。
http://www.zdnet.com.tw/news/software/0,2000085678,20127763,00.htm?feed=RSS:+ZDNet+Taiwan%3A+%B7s%BBD+-+%B3%CC%AA%F1%A4C%A4%D1

2008年1月23日 星期三

add empty directory in the Mercurial

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.

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 的設定檔

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 頁的文字。

「資訊爆炸」及「全球化」不可怕,可怕的是你不會學習。

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 以上,但對小黨而言,卻是無及有的區別,同時,也讓國會的立委來源多樣性,一般選民也可增加對其他政黨的認識機會;讓小政黨提早進入國會實習也有助未來長大之後的立法品質及效率。

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秒的差距

而事實上,對那些家長而已,健康應該是比讀書及上網還重要的一件事,而對學校來說,付學費的是家長,也不是學生,所以我認為學校及家長的決定非常好。

如果不想挑爛蘋果! 怎麼作?

把自己的政見寫成白皮書放到網路上供他人指教,再把工作項目放到 Trac 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.
Related Posts Plugin for WordPress, Blogger...