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/

何岳峰 敬上

2009年12月29日 星期二

俗話說:「不要錢的,最貴」

請看 ZDnet Taiwan 新聞:「授權條款加入「不為惡」 Google拒代管」。

在使用開源碼軟體時,有時候還得考量創作者的政治心態,這實在是很麻煩,不像那些商業授權,只要錢拿來,管你是要選共和黨還是民主黨都沒關係。

除了使用開源碼軟體來開發軟體要考量創作者天馬行空的授權條款外,就我個人經驗來說,使用開源碼軟體真的比較貴。

當初我在懵懂之際,用的是盜版 Windows XP 、盜版 Office XP 、盜版 Vistual Studio 、盜版 Matlab 、盜版 XXX …,通通沒花到錢,只花了大約 2000 ~ 3000 元的書錢買 Windows, Office, Matlab 的書,學到了些表面功夫。

後來因緣際會,接觸了 Red Hat ,在它上面裝了 PHP 、 Apache 、 Mysql 後,提昇了我在系統管理及程式設計的眼界,也開始求知若渴。雖然開源碼軟體不用錢,但為了快速、徹底破解它們,我買了不少書,絕對是之前書錢的 10 倍以上,有系統管理、資料庫管理、中日韓越資料處理、程式語言、 Web 管理、 Html/CSS/XML、網路程式設計 …,我的金錢成本的確在開源碼軟體上花費較大,但慶幸的是,這些成本最後是被我的腦袋消化成為我的內在價值,而不是花在授權費用上,讓某個工程師年終分紅多了點。

貴的確是比較貴,但貴的有價值,對自己卻是件好事。

2009年12月28日 星期一

成功的方法(一): 是否符合可重覆性

常常看一些評論的文章或是網誌,它們會介紹某個公司、某件產品因為 X ,然後 Y ,最後 Z ,所以得到非常大的成功(或是利潤),於是可以整理出一條成功方程式。從套用該公司、該網站或該產品的特質及執行條件,你也可以成功(或是賺大錢)。
我們容易因為最後的成功成果,致使我們相信它的執行條件、運作流程是正確的。

然而,就像瑪蒂聽別人演講一樣(註1),她總覺得複製別人的勝利經驗,成功不一定跟著來,但應該了解別人的失敗,來避免自己的失敗。

上面那段話講得再學術性些,就是:「成功方程式的正確與否? 應由該方程式可重覆驗證得之」。如果,這個成功方程式在 1 年前有效果,但在現在應用沒有效果,或是這個成功方程式在某甲身上應用有效,而在某乙身上應用無效,就代表該方程式沒有可重覆性,而如果成功方程式不具可重覆性,那麼它就是個屁,那不過是一種生存者誤差,只看到活下來的成功者,卻忽略了用同樣方法,但死傷無數的失敗者。

再舉一個很簡單的例子來說明:『買樂透』。大家都知道中頭獎的人非常幸福,一夕之間,賺到那麼多的錢,如果頭獎得主分享他的購買心得(或算牌技法),你覺得應該要效法嗎? 我們看得到一人中獎的喜悅,但我們看不到的是那些用同樣方法,但期期落空的彩券買主。

這也就是「個體」與「總體」行為上的差異。就總體而言,我們可以知道一張彩券的期望值約是 30 元附近,大概是 6 成,所以你買下所有的彩券後,你會賠去 4 成的本金; 然而對「個體」而言,只單看某個人手上握有的彩券,它的結果卻多半是落空、中 200 元、…、頭獎,你不應該看到某個頭獎得主,就相信你也可以靠「買彩券」成為億萬富翁。

要驗證一個「成功方程式」是否有效? 不是只看它的個體結果(單一成功案例),而應該是看它的整體結果才是,只有當它對大部份的個體有效,也就是可重覆地應用在其他個體上,那這樣對總體統計結果才算是有效的。如此一來,我們才有信心相信這是一條「成功方程式」。

註1 源自朱少麟著之『傷心咖啡店之歌

2009年12月19日 星期六

我是個愚蠢的傢伙 --- NetBeans 用了快一年,才想到「自動補齊」是種選項


年初時,把我的常用編輯器 vim 改成 NetBeans + jvi 的工具以應付多專案、多檔案及多版本比對的混亂模式。

這混亂模式不是 vim 檔案編輯模式的錯,而是混亂工作流程造成的。如果只在一個資料夾、幾個簡單文件要編輯,我還是會用 vim 處理的。

在使用 NetBeans + jvi 的過程中,有一個現象一直困惱著我,那就是 NetBeans 會偵測我打入的字,並作文法檢查及自動完成函式名稱,這『自動化』的行為,理論上,應該會讓編輯者比較方便才是,但因為我用的是 jvi plugin ,所以我已習慣另一種自動補齊行為: Ctrl+p ,而且我往往不需要 NetBeans 幫我在打『點』時作自動補齊,因為我不需從 N 個函式名稱、屬性中挑出想要的,而是先輸入前幾個字,然後再用 Ctrl+p 來補齊。

這個自動化模式讓我寫程式碼的速度受到限制,但用久了也就習慣了,畢竟寫程式碼的瓶頸並不是文字輸入速度,而是思考速度。

今天我莫名其妙地想到,這個「自動補齊應該是一種選項」才是呀! NetBeans 怎麼會預設立場認為全天下的程式設計師都喜歡這個行為,一定不只有我是因為使用 jvi plugin 才不愛用 NetBeans 內建的自動補齊,也有別人就是不喜歡「自動補齊」才對呀!

於是,我翻了一下 Options ,在 [Editor] 中的 [Code Completion] 發現關閉這個行為的選項。天呀! 我用了快一年,才想到這件事。

「IDE必備自動補齊」的先入為主想法,讓我莫名其妙地忍受這個小問題將近一年。

2009年12月17日 星期四

「Programming Google App Engine」書已到

明明 Amazon 網頁上說,這批貨要在耶誕節後才會出,結果今天(2009/12/7)我收到了。我想它們應該要讓顧客不要太期待,才能讓客戶收到貨品時,有破表的讚賞。





這實在是太棒了。

股市投資方法績效評估

投資方法百百種,要用對的方法或是錯的方法,沒有人能強迫你,只有自己的腦袋可以決定。那什麼是對的方法,什麼是錯的方法呢? 總要有個評估方式才知對錯吧!

而一般人會錯的原因,不是方法用錯,而是「評估方法」用錯了。常常聽人家說:「這個方法讓我賺到錢,所以它是對的。」通常聽到他怎麼說,就知道他的很,他的評估方法用的是絕對值,只要有賺就行了。但這種評估方式是錯的。

我們的評估方式是要以「不作為」為基礎,但「不作為」不代表不買股票,而是不選擇特定股票,不選擇進出時點,全部買進(這是純悴作多的評估方式,作空則反向思考),而標竿則是以「加權股價報酬指數」來比較,不用「加權指數」的原因在於它沒辦法把除息的利潤計算進來。

所以如果有一個人,他在某「投資策略」上執行出以下的現金流量(未減去手續費及證交稅):
  • 2009-3-1 -50000(減號表買進)
  • 2009-4-1 +55000
  • 2009-5-1 -40000
  • 2009-6-1 -10000
  • 2009-7-1 +52000
  • 2009-8-1 -42000
  • 2009-9-1 +45000
以絕對值評估方法來說,這位投機客在半年間總共賺了 10000 元,而他的本金是 50000 元,所以未考慮交易成本的績效是 20 %,看起來很棒吧!

接下來我們以「不選個股,只買賣指數」的方式來評估,在一樣的現金流量下,單純買進指數、賣出指數的報酬率是多少?
  • 2009-3-1 -50000 (指數5,522.15),以一點為一元,買進 9.0544 股指數
  • 2009-4-1 +55000(指數6,630.90),賣出 8.2945 ,得 55000 元,尚留 0.7599 股。
  • 2009-5-1 -40000(指數7,898.50),買進 5.0643 股,總共 5.8242 股。
  • 2009-6-1 -10000(指數8,676.96),買進 1.1525 股,總共 6.9767 股。
  • 2009-7-1 +52000(指數8,218.63),賣出 6.3271 股,得 52000 元,尚留 0.6496 股。
  • 2009-8-1 -42000(指數8,991.43),買進 4.6711 股,總共 5.3207 股。
  • 2009-9-1 +45000(指數8,998.62),賣出 5.008 股,得 450000 元,尚餘 0.3199 股。
期末現金一樣是 60000 元,但多了 0.3199 股,折合現金是 2878.66 元,報酬率是 26 %。基本上,該投機客的選股策略有問題了。

接下來,再以「不擇時、不擇股」的方式來評估,因為該投機客從期初 50000 元本金投入後,未再投入其他金額,直到 9 月時,才離開股市,所以我們可以期初一次投入,期末一次領回的方式來計算,也就是

(8998.62-5522.15)/5522.15 等於 62.96%

結果,這位投機客的選股策略嚴重有誤,一個不花腦袋的投資方法都能賺 62.96%,結果他花了心力、多少杯咖啡、多少份報紙,才賺了 20%。可笑,可笑。

當然這種「不作為投資」的評估方式有種太過理想的感覺,因為「加權報酬指數」是沒得交易的。

所以我們可以選擇 0050 台灣50 ETF 來作實際評估工具,它在 3 月 2 日時收盤為 31.93 而 9 月 1 日收盤為 50.2 元,績效為 57 % 。單純買賣 0050 還是比那位「投機客」的「選股策略」優秀呀!

2009年12月16日 星期三

E-Sun WebATM at Ubuntu 8.04+(32 / 64bits皆宜)

= 後記 =
我現在也可以在 Ubuntu 9.10 amd64 上使用了
= 後記結束 =

曾經上過一堂英聽課,老師在課堂上問我:「未來在台灣,可不可能是男女平權的」? 我說:「不可能,因為有很多事男人可以作,但女人不能作!」 她接著問:「以前女人沒有投票權,現在有了; 以前女人的工作單一,多半是在家照顧小孩,現在卻可以選擇非常多樣的職業。目前的確是男女不平等,但一天一天進步,總有一天是男女平權的。」

是的,很多事物的狀態不是靜止,而是動態的。

過去,我回到 Windows 下,不外乎是 WebATM 轉帳、報稅及列印某些特定格式的文件。但現在,「 WebATM 轉帳」功能可以在我的 Ubuntu 9.04 i386 上成功使用了,我相信未來「報稅」一定也可以,而這「特定格式文件」總有一天會不存在或是沒必要使用。

感謝玉山銀行的技術團隊讓我們可以使用這麼方便的軟體,我決定下一次轉帳一定要用玉山銀行 WebATM ,給它收取 17 元的手續費(註1 請見文末附圖)。有機會,我也要辦玉山銀行的戶頭,因為我住埔里,最近的分行在草屯,所以不能想辦就辦。而且,我還要買 2884 玉山金的股票。

有趣的是,之前我就聽過華南銀行也想脫離 IE 的魔掌,不過反到是玉山銀行先作到了,先講可沒有先贏呀!

我在 Ubuntu 9.04 中,是使用 Firefox 3 及虹堡科技 EZ-100PU 讀卡機來作 WebATM 操作的。安裝方法如下:

# sudo apt-get install pcscd libpcsc-perl pcsc-tools libccid

因為虹堡 EZ-100PU 讀卡機目前提供的驅動程式並不支援 Ubuntu 8.10/9.04 預設的 pcsclite(pcscd) 套件,如果您使用的讀卡機是這個型號,在安裝 pcscd 套件後,下載這個以 libUSB 編譯的 pcscd ,覆蓋原來的 pcscd 。

# tar -zxf pcscd_for_LibUSB.tar.gz
# cd pcscd
# ./install.sh

再到虹堡科技的網站下載 EZ-100PU 的Linux(Ubuntu)驅動程式

# tar -zxf 200962419545046871.gz
# cd EZUSB_Linux_x86_v1.4.7_For_Ubuntu
# ./check_env
# sudo ./install
# sudo reboot

重新進入系統後,請插上你的讀卡機,並檢查所有程式是否正確安裝:

# pcsc_scan
PC/SC device scanner
V 1.4.14 (c) 2001-2008, Ludovic Rousseau
Compiled with PC/SC lite version: 1.4.99
Scanning present readers
0: CASTLES EZ100PU 00 00

Fri Jun 19 15:49:51 2009
Reader 0: CASTLES EZ100PU 00 00
Card state: Card removed,

有看到 EZ100PU 及 Card removed 字樣,表示讀卡機正確安裝,且未插晶片卡。這時候再插入晶片卡,可以看到 Card inserted 字樣,即表示硬體安裝已完成。

Fri Jun 19 15:50:22 2009
Reader 0: CASTLES EZ100PU 00 00
Card state: Card inserted,
...

最後打開 Firefox ,並到 https://addons.mozilla.org/zh-TW/firefox/addon/12324 下載玉山銀提供的 firefox plugins 安裝後,即可在玉山銀的 WebATM(https://netbank.esunbank.com.tw/webatm/) 中使用。

* 註1: 男子漢不空口說白話。

2009年12月15日 星期二

懂基本原理與不懂基本原理的差別

我在使用 Google AJAX Library api 時,遇到一個奇怪的問題:

//第一段
<script src="http://www.google.com/jsapi"></script>
<script>
google.load("jquery", "1.3.2");
google.load("jqueryui", "1.7.2");
</script>
<script>
var $p = $('<p>123</p>');
alert($p.text()); // it works
</script>

以上程式碼居然不等於下面的程式碼!

//第二段
<script src="http://www.google.com/jsapi"></script>
<script>
google.load("jquery", "1.3.2");
google.load("jqueryui", "1.7.2");
var $p = $('<p>123</p>'); //會發生「未定義 $ 」問題。
alert($p.text());
</script>

但第一段程式碼可換成下面程式碼

//第三段
<script src="http://www.google.com/jsapi"></script>
<script>
google.load("jquery", "1.3.2");
google.load("jqueryui", "1.7.2");
google.setOnLoadCallback(function() {
var $p = $('<p>123</p>');
alert($p.text()); // it works
});
</script>

也就是 js 引擎對 <script> 區塊的判讀有特殊行為存在,要不然就是 jsapi.js 程式有獨到之處,但因為我不懂 js 引擎也沒仔細去看 jsapi.js 程式碼,所以我只能 try and error ,慢慢兜。

2009年12月7日 星期一

外匯指定分行原來不簡單呀

我終於克服了匯款成本及了解美國投資退稅事宜,今天要到台銀埔里分行去辦理網路銀行準備作美國基金投資時,櫃員跟我說:「因為他們只是『簡易型分行』,所以無法直接匯款到美國,要麻煩我到中興新村的分行去辦理才行。」

這時,我才了解原來之前在台中常看到的「外匯指定銀行」的牌子是不簡單的,在埔里的台灣銀行、第一銀行、彰化銀行、台中商銀、台灣中小企業銀行都只有掛著「外幣買賣」的牌子,也就是可以跟你買賣美金,但是要作跨國匯款的話,就必須麻煩有「外匯指定銀行」牌子的分行幫忙處理,時效上差了點,還有可能會匯錯

這是住在鄉下地方的缺點,還好我們離台中近,花 50 分鐘也是可以到大里去辦。

不過,我有疑問的是,反正我最後都是要在網路銀行上作匯款動作,這為何與我在那一間分行開戶有關呢? 還是因為考量到如果要從美國把錢匯回來的話,而我的分行沒有「外匯指定銀行」的資格,那麼就無法收錢了,但這時候或許就可以使用支票方式提領? 明天再去問問看。

2009年12月4日 星期五

「政治文」:我有一個夢,希望大家分得出本質與表象。



什麼時候,我們才能分得出來表象與本質?

高中時代,我看了伍迪艾倫的「影與霧」,裡面有一個經典的對話,我到現在都還滿常講給別人聽的。

男主角對女主角:「你看天上的星星多美呀! 只是聽人說,這個星星好像離我們很遠、很遠,遠到它的光要花很多時間才能到我們這裡,所以,如果那個星星不在那裡兒,我們也無法知道,因為我們看到的是它很久以前發出來的光。這是件很奇怪的事,明明我們看到它了,但它卻不一定存在。」

是呀! 事物的表象不若它的本質,兩者可以是相同的,亦或是不同的。當初『相信』這個廣告的人,現在應該很後悔。

2009年12月3日 星期四

「或許是政治文」:今天是 2009 年 12 月 3 日,請給我 25 元的國泰金

這是一個夢:

我夢到 2009 年 1 到 10月只賺 0.9 元的國泰金,居然有 58 元的價格,這實在是太不合理了,依本益比 20 來看(也就是 5% 殖利率),這國泰金值不到 24 元,現在賣 58 元,實在是搶錢呀! 這種沒道理的事,政府怎麼沒出面管管呢! 應該強迫國泰金只能照本益比 20 來賣,比這高的價錢都應該罰款,強迫賣股票的人一律繳交「超賣手續費」,以此例來看,就是現在每股賣 58 元的話,就每股繳 34 元給政府,不但可豐富國庫,也可平抑物價。

而我因為提出這個政策嘉惠庶民後,也當選了中華民國總統。

還好這只是一個夢,現實中的我,如果真的這麼想的話,那市場經濟真是白唸了。如果這種政策合理的話,我應該去社會主義國家當總理,而我的工作就是專門定價錢:豬肉一斤現在應該賣 20 元、高麗菜一顆只能賣 5 元、汽油則是一公升 15 元。嘿嘿! 在社會主義國家中,你會發現物價很便宜,但是常常買不到。

好了,笑話說完了。該提正事。

前幾天在談話性節目中,聽到一個財經的記者(還是基金管理人員)說:「她有一個朋友,夫婦都是美國留學回來的,然後現在都在台北的大學裡教書,而他們找房子,找了二、三年,都找不到一間喜歡又買得起的房子,他們理想的地點是在敦化南路(或其他什麼路,台北我不熟)…略…,他們的薪水事實上是台北一般民眾的兩倍以上,連他們都買不起房子了,…略…所以這個房價真的是太高了…略…」。

簡單說,那個講者她認為連中上程度的中產階級都買不起房子了,那表示房價實在太貴了!

我覺得這真是太奇怪了,如果買不起那個台北什麼敦什麼化什麼南什麼路的房子,那來南投埔里買呀! 我們這裡一間地坪 30 坪的三樓透天中古屋靠近車站,只要 300 萬左右,怎麼不來這買哩!

如果沒有那個預算買得起台北的房屋,那就不要勉強自己住在那個地方呀! 就是有一堆人擠在那個地方,才讓那個地方的房地產是嚇死人的貴。市場機制告訴我們,成交價永遠是對的(但也只是在成交的短暫瞬間),如果那個地方有人要用 4000 萬買那個房子,你就不能只出 3999 萬。

而且,我個人認為就算彭總裁用貨幣政策還是溫和的喝咖啡措施,對控制房價的上昇、下跌都只是一時的(我的「一時」可比一般人所想的「一時」還要久,或許是 5 年、 10 年、 20 年)。

這個炒作房地產的投資客或許會因利率、政府心態一時被打擊到,但以長久的時間來看,只要景氣復甦,他們就會再回來,這房價戰爭永遠打不完。

要解決這個問題,不是用貸款利率、限縮銀根、廣建青年住宅還是喝喝咖啡就能解決的。

要如何解決? 我先給各位說另外一個例子:

在 12 年前,我看了一本書(可惜,我找不到它了,連書名我都忘了),它提到洛杉磯城市的道路面積佔 70 % ,但它還是很常塞車,這裡有個現在的新聞,說明它到現在還是有一樣的問題,那本書除了提到洛杉磯,它還舉了墨西哥市為例子,兩個當局為了解決交通問題,都是朝向提昇交通運量來作,所以廣建高速公路及大眾運輸系統,沒錯,這一開始解決了塞車問題,但當其他外地人發現這個城市的生活品質變好了,也就搬來找工作、定居,然後因為人口變多了,公司、政府機關變得更多、更大,又再吸引其他的人進來,慢慢地交通問題又出來了。

所以這本書提出一個論點:「提昇供給,只會增加需求,應該是從削減需求下手才是」。它提到應該讓政府機關不要聚集在同一個地方,能移到別城鎮就移出去,因為靠公家機關吃飯的企業有很多,如果可以讓他們也分散到全國各地,也有助於降城鄉差距。

所以,我認為較好的、長遠的方法,應該引導台北人搬離台北,首先是平均台北市與新北市的預算,然後是平均台北市、新北市、基隆市、宜蘭縣、桃園縣的預算…,以此類推,藉由降低台北人的『平均福利』,拉高其他地區的『平均福利』,那這種單一區域的房價過高問題,才『永遠』不會是個問題,如果還有問題,就是一定是台灣人太多,連玉山山頂都住滿人,才會造成的。

IE 給我的痛



大概是全天下的網頁程式設計師都會遇到的痛,就算你是用微軟自己出的工具也是一樣(例:http://www.shukai.biz/2008/12/bug.html),這原因就出在 IE 是個疊床架屋的產物,是為了要幹掉 Netscape ,在幾個月中,倉徨作出來的垃圾。

要賣 9 本 Perl 的書(再補一本,共 10 本)


請上露天拍賣網址(結標時間:2010-01-0213:56)

書籍近照:

底價定 300 元,只要是郵資費夠,我就賣掉。

為什麼要賣掉呢? 因為我想我不會再研究 Perl 了吧! 過去,我剛入門 Linux 的時候,那時系統管理員最好用的工具語言是 Perl ,所以為了把 Linux 管好,我花了不少心力學它, Perl 幫助我找到人生中的第一份工作。但是後來,約五年前,我開始常寫網頁系統時,卻無法拿它來用,那時還沒流行 Web Framework ,所以我當然不知道有 Catalyst 的存在,於是我學了 PHP ,用它來寫網頁。

那時的我是 PHP/Perl 兩頭玩,直到兩、三年前, Ruby on RailsDjangoTurboGears 的出現,我才開始認真地想把「系統管理」、「網頁設計」及「學術研究」的工作用同一種語言來解決,最後選的是 Python + Django ,因為 Python 當時的數學函式庫比 Ruby 豐富,所以我們老大就說用 Python 好了,雖然那時我是比較想用 Ruby on Rails 的,當時 Rails 的氣焰比較高。

不過,現在看來,選擇 Python 應是比較符合我的個性,因為我個人是比較龜毛,喜歡 SOP (標準作業程序),所以過去用 Perl 時,有太多種表現的手法後,在我個人寫的程式上,風格十分隨便,反正看不懂了,就再寫一個,而這點, Ruby 的特性就有點類似 Perl 了。

也是用了 Python 後,我才發現過去喜愛 Perl 的程度,不如我以為的那樣高。這讓我想到重慶森林裡的廚師莎拉與炸魚薯條的故事:「沒有嘗試過,你如何知道真正喜歡的是什麼」。所以,我想把這些 Perl 相關的書籍留給其他適合的讀者。願意作它們的新主人嗎?

= 後記 =

已全賣出。

2009年11月22日 星期日

Mercurial 的 Windows 使用者應該要注意 \r 的問題

目前常見的作業系統有 Solaris, Ubuntu Linux, Fedora Linux, FreeBSD, XXX Linux, YYY BSD, Mac OS X 及 Windows ,而這些系統中,除了 Windows 的換行符號是用 \r\n 外,其他的都是用 \n 。

所以當 Windows 使用者將他們的程式碼上傳至版本控制器時,換行符號會以 \r\n 為主,然後我們其他使用 Mac OS X 及 Ubuntu Linux 的人,在上傳程式碼時,又可能會將換行符號換成 \n ,那麼在作版本比對的時候,只差 \r 的資料行也秀出來了,這實在不利於比對效率。不過這一點, NetBeans 倒是聰明地將只差 \r 及空白的資料行作忽略。

但話說回來,有時候,我們是在遠端 ssh 連線下,作設定檔或是程式碼的比對,這時候,如果出現一堆 ^M 符號也是挻困惱的。

所以這時候,就要請 Windows 使用者多作一個設定,讓他們在 push 檔案時,能自動將 \r 移除。

如果你安裝的是 TortoiseHg ,那麼請到你的安裝目錄下找一個 Mercurial.ini 的檔案,把它打開,加入下列內容:

[extensions]
hgext.win32text=

[encode]
** = cleverencode:

[decode]
** = cleverdecode:

[patch]
eol = crlf

[hooks]
pretxncommit.crlf = python:hgext.win32text.forbidcrlf


一般而言, extensions, encode, decode 區塊是預設就有的,只是需要移除註解,而 patch, hooks 則是自行增加。

這樣以後在作 push 時, hg 會事先把 \r 移除才送出去。

專案程式碼不得不兩線並進時, Mercurial 的簡單因應策略為何?

最近,我們的系統要作二周的使用者教育訓練,且接受他們的回饋意見,而系統功能離真正的完工還有一段小距離,因為他們可能會提出一些新的想法,若可行性高的話,我們也會把功能實作上去。

而這種「兩線並進」的程式碼維護該如何處理? 因為我們使用的是分散式版本控制器,所以這策略可分簡單及進階方法兩種,當然啦,進階方法必定有優點比簡單方法多一點,要不然,大家都用簡單方法不就得了。

首先,我們要先了解為什麼會有「兩線並進」的現象發生。

在作系統展示及教育訓練的時候,有可能會面臨到第一次出現的 bug ,因為這時候所輸入的資料、操作流程會因使用者的真實需求而與我們開發者在測試階段有所不同,造成我們會有 debug 的需求。但在這二周之間,除了去作教育訓練的人外,其他沒去的開發者會繼續作其他功能的設計,那系統程式碼也會有因新增功能而產生的修改。

那如果兩者所新增、修改的程式碼都在同一個儲存庫中,那是不是一定會發生開發者寫的新功能變成教育訓練時的新 bug 呢! 我相信會的。

所以這時候,一定要用兩線各自獨立運作的方式,才會避免雙方互挖牆腳。

首先介紹簡單方法:

在展示主機上,先作 hg clone ,得到一個 xxx 專案資料夾,然後再作一次 hg clone xxx xxx-bugfix 。這時候,我們使用 xxx-bugfix 來作系統展示之用,如果有 bug 的話,也直接修改在這個 xxx-bugfix 專案中,並把這些修改 push 回到 xxx 之中,而在 xxx 之中,我們則是作新功能(從伺服器 pull -u 來的)及 fixed bug 的合併。合併後再整個 push 回程式碼伺服器上。這樣一來,訓練者所作的 bug fix 也可以讓開發者獲得,而開發者寫的新功能不會影響訓練者使用的展示系統。

以上方法的確可以滿足「兩線並進」的需求,然而它有一些麻煩的事要處理,當訓練者在作 bug fix 時,他要不是在展示主機上直接修改,要不然就是把展示主機的 xxx-bugfix 抓回自己的電腦來處理,改回後,再放回展示主機,這造成了另一個問題,如果訓練者有兩個以上,而他們同時要作 bug fix 呢! 又回到 copy 的時光了,要不然就是在展示主機上再搞一個程式碼伺服器讓 xxx-bugfix 可以變成多人合作的 debug 專案。

Mercurial 的分散式架構讓「兩線並進策略」變得非常簡單,但如果只用了這一招,這有點小看了 Mercurial 的強大。

下節我將介紹使用 branch, merge 指令實現「兩線並進策略」。

2009年11月21日 星期六

莫明奇妙的 _ 網域名稱錯誤: 只發生在 IE 上

嚴格地說,這也不是 IE 的錯, IE 只是遵守規範而已。但是因為 Firefox 的容錯能力,讓我們一時以為是 IE 太爛了。

問題是這樣的:

我學弟使用 Windows 加 apache 配置一個測試網站給業主使用時,一直面臨 IE 不能登入,但 Firefox 卻正常的問題,而該網站在 django development server 運作時,卻又沒有問題。他搞了非常久,大概有一個月吧!

我幫他 debug 時,一開始,我就把問題縮小在 IE 瀏覽這 apache 上的測試網站時,它不會紀錄 Cookies,沒用 Cookies ,那怎麼保持認證連線呢! 只是那時候,我也是找不出為什麼那該死的 IE 就是沒法使用 Cookies ,而優秀的 Firefox 就可以呢! 然後,我使用了 Ubuntu Linux 配置這個測試網站結果發現它可以讓 IE 正常運作,所以我們當時只能歸納這問題,一定是他的 XP 出了狀況。

結果前兩天,他要把測試網站放到業主的機器上去 run 時,還是出了相同的問題,然而這次不一樣的是那個機器有兩個 django-based site ,但一個正常,一個不正常。這就有點說不過去了。

於是,這次我請教了 Google 大神,問它: django cookie session problem ie ,而它回我: http://code.djangoproject.com/ticket/7264#comment:3

這原來是 _ 的錯,因為學弟習慣將測試網址設成 test_XXX.YYY.ZZZ ,而我習慣設成 XXXtest.YYY.ZZZ ,因為我知道在買網址時只可以買英數字加連字詞(-)的,所以我不會在網域名稱中放入 _ ,也就是這個習慣讓我在 Ubuntu Linux 中架的測試網站是可以讓 IE 正常使用,但學弟架在 Windows 上的測試網址卻包含了 _ ,讓 IE 勇於拒絕他的要求了。

這同時也解釋了為什麼在 django development server 運作時, IE 可以正常的現象,因為它會使用 http://127.0.0.1:8000/ 作瀏覽網址。

哈哈,真不曉得該怪 IE ,還是得怪 Firefox 呢! 不過,話說回來,要是早點問 Google 大神,這問題就不會拖一個月了。

2009年11月19日 星期四

今天(2009-11-19)我騎了 20 km 以及跑了 5 km

自行車練習是在一條 2 公里的迴圈道路上騎 10 次完成的,它有 1 公里的 3 % 上昇坡道。而路跑部份則是一條多半上坡的單向道路,確實坡度未紀錄。

自行車花的時間是 57 分(+59 / -58 s); 路跑則是 32分(+59 / -58 s)。

為什麼計時誤差這麼大呢? 因為今天我是臨時起意作這件事的,所以我身上只帶 Palm treo 650 。

先記下來,將來好作進度程度的比較,以及定下明確的訓練目標。

2009年11月14日 星期六

多買了一本書: 「Companion to The Triathlete's Training Bible」

這次所購買的鐵人三項相關書籍中,有包含「Companion to The Triathlete's Training Bible」及「The Triathlete's Training Bible third edition」二本 Joe Friel 寫的書。而這本書「Companion to The Triathlete's Training Bible」在 Amazon 網頁的 Frequently Bought Together 區塊也清楚地表明大家都會和 Going Long 一起買,且就書名來看,你當然會覺得它一定和「The Triathlete's Training Bible third edition」這本書是一對的。

然而不是

Companion to The Triathlete's Training Bible」這本書和第二版的「The Triathlete's Training Bible」才是一對的,是作者要讓已買過第二版的人,可以不用多花錢去買第三版,只要買「Companion to The Triathlete's Training Bible」這本書即可。

由此看得出來 Amazon 真的只會賣書,它不懂書呀! 我已在 Customer Review 留了言,提醒大家。

雖然 B&N 也在 Customers who bought this also bought 區塊秀出大家都會和第三版的三鐵訓練聖經一起買,然而這多半是顧客自己的錯,因為 B&N 在編輯者檢視中已明確跟大家說:

From the Publisher

If you use the second edition of The Triathlete's Training Bible to guide your training, there's good news: This Companion will quickly bring you up to speed with the most important advances in the sport.

唉~害我多花了 9.95 + 4.99 / 7 + 4.99 元美金。不知誰買的是第二版的 The Triathlete's Training Bible ,我便宜半價再加上國內郵寄運費也就是 280 元台幣賣給你吧!

真是運氣呀! 群創併奇美,我反而將是群創的股東了。

引自: 群創與奇美電宣布合併 換股比例 1:2.05 群創為存續公司(http://tw.stock.yahoo.com/news_content/url/d/a/091114/2/1rlke.html)

之前我本來就要買群創,到不是我多看好它,而是它是台灣 50 的成員之一,本來我連它跟面板有關係都不曉得,後來知道了,卻也覺得為難,因為友達、奇美也都是台灣 50 的成員,這麼一來,我都投資的話,面板業在我的投資比例上就有些偏高,就像之前台灣 50 也有一堆 DRAM 股一樣。

後來在某個買股的時間點上,我選擇了 43 元的華碩,而沒選擇 36 元的群創,因為我的資金有限一次只能買一支股票,而且還是買零股呢! 結果下次要買時,群創就漲上去了,那我就不想買了,反正我的口袋名單還很長,以後再說吧! 就這樣一直等,等我買了奇美電後,還是沒買它。

但是現在好啦! 群創併奇美,我的口袋名單少一個面板業的公司。而且換算回來,我大約是在 36.8 元買到 487 股的群創,距離我當初要用 36 元買 500 股差不多啦! 真是運氣呀!

已通過博士資格考

2009 年 10 月中旬,依據中興大學土木工程學系博士學位候選人資格考核相關辦法, 我考了三門科目: 營建作業研究特論、環境系統分析、期貨與選擇權。我們系所的規定是這樣的,在修習完規定的 24 學分後,也就是 8 門三學分的課,可以任選不同老師的課程,總共三門課來考試,而我所修的 8 門課如下(依修課時間):
  • 土木系: 營建作業研究特論、營建決策支援系統
  • 資工系: 資料挖掘、高等資料挖掘
  • 資管系: 軟體品質保證
  • 企管系: 動態競爭策略
  • 環工系: 環境系統分析
  • 財金系: 期貨與選擇權
只有兩門課是我的指導教授開的,也是惟二的土木系所課程,其他的科目都是到外系去修,會有這個現象乃是中興土木營管組只有一名老師,而營管組的屬性又與結構、大地、測量、水利等組相當不同,以所應用的數學科目來說,別的組常用到微積分、工程數學,而我們卻比較常用離散數學、作業研究,但統計學則是大家偶爾都會用到。

所以,我所挑選的三門課中,有二門一定會是外系的,其中一門是環工系,另一門是財金系,挑環工系老師的「環境系統分析」,別人不覺得突兀,畢竟大家都還是工學院的,而且在早期,中興的土木、環工是在一起的,後來才分家。但當我跟別人說我要考「期貨與選擇權」時,都會覺得這是件風馬牛不相及的事,是我特立獨行去修了這門課,還拿它來考資格考。

就讓我說說:「為什麼土木系營建管理組的學生會去修期貨與選擇權吧!」

「營建管理學科」是一種高度混合的應用科學,其定義是在營建相關領域探就其管理方法,而營建相關領域在應用對象上包含了營建專案、營建工地、營建相關公司(營造廠、建築師、建設公司、顧問公司、建經公司、PCM及業主管理單位)、營建事務主管機關(內政部營建署、公共工程委員會)等,而在管理方法分類上,一般可依管理學科領域分為產、銷、人、資、財。
  • 產: 營建專案的工期、品質、成本管理…
  • 銷: 預售屋、成屋銷售、客戶關係管理…
  • 人: 工地人員、公司成員管理、公司間溝通介面管理…
  • 資: 日報表資訊、施工管理網路化,營建事務決策支援系統,專案生命周期管理系統…
  • 財: 專案可行性評估、預算編列、成本分析、價格預測…
以應用的管理技術來說,我只提出中興營管常用的幾個:
  1. CPM、LSM 應用在專案排程上,這是屬於「產」的領域
  2. 鋼筋揀料、裁切最佳化,這也是屬於「產」的領域
  3. 最佳化方法決定塔吊位置、吊送任務排程,這是屬於「產」的領域
  4. 電腦模擬施工流程,這是屬於「產」的領域
  5. 日報表及施工管理網路化,這是屬於「資」的領域
  6. 工程常見缺失關聯分析,這是屬於「資」的領域
  7. 工程相關法律案例搜尋,這是屬於「資」的領域
  8. 灰色理論應用於營建物價指數預測,這是屬於「財」的領域
  9. 住宅附加價值對消費者之購買決策影響,這是屬於「銷」的領域
其他更詳細的應用方法,各位可參考我的指導教授所指導的論文得知。由此可見,我們中興營管組的專業領域是在「生產管理」及「資訊管理」上,而「財務管理」、「行銷管理」只佔了一小部份,「人資管理」則完全不踫。

原本我只是對「期貨與選擇權」有點興趣,但這不足以讓我決定去修一門課,畢竟我們老師也不是將重心放在「財務管理」上,直到 2008 年初發生了一件非常有趣的事: 營造公會上街頭遊行


其原因是在營建物價的快速飆漲,致使廠商與公家機關所簽定之合約價格,不足以讓廠商可以完成施工。而爭議是在過去公家機關並不喜歡與廠商簽定物價調整條款,它們將市場價格波動的風險完全交由廠商自行負擔。

所謂市場價格風險有兩種情況,一、物價下跌,合約價格一樣,廠商可得額外利潤; 二、物價上漲,合約價格不變,廠商擔負額外成本。

所以當發生物價快速飆漲現象時,多數營造廠將面臨資本風險,就像期貨保證金過少,在市場價格急速波動下,被期貨商強制平倉,而這平倉對營造廠而言就是倒閉。因為營造廠們苦不堪言,加上當時又要選舉了,它們也就選擇上街抗議,希望政府給個「公道」。

但是站在「公家機關」的角色上來說,過去物價下跌致使廠商有超額利潤時,廠商也沒有把多出來的錢拿出來樂善好施一下,為什麼在物價上漲時,機關就得當冤大頭出這筆錢呢!甚或某些機關與廠商簽約中,即明定「物價波動風險由廠商自行負擔」,那現在又跑來吵,那如果真的給了這筆錢,絕對會被告「圖利廠商」。

這個問題給了我一個啟示: 工程契約即是期貨合約,而物價調整條款則是一個買權加上一個賣權。

我們以農產品期貨作例子,一口 100 頭美國活牛要求在 12 月的第三個星期三交割,其交易價格為 50 萬美金。其合約意義是指,買方現在就以 50 萬美金訂下了在 12 月的第三個星期三出現的 100 頭美國活牛; 而賣方則是在 12 月的第三個星期三把這 100 頭活牛交付給買方,並收款 50 萬美金。如果到了 12 月的第三個星期三時,當時市場上的 100 頭活牛價格是 51 萬美金,則代表買方帳面獲利 1 萬,而賣方帳面虧損 1 萬。另外在合約的詳細內容中,會明定這 100 頭活牛的品質檢測方法,如:重量、外觀、是否帶有病毒…等。

現在我們來看看一份工程合約內容有什麼:
  1. 工程期限(交割日期)
  2. 工程總價(期貨價格)
  3. 驗收方法(品質檢測)
  4. 其他…,如:保固責任、付款方式
除第 4 點外,一份工程合約是不是與一個農產品期貨合約類似。對機關而言,它就是一個期貨買方,它要求期貨賣方須在指定日期交與一工程產品(可能是橋梁、道路、大樓、晶圓廠…等),而合約上會指明產品品質檢測方法(如橋梁強度、長度、路面平整度…等),最後驗明無誤後,以工程總價支付給期貨賣方(也就是營造廠)。

所以一份沒有「物調條款」的工程契約它就類似一份期貨合約。而「物調條款」是什麼? 它通常是這樣規定的,若物價價格超過合約價的 1.05 倍時,機關須付出超過的部份,但當物價價格低於合約價的 0.95 倍時,廠商須扣減超過部份。也就是說一個 1 億的工程,當物價達到 1.2 億時,機關要多給廠商 1500 萬; 而當物價下跌至 7000 萬時,廠商所請款的總額只能夠是 7500 萬。

這 1.05 倍合約價格即是買權的履約價,而 0.95 倍合約價格則是賣權的履約價。當一份工程合約內簽有物調條款時,即代表機關是期貨買方、買權賣方及賣權買方; 而營造廠則是期貨賣方、買權買方及賣權賣方。

說到這裡,是不是覺得營建管理學生修「期貨與選擇權」是一件非常平常的事了。

那麼我將在下節(未完成)說明如何用「選擇權」來解決物調爭議。

2009年11月13日 星期五

Amazon 的書居然己經到了。

我不是在 11/4 才下訂的嗎? 今天已經到一批書了。

話說這不是應該有 17~32 天的運送時間嗎? 怎麼會不到 10 天就到了呢! Amazon 你真的是太神奇了。看郵包外的貼紙,這應該是從美國空運進來的,不過,我不是選擇最便宜的「Standard Shipping Rates」嗎? 我以為這應該是用海運才是。

打開郵包,發現兩個空氣袋已經破了一個,本以為應該運送過程中弄破的,不過,看了 George Chen 的介紹,也有可能是海關人員開箱時弄破的,因為我也發現書並不是堆疊得很整齊,其中一本書還夾了另一本書。不過,這些書的外觀到是無礙。

2009年11月12日 星期四

「政治文」:到底要當荷蘭人、日本人、中國人還是台灣人

我不是一個堅定的台灣獨立運動支持者,我可以當個「台灣人」或是「美國人」或是「日本人」,還是民主中國人,只要是個民主國家人民就夠了。

在「一八九五」電影中,吳湯興在抗日起義中戰敗陣亡,這給了我一個啟示,所謂「國家」對人民的意義到底在那裡! 當你的姓氏因為國家不同而不同,是否就要反抗? 當過節慶的方式因為國家不同而不同,是否就要反抗? 當收稅的對象不同,是否就要反抗? 而這個反抗可是要拿命來換的。

在一般不具爭議的歷史書中,可以確定的是我的祖先應是從中國大陸遷徙來的,或許有平埔族血統,但我家的祖先牌位上是寫著盧江的。那既然是從大陸那邊來的,或許我有女真、蒙古、疆族血統,誰知道呢? 如果我混了那麼多種族,我需要在乎元朝的天下是從宋朝搶來的,而清朝又是從明朝手上拿到中原這種事嗎? 當然我也不在乎蔣介石比較偉大,還是毛澤東比較偉大!

我在乎的是我的生活、我家人的生活。稅是繳給中華民國政府或是中華人民共和國,其實都是一樣的,別太在乎那個名字。該在乎的是,在一個不民主的制度下,你家門口的小河會不會變成彩色的你的工作環境會不會因為戶籍在鄉下,所以比城市人危險。不民主的問題就是「你要的,是別人決定的」。

讓我們回到不算遠的時代,那個時候我們的國家也是叫中華民國,但是不太民主。你會喜歡那個時代嗎? 也許會吧,因為在那時你是個既得利益者。但我不喜歡,只是因為它不民主。

或許換了個國家,祖先的故事會紀錄的不太一樣,但沒有人能抹除你心中的記憶,你可以活著向小孩子述說。

書(或電子書)還是學習的最佳去處,而惟有不斷學習才是提昇工作、生活品質的不二法門

"""對某些人而言,「學習 Python 」就是花一兩個小時在網站上看一看教學文件,對於高階程式設計師而言,這樣多少行得通,畢竟和其他語言相比, Python 真的簡單許多。這種走夜路手法的問題在於,實踐家最終會在不尋常情況跌倒而被卡住: 變數自己變了,可變更預設引數值的變化難以理解等等。""" --- Python 學習手冊第三版

Google 強大後,我相信很多人在網路上看文件學東西,我也不例外,但這種方法無法勝過「書」的效率及效能,尤其比較對象是歐萊禮出版的書。因為玩 Linux 而開始接觸歐萊禮(O'relly)出版的書,它們對我的效用遠高於其他出版社的圖書,我認為它們書的資訊/知識蘊含量相當高,值得我花六佰元以上的金錢去購買。不過,本文並不是說明歐萊禮多偉大,而國內其他出版社該如何加油這件事。

我想說的是: 「在電子時代、太空時代、網路時代,或未來不知名時代中,書(或電子書)還是我們的最佳朋友」。

書(或電子書)是某個人(作者)為了讓你了解某件事所作的文章,它比網路文件要具備邏輯性、時序性、廣泛性等特質。惟一的缺點是:「它比較長」,它會挑戰你的思想組織能力。很多人在離開了學校生活後,其惟一的讀物只剩下報紙、網路文章,這些文章的特性就是短,只能聚焦在某個點上,好一點的能擴展成線,但通常不會達到面或是體的層次。「如何閱讀一本書(中譯本)」是一個非常大的課題,或許我有機會再為各位整理。

所以要讓大家把書當作學習的最佳工具,除了讀者本身要有「如何閱讀一本書」的能力條件外,另一個就是「相信答案是在書中」。而本文撰寫的目的即是要與各位強調「答案的確就在那裡兒!」

這是發生在我生活上的故事。某日我帶著「輕鬆有效的魚式游泳」到研究室,熱心地推薦學弟看一下,而他回我:「怎麼會是看書來學會游泳呢! 要學游泳應該是實際在泳池演練才是」。當下,我沒回他,而是在我回家路上時,反覆地想,為什麼我比別人容易接受書是知識的最佳來源,也是提昇工作、生活品質效率的不二法門! (註,或許學弟是對游泳沒有興趣,才一時說個理由來搪塞我,如果我要他看的是「領略高潮 101 招」,他也就欣然接受)

好像大部份人認為實際作比讀書有效率,所以寫程式的時候,程式碼行數寫得多、函式用得多就代表經驗夠,程式設計能力自然足夠; 或是作工程,只要有實際的工地經驗,就一定比只讀過書的工程師來得有用; 或是投球,每天投 100 顆比每天投 50 顆有效,因為投得多能強化肌力。

大家都相信「實際作」的效能高於「讀書」,所以「蠻牛」賣得比「書」好。大家也認為只有在太陽底下苦幹才是認真打拼的台灣人,而在冷氣房讀書的都是書呆子。但多數人都忘了「九陰真經」是寫在人皮上,而「九陽真經」是本書,如果天下第一絕技可以用「實際作」自然比劃出來,那些爭著武功秘笈,打得你死我活,讓我們這些局外人看得津津有味的橋段不都是「屁」嗎?
武功是實際比劃出來的,怎麼可能把它的重點寫在書上,讓後人學習呢? 一樣的道理,游泳總是一種身體在水中擺動的方式,這如何可以寫在書上呢? 綁鋼筋、釘模版、灌漿…這些工程施工的方法都是人的身體有系統地運作而完成的,這怎麼會在書上學到如何綁得好、釘得牢呢? 所以要靠「書」學會「與身體動作有關」的高等技巧是不可能的!!!

到這裡,如果你能體會連「身體運動」的技術也可以在書中學到,那麼我們就繼續下去; 如果不行,那表示你看不懂我的反諷,你應該先去讀點別的才能懂我在講什麼,到時候,再回來這裡吧!

所以連動態的身體運動方式都能將知識轉化在靜態的書中,那還有什麼技術不行呢! 沒有,我保證沒有,如果真的有技術是書中找不到的,只有兩個原因:
  1. 這世上,沒這個技術,如: 100%股市賺錢術。
  2. 知道這技術的人,保密對他的效用比寫書還高,如: 100%股市賺錢術。
既然「答案」真的就在書上,那為什麼大家還是不看書,還是嚷著「理論與現實的差距」,也就是理論無用論(註,這是個羅素悖論)。原因出在「不會用」,你看到了理論,但是卻用錯了地方,然後當這現象在你身上發生個幾次,也就自然而然地歸納出「書沒有用,所以不用看」。不是書沒有答案,是呀!你不會用

而如何在書中找到答案,並正確使用,我想這就是「如何閱讀一本書」所談的,不在本文範圍了。本文只是想向各位提醒:重拾書本吧! 你有多久沒好好地看完一本書了。

2009年11月4日 星期三

凡事總有第一次: 在 Amazon 買書

綠角那邊得知,原來鐵人訓練也是可以有書看的。

之前在貧脊的文化沙漠(12)中找書沒找到,以為我必須分別從「慢跑」、「游泳」、「自行車」這三類的運動書籍中,自行整理知識,也害得我認為鐵人運動者可能不喜歡讀書,所以沒這個市場。

閱讀更多…

2009年10月20日 星期二

環保議題總是政治議題?

大家有沒有發現我們在談到環保議題時,總是會認為它與政治有關,若談的是體育、藝術、文學、電影…等議題時,則不一定會與政治有牽扯。

我想到的理由是「環保沒人愛」,環保不是一個正常人會想作的事情。用完的紙巾、抽完的煙屁股、喝完的飲料罐,能隨便丟就隨便丟,反鳥吃了死了,又不是人死; 產生的二氧化碳量有多少不重要,反正人類不會馬上死,如果人淹死了還是渴死了,那是他住錯地方; 再來則是犧牲環保所換來的短期利益實在太高了,反正錢是我賺,死是別人,這有何不可(請參閱「據說,這還不是最壞的時光…」)。

因為汙染環境的代價並非由汙染者直接支付,所以在無「強制力」下且個人無遠見時,絕對會汙染環境。

而事實上,這個世界有遠見的人實在太少了,我們只能透過「政治手段」要求人別在未來殺了自己,於是環保議題總是政治議題。

2009年10月15日 星期四

我的郵政信箱: 54599 埔里郵局第 123 號信箱

今天,我到郵局去申請了一個郵政信箱。一年租金 300 元,實在很便宜,比我的 hoamon.info 網域還少了 20 元(在目前的匯率條件下)。

它惟一的缺點是,所收到的物品,必須是由郵局寄送的。所以,不能用宅急便將物品寄到 54599 埔里郵局第 123 號信箱,不過,我想在寄送時,該民營業者應該也會提醒你。

而它的好處是:
  1. 不需告知家裡住址,這保留了隱密性,我可以大方地告訴大家我的郵政信箱,就像現在這樣。
  2. 掛號信來的時候,我不須要在家,或是得從 3 樓跑下來蓋章。
  3. 不會被鄰居或是郵差發現,我買了某些東西。
  4. 只要不搬離埔里,我可以一直保留這個信箱。或是搬離了,我還是可以使用它一段時間,來通知別人我換地方了,省得被新屋主發現我的秘密。
最後,就是如果沒人寄信到這個信箱,那我一年 300 元就是白花了

2009年10月4日 星期日

在工程專案中,我們如何評定資金的機會成本!

當我們評估一投資方案或是生產方案是否實行時,就現金流量而言,我們可用 IRR(Internal rate of return) 來作評估。然在比較機會成本上,試問你該以什麼樣的利率作為訂定報酬率的依據,選定 5% 而不是 3% 的理由是什麼呢?

用銀行報價的存款利率可以嗎? 那用那一家呢? 台新銀行、國泰銀行還是台中銀行? 試問萬泰銀行的存款利率高還是國泰銀行的利率高?

閱讀更多…

2009年9月22日 星期二

「政治文」:該保障馬車夫的工作嗎?

利益揭露:我有兩張中華汽車的股票,但如果能讓台灣競爭力提昇的話,我一點都不介意它們變成壁紙。當然啦,我能這麼豪氣地說,也是因為我用的是「指數化投資方法」。

1970年代,第一次石油危機發生,面對暴漲的油價,沙國石油部長亞瑪尼親王告誡產油國們:「要記住:石器時代的消失並不是用光了石頭。」

同樣地,倫敦馬車夫的工作並不是因為沒有馬匹可拉才失業的。

在政治電影中,我十分喜歡這一部:「風起雲湧」。劇中,約翰屈伏塔在一家鋼廠對工人們演講:
約翰: 我想要說謝謝你們今晚能來,我知道你們工作很辛苦,休息時間很短。

工人: 我們的工作時間都很長。

約翰: 對! 對! 我理解,實際上,自從鋼廠關門以來,你們中有多少找到工作了? 舉起手讓我看看,好的,你們中有多少工作賺來的錢只夠付租金。不管你們工作了多久?

[很多人舉了手]

約翰: 我知道了,我媽媽在我爸爸死後還在工作,我記得她回來的時候骨瘦如柴,你們知道我在說什麼! 我知道她想和我玩和我說學校的事,但是有時候你會累的什麼也幹不了...

工人: 來份電視餐喝幾口水就解決了。

約翰: 你說對了,我不想和你們說找工作有多難,我不是一定要告訴你這些艱難的日子,你們知道我要幹什麼嗎? 我要做些非同尋常的事,我要告訴你們事實。

[笑聲,鼓掌]

約翰: 我知道你在想什麼,你一定在想他這麼做一定很絕望,但是你不得不吞下這些 ...... 垃圾。

工人: 你可以說屎,我們不介意。

約翰: 對,如果你相信報紙上說的,好的,下面就是事實,沒有一個政客能重開工廠 ...給你們造船廠的工作,保護你們的工會聯盟,沒有一個政客能讓這裡回到以前。因為我們住在一個新的世界,一個沒有經濟壁壘的世界。一個人可以在紐約按一下按鈕把上億的資金轉到東京去,在那個世界裡,體力勞動工作是十分廉價的,但這里不是,如果你要競爭,你得鍛煉出不同的肌肉...在你們的耳朵裡

工人A: 他離題了。
工人B: 他媽的,他在說我。

約翰: 現在整個國家的人不得不回到學校重新學習,我們要變的更聰明,學習更多的技術,我給你們一個理念: 我會為你們努力工作的。我每天起來想到的就是你們,我會力爭,浴血奮戰拿錢支持教育... 這事關我們國家的未來,給你們提昇的機會,但是這一切還是要你們親自克服這場困難的戰役。
所以工人沒有工作,也並不是因為他沒了體力。

這一切都是因為「可替代性」。馬車夫是被汽車駕駛替代了,美國鋼鐵工人是被中國工人替代了,而石油的替代產品是什麼? 有太陽能、地熱、潮汐、核能…,但卻沒有一項產品是真正可在現時取代石油的,為什麼? 那是因為產油國 OPEC 有聽進親王的叮嚀,他們讓原油價格介於生產成本及替代性能源成本之間,讓替代性能源無價格優勢,所以當你覺得一塊錢汽油可跑 1 公里時,你不覺得該換台電動機車來跑 0.5 公里(含電池更換成本),這也就是 OPEC 的技倆:「別宰了金鵝」。

就因為汽油不夠貴,貴到彰顯「替代性能源」的價值,我們就只能看直接成本,而不看間接成本(下一代失去健康及生命的成本)來繼續使用純汽油汽車嗎? 我知道整個汽車產業(含衛星產業)的工人為數眾多,在民主國家的台灣,選票代表權力,開除汽車產業相關勞工的工作是政客作不到的,但我真的希望有政治家能說出這令人不喜歡但又是正確的言論:「不再保護純汽油的汽車產業,而且是從現在開始。」就像汽車問世之時,英國選擇不保障馬車夫的工作一樣。

現在大部份的人都知道汽車最大的缺點就是燃燒汽油產生二氧化碳,面對全球暖化時代,最不應該地就是無節制地使用石油。愈早脫離使用石油作為能源來源,就能結束氣候變遷的難題,也能在產業競爭力上更上層樓,因為全世界都在等,等著「新能源產業」將「石化能源產業」終結。那個國家先作到,它不但能賺大錢,也絕對贏得全世界的尊重,想想看,一個解決全球暖化問題的國家不是聯合國會員國,這像話嗎? 過去,我們能用經濟奇蹟讓全世界對小島國驚豔,現在,我們也能用「新能源產業」征服全世界,就像油國們對回教激進份子的金援一樣,我們也來金援入聯激進份子。

何況,純汽油汽車產業的勞工被開除了,他就找不到工作嗎? 就活不下去嗎? 嗯~ 有可能,他是活不下去的,如果台灣政府是靜待著其他國家先把「電動車」、「油電混合車」或「任意門」產業扎根散葉的話。

笨蛋,我們當然是要搶先一步,過去,搞汽油引擎時,我們走得步履闌珊,據說是台灣不產鐵礦,無法煉出引擎所需要的鋼材(不過,現在不是用鋁合金了嗎?),可是在電動車產業中,靠得是電動馬達耶,這是另一個戰場,為什麼我們台灣不能先去開疆闢土呢!

在 WTO 扣關之際,日本面對歐美大廠的競爭,是如何解決的? 把停車格的空間劃小一點,日本民眾自然選擇購買日本小車。一樣地,我們為什麼不向純汽油汽車開刀,利用「政策」讓大家傾向購買環保的台製「電動車」或「油電混合車」,或是更樂於使用大眾運輸系統。

「純汽油汽車產業」已是夕陽產業了,不管它的油耗可以作到多了不起,它不會贏過吃電的傢伙,這就像是計算尺(應該有讀者沒聽過這玩意吧)再怎麼創新改進,大家還是會拿電腦來算房屋結構了。與其等它慢慢死,不如趕快找下一個投胎的地方。

而我的政策就是利用「汽油附加稅」來拉平汽車與電動車的油耗成本,從而降低汽車銷售量; 提高電動車銷售量,讓電動車早點達到經濟規模,以推動「銷售增加」->「研發資本增加」->「成本下降」->「銷售增加」的正反饋。一個好的政府政策或是科技創新是可以產生良性的替代效果或消除惡性的替代效果。事實上,那些「純汽油汽車產業」的勞工在接受教育訓練後也可以轉往「電動車/油電混合車/任意門」產業服務的,工作機會不會變少,只有工作內容有些變化。

當我們台灣道路上,跑得都是台灣產的電動車,我想這樣的科技實力,絕對可以將產品輸出至其他國家賺取外匯,想想看,過去賣「純汽油汽車」,台灣有賣得很驕傲嗎? 沒有!

2009年9月21日 星期一

「政治文」:不討人喜歡的政策(汽油賣得更貴些)

問一個小學生, 4+3 = 多少,他可能回答是 7 ,那 3+4 呢? 他也會回答是 7 ,然而問他為什麼兩個答案會一樣,他可能不知道這是因為加法的交換律。對大人來說,通常也不會記得這原理叫做「交換律」,但他們總是知道 4+3 = 3+4 ,所以大家不會犯了猴子的錯,覺得先吃 4 升的粟子比較好。

但現實問題不總是像洗鞋子一樣,右邊先洗或左邊先洗都無所謂。例如:每人平均一天要喝 2000 cc 的水,那麼在去撒哈拉之前,先喝下 200000 cc 的水,就代表可以有 100 天不需要喝水嗎? 又或者有兩個月的薪水要領,先領 4 萬後再領 3 萬與先領 3 萬再領 4 萬來比,前者比後者多了銀行利息可拿,那當然要選前者囉!

不過,有些事物就不容易一眼看穿,像是在環保政策上,我們都知道「全球暖化」的問題是愈來愈嚴重,甚至其嚴重程度不是直線上昇,而是指數上昇的,所以如果不從現在開始解決問題,在不久未來的某一年,某個政客會在台上激昂地講著:「我當選後,必定讓能源效率提昇 1 萬倍,讓二氧化碳量變成 0 」,然後在他當選的一年後,地球依舊存在,只是沒了人類。

大家應該都看過高爾的「不願面對的真相」吧! 在片中,他有個譬喻:「地球 V.S. 金塊 ?」我個人覺得這譬喻感覺還差了一點,因為地球永遠不死,不管它是顆黑濛濛的碳球還是藍澄澄的水球,死的總是生物,是人,又或者人死了,地球又可以變藍了。

天生萬物以養人,人無一德以報天,殺殺殺殺殺殺殺()。

所以為了我們這些該死的人類,如果大家還想要活著,看著孫子、曾孫子可以有藍天白雲可看,我覺得有一個「把錢從左手拿到右手」的政策可以執行看看。

那就是加徵汽油附加稅,逐月提高 5 元,直到與汽油價格相同為止,而對出口汽油也加徵出口附加稅。將所多徵的稅拿來補助各項省能產業,如:鼓勵購買油電混合車、省電燈泡、大眾運輸系統、計程車強制換低油耗車輛…。最後才是拿來減與汽油直接相關的企業其營所稅、全民的個人所得稅及增加負所得稅。

簡單講,汽油附加稅收了多少,就得還全民多少,一分不增、一分不減。然而加徵附加稅,卻可以降低汽油用量,並加速省能產業的昇級,最後回饋配合省能的企業及民眾,我個人認為這是一個好主意,尤其是在全球暖化問題嚴重的時代。但我這樣選得上總統嗎?

= 後記 =
本文是在原油期貨價格漲到 147 美元時構思的。但是最近,遇到兩件事,讓我覺得加徵汽油附加稅根本就是個好主意。
  1. 高鐵虧損連連,傳換人掌舵
  2. 我看了「世界又熱、又平、又擠」一書。
高鐵是過去政府留下的一筆爛帳,整個制度設計不當,造成一家民營公司的虧損居然由全民買單,這像極了美國政府在次貸風暴中金援了 AIG、房利美、房地美一樣。只是頭洗一半,不沖水不行呀! 所以我非常贊同將高鐵經營權拿回來,讓它像中華電信、第一銀行這一類的民營公司一樣。

在拿下高鐵經營權後,接下來,就是開徵汽油附加稅,排擠那些自行開車的人,讓他們往大眾運輸系統(公車、捷運、計程車、長程客運、台鐵、高鐵)跑,我相信高鐵的載客量必定三級跳。結果是,高鐵經營績效上昇、全國排碳量減少。而高鐵原始股東的責任,就留待法律、財經專才的人去追究。

事實上,在我看完「世界又熱、又平、又擠」一書後,才發現這個想法,別人早就有了,甚至他們還提到減低原油需求可以讓世界更和平、民主。

提昇地獄燃料的價格可間接提高省能產業的獲利及競爭力,因為太陽能、風力等產業在研發上,期初投入資本很大,如果,它們的初始產品的價格無法等於石化燃料的價格,那麼就無法啟動正回饋的規模經濟。

另外,汽油的便宜也直接影響一般民眾對它使用上的浪費,這一點也像中華職棒在球員使用上的態度,愈高薪的球員就愈保護,因為他受傷了對球團傷害大,而便宜的球員就儘量用,反正沒花多少錢嘛。

除了加徵汽油附加稅外,世界一書中還有一些其他作法,而其中有一個觀念與我過去所學完全相反,那就是提高環保標準是增進企業競爭力的方法。在我大學所上的「衛生工程學」中,老師說:「在60、70年代時,美國放棄了零汙染的政策,因為在當時,如果要求企業在排放水、廢氣…上,遵守高標準的話,其生產成本無法與其他國家競爭。」這句話,也讓我歸納出經濟成長勢必有所犧牲,而環保往往就是那最佳祭品。

但是佛里曼說:「錯。」看看通用、福特的例子,就知道了,它們的環保標準及油耗標準不如豐田,但是他們賺得錢有比豐田多嗎? 事實上,美國政府的保護主義就是扼殺美國企業最佳武器。這也讓我想到另一個故事,那是在台灣經濟奇蹟發生後,有一次新加坡管理中小企業的官員來拜訪我們這邊輔導中小企業的公務員,問到:「在協助中小企業上,台灣政府有那些方法呢?」我國官員答:「根本沒有任何措施,不給予協助,就是讓我們中小企業可以將生意作遍全世界的最好方法,讓他們跟小強一樣就行了。」

我開始慢慢體會「不合理的要求是磨練」這句話了。

2009年9月16日 星期三

自動更新 hg 儲存庫的 shell script

因為 hg 不同與 svn 可以資料夾結構來看待專案,在 hg 中,一個專案就是一個資料夾,其下不會有子專案,所以像我手頭有二十幾個 hg 專案時,如果要同時更新( pull -u )這些專案,我必須一個專案一個專案進去打 hg pull -u ,這實在太花時間了。但還好我用的是 Linux ,所以就把這些煩人且重複的指令寫成一個 shell script ,執行一次就更新全部。以下是我的程式碼:
#!/bin/bash
today=`date +%Y%m%d`
me=`whoami`
echo ${today}
original_dir=${PWD}
touch '/tmp/.'${today}

if [ "$1" != "" ];then
dest=`find $1 -regex ".*\/\.hg$"`
else
dest=`locate -r "\/home\/${me}\/.*\/\.hg$"`
fi

for dir in $dest;do
if [ ! ${dir/*mercurial_appengine*/} ];then
continue
fi
cd ${dir}/..
echo -ne "\t*** ${PWD} ***\n"
hg pull -u || exit
cd $original_dir
done

指數化投資第四階段檢視

今天是 2009/9/15 ,很久沒公佈我的指數化投資績效了。目前我整體投資組合績效包含現金及股票股利後為 16.43 %。我的持股成本應該是位在 6300 以上,所以對照的台股指數績效為 16.66 % ,看起來是差不多,不過這是我拿加權指數計算出來的。

理論上,應該是要拿加權報酬指數來對照才對。但是我懶得再用手算一次,如果把現金股利去除的話,那麼我的投資組合績效約為 15.31 % ,大約輸了 1.3 % ,不過,因為我的持股成本 6300 也是個心算估計值,所以用這樣的數據來評論我的投資組合績效有沒有對應指數,還不夠精確。

目前,我正在寫一個 GAE base 的指數化投資績效計算網站,到時候,我就可以把投資組合的績效,內嵌在我的網站上,隨時更時、隨時給各位收看,敬請期待。另外,我也把原來投資組合中約 60 檔的個股擴編到 120 檔。詳細資訊,等我寫好指數化績效計算網站,也一併給各位看吧!

會有一陣子,不再購買台股了,我打算順著「綠角」腳步到美國買指數型基金了,因為海外投資人有免稅門檻,只要股息不要超過一定金額(目前約是 3650 美金)是可以不用繳納 30 %的美國所得稅。接下來,就是和家人一起集資來降低匯款成本到美國去買基金。

相關閱讀:
  1. 簡單指數化投資
  2. 指數化投資第一階段檢視
  3. 指數化投資第二階段檢視
  4. 指數化投資第三階段檢視

2009年9月14日 星期一

screenrc 再進化

改進來源:設定 screen我也screenrc

我新的 screenrc 如下:
shelltitle '$ | '
hardstatus alwayslastline "%?%{yk}%-Lw%?%{wb}%n*%f %t%?(%u)%?%?%{yk}%+Lw%? %{-} %= %{= KR} %l %{-}%{= KG} @%H %y-%m-%d %{-}%0c:%s"
bindkey "^[[1;5A" screen
bindkey "^[[1;5B" other
bindkey "^[[1;5C" next
bindkey "^[[1;5D" prev
startup_message off
maxwin 10
另外在 .bascrc 中,須加入:
case "$TERM" in
screen)
PS1='\033k\033\\\\\u@\h: \W\\$ ';
;;
*)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
;;
esac
為了讓我清楚了解那個 Window 在幹什麼事,我另外在 .bashrc 中定義 alias sh_django="./manage shell" 及 alias core2duo="ssh -A 123.345.456.456" ,這樣在 window title 上就會顯示它現在在執行的是那一個指令。整體效果如下:


2009年9月6日 星期日

練習自主管理

昨天我送妹妹屏東科技大學,這是她第一次到離家如此遠的地方。過去,她在台中高農讀書的時候,還可以每個禮拜回埔里,而且在台中時,她是和奶奶一起住的。有什麼問題,還有長輩可以決定,到了屏東,我們就沒辦法「即時協助」了,而這個「沒辦法即時協助」,其實也就是讓她練習自主管理的機會。

自己的問題,第一時間自己面對、解決,倘若需要協助,也是得分清楚周遭的單位、組識、朋友,誰可以幫忙。再不行,才是找我們這些「遠親」揮軍南下。

對台灣年輕人來說,通常是等到大學的時候,才能脫離家庭的控制,因為這個時期,是離家最遠的時候,沒有媽媽、爸爸的耳提面命,想去夜遊就去夜遊,想要蹺課就蹺課,老師不會管,舍監也不會管。而這是練習自主管理的機會,是未來進入獨立人生的前哨站。

有人可能在這「自由」中迷失自己的目標,畢竟這就像是小朋友初次進入迪士尼樂園一樣,有太多的驚奇是以往沒看過的,也可能從來不知道自己要的是什麼! 遇到了,喜歡上了,就以為應該是一輩子。

但是,我認為「人要事磨」,壞教訓和好教訓都是必要的教訓,只要那個壞教訓不是「一次玩完型」的,都算是可以接受。

2009年9月3日 星期四

Latex CJK on Windows

我都是使用 rst 格式作為日常書寫格式,因為很方便地讓我作版本控制。所以網頁程式開發的功能/技術規格書也是用 rst 來編輯的。

但有個問題,當我想作圖文合併時,我可以在 ubuntu 中,使用 rst2latex, latex, dvipdfmx 等工具來轉成 pdf 檔,如果是在 Windows 下呢? 我的那些學弟們多半還是在 Windows 下工作,為了他們著想,我寫了這篇文章。

首先,一樣使用 rst2latex 程式(這是 python-docutils 提供的),把 rst 檔轉成 .tex 檔 * ,然後再利用 latex.exe 生出 .dvi 文件,最後再利用 dvipdfmx.exe 把 dvi 轉成 pdf 檔。指令如下:

C:\> "C:\Program Files\MiKTeX 2.7\miktex\bin\latex.exe" xxx.tex
C:\> "C:\Program Files\MiKTeX 2.7\miktex\bin\dvipdfmx.exe" xxx

所以在 Windows 中,生成 pdf 檔也不是件難事。

那麼我們如何讓 Windows 可以有 latex.exe 及 dvipdfmx.exe 的指令呢! 很簡單,安裝 Basic MiKTex.exe相關字型檔即可。

Basic MiKTex.exe 的安裝方式就是下一步、下一步。待安裝好後,請開啟 MiKTeX > Settings ,並在 Roots 中新增「相關字型檔」的資料夾位置(看你將解壓縮後的資料夾放在那裡,我是放在 C:\texmf)。接下來在命令列中打入指令:

C:\> initexmf -u
C:\> initexmf --edit-config-file updmap
這時候會出現純文字編輯器,請把以下紫色內容複製貼上,再存檔關閉。
Map cwmu.map
Map cwku.map
Map cwfsu.map
Map cwhbu.map
Map cwyu.map

C:\> initexmf --mkmaps

這樣你就可以使用 latex.exe 及 dvipdfmx.exe 來生成 pdf 檔了 **。

詳細步驟可參考政大應數蔡炎龍老師的教學文件(本站備份)

  • 註1 rst 及 tex 檔其實都只是純文字檔,只是它們的內文用不同的結構化標籤作格式排版。
  • 註2 Windows 下使用的字型檔,其字型名稱為 cwmu, cwku, cwfsu, cwhbu, cwyu ,所以原本我們在 tex 中,所寫的 \begin{CJK}{UTF8}{kai} 要改成 \begin{CJK}{UTF8}{cwku} 。

2009年7月25日 星期六

Mercurial on Google Code is available to every project

今天晃到自己的專案 django-pgpauth 時,才發現多了 Mercurial 的選項。原來早在 5 月 28 日時就己經正式推出了。

要轉移原來的 subversion 資料庫到 hg 儲存庫中是很簡單的一件事。

在 Ubuntu 下,先安裝 python-subversion 套件。然後將 /etc/mercurial/hgrc.d/hgext.rc 中「# hgext.convert =」的註解拿掉。

接下來,作轉換的動作。

# hg convert http://projectname.googlecode.com/svn hg-client
# cd hg-client
# hg push https://projectname.googlecode.com/hg

最後,記得到 administer > source > Repository type,把 Version control system 改成 Mercurial 即可。

2009年7月24日 星期五

「無名」的留言系統有 bug

往往在留第二篇回應後,就出現「成功送出,但不見文章秀出」的問題。

所以我把想要回應的文章就寫在沒有 bug 的 blogger 中。實在是很不想去看無名的文章,只不過,這個版主是我研究所的學弟,偏偏我又對他的文章有很多意見。

以下是我針對「隨手執筆 - 【心情】回台中後一周」的一樓回應文的回應:

一個人作系統開發很難賠大錢,因為這是一份比較踏實的工作---你總是有付出些什麼! 像是時間及知識。

就像證券營業員一樣,他也是付出了和你講話的時間、幫你下單、幫你提醒交割金額及時間,所以在拿薪水時,你和他們是絕對是理所當然,豪無悔恨的。

但是在效率市場中賺錢,卻不是付出愈多的腦力及時間,就表示收獲愈多。的確有人的獲利會高於平均,但那個人是不是最努力「研究」的人呢! 我很存疑。

另外對於停損的觀念,請看一下這一篇文章:http://greenhornfinancefootnote.blogspot.com/2008/05/fallacy-of-sell-at-loss.html

== 後記 ==

寫這篇文章,讓我和老婆小吵了一架,也讓我的心情有點不爽,只是因為「無名」實在不好用呀!

所以我也就作了個小小的決定,以後不訂閱在無名的 rss feed 了,省得我火氣大。事實上,我常看的 blog 也只有這個學弟是放在「無名」。

Sorry! 學弟。不過,我想你的耳根子以後會清淨些。

2009年7月19日 星期日

我家的書櫃


整理了兩天,終於把三樓書房及二樓客廳的書合併放在一起了。

我是個很愛書的人,但也常丟書,主要原因是常忘了借給誰,像是曾擁有金鏞全集,但目前只剩下笑傲江湖 5 到 8 集。也一直幻想著開一家私人圖書館,過過當館員的癮。

會喜歡看書,我想父親的身教是最大因素,從小常看他在研讀法律書籍,他總對我說:「法律是給懂的人用的。」為此,身為公務員的他卻跑去考了個代書執照,雖不可執業,但也幫了不少朋友。

也因此,在高中一年級時,最大志願是唸法律系,而且是財稅組。只可惜,當年不愛唸教科書,那些歷史、地理的知識又無法拿國中讀過的來考試,只好選了「一樣不讀書但考試可及格」的第二類組,因為我可以拿國中理化知識解決高中理化問題。

作這個決定,我知道父親是有點失望的,但是我跟他說:「我的志願現在是建築/土木系」,他也就接受了,因為他認為「有土斯有財」,唸土木/建築系將來可以開發土地、蓋房子,這一點也與他的代書背景有關。而且母親也是強烈希望我唸中興土木。只可惜他們沒有機會看到我真的蓋棟房子。

知識就是力量,父親不是用說的,而是在我面前實踐。以此張相片與各位共同勉力:「期許藏書能愈多愈好,咀嚼出最棒的智慧」。

PS 如果家裡沒空間、手邊沒閒錢,那不妨把公共圖書館變成你的書櫃。

2009年7月16日 星期四

「可能是政治文」: 當老師比較爽!?

利益揭露:我老婆就是小學老師兼資訊組長,所以她也有國民旅遊卡。

我想目前的社會風氣就是認為當老師比較好,舉個例子:http://www.mobile01.com/topicdetail.php?f=37&t=821860&p=1,認為老師工時短、薪水穩定、風險低,是個絕佳的工作。而作到這些工作的老師們,必定是蹺腳捻嘴秋,沒作事也照領薪水。會有這種風氣,就是因為從表面上的福利制度看來,老師、公務員、軍人比其他行業爽,等到其他行業翻身,就不太有人會怎麼想了。

要其他行業翻身,就我的推斷是不容易的,因為太多的工作機會都被「電腦」給取代了,既然工作機會少,那麼勞工薪資福利平均水準就無法提高。老師、公務員、軍人都是服務人民的,既然人民生活不好,這些人慢慢地也會不好過,這只是時間早晚而已。

只不過在國家僵硬制度的保護下,不太可能藉由拉低他們的福利水準來滿足人民的期待,應該是用「限縮員額」來間接補足預算不足。

在擔任公立學校老師、公務員、軍人工作前,政府本來就對這些工作有昭告一定的福利制度,如果在他們工作若干年後,政府因為外在選票壓力下對他們的福利開刀,這說不過去吧! 對勞工來說,也是相同道理的,當初面試講好是 2 萬 2 元,如果在實際工作後,老闆說:「你作事的確有 2 萬 2 元的水準,但是整個就業市場不景氣,每個新鮮人起薪都只有 1 萬 8 ,所以,我必須刪減你的薪資。」這合理嗎!

「福利」是當初政府拿來利誘人才的糖果,所以當初講好的制度就不應該突然改變,徒木立信的故事,大家都聽過吧! 政府的公信力不容質疑。但是我非常支持將「不適任」的老師、公務員、軍人開除,工作既然沒作好,憑什麼還能要求政府保障福利呢!

事實上,任何人在台灣的客觀條件下,也都有機會選擇公立學校老師這個職業,其他行業像是軍人及公務員也是。會沒有選擇的原因不外乎兩種,一是考不上,二是不想選。而考不上的人,我認為他們沒有批評老師工作條件優渥的權利,因為他們容易陷入「自己拿不到所以也不要別人有」的盲點,但這些考不上的人還是可以要求老師們的工作品質需符合他們所享受的福利。

而我就是「不想選」的人,所以我來談談在我眼中,「公立學校老師」這個行業到底是什麼!

它其實是個「沒道理」的工作。

老師的工作績效不等同於福利享受程度,兩者是獨立事件,單以年資決定薪資,而像現在新註冊學生數愈來愈來少,在刪減老師員額的方法上,也是用「在校年資」來計算,這真的沒道理呀! 用心教學的老師因為年資不夠,在起額情況下,他優先離校,這合理嗎! 因為他的教學用心,讓學生家長想把孩子留在這個學校,但他沒得到相對應的回報,這不合理吧! 但大家都制定這種制度,因為搞教育行政的人還沒弄出一套合理的教師評鑑制度,只能用這種「沒道理但不得罪老鳥」的制度。

還好,我不是小學老師。我受不了這種「沒道理」的制度。

2009年7月7日 星期二

使用 modelviz.py 來製作 Django-Based 應用系統的資料庫結構圖

要看懂應用系統的運作原理,從資料庫下手是一定要的。

了解了資料庫結構後,對其他執行方法的解讀就容易了。當然如果原本開發的人,其想法與別人太不一樣的話,在「他是比較優秀」的原因下,那對後面來看系統的人來說,就是一種莫大的幫助; 如果是程度太低的話,那就只能怪當初給他作教育訓練的人。為什麼程式設計師那麼不長進,還讓他開發系統。

如果系統是使用 django 架構開發出來的,那麼在資料表的展示上,我們可以使用 modelviz.py 程式,把資料表結構匯出成 dot 格式,然後再利用 Graphviz 軟體繪製成 PNG 圖檔。

這個方法理論上是可以在 Linux/Mac/Windows 上運作的,不過,你知道的,我愛用 Linux ,所以我保證在 Linux 可以這麼作,其他系統就有賴你們了。

首先是使用 modelviz.py 把 app 的資料表內容及關係匯出成 dot 格式。在 settings.py 同一層的資料夾中,鍵入

> ./modelviz.py [-d] project general > XXX.dot

project, general 是我的 app name,看你想知道那些 app 的資料表關係,就填那些。且你想知道的 app ,必須是有存在於 settings.py 的 INSTALLED_APPS 中的。另外在有加 -d 的情況下,它不會列出資料表的欄位,只顯示關係。

有了 XXX.dot 後,再利用 Graphviz 軟體把它轉成圖檔。

> dot XXX.dot -Tpng -o XXX.png

這樣你就可以從 XXX.png 中了解這些資料表之間的關係了。

如下圖:



其中,可以看到 User, Company 兩個表格並沒有顯現它們的欄位,這是因為這兩個表格處於 user app 中,但我並沒有在 modelviz.py 指令中要求它要秀出這個 app 。

2009年7月4日 星期六

有圖有真相

From 光頭照


夏天太熱了,尤其是我現在很愛運動。但是頭髮長得密,熱氣排不出去,讓我的頭冒了很多痘痘,索性趁著這個暑假留個光頭。

From 光頭照

2009年6月11日 星期四

職場紅海的薪資水準是不會太高的

揭露:我只正式工作二年,一個是在網路公司,一個是在國立大學,詳參我的網站。所以以如此短的經驗來論,你可以當我在放屁。

畢業旺季快到了,然而因 104 人力銀行楊董的一段談話。讓許多人群起攻之。有人說他公司的營收都是從企業那邊來的,所以他透過這些言論拉低職場新鮮人的薪資水準,對資方表現善意,藉此多吸些企業主丟錢。

而楊董的這番談話與他過去所抱持的想法或有不同,我想這可把它歸在「換了位子,換了腦袋」現象。

相關的言論請參考如下:
而我想在商言商,楊董這麼作沒什麼不對。如果畢業生們聽了他的話,拉低了整體市場的薪資水準,而讓企業利潤提高並分一杯羹給 104 人力銀行,讓它多賺點錢,股東們更高興點,且畢業生們也覺得他們是在為自己的未來下苦功, 將來有希望一次全撈回來。大家都歡喜,這沒什麼不好呀!

薪資是勞資雙方的協議,就像股票的成交價一樣。2000年台積電200元是合理價位,2009年40元是合理。一個台大畢業的學生第一份薪水拿22000元,只要他願意,沒什麼奴隸不奴隸的。

如果硬要把台大學歷算個成本,然後要求企業必須高於這個價位買進員工這件事是公正的! 那麼在股票市場裡,就不應該先有200塊的台積電,而後卻變成40元,因為當年在200元買進的人,怎麼可能會賣得比200元便宜呢!

以成本計算售價只能算是個假設,最後還是必須依賴市場效率所撮合的成交價為準。台灣基本上是個自由資本主義國家,重視的是「市場」; 而拿成本加一定成數後硬是要扣上成交價的作法,那是馬克思派的想法,等我們成了社會主義或共產主義國家後才說吧!

但是!!!

我要談的不是「22000」的薪水倒底合理不合理。我想談的是「新鮮人挑工作時,該想的是什麼」!

一、保持「找工作的企圖心」

在楊董的談話中,提到可以利用「勇者策略」先進了某家企業來培養工作能力並證明你的能力,而且這是 nothing to lose 。但這只對不缺錢的人是 nothing to lose

如果你是個沒學貸、生活吃穿靠父母的新鮮人,這一招的確可以用用。因為一直找不到工作真的會影響一個人的自信,然後在往後的面試中,你會更難展現自己,如果畢業後三個月內真的沒有工作,無妨試試。

但如果說,你是有經濟壓力的話,你就應該在畢業前算出自己的現金流量,然後只要有工作的薪資能打平你的支出,愈早卡位愈好。

又如果,你是個有經濟壓力,而又一直找不到工作的人。或許你應該把工作屬性再放寬一點,像是較無技術門檻且薪資又可以打得平支出的。

如果還是找不到可打平支出的工作,那有點打不平的工作可以考慮了。

因為有工作很重要,它就是一個人活著的目的,不管是作什麼,「工作」本身就隱含著對他人有價值。

簡單講,新鮮人畢業後就是要「找工作」,不工作勢不罷休。

二、找合興趣的,而不是熱門,有前途的

保持了找工作的企圖心後,那麼該找什麼樣的工作呢! 我的建議是別看未來前景,未來前景沒有意義。

半導體大老在2000年時曾說:「未來20年內,看不到一片烏雲」。結果因為總體經濟衰退以及需求不如預期造成業績下滑。「需求不如預期」這句話很可笑吧! 因為沒有人會說:「預期明年的需求不如預期。」(找不到正式報導,只好看這篇)

連浸淫半導體幾十年的人都看不準未來了,你一個小小的新鮮人又能預測多準。不相信我說的,那你可以去看一下「黑天鵝效應」這本書,他對預測這件事,講得更仔細些。

當大家預測某產業有前途時,一股腦地往那邊搶工作,你認為這會提高它的薪資水準還是拉低呢! 我前面就說過了,薪資是勞資雙方的協議,1個工作10萬人搶,老闆當然是挑好用又便宜的。

結果你在這個看似有前景的工作上,得削價競爭,那會賺得比較多嗎? 我不知道,或許未來真的被你賭對了,賺上幾千萬。就像有個人作了分析後,覺得魔戒中文版應該會紅,所以用「賣不到一萬本,不用給版稅」的策略要聯經給翻譯權,結果真讓他賭對了,魔戒電影開拍,在台掀起一陣旋風,魔戒中文版小說大賣,他賺了幾千萬,不過究其翻譯小說的因素是「搞這個會賺錢」嗎? 不,他可是一個熱愛奇幻文學的怪咖呀! 原譯小說爛透了才是激發他的主因,這是為了「前景」嗎? 這是因為熱情

所以你為了「前景」找工作,能不能讓你如願,只有老天爺曉得,但如果這個有前途的工作內容不是你真的有興趣想作的,那你己經賠上熱情了。人人稱羨的工作對你不一定是個好工作

簡單講,薪資低是紅海策略的結果,而你的熱血就是妝點紅海的顏料。

2009年6月10日 星期三

ImageMagick 讚啦! 輕鬆作 PDF 2 JPG

因為想要使用 rst 、 latex 作為我的主要寫作格式。那麼在與別人互動時,對方想要編輯我的檔案時,該怎麼辦呢? 尤其是在專案二次外包時,計畫書可能須要上包先審視過。

那這時該如何顧及「計畫書的版本修改追蹤能力」及「對方人員編輯文件的親和力」呢? 總不能叫上包廠商的承辦人也學會 rst 格式吧! 雖然很簡單,但對認為「所見即所得就是王道」的人來說,這是不可能的事。但如果叫我用 Word + SharePoint ,我想別人也不一定好上手,單單只用 Word 的話,那就又回到原點了,它根本就不適合作一個協同平台中的文書編輯軟體,比 Google Docs 還不如,但 Google Docs 又不能吃太大的檔案,而且我就是不喜歡「所見即所得」的文書編輯軟體。

所以本來我是想找一些 Open Source 的 PDF 編輯軟體,讓他們能把意見以註解或劃線方式標記在 PDF 檔上。不過實在沒找到幾個簡單應用,而且 Windows 安裝方便的。直到看到 http://www.pdfescape.com/ 這個網站的功能,才發現可以自己作一個線上編輯 PDF 的平台。

只要能把 PDF 檔先轉成 JPG 檔,然後結合 AJAX 技術讓使用者在文件圖片上,放置註解文字及劃線,編輯完成後,再通知我作修改,這樣一來,上包的意見也可一併作版本控制了。不會發生該改未改,沒必要改的卻被弄亂的糊塗事。

好吧! 最重要的技術就是把 PDF 檔轉成 JPG 了。那該怎麼作? 在 Linux 下,實在是非常簡單,簡單到,我覺得這個線上 PDF 編輯平台已經寫好了 50% 。

指令如下:

# convert XXX.pdf XXX.jpg

這樣 ImageMagick 就幫你把 XXX.pdf 轉成 XXX-*.jpg 的圖檔了,每一頁是一張 JPG 。只不過,它的預設參數轉出來的圖檔解析度不高,所以最好再加上幾個參數。

# convert -verbose -colorspace RGB -resize 1800 -interlace none -density 300 -quality 100 XXX.pdf XXX.jpg

這樣它轉出來的圖,在 width 部份就是 1800 pixel 了。實在是讚啦!!

下圖就是成果:

2009年6月8日 星期一

FxxK! I hate Windows(Mercurial cp950 problem)

一個因為中文檔名,讓我必須在 Windows 下工作的專案 *。今天我多花了 2 個小時,只為了要送出 4.3 MB 的中文檔名資料夾。是什麼問題呢! 是 {urlopen 10053} ,但倒底它是個什麼問題,我還是搞不懂。我後來是把它的檔名改短一點,然後先 copy 至學校的其他 windows 後,再作 hg push ,這樣總算成功了。

PS 我有試過 hg-fixutf8 了。但它只會在 commit 及 update 時作 utf8 <=> cp950 的轉換。這樣我無法在 NetBeans 中工作。

2009年6月2日 星期二

好文: 「請教別人,但不要依賴別人 」

請見: http://blog.roodo.com/lakatos/archives/9139713.html

「可能是政治文」: 我有時候會看不懂新聞記者的論述

「納稅人的錢修車? 余祥銓挨批」引自: http://showbiz.chinatimes.com/2009Cti/Channel/Showbiz/showbiz-news-cnt/0,5020,110511+112009060100340,00.html 。
「用助理薪水修車」等於「拿納稅人的錢修車」! 那「馬總統拿總統薪水買紅豆餅自己吃」也是「拿納稅人的錢在犒賞自己」,有貪汙之嫌; 除非是「拿總統薪水買紅豆餅給別人吃」,那就是公務支出,屬合理運用。

天呀! 那台灣那個拿公家薪水的人可以過活呢???

好吧! 這個論述可能不是記者大人自創的,是「網友」! 是「網友」! 那「網友」的腦袋在想什麼呀!

不過他媽媽在回應時,卻只有強調「她們沒這麼說過」,而不是用「余祥銓拿自己薪水修車有什麼不對?」 台灣的政治生態實在是讓我愈來愈失望:總是講「別人想聽的」,而不是「對的」。

colorful source code in Latex(written in reStructed Text)

之前提到使用 Vim 的 plugin VST 來撰寫可自動轉換 latex 格式的簡單結構文章。VST 相當容易使用,不過在轉換程式碼到 pdf 格式時,它無法使用類似 2html 的技巧來讓程式碼變色。

所以我參考了 Listings Package 的語法,稍為修改了 VST 的程式碼(其實只是加上幾個宣告而已)。
 1 diff -r 56c0141f8add Configure/vim/plugin/vst-x.vim
 2 --- a/Configure/vim/plugin/vst-x.vim    Tue Jun 02 00:12:23 2009 +0800
 3 +++ b/Configure/vim/plugin/vst-x.vim    Tue Jun 02 00:14:07 2009 +0800
 4 @@ -4541,6 +4541,18 @@
 5                         \.'\usepackage{longtable}'."\n"
 6                         \.'\usepackage{tabularx}'."\n"
 7                         \.'\usepackage{amsmath}'."\n"
 8 +            \.'\usepackage{color}'."\n"
 9 +            \.'\usepackage{listings}'."\n"
10 +            \.'\definecolor{Brown}{cmyk}{0,0.81,1,0.60}'."\n"
11 +            \.'\definecolor{OliveGreen}{cmyk}{0.64,0,0.95,0.40}'."\n"
12 +            \.'\definecolor{CadetBlue}{cmyk}{0.62,0.57,0.23,0}'."\n"
13 +            \.'\lstloadlanguages{Python,PHP,Ruby,Bash,Perl}'."\n"
14 +            \.'\lstset{language=Python,frame=ltrb,framesep=5pt,basicstyle=\normalsize,'."\n"
15 +            \.' keywordstyle=\ttfamily\color{OliveGreen},'."\n"
16 +            \.' identifierstyle=\ttfamily\color{CadetBlue}\bfseries,'."\n"
17 +            \.' commentstyle=\color{Brown},numbers=left,backgroundcolor=\color{white},'."\n"
18 +            \.' stringstyle=\ttfamily,escapeinside=``,identifierstyle=}'."\n"
19 +            \."\n"
20                         \.countrysettings."\n"
21                         \.'\renewcommand\CJKglue{\hskip -0.3pt plus 0.08\baselineskip}'."\n"
22                         \.'\linespread{1.382}'."\n"

這樣就可以在 vim 中撰寫如下語法,來讓程式碼在 pdf 中變色了:

.. raw:: latex

\begin{lstlisting}
import sys
print sys.getdefaultencoding()
sys.path.append(".")
sys.path.append("/home/hoamon/`桌面`")
from hashlib import md5
from random import random
for i in xrange(10): print md5(str(i+random())).hexdigest()
def whatever(x): print x + 3
whatever(10) # 13
#`中文要作跳脫,使用符號為[數字鍵1]左邊的那一個 \\``
\end{lstlisting}

.. raw:: latex

\lstinputlisting{xxx.py}


下圖就是成果啦:

沒有網頁格式的那樣多采多姿,但聊勝於無呀!

2009年5月31日 星期日

將三個網址全托管給同一個 GAE(google app engine) 程式

在我還將網頁程式全部放在 Ubuntu 中以 Apache 服務時,針對不同類型的資料,我會給定不同的網址像是: www.hoamon.info, down.hoamon.info, ssvn.hoamon.info, book.hoamon.info …等。但是現在我的策略是把所有個人化的網站全部交給 GAE 處理。

既然如此,難道我要一個網址就開一個 GAE spot 嗎? 如果我的各項個人化網站的資料是超過 500mb 的話,在不想花錢的情況下,的確是一個網站開一個 GAE spot ,但我的個人化網站的資料量都不大,這麼作太浪費了。

這次我想整合的網址是 down.hoamon.info, ssvn.hoamon.info ,它們兩個網址原本就只是在作靜態檔案的分享,一個是鬆散無結構化集成的檔案,另一個則是有作 subversion 管理的檔案。

因為在我其他已存在的文章、網頁以及我正使用的名片上,早就標明那些檔案的下載網址,像是: http://ssvn.hoamon.info/OpenTrunk/hoamon.pgp.aschttp://down.hoamon.info/resume070403.tex …等。所以我不能變更這些已存在的 url ,而是讓 GAE 能分辦那些 url 要求是要跑到原本 www.hoamon.info spot 的,那些 url 則是直接以靜態方式存取的。

我打算讓 http://down.hoamon.info/(.*) 的 url 會被 redirect 成 http://down.hoamon.info/_d/(.*); 而 http://ssvn.hoamon.info/(.*) 的 url 則被 redirect 成 http://ssvn.hoamon.info/_s/(.*) 。

這樣我就能在 app.yaml 設定如下:

...
...
...
- url: /_s
static_dir: ssvn_dir

- url: /_d
static_dir: down_dir
...
...
...
- url: /.*
script: index_views.py

那麼如何讓 down.hoamon.info 開頭的網址能 redirect 成 down.hoamon.info/_d 的呢? 我們就必須在 index_views.py 動手腳了。在 GAE 中,要讓 python 程式得取目前的 http request 是以什麼 url 作要求的,就是從這個變數 request.headers['HOST'] 下手,不過這個變數目前好像只存在於 webapp.RequestHandler 中,所以我處理的方式如下:

class Index(webapp.RequestHandler):
def get(self, args):
# 在這裡判斷使用者要看的是那一個網站,然後再作 redirect 的動作。
HTTP_HOST = self.request.headers['HOST']
if 'down.hoamon.info' == HTTP_HOST:
self.redirect('/_d/%s' % args)
elif 'ssvn.hoamon.info' == HTTP_HOST:
self.redirect('/_s/%s' % args)
# end

...

_DEBUG = True
application = webapp.WSGIApplication([
('/(.*)', Index),
], debug=_DEBUG)

def main():
run_wsgi_app(application)

因為我只會在 webapp.RequestHandler.request.headers['HOST'] 中抓到使用者要求網址,所以就會把 dispatch 邏輯寫在 view(MTV)/controller(MVC) 中,這樣的程式能完成工作但不算漂亮。

GAE spot 的程式完成後,記得還要把 down.hoamon.info, ssvn.hoamon.info CNAME 到 ghs.google.com *,這樣就成功合併了。

PS1 額外提醒! 這個動作是要到你的 domain name 服務商的設定介面處理。不過,你也得在 GAE 的 [admin 介面]
> [Versions]
> [Add Domain]
> [填入 hoamon.info(請不要照填 hoamon.info ,這是我的托管給 google apps 的網址,你的一定不是這個。且作這一步驟,你得先有 Google Apps 帳戶才行)]
> [填入密碼]
> [Add new url(像是 down.hoamon.info, ssvn.hoamon.info 等)]
才行。

2009年5月27日 星期三

指數化投資的一大優點: 個別市場風險小

聲明:我提「安隆企業」事件,並不是要影射巨大機械是安隆翻版,我的重點在於,別把人生或是金錢賭在一家公司上,因為他們大股東自己都不知道未來是如何的!


引自: http://pchome.syspower.com.tw/stock/?stock_no=9921&item=24

雖然我是巨大的股東之一,不過,這個從快漲停到跌停鎖住的情況,卻也沒嚇著我。

我對這件事的看法是,太多散戶在 MSCI 調整權重後對 9921 股價的期待相當高,而這個期待也導致巨大的強勢,只不過大家都看短,不想當最後一支老鼠,所以在它正式生效前、尾盤幾乎拉到漲停價前,不約而同地以跌停價賣了,又剛好底接的人不多,也就只好撮合在跌停價了 *

以上我認知的原因,可能是錯的,但就算巨大在端午佳節中,宣佈破產倒閉,在下周一開盤時,我的報酬率也還會是正值。原因就在於我沒把雞蛋放在同一籃子裡,之前所提到的 60% 的漲幅即是我的後盾之一。我的投資組合中,產業別多、公司多,就理論上,它們是可以規避個別風險的,雖然系統風險避不開,但在發生系統風險時,整個台北股市也沒幾個人逃得開,我又何必擔心呢!!

前陣子,看了「安隆風暴」後,不禁讓我想到,一家偽造財務報表的公司,可能過去它也是一家績優企業,只是不知道在什麼時候,開始對本業沒那麼擅長,而對股價「擅長」。或許那些大股東自己都忘了當初公司成立的理想,而以為只要股價有漲就代表著對自己的荷包及投資人負責了。

基本上,散戶是猜不透大股東的想法,而且別以為那些大股東、市場主力真的握有「賺錢妙方」,他們炒股票能賺錢,完全是散戶自己的愚蠢及貪婪。高風險才有高報酬,高報酬則激發高風險。

PS 覺得很多人在看盤時,會講有「大單在作進出」,而我卻認為這是一種錯誤的認知,像今天巨大(9921)的最後一盤成交近三千張,他們會覺得這是有主力刻意在出貨,但我想這不過是巧合而已,這只是一堆散戶加主力在短時間內所下的賣單,因為時間差極短,所以只能一次撮合所造成的表象。

2009年5月26日 星期二

Zotero 2.0 Beta: 提供 Sync 功能

開始要寫論文了,在文獻管理上,當然是要推 Firefox 的外掛套件 Zotero 了。

只是之前的 Zotero ,在檔案管理上,都是要放在目錄中。這對我有多台電腦的人來說,備份及管理都不方便,後來,我把它丟到 hg 去,這才稍為減少備份工作。

現在 Zotero 推出 2.0 Beta ,其中對我最重要的功能就是它也提供一個 sync server ,讓你輕鬆點一下,就能同步在其他電腦上所作的文獻管理資訊。

這太方便了。

== 後記 ==
令人失望的是,它只能同步文獻資訊,不會同步它的附帶檔案。

小曹想打「全壘打」大賽!

這是一則相當有趣的新聞,我們的職棒投手大多在進入成棒/職棒時期後,就不再拿著球棒上場了。但投手自行打擊這件事對某些傳統棒球人來說,還是件非常吸引人的事。

看到小曹對打擊這麼有興趣。我倒是覺得中華職棒或許可以把「指定代打」制度作某程度的調整。像現在球隊只剩下四個,所以總冠軍的打法,又回到上下球季冠軍競賽的局面。既然賽制將一個完整的球季切成兩個,那我們乾脆區分開上下球季的競賽規則。在上半季中,所有比賽(包含因故延至下半季時間的場次)一律取消「DH」; 而在下半季中,則一律使用「DH」。這樣一來,到了總冠軍戰時,在上半季冠軍主場比賽時也不使用「DH」,而輪到下半季冠軍主場時,則恢復「DH」制度。

這樣的比賽是不是更有看頭! 光是想到陽建福要打嘟嘟的球,就讓我想要買票進場。

PS 為什麼是上半季取消「DH」,而不是下半季呢? 我的看法是:「要讓投手們在球季開打前好好地作跑壘及打擊的練習,讓「跑壘腳傷事件」比較不會發生。

2009年5月25日 星期一

把我的個人網站搬到 Google App Engine

自從上次運作 http://www.hoamon.info/ 的 Ubuntu 主機硬碟掛了後,就一直怗記著要把 Djange base 的個人網站改到 GAE 去。畢竟我還是比較相信 Google 的工程師在主機維護上的能力。

這個週未,終於花了點時間作移植。有點累。

與 Django 相比,到也不是比較難,而是 GAE 用了很多與原本 LAMP 不一樣的管理/程式概念。像是資料表方面,雖然 GAE 有提供 Data Viewer ,但這與傳統方式觀看資料表又不一樣,轉資料是我花最多時間的地方。

另外這一次比較重大的改變,則是我把原始資料格式從 html 改成 rST 了。如此一來,與我其他文件可以作更快速地轉換了,而這個 python-docutils 的函式庫與 GAE 相容問題也讓我花了不少時間。有機會,再向各位介紹了。我累了,要睡了。

2009年5月19日 星期二

2009年5月18日 星期一

Goog News: Mercurial support for Project Hosting on Google Code

from Mercurial support for Project Hosting on Google Code

...The primary reason was to support our large base of existing Subversion users that want to use a distributed version control system. For these users we felt that Mercurial had the lowest barrier to adoption because of its similar command set, great documentation (including a great online book), and excellent tools such as Tortoise Hg. Second, given that Google Code's infrastructure is built for HTTP-based services, we found that Mercurial had the best protocol and performance characteristics for HTTP support. For more information, see our analysis.
...


Yes! My next wish is "Mercurial library" can natively works on Google App Engine.

2009年5月16日 星期六

reStructured Text + CJK Latex: footnote 破壞文句階層問題

之前考博士班時,曾把自己的履歷用 Latex 寫出來。但是這太麻煩了。文章結構不難,但要多打很多我記不起來的標準語句,雖然可用 vim 樣版解決,但寫 latex 版的文章機會實在是太少了,除了履歷、期刊論文外,一些 blog 文章、計劃書、說明檔都是用類 wiki 的語法寫下來的。所以會少了很多時間記住 latex 語法。

最近開始寫報告及論文了,重新把 CJK Latex 安裝回我的 Ubuntu ,並回顧(複習)之前的 Latex 語法,覺得十分生疏。也就研究一下 Linux 上如何把 rST 格式轉 latex 的技術。還滿簡單的。我是結合 vim 來作轉換的動作。

但是在一個使用 footnote 的地方,無論我怎麼設定,它(rST)在轉 latex 時,就是會跑掉。

我的文句如下:
    在歷史的不透明性中,我們只能把垃圾資料送進模式(不一定正確)中,並得到垃圾預測 [#]_ 。

.. [#] 既然從歷史資料,我們無法歸納準則,從而避免錯誤,達到以古為鏡,可以知興替。
那麼整個歷史學科還有存在的必要性嗎? 這一點,是我這個歷史門外漢的疑點。

最後在第四部中,說明幾個如何面對「未來不可預測」的方法,
像是儘可能地嘗試,別擔心小失敗。

轉成 pdf 後,發現「最後在第四部中…」這一句也會變成 footnote 中的文句。

而如果使用:
    在歷史的不透明性中,我們只能把垃圾資料送進模式(不一定正確)中,並得到垃圾預測 [#]_ 。

.. [#] 既然從歷史資料,我們無法歸納準則,從而避免錯誤,達到以古為鏡,可以知興替。
那麼整個歷史學科還有存在的必要性嗎? 這一點,是我這個歷史門外漢的疑點。

最後在第四部中,說明幾個如何面對「未來不可預測」的方法,
像是儘可能地嘗試,別擔心小失敗。

則「最後在…」的文句其階層不同於「在歷史的不透…」。

最後,我終於找到解法了,就是把 footnote 解釋文句放置於該段落的最後段,如此一來,它就不會破壞文句階層了。其最後結果如下:
    在歷史的不透明性中,我們只能把垃圾資料送進模式(不一定正確)中,並得到垃圾預測 [#]_ 。

最後在第四部中,說明幾個如何面對「未來不可預測」的方法,
像是儘可能地嘗試,別擔心小失敗。

.. [#] 既然從歷史資料,我們無法歸納準則,從而避免錯誤,達到以古為鏡,可以知興替。
那麼整個歷史學科還有存在的必要性嗎? 這一點,是我這個歷史門外漢的疑點。


嗯~這個排版問題,我花了二個小時。可見我多麼要求排版品質

2009年5月13日 星期三

電機系學生要不要轉系?

林百里唱衰電機系 學弟妹早知道,這新聞有趣。

買賣過股票的人,大概聽過「景氣循環」這個概念,某些產業的利潤並不單靠技術的提昇而來,而是因為供需理論,簡單講就是有錢賺的時候,一堆人跳進來作,導致大家都沒錢賺; 沒錢賺的時候,因為一堆廠商倒閉,所以就有某些優質廠商又開始賺錢。

因為產業經營有好有壞,所以股民在買賣股票時,可以這個時間點買的是航運類股,過二個月後買的是金融股,再過四個月又回到鋼鐵,這資金不斷地流動造就了股票市場的熱鬧。買賣股票沒什麼沉沒成本產生,所以只要股民有賺到錢,他高興這樣輪動,沒有人會反對。

但是對學生來說,該讀什麼行業的書,就不能是這麼操作了。因為熱門才去唸這行業的書,然後等冷門的時候,再叫學生們跳到別的行業; 或者是反向操作,因為冷門才去唸這行業的書,然後在畢業時,這行業剛好會熱門起來(我就是這樣選擇土木的)。因為讀書的沉沒成本很高,除非你是經濟轉財金、社會轉社工、營建轉土木…,這些類型的科系同質性高,轉換就沒有成本。但如果像是物理轉歷史、經濟轉電機,那我想不多花個2~3年,你該如何追上其他同學呢!

所以唸書應該看的是「興趣」,惟有「興趣」的支持,你未來在漫長的生活(少則10年,多則40年)中才能同時忍受「時程及業績壓力」、「老闆莫明要求」、「小孩子幼稚的想法」以及「老婆的感性(非理性)述求」。

錢通常不是一項「長久性」激勵因素。

2009年5月12日 星期二

愈來愈離不開 PC home 了

今天下午在我們家附近的書局粗略看了「黑天鵝效應」一書後,覺得值得買下它。所以回到家就在博客來及金石堂上比了個價,最後決定在金石堂買下它,一本 373 元。

晚上,看到老婆在拆 PC home 寄來的口罩後,想想,或許它也有賣這本書,一查之後,我真是後悔呀! 一本才 355 元,而且 24 小時內到家。還好金石堂的書還沒調貨,趕緊取消它,換到 PC home 去。

PC home 真是棒呀!

個人運用指數化投資的一大缺點:流動性風險太高

今天我買了 500 股的美利達(9914),結果零股交易量是 603 股,我佔了八成三的交易量,而且收盤價在 47.3 ,但零股成交價卻在 48 元,這原因就出在我用 50 元的價格來買,拉高了 7 碼,天呀! 如果再少幾個人賣,會不會就撮合在 50 元呀,實在是太吃虧了。不曉得將來我要賣美利達時,會不會再遇到一次流動性問題。

「政治文」:民主中國

Guns N' Roses 08 專輯 Chinese Democracy (民主中國) 發表了。本來應該責無旁貸,給它買一張的,畢竟他們是讓我渡過青春期的一部份原因,但是就像 X-Japan 來台一樣,我也沒有積極地作些什麼。我想是對於青春期而言,我還保留著一份美好的回憶,但要我再回到青春期,那就免了。

人總是會變的,可能是因時間,可能是因對象,可能是因了解。

所以某天一位網友說我的政治傾向是「泛藍的」,我先是驚訝地懷疑我自己:「我的思想變了嗎?」 從高中以來,我不是一直支持台灣獨立的嗎? 難道現在不是了嗎? 想了想後,發現我的確是不一樣了,就統獨議題上,我的選項除了「民主台灣獨立」外,還有「民主中國統一民主台灣」的選項。

當我們選了一個居住台北多年的人來當台灣總統時,我們該擔心他會不照顧大台中地區的選民嗎? 同樣地,我們選了一個居住北京多年的人來當中國總統時,我們該擔心他會不照顧台灣的選民嗎?

重要的是「民主」,雖然我不喜歡民主(多數暴力),但卻找不出比它更好的政治制度,所以我能接受民主。

在台灣島上,原住民13族、閩、客、外籍、外省人們都可以和平共處,有什麼理由不相信和「民主中國人」會無法相處呢? 畢竟我們的官方語言還算是通的。

當然,要作到「民主中國統一民主台灣」前,首先,中國要先民主了,再來是台灣島上的二千三百萬人要表決通過。

但是要求中國得是民主國家前,我們自己的民主制度有作得好嗎? 看看這則新聞挺扁!!死忠扁迷留守板醫。莫明奇妙,載個紅口罩也有事。討論議事時,我們該對事不對人的,但就是有些人會動手,就是有些人會以「不是台灣人」作人身攻擊,我實在看不出這是我想要的民主。

從高中時,我就一直覺得台灣人的民主教育不夠,因為他們不懂自己要的是什麼; 但現在還是覺得台灣人的民主教育不夠,因為他們只在乎自己要的是什麼因為我贊成 Thinker 所提的「透過個人利益的最大化,以達到群體利益的最大化」,所以刪除的那句話要改成「過了 10 多年,現在大部份的台灣人仍舊是不懂自己"應該"要的是什麼!」

2009年5月10日 星期日

60% 的漲幅

我大二就開始有買賣股票的經驗了。但是我從沒有一檔股票能夠讓我賺到二成以上的報酬。原因是過去買賣股票我都是只單買一~二支,如果有賺,我無法忍到二成以上,我害怕這一波漲完,就是它下跌段的開始,甚至是像台鳳那樣,只炒作股票不專心經營公司導致公司下市。

但是使用了指數化投資的概念後,當我買了股票,只是把它擺著也不會去賣它,畢竟如果有一家公司下跌甚至下市,我都還能接受,因為我的籃子裡還有其他股票。

也就是這種投資概念,我的股票從 5000 點反彈至今,一張都沒賣。而目前讓我賺最多的,則是某些投信口中有疑慮的公司: 新光金。雖然這 60% 的漲幅不過讓我賺了幾千元,而且加總了其他股票的報酬率(有正有負),整體報酬率並不算高,但這卻是一種令人感到輕鬆的投資方式。

= 後記 =
現在是 100% 的漲幅了。

2009年5月7日 星期四

FOClass: 債券殖利率曲線計算

前篇文章中,我們已可算出零息債券的殖利率,但如果要套用在實務上的應用中,我們必須將觀察到的各點作一迴歸函式,讓我們可以找到各天期的殖利率。

閱讀更多…

2009年5月5日 星期二

FOClass: 零息債券殖利率計算

市場上,我們能觀察到的公債交易標的多半都是附息債券,而此附息債券因為有息票收入的關係,所以無法視為即期利率。在本文中,我們將利用存續期間(Macaulay duration)調整法來消除息票影響。

存續期限最先由 Macaulay(1938) 提出。依 Macaulay duration 之定義,存續期限相同的債券,不論 Coupon rate 為何,不論是附息或零息債券,皆視為有著相同「有效」到期期限 (effective maturities) 或「真正」到期期限(true term to maturities)之債券。

也可將存續期限視為回收本金時間。

閱讀更多…


2009年5月2日 星期六

使用 PGP 來建立人際信任網

當我們可以使用自己生成的 PGP 公私錀來作加解密及簽章驗證的工作後,事實上,我們還能將 PGP 運用得更淋離盡致: 我們把整個人際關係展現在我們的公錀上。

當你把公錀四處發放的時候,實際上,你正在宣告這個世界,這把公錀可以代表你的身份,用這把公錀所加密的訊息只有你才看得到。而只要相信了「這把公錀就是對應著你的身份」這個關係後,也代表「這把公錀」所驗證成功的某個訊息,必定是由「你」所發佈的。

以上,就是 PGP 信任網的基礎: 一把公錀代表一個人。

所以,如果有一個 A 用他的私錀 Sa,為另一個 B 的公錀 Pb 作簽章而得到 Pb'(這也就是為什麼一把公錀生成後,會有變動發生的原因),那麼我們可以透過 Pa 來作 Pb' 的驗證,驗證成功後,我們將了解到 A 這個人完全為 B 的新公錀 Pb' 負責,因為 Pb' 是 A 所簽章過的。也就是,我們可以合理地相信 A 這個人一定認識 B 這個人,而且他也同意 Pb' 是屬於 B 這個人的公錀

所以,本來我們可能只認識 A ,相信 Pa 是 A 的代表,但是透過 Sa 對 Pb' 的簽章,我們間接地相信 Pb' 是 B 的代表,就算原本我們根本不曉得 B 是何許人也,就算 B 也沒告知我們他的公錀編號,但我們可以透過 A 來相信 Pb' 代表 B 了。

簡單地講,你可以使用個人私錀為「認識(信任)的人的公錀」作簽章 *1,簽章後,別人就會知道你一定認識這些人。

註1: PGP 信任網中,所謂的信任並不指的是一般的信任,並不是說你簽章了某個人的公錀,就表示你相信這個人是「好人」,這裡的信任,指的是你「確認」該公錀的確是這個人所擁有的。

這麼作的好處是什麼? 如果你想要寫一封信給歐巴馬(想當然耳,你一定不認識他),又希望你的內容只有他看得見且連他的幕僚也無法事先閱讀,那麼你就可以先下載他的公錀,用他的公錀來加密。但在加密前,得先確認他的公錀有沒有經過你認識的人作過簽章,如果有,則表示這把公錀的確是歐巴馬所擁有。

有沒有可能你不直接認識歐巴馬,但卻透過你的朋友的朋友來認識到歐巴馬呢? 因為他的公錀被 A 簽章過,而 A 的公錀又被 B 簽章過,而 B 的公錀又被 U 簽章過,最後湊巧你認識 U 這個人。這真的是有可能的,請參考六度分離理論 *2。

註2: 六度分離理論告訴我們,地球上的任二個人,他們之間只被 6 個人隔離,也就是你必定能透過某人的朋友去認識某人的朋友再去認識某人的朋友再去認識某人的朋友再去認識某人的朋友去認識某人的朋友來認識地球上的任何一個人。

了解了 PGP 這麼偉大的信任網概念,那麼該如何實現呢? 很簡單,你只要為你所認識的人的公錀所簽章,那麼就能協助體現 PGP 信任網了。

一樣來到「金錀管理程式」的介面。(不知道如何叫出嗎? 請參考如何使用 PGP (Linux/Mac/Windows 皆適用)來加解密及簽章驗證)



選擇一把欲簽章的公錀並按下[簽章],然後再按下[Sign this key]並選擇使用那一把私錀來簽章。完成後,你就會看到該公錀下出現你金錀的資訊,這代表已簽章成功。



** 在為某些公錀簽章時,可能會出現失敗訊息,原因可能是 FireGPG 尚未支援該公錀的額外資訊簽章,如:相片資訊(是的! 公錀也可以放相片。要看別人公錀中的相片請打 gpg --list-options show-photos --list-keys {XXX})。

所以這時候,可以使用命令列來作,如下指令:


# gpg --sign-key {XXX}

並回答它所提出的問題即可。{XXX}代該公錀編號。
**

接下來把該簽章後的公錀匯出至伺服器,並告知該公錀的擁有者:「你已經確認了這把公錀就是代表他這個人,請他可以更新自己的公錀」。

那如果是別人簽章了你的公錀後,請務必記得:「如果你認識這個人且確認他的公錀是那一把的情況下,絕對要用你的私錀去簽章他的公錀,因為這是禮貌」。當然啦, PGP 並沒有強迫你一定要這麼作,但如果你這麼作了, PGP 信任網會更完備。

在簽章他人公錀時,請務必記得:「這個簽章不是恩惠,是一種信任,唯有你認識的人才作簽章。不認識的人請不要簽章。」

除了用自己的私錀去簽章他人公錀外,我建議各位也可以利用 PGP 信任網的概念,為自己的私錀買保險。

什麼是買保險? 之前我提過,如果私錀搞丟了,是不是之前別人用它對應公錀所加密的內文,你完全就看不到了。沒錯,的確是完全看不到了。但是逝者已矣,來者可追,你還是得繼續用 PGP 來過你未來的生活呀! 但是如果你原本的公錀已經有 200 個人為它作過簽章了,那麼你的新公錀難道要重新再去找這些人作一次簽章嗎? 是的,你必須再麻煩當初的 200 個人為你重新再簽章一次。但那些人如何確認你的新公錀的確可以代表你呢! 你勢必得再經歷 200 次由第三方管道(面對面確認、電話確認等非網路形式的確認)提供公錀編號讓對方知道你的新公錀的確代表你的動作,嘩! 這會累死人。

所以,我建議各位多生幾把金錀,並彼此互相簽章,如下圖:



amornose@gmail.com 這把金錀已被 hoamon@hoamon.info, hoamon@gmail.com ... 等金錀給簽章過了。所以如果我的主要使用金錀 HOamon@hoAmon.iNfo 不小心搞丟了,那麼我就用 AmOnroSe@Gmail.Com 的信箱寄信給那 200 個人,並告知我的公錀必須更換為 AmoNrosE@GmaiL.com 了,因為早在之前 amoONrose@gmail.com 已被 hoamon@hoamon.info 所確認過了,所以,那 200 個人可以很容易地相信我這個人已把 hoamon@hoamon.info 公錀更換成 amonrose@gmail.com 了。這就是買保險的意思。

最後,再提醒各位一次,私錀搞丟了,的確是很麻煩的一件事,請慎重保管呀!

「股酬交換」運用在具法規限制的市場中

這則新聞當中,激發我對於「利率交換」的額外應用,只不過在查了「碩博網」後,才發現這東西早有人在作研究了,那就是「股酬交換」。

近日,我國政府在研擬開放中資購買台灣股票,其主要原則在於不允許中資握有上市公司的經營權以及從中獲得技術能力,只允許中資在購買台灣股票後,能享有企業成長後的獲利。而次要原則是開放中資合法進入台灣後,不會造成匯率市場及股票市場的暴起暴落。

因此,我認為在此二原則下,積極建立「股酬交換」初級及次級市場可達到間接開放中資(或其他外資)購買台灣股票。因為股酬交換不需作名目本金的交換,這減少了熱錢的流進流出,另外,股酬交換不牽扯股票所有權的移轉,這有助保護上市公司的經營權,這樣完全滿足政府開放中資購買台股的原則,實在是一項非常好的金融商品呀!

那什麼是「股酬交換」,簡單地說(真的是很簡單喔!詳細請自行查閱 G 大師),「股酬交換合約」的內容主要是明定一名目本金、二個計價標準及多個計價時點的法律契約。合約的其中一方是以特定時期 LIBOR 利率為計價標準,另一方則是以某股票或某股票組合的價格為計價標準,在固定或不固定的計價時點上,分別計算雙方的得失,如果股票收益差價大於 LIBOR 利率收益則使用 LIBOR 利率的一方要付差價給對方,反之亦然。

例如:一個名目本金為 1 億、計價時點為 1 年並維持總共 10 期的合約,一方以 LIBOR 3% 利率為計價標準,一方以 1 億可買下 50 元台積電股數為標準。若在第一期計價時點上,台積電股息+股票差價總共多了 250 萬,則此收益減去 300 萬(1 億*0.03),則表示在第一期時間點上,使用 LIBOR 3% 為計價標準的一方可收到另一方的 50 萬元。

所以在使用「股酬交換」合約後,匯率市場不會有 2060 萬人民幣(約 1 億新台幣)的匯入匯出,只會有 10萬3 人民幣(約 50 萬元新台幣)的匯入,這大幅減少匯率的波動; 也因為中資買的不過是一個交換合約,所以台積電的股權依舊是掌握在某個台灣券商的手上。

這實在是個好東西呀!

如何使用 PGP (Linux/Mac/Windows 皆適用)來加解密及簽章驗證

最簡單的方式就是安裝 GnuPG, Firefox, FireGPG但為什麼要用 PGP 呢?

GnuPG: 是作業系統上的應用程式,其功能是以 PGP 公私錀作文章或檔案的加解密及簽章之用。其操作介面為命令列模式。
FireGPG: 是 Firefox 的外掛套件,它的功能是提供操作 GnuPG 程式的圖形介面。
Firefox: 不用說了吧! 現在還有人不知道 Firefox 是幹什麼的嗎?

上面程式都安裝好後,請打開 Firefox > 工具列 > 工具 > FireGPG > 金錀管理程式,如下圖:



我已經有一些金錀(有些是公錀,有些是私錀,但一律顯示公錀編號)了,綠色框是名稱及註釋、黑色框是 email 、黃色框是金錀編號、紅色框是信任程度。

如果是自己產生的金錀,則同時擁有公私錀,如果是別人給的金錀,則只有公錀。我們都是拿公錀來加密,然後用私錀來解密的,或是用私錀來簽章,再用公錀來驗證。

如果你還沒有金錀,請按下[New Key],然後填寫
  1. Name(最好是別人認得出你的名字)
  2. Email(必須吻合你使用的email,否則使用你公錀的人會誤會這把公錀的真實使用者是誰?)
  3. 註釋(可簡單說明你是誰)
  4. 密碼(這是用來鎖住私錀的,以防止你的私錀不小心落入別人手上,如果沒有這個密碼,別人也無法拿這把私錀來作解密的動作。同樣地,如果你忘了這個密碼,那麼你的公錀也就無用,且過去別人用該公錀加密的內容,你也解不開了,請慎重。)
  5. 建議點選金錀永遠不失效(Never Expire)。
再來就是按下[產生金錀]了。請耐心等候一段時間。並在此時胡亂開啟你的程式,亂打一些指令或文句,讓這把金錀不致於與別人的金錀重複。

成功產生後,要測試加解密的功能,可打開 Firefox > 工具列 > 工具 > FireGPG > 文字編輯器。

請在文字編輯器中,鍵入文句,完成後請點選加密,此時會詢問你用那把公錀,可以 Ctrl 鍵作複選,完成後,該文句就會變成一堆奇怪的亂碼,此亂碼只有你當初選定的那些公錀所對應的私錀才能作解密的動作。

再按下解密鈕, FireGPG 即會找尋該密文所對應的私錀作解密,如果你的私錀當初有設定密碼,此時,會先詢問你密碼為何! 正確鍵入後,它即為你解密。

接下來,測試作簽章及驗證,一樣打開 Firefox > 工具列 > 工具 > FireGPG > 文字編輯器。

請在文字編輯器中,鍵入文句,完成後請點選簽章,此時會詢問你用那把私錀(只能選定一把),完成後,該文句後面會出現一段奇怪的驗證碼,此驗證碼只有你當初選定私錀所對應的公錀才能作驗證的動作。

再按下驗證鈕, FireGPG 即會找尋該驗證碼所對應的公錀作驗證,驗證成功後,會顯示私錀的公開資訊(名稱、註釋、email、公錀編號)及簽章時間。

上面的工作都可正確使用後,接下來,就是把公錀傳給其他人。有二種方式,一種是[匯出至檔案],一種是[匯出至伺服器]。

匯出至檔案後,你可以透過第三方管道(像是隨身碟、email、放在blog 上)把公錀傳遞給其他人,這樣別人在收到公錀後檢查它的 fingerprint 或是公錀編號是否與你真實公錀相同,相同時就可確定這把公錀的確是你所屬的。但此法的缺點是不容易更新公錀內容(什麼,公錀不是一開始產生後,就一直用下去嗎? 為什麼會有變動。欲知詳請,請待下篇分解)。

另一種方式[匯出至伺服器],則是把公錀上傳至某一伺服器( FireGPG 的預設值是 subkeys.pgp.net ),然後跟其他人告知你的公錀編號及 fingerprint ,讓其他人到 subkeys.pgp.net 去下載。此法在使用上比較便利,省去了自行傳檔的功夫,一律要求其他人到公錀伺服器上抓取。

當你把公錀上傳至伺服器後,你就要廣為宣傳你的公錀編號、email,慎重一點的,還可以註明 fingerprint 。像我的處理方式就是放在 http://hoamon.blogspot.com/http://www.hoamon.info/#AboutMe 中,以及我在實體名片及信件簽名檔上都放了公錀編號、 email 及 fingerprint 。方便其他人比對公錀的真實性。但請注意一點,如果你是用網路形式來比對公錀編號的話,它會有一定程度的不可信,因為你不知道你的閘道器管理員有沒有動過手腳,最好的確認方式是與公錀主人面對面比對 *1,再次之是電話比對(已經有風險了),其他方法的風險就更高了。

註1: 如果你看過天龍特攻隊的話,或許你就會知道「面對面比對」也是有風險的,因為你不知道對方是不是「小白」。

當大家都擁有你的公錀時,就能寄送加密文本給你,如此一來,絕對可以保證,發文者與收文者之間沒有人可以破解此一加密文本。

不過,以上兩種匯出方法,所匯出的都只是公錀,如果想要匯出私錀來作備份的話,就必須打指令了,記得公錀不用作備份,它是可以從私錀中產生的。但其實也非常簡單,指令如下(Windows 用戶請到你的 GnuPG 安裝位置中打該指令):

# gpg -a --export-secret-keys {XXX} > private_key.txt

{XXX} 可以是 email 位置,也可以是公錀編號。匯出後,私錀內容就存在 private_key.txt 中。請慎重保管此檔。

又如果你想要把某個檔案作加密,也是得使用命令列來達到,如下(可用多把公錀加密):

# gpg -r {XXX} -r {YYY} -e {some_filename_you_want_to_encrypt}

解密則直接下

# gpg -d {some_fileame} > new_filename

千萬不要相信任何一個網頁系統(包含 Google),除非你用了公私錀(如 PGP)加密

當我們在作業系統(尤其是 Linux)中使用 Open Source 軟體時,我們有一定的信心認為程式作者不會呼隆我們。因為只要有心,我們看得到程式碼。

但對於任何一個網頁系統而言,基本上,你必須將它們都視為壞人,它們絕對拿得到你所上傳的資料,包含密碼 *1。就算它標榜著 Open Source 出品,也不能保證它放置網頁伺服器上的程式碼與 Open Source 版本是一模一樣的。

事實上,在使用網頁系統時,請保持著一種信念:「若要人不知,除非己莫為」。放到網站上的資料,除了你,別人(閘道器管理員、系統管理員、程式設計師甚至是客服小妹)絕對有辦法打開看,除非你使用公錀加密內文。這一點,就連 Google 網站也不例外。

所以,當我看到無名網站上提供一種「密碼保護文章/相簿」的功能時,我覺得很好笑,看看它在 html form 上所設計的方式,完全是以明碼形式將密碼傳至沒有 https 的網址,這樣何謂「密碼保護」! 無名站上工程師絕對有能力看得到你所保護的內文以及密碼。甚至有可能那些性愛相簿外流的原因中,有部份就是離職員工搞的鬼,但是誰知道呢? 當你用明文形式傳遞密碼時,理論上,它就不叫「密碼」了,當你用明文形式上傳文章或相片時,它們也不會是「有保護」的。

要真正上傳儲存「有保護」的內容,以目前技術來說,最簡單的就是 PGP 加密了。像是下面的密文,你看得出我寫的是什麼了嗎? 雖然,我大方地 po 在 blogger 上,但沒有私錀的人就是看不到。

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Use GnuPG with Firefox : http://getfiregpg.org (Version: 0.7.5)

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
ZvAf4PfWSCxGoarWUY+BGaGXCNUNifob+g==
=8e3M
-----END PGP MESSAGE-----

上面的密文,我用了三把公錀作加密,理論上,只有我、我老婆及 django-pgpauth 的私錀能解開。如果各位有興趣的話,我把 django-pgpauth 的私錀(我並未設定密碼)就放在 comment 中,請自取用。

如果你真的覺得要放在網站上的資料是需要隱私的,請不要相信該站所提供的密碼保護功能,用自己的比較安心。

至於如何使用 PGP (Linux/Mac/Windows 皆適用)來加解密及簽章驗證,請參考此篇

註1: 除非它們在認證網頁上,先用 One-Way Function(如: md5, sha-1) 先將明文密碼轉換過。
Related Posts Plugin for WordPress, Blogger...