星球

Blog:hoamon's sandbox

沙箱是版本控制器的術語。
最後更新: 2013/9/29 19:18:00
RSS | RDF | ATOM

使用「公認機構簽核公錀」所發生的不知名問題

2013/9/29 19:18:00 | hoamon's sandbox
How to get a free HTTPS web certification authority by StartSSL.com 一文中,我申請了 A.hoamon.info 的公錀簽核,也正確地跑在 https 上,在使用瀏覽器觀看時,完全沒有問題。然而在 hg 軟體上,卻會發生 SSL: Server certificate verify failed. 的錯誤訊息,從 Mercurial on Windows vs Linux, spot the problem 一文中,作者解釋是 Windows 的 ssl 版本太舊的原因,但照他的解決方案處理,我的 hg 軟體卻是報 URLError. 錯誤。

後來在檢查 apache.conf 時發現,這台機器有三個 https 站台,一個是用 A.hoamn.info 的公錀,另外兩個 B, C 站台卻都是用 whatever.hoamon.info 的公錀。而 B, C 站台的設定檔寫得比 A.hoamon.info 站台還前面。所以試著調動 A.hoamon.info 到 B, C 站台設定的前面,結果 hg 軟體就正常了。

問題是解決了,但我反而混亂了。印象中, https 協定中,公錀是在 IP 層(或表現層,我不確定)就發送至使用者的瀏覽器,既然沒到應用層,則網頁伺服器就不知道該拿那一個虛擬站台的公錀給使用者,於是它總是拿第一個看到的公錀(也就是寫在最前面的),所以這篇教學文章,才會寫到:「…一個 Apache ,也只能架一個 SSL 站,用一個站名。除非妳跑很多份 Apache ,各自跑在不 同的 IP 或不同的 TCP 埠上,才能在同一臺伺服 器上,跑好幾個 SSL 站。」

實際上,在 Windows XP 的 IE, Safari 上觀看 A, B, C 三個站台,也的確都是拿到 A.hoamon.info 的公錀。但在 Chrome, Firefox 上,卻是看到 A 用 A.hoamon.info ,但 B, C 用的是 whatever.hoamon.info 的公錀。

這我頭大了,為什麼跟基本原理不一樣??? 還是因為某些瀏覽器有「重拿公錀的機制」存在???

How to get a free HTTPS web certification authority by StartSSL.com

2012/11/2 22:52:00 | hoamon's sandbox
一般在上網時,所用的 Http 協定是明碼的,使用者與網站伺服器之間的任何網路結點(閘道器)都有方法可以看到網路連線所傳遞的訊息,所以如果網站所提供的服務關係到機密(隱私)資料時,我都會讓網站用 Https 加密協定服務。

使用 Https 服務時,有一個重要觀念: 如何拒絕「中間人攻擊」。

假想一個以 Https 加密協定服務的 A 網站,在它與使用者傳遞公錀(加密憑證)時,是被一個中間人接走,而中間人再把它自己的公錀傳遞給使用者,結果使用者傻傻地使用中間人的公錀加密,再把加密資訊傳到中間人,而中間人用自己的私錀解密後,再用 A 網站公錀加密傳回 A 網站,在這個模式,雖然使用的是 Https 協定,但資料還是被中間人看光光了。

所以要防止此類攻擊,就必須讓使用者能「確認」公錀真的是 A 網站的。方法是使用者自己手頭上要有一些公認機構所發行的公錀憑證(一般的瀏覽器都已經包入),然後在拿到 A 網站的公錀憑證時,用手頭上已有的公認機構公錀憑證去驗證這個 A 網站的公錀憑證是否被這些公認機構簽核過,如果有,則表示公錀的確就是 A 網站的,當使用者用這把公錀加密時,就只能被 A 網站解密。

本篇文章的目的是站在 A 網站的立場上,如何將 A 網站的公錀交給公認機構作簽核,這樣使用者在瀏覽 A 網站時,才不會跳出一個警示視窗告知使用者:「 A 網站有安全疑慮」。

一般將公錀交給公認機構去作簽核是要花錢的,像是國內最大的簽證公司(我猜的)網際威信最便宜的簽核年費是 18000 元。這筆費用不是每個人願意負擔的,像是我的 https 網站,主要是提供我們團隊作專案管理之用,也就不到 10 位的使用者,要我花 18000 元,去買一個「讓使用者在一年之內不會看到該網站有安全疑慮」的警告訊息,這我可花不下手。

所幸,有公認機構了解這種需求,它以「給非商業網站一年免費」作廣告宣傳,如果有更高級的簽核需求,它才額外收費。那麼以我上述所要的,其實就拿那個「一年免費」用用即可。

首先請使用 Firefox (它們目前不支援 Chrome)去瀏覽 http://www.startssl.com/ ,並點選右上角的錀匙圖示,如下圖:


就能看到 Sign-up 按鈕,如下圖:



按下 Sign-up 按鈕就開始註冊帳戶的流程,整個公錀簽核的程序分成三個階段:
  1. 註冊帳戶
  2. 驗證網址
  3. 公錀簽核
1. 註冊帳戶時, startssl 會給你的瀏覽器一個全新的公私錀檔,這個公私錀檔是專供你的帳戶使用的,這個公私錀檔要好好保管,搞丟了,你就不能再用這個帳戶申請簽核的動作,因為它的登入不是用帳號密碼作登入機制,而是用公私錀作登入機制。

2. 驗證網址,你必須證明要作簽核的網址是你所管理的。而這個驗證動作完成後,你也只有 30 天的期限去作簽核它的公錀,過期後,就必須再次驗證網址。

3. 針對已驗證過的網址,你可以申請簽核公錀的動作,主要分兩種作法,一是 startssl 完全生出一把全新的公私錀憑證; 二是我們自己生出私錀及公錀請求檔,再把公錀請求檔交給 startssl 去作出已簽核的公錀。本文是介紹第二種方法,因為私錀應該是自己處理會比較妥當,不要懶惰到連解密錀匙也委託他人製造,我個人認為這種人不只懶還不負責任。

原則上,公錀不過是一個文字檔,所以它在 Linux, Window$, Mac 作業系統下,都能處理,但我個人還是喜歡用 Linux 來作這件事

1. 註冊帳戶:


請填寫你的詳細資料,原則上,他們只採 web 審核,所以只要你的資料不要「太假」,他們都會通過。但如果你要為商業網站申請憑證的話,這就不能開玩笑了,因為你買憑證時,它會要你給護照及身份證、駕照的文件作審核。


請到註冊信箱接受具驗證碼的信。並注意「目前的這個視窗」是不允許關閉的,如果你關閉當下這個網頁,再用相同連結回來,這樣你填寫的驗證碼就算是對的,它也不會通過你的申請。


產生「帳戶」專用的公私錀檔,可選擇 Hign Grade 。


將公私錀檔安裝至瀏覽器上,這裡的公私錀檔是指你的帳戶與 startssl 網站溝通時,所用的公私錀檔,而不是你的網站要用的公錀。


建議你備份這份公私錀檔。


完成後,可見到帳戶頁面。

2. 驗證網址:


我是選擇 Domain Name Validation 方式。


填入網址。


startssl 會從 whois 資料中抓出管理員信箱,所以你必須確認該網址的 whois 內容是正確的。


請到信箱收取驗證碼。並填入上面的 Verification Code 中。


成功後,你只有 30 天的時間,去簽核該網站的公錀檔。

3. 簽核公錀:


公錀可以有很多種用途( Email/XMPP/Object Code ),但目前我只需要 Web 的,所以選擇 Web Server SSL/TLS certificate 。


要使用自己獨立生成的私錀來作簽核公錀的動作,請選擇 Skip 。

欲生成長度為 4096 bits 的私錀檔並使用 des3 格式作私錀加密(密碼長度要大於 4 個字元),請使用如下指令:

# openssl genrsa -des3 -out exmple.com.key 4096
Generating RSA private key, 4096 bit long modulus
................................................................................................................................................................++
...............................................++
e is 65537 (0x10001)
Enter pass phrase for exmple.com.key:
Verifying - Enter pass phrase for exmple.com.key:

從新增的私錀中,產生一個憑證請求檔,並在請求檔中,寫入「目標網址」(也就是你剛驗證過的那個網址)的所屬資料,如:所在地、單位名稱、負責人信箱等:

# openssl req -new -key exmple.com.key -out exmple.com.csr
Enter pass phrase for exmple.com.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:{{TW}}
State or Province Name (full name) [Some-State]:{{Taichung}}
Locality Name (eg, city) []:{{Taichung}}
Organization Name (eg, company) [Internet Widgits Pty Ltd]:{{EXAMPLE-Company}}
Organizational Unit Name (eg, section) []:{{EXAMPLE-Company}}
Common Name (eg, YOUR name) []:{{EXAMPLE Company}}
Email Address []:{{master@exmple.com}}

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

兩個 {{ }} 所包住的部份,請自己修改成正確資料。


在 Linux 完成 CSR 檔的製作後,你會得到 example.com.csr 檔案,請將檔案內容貼入上圖的文字框中。


CSR檔如無誤,它會出現上圖的訊息。


它要你選擇要生成簽核公錀的頂層網域。


請填入你所提供 https 服務的網址名稱。


確認要簽核公錀的網址。 startssl 簽核的公錀,預設會給你的目標網域及它的頂層網址兩個。如果你要簽核公錀的網址希望是 *.example.com ,也就是除頂層網域外,把它的下層網域一網打盡,也是可以,只要二年付 USD 49.9 即可,大約 1500 元的新台幣,而且這是 wild cards 網址,網際威信可沒這麼好康,一個就要 18000 元、二個就是要 36000 元。這時,我又感到「全球化」的愉悅。


接下來,請把文字框中的文字貼到 example.com.crt 中,這個內容即已被簽核過的公錀檔。另外,請順便下載上圖中的 intermediate 及 root 兩個 CA 檔案。


整個工作完成了。

然後在 Apache 設定檔中設定如下:
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/apache2/example.com.crt
SSLCertificateKeyFile /etc/apache2/example.com.key
SSLCertificateChainFile /etc/apache2/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ca.pem
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
重新啟動 Apache 時,它會問你私錀密碼為何? 這個動作在管理員面前發生是沒有問題的,但在系統自動重開機時,會造成困惱,所以我們可移除私錀的加密,指令如下:

# openssl rsa -in exmple.com.key -out exmple.com.key.no_password

exmple.com.key.no_password 這個私錀檔就是沒加密的,將它寫入 apache 設定檔即可。

「黑天鵝效應」讀書心得

2012/9/18 21:05:00 | hoamon's sandbox
書籍請見博客來

簡短摘錄書籍內容

書籍內容分成四部。
  • 第一部從知識論角度來說明人類思想的盲點。
  • 第二部舉證了「預測」本身的荒繆。
  • 第三部針對有數學、科學背景的讀者所準備,提供區分真正的不確定性方法。
  • 第四部簡短分享作者個人面對黑天鵝事件的態度。
作者在前三部所作的陳述,也就是針對歷史的不透明性可從三個面向來解釋:

理解力的幻覺:面對複雜的世界,人類心智卻自以為可以掌握全局。

分析我們是如何思考的,如何因為錯誤的思考方式,讓我們以為「預測」有效。
作者舉了「火雞問題」、「確認偏誤」、「敘事謬誤」、「沉默證據」、 「戲局謬誤」幾個主題來說明人的思考模式不是正確的。

火雞問題

一隻被餵養了 1000 天的火雞在第 1001 天時,必定保持與第 999 天時的信念一般 --- 必定有一善良生物提供牠當天所需的食物,讓牠無憂無慮地再過一天。 然而事實是該善良生物會在第 1001 天將牠變成某人的盤中美食。
從時間序列資料歸納事物發展的模式,並從此模式推導未來的情況是不合理的。 「現在事件」所需的發生條件並不等於「未來事件」所需的發生條件。簡單地講, 我們都知道地震對股市的影響是非常強烈的,且往往是負向影響, 若一高傷害性的地震在 2009 年 1 月 1 日上午 5 點發生, 那麼利用 2008 年 12 月 31 日前所歸納的預測模型可應用在 2009 年 1 月 1 日上嗎? 絕對不行。我們就是無法預測突發事件,像是地震、 SARS、次級房貸…等及其他根本講不出名字的意外。

確認偏誤

一命題在通過百億次驗證後為真,也不表示該命題的確為真; 但該命題卻可以在一次驗證為假後,確認命題為假。
「知道它是錯的」絕對是對的,而「知道它是對的」還是有可能為錯。

敘事謬誤

講故事讓人們得以將真實世界的 4D 模型轉成一個 1D 線性的歷史故事,這有助約化爆炸資訊。
通常一般人認為刪減掉的資訊不過是雜訊而已,但作者認為有些雜訊其實就是隻黑天鵝。

沉默證據

有一種非常老套的騙術,首先是收集電子信箱,愈多愈好,假設收集了 10000 個信箱, 其中一半的信箱,寄給他們的訊息內容是洋基將在5月10日的比賽中打敗紅襪, 另一半則寄給他們紅襪會擊敗洋基,等到比賽結束後,留下預測對的 5000 個信箱, 其中 2500 個人再寄給他們洋基會在5月11日擊敗紅襪,而另一半則寄給他們紅襪打敗洋基。 就這麼經過5個回合後,將有 10000除以32 約 312 個人是一直收到預測準確的信件,這時候, 再寄給他們:「預知下回比賽結果,請先支付一定金額」。如此一來,不管有多少人相信這個騙術, 對寄信人而言,所支付的金額都是純益,因為他根本沒花錢在作賽事預測,是個無本生意。
那曾收到錯誤預測信的 9688 人,每個人都是沉默證據。但對於另外的 312 人來說,他們得不到這種資訊。
這沉默證據的出現也呼應了作者在一開始所說的,沒看過的書比較重要。
事實上,沉默證據到處都有,只是需要花些精神才能發現。我們拿主動型股票投資基金來說, 每年財經雜誌一定會統計過去一年的基金投資績效並排序,而我們常常可以發現這些基金的排名每年都不一樣, 絕少有同一支基金能長時間(十年以上)排在前頭,而那些績效不如大盤的基金對投資人而言,就是一種沉默證據, 它告訴我們,主動投資並不一定有比較好的投資績效。而基金排名只是一種大風吹的遊戲, 所有人都可以坐過第一名,也有機會坐在最後一名,所有股票型主動基金的整體績效約等於大盤績效。

戲局謬誤

在我們學過的數學、企圖解決問題的模型中,必定在假設及邊界條件上簡化了真實世界的複雜度, 因為只有在簡化模型中,我們才能求解答案。
作者希望我們這些書呆子,在應用模型上,不要以為解值可以百分百套用到真實世界中。 要在心中保留一個想法:「這個解答是理想模型中求解的」。

回顧性扭曲:問題總在事後才被檢討。

「預測」根本不準,就算錯了,總可以找到個理由證明。 而通常的藉口就是:「原模型在考慮黑天鵝事件後就能符合未來」。
作者從幾個實證方法來說明「預測」沒有用。

知識傲慢

學得愈多,反而對於未知事物的預測就愈不準確。

意外對計劃的單邊效應

大部份的意外造成計劃成本增加、進度變慢或是品質下降,絕少有意外是幫助降低成本、減少工期及提昇品質。
這原因通常是我們這些書呆子在套模型時,會將無法估量的因子去除,而這些因子多半是對計劃有害的。

預測錯誤的特性

每發生錯誤預測後,真值會離預測值更遠。譬如:一個計劃預期需要七十九天完成,到了第七十九天, 如果計劃尚未完成,那麼預期還需要二十五天才行。但到了第九十天,如果計劃尚未完成, 那就還需要五十八天才能完成。到了第一百天,預期還要八十九天才能完成。 到了第一百一十九天,預期還要一百四十九天才能完成。到了第九百天,如果該計劃還是沒有完工, 你將預期多花一千五百九十天。當你等得越久,你預期要再等待的時間就越長。

不經意的發現

今日大多數人對世界影響巨大的發明認定是電腦、網際網路及雷射。而這三項發明都是不經意的。
因為有太多有用的工具、產品是在意外中誕生的,所以在策略管理理論中,有人堅持一種 r 策略的經營模式, 它的意義是透過對生物系統的學習,將其繁殖後代的策略應用在企業管理中。 以一種「機會主義」式的繁殖策略,採取「多產」的方式,亦即,在有限能量和物質的限制下, 對每一個繁殖後代,只能做很少的能量和物質投資【策略九說,2000】。相對於 K 策略,是將能量與物質其中投資在一個後代上, 容易在波動高、意外多的環境下失敗, r 策略提供了生存在「規模可變性世界」的能力。

三體問題

在太陽系中,如果只有二顆行星,則無論它們的起始位置為何,我們都可以計算出它們在未來某時點的絕對位置, 然而再增加一顆行星後,此行星的初始位置將嚴重地影響它們未來的位置,原因是「不可積性」。 這也證明了機械論的謬誤。
在第二部的最後一章,作者提供了幾個面對黑天鵝事件的技巧:
  1. 分清楚你從事的工作受正面黑天鵝事件還是負向黑天鵝事件的影響。
  2. 不要尋找明確而狹隘的東西。
  3. 抓住任何機會,或任何看起來像機會的東西。
  4. 要小心政府的明確計劃。
  5. 別浪費時間和預測者對抗。

被「柏拉圖化」:事件被權威、飽學之士歸納、簡化了。

真正的不確定性與機率分配的差別: 一個可以計算,一個只能承受。
作者在這個部份大肆批評 Black-Scholes-Merton 方程式,認為他們不過是讓大家能接受這個公式而已, 發明這個公式的人應是 Louis Bachelier 和 Edward O. Thorp,且原創公式並未要求使用高斯模式。 同時他也批評馬可維茲的現代投資組合理論、夏普的 CAPM 是以高斯模式為基礎。
但就這部份以我目前所學尚無法確認究竟誰是正確的。或者是說,在把高斯模式換成冪法則、 碎形機率等更符合現況的機率分配,那麼就皆大歡喜了,我們在學術上的任務不就是把前人研究的缺點加以改進嗎!
這三個面向,也依序擴展成第一部(理解力的幻覺)、第二部(回顧性扭曲)、 第三部(被柏拉圖化)的內文。
作者強調在歷史的不透明性中,我們只能把垃圾資料送進不一定正確的模式中,並得到垃圾預測 [1]
[1]既然從歷史資料,我們無法歸納準則,從而避免錯誤,達到以古為鏡,可以知興替。那麼整個歷史學科還有存在的必要性嗎? 這一點,是我這個歷史門外漢的疑點。
最後在第四部中,說明幾個如何面對「未來不可預測」的方法, 像是儘可能地嘗試,別擔心小失敗。

結論

「預測未來」這件事到底存不存在?
  1. 存在! 則社會依舊照它原本的規則繼續運作,有些人命中結果賺大錢、有些人猜錯下地獄。
  2. 不存在! 那糟了,我們該如何生活? 對「明天太陽依然昇起」這件事沒了信心,那麼我們還須應付下個月的信用卡帳單嗎? 既然如此,工作、讀書、生小孩也就不重要了!
作者說明了黑天鵝事件總會發生,且大幅地改變原來我們對未來的期待, 黑天鵝事件總讓我們預測錯誤 --- 不過這沒有關係。
原本我們處在「預測有效」的世界中,我們總是在錯誤地預測, 而事後,我們依舊正常地生活,有時候會塘塞個錯誤理由,甚或遺忘了當初預測的結果, 在未來事件真的到來時,天真地認為這結果就是我們想要的。
相不相信「無法預測未來」這命題對社會運作不會有影響。該來的總會來,不該來的你也等不到。 唯一的差別是我們的心智能否接受這個事實,接受「無法預測未來」這個事實, 能讓我們把資源配置在「準備」而不是「預測」,這更有效地減緩壞黑天鵝事件(巨大的風險)所造成的損失, 或是面對好黑天鵝事件(巨大的報酬)。不會把頭埋在沙中, 堅決宣誓這個世界是由黑暗及二氧化矽所組成的烏托邦。
目前的現實世界,大部份人都相信事物具備可預測性且預測結果的正確性與歸納準則(計算模式)的吻合度呈正相關。 就此概念,作者花了 400 多頁的內容為我們否證「未來的可預測性」、 駁斥柏拉圖模式不能應付真實世界、 分析黑天鵝事件(真正的不確定性事件)與可預測的機率事件之間的差別。 這部份有點冗長,但從作者整理的資訊看來,有些研究早就成功驗證, 只是待由他來整理、分享與我們而已。
在如何面對「黑天鵝事件」上,他不過以 5 頁蓼蓼帶過,這點令人有點失望。 我在閱讀本書約一半內容時,已完全相信他所提及「未來的不可預測性」, 並急著想要跳過這些更詳細的證明以得知作者避開負向黑天鵝事件及擁抱正向黑天鵝事件的方法。 最後的這 5 頁,除了讓人有著無法痛快的感覺, 卻也間接證明了「未來不可預測性」的確是無法掌握,沒有單一方法、特定手段可以避開/迎向它, 我們所能作的就是在心裡放置著一隻黑天鵝,不讓牠跑出柏拉圖圈。
如果這本書說對了,那麼現在對於那些整日與「預測」有關的工作怎麼辦? 像是證券分析師、市場分析人員、 專案可行性評估人員…。

證券分析師

股價不能預測、公司經理人良心不能預測、政府法規不能預測…,那我們幹麼要買股票! 因為我們必須利用股債組合打敗通貨臌脹率來維持我們的實質購買力。
證券分析師的工作目標是要讓投資人能獲得超額報酬。但是在效率市場的假設下,長期而言, 投資人只能獲得股市的平均報酬。就算是某些分析師真能神準預測股票的漲跌,但看看「沉默證據」後, 你會發現你挑不到那個神準分析師。
這些精研產業、公司的分析師,我是認為他們的存在只是在證明投資人不是理性之人。 如果可以,不應該找證券分析師的工作,因為當投資人變成理性之人後,買的會是指數型基金。 這時,分析師的話就沒人要聽了。因為有大量的證據顯示, 專業投資經理不能打敗購買和持用廣泛股票的指數基金【漫步華爾街,2004】。

市場分析人員、專案可行性評估人員

在產品開發或是專案推動上,不可避免地要作市場調查,或是可行性評估。在這些研究中, 必面臨到某些變數的預測:利率、需求量、物價成本、人力成本、可使用資源量…。那麼在不可預測下, 難道我們就要放棄作調查嗎? 那麼專案是否執行? 就只能靠丟銅板決定,我想老闆們絕對不會接受這種說法。
我認為如果擔任到這方面的職務,就只能硬著頭皮,照著傳統上、其他人大量使用的方法論去作預估。 要不然,生不出企劃書,到時候,銀行也不可能給專案貸款,或是工廠根本無法向上游供應廠商叫料, 這只會增加企業經營成本。
雖然不得已進行預測,但請在心中保留著一份對「企劃書」的質疑,它可是在柏拉圖圈內的成品。
因為意外總會打亂計劃,所以我認為作任何事應該以「存在」為最高目標。凡事不要過份強求, 不要認為作對一件事,整個人生就高枕無憂,如同 r 策略一般,儘量掌握每個小機會。
我們以公司經營績效來看,為了賺取高額利潤,勢必要忍受高額風險,像在產品研發上, 如果要它能賺大錢,勢必研發費用會提高,在面臨幾次研發失敗後,公司資本撐不過虧損, 那就只能關廠走人。
像只作光碟片的 2396 精碟過去也有 359 元的行情,如今不到 1 元。 而產品線豐富的 GE 卻已經存活了 133 年了。另外像台積電目前也打算轉型作太陽能相關產業, 這也說明了單靠一種產品,有可能獲利豐厚,但在趨勢轉變下,該單一產品就會變成最大負擔了。
最後,這本書給我的最大收獲,就是別浪費時間了, 停止「預測」這檔事吧! 直接找尋避險管道,或是配置可消減個別風險的事件組合, 像是買進股票並在高檔買進賣權、購買終身夀險及保持適度運動維持健康。

參考書目

  1. Nassim Nicholas Taleb,2008.05,黑天鵝效應,大塊文化。
  2. 吳思華,2000,策略九說,臉譜出版。
  3. Burton G. Malkiel,2004.05,漫步華爾街,天下文化。
備註:這是本學期「期貨與選擇權」的期末讀書心得報告,原本是用 rst 格式寫成的,交報告時是在 Ubuntu 中用 rst2latex -> latex -> dvipdfmx 轉成 pdf 檔; 而貼到 blog 上,則是用 rst2html 即可。十分方便。原始 rst 格式,請點選這裡下載; pdf 格式請點選這裡下載。

Tomcat6 + JSP + JNDI + Oracle 設定

2012/4/29 18:43:00 | hoamon's sandbox
朋友公司最近想要接個案子:『在 AWS 上面架一個 JSP 網站,而且指定資料庫須用 Oracle DB 』。

用 Oracle DB 不是難事,拿信用卡註冊進去就有了,跑一個小時最低收你 0.17 美金(約臺幣 6 元),很多人都付得起。麻煩的是朋友及我都不是熟 JAVA 及 Oracle 的人。因為我們愛用 Open Source (奇怪 JAVA 明明就是 Open Source 呀! 怎麼我直覺不是呢???)。

為此,我找了高中同學 K ,他可是名門正派(資工背景)出身,從 C , Delphi , VisualBasic , JAVA , .Net 一路走來的程式設計師。而且他幫客戶開發時,多半是採用 Oracle 或是 SQL Server 的資料庫。於是一拍即合。

那我要幹麼呢? 也不是作個牽溝仔怎麼簡單的工作就結束了。 K 只熟 Windows ,而那個 AWS EC2 是要跑 Linux 的。所以我的工作就是搞定 Linux 上的 Http 伺服器( Apache or Nginx )、 AP 伺服器( Tomcat6 ) 及 JNDI Container (其實,我一直想不懂這 JAVA 或物件導向的術語)。

在 AWS 上租用 Oracle DB 是即用即付的,所以我想要在本機先測試 Tomcat6, JNDI 設定成功後再送上去。

我的作法是在本機的 VirtualBox Windows 上裝一個 Oracle 11g express (因 Oracle 沒出 Ubuntu 版),再作一個 1521 port 的 forward ,下載 sqlplus, basic 套件,測試連線正常:

$ sqlplus test/test@//localhost/XE

第一個 test 表帳號,第二個表密碼,最後面的 XE 表資料庫實例的名稱,預設是 XE 。能看到 SQL> 提示就表示可連線 Oracle 11g 了。

安裝 Tomcat6 非常簡單,在 Ubuntu 中打上 apt-get install tomcat6 就夠了。接下來去抓 Oracle 的 jdbc driver: ojdbc6.jar ,置入 /usr/share/java 目錄。然後修改 tomcat6 設定檔:

# /etc/tomcat6/catalina.properties
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,/var/lib/tomcat6/common/classes,/var/lib/tomcat6/common/*.jar,/usr/share/java/*.jar


# /etc/tomcat6/content.xml

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/OracleDB" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:XE"
username="test" password="test" maxActive="20" maxIdle="10"
maxWait="-1"/>
</Context>

# /var/lib/tomcat6/webapps/MyApps/WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/OracleDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

然後在 /var/lib/tomcat6/webapps/MyApps/ 放入一個 test_oracle.jsp 程式:


<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page language="java" contentType="text/html;charset=UTF8" %>
<%
Connection con = null;
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/OracleDB");
try {
con = ds.getConnection();
if(!con.isClosed()){
out.println("與 Oracle db 有連線!!\n<br/>");
}
con.close();
} catch (SQLException sqle) {
out.println("sqle = "+sqle);
} finally {
con = null;
}
%>

最後到瀏覽器去觀看 http://localhost:8080/MyApps/test_oracle.jsp 網頁,有看到『與 Oracle db 有連線!! 』那就成功了。


「作弊的文化」讀後感

2012/4/29 18:05:00 | hoamon's sandbox
---- 聲明開始 ----


要檢討別人前,先自我檢討。

過去我曾在工作上,利用公司列表機印了幾本 PDF 書籍(大概幾千頁吧!),想當然耳,那些 PDF 檔還是違反著作權抓來的。印了近 10 本後就不這麼作了,因為浪費我的時間,印出來後還得整理裝訂,有時候列表機卡紙,也得自己處理,這根本就是打自己巴掌。於是,我直接花錢請印刷店處理,雖然書錢是自己出的,但一樣不脫「違反著作權」這條法令。等到會上 amazon 買書後,就不印了。買原版的書又精美,又對得起作者,何必跟自己良心過不去。當時自己印得不精美的書,後來也是全丟了,真對不起那些樹木。


另外在軟體使用(N 年前)上,也盜了不少的軟體: Matlab, MS Office, Windows 2000, Windows XP, 嘸蝦米輸入法, Dreamweaver, VisualBasic 6...。後來接觸 Open Source 後,一個一個戒掉了,因為要花錢的軟體,沒有比較好用。現在我用 Ubuntu Linux, Python, Netbeans 來工作,偶爾要用 MS office 時,就把裝在 VirtualBox 裡的學校授權 windows xp 打開,然後使用學校授權的 MS office 來看文件。是的,沒錯,中興大學花了一筆微軟授權費讓我可以在受到他人強迫時,不致於違法。


現在算來,我只有「嘸蝦米輸入法」是自己花錢買一套的,至今未買過其他軟體,當然這不含強迫中獎的微軟隨機版 OS ,還好後來的廠商自己也知道這不合理,所以我才買得到無 OS 的 Notebook 。


最後是音樂、電影,過去會用 emule, bittorrent 等作違法下載,但自從有了中華電信 MOD, 網樂通, Youtube 後,就不這麼作了。以前抓電影,還得自己找字幕、種子。用 mod, 網樂通方便多了,不過花個幾十塊而已。而音樂多半就聽我以前 CD 轉來的 OGG ,要不然就是在 youtube 上找 MV 來聽。


用 mod, 網樂通看電影很不錯,但還是有個缺點,電影類型不夠豐富,違法下載已有一堆網址了,但至今我還看不到「全境擴散(Contagion)」有在上映。只能繼續等,要不就是去買它的 DVD ,不過,現在好像也沒得買合法的。別叫我買 amazon 的 DVD ,我自認英聽還不夠好,沒字幕我是看不懂地。


我大學時是很少考試作弊或是抄別人報告的,要不然就不會被當了三十幾個必修學分,像我的結構學考試向來都是拿 6 分的,因為抄一題題目,老師會給 1 分,我乖乖地抄了 6 題。印象中,只有一堂經濟學考試是幫同學作弊,給他看答案,其他應該沒了吧! 如果還有,那就是我記性不好想不起來了。而研究所以後,我開始認真讀書了,不但成績比大學好很多,也不蹺課了。


以上,大概就是我過去作弊的事。


---- 聲明結束 ----


某日幫老婆在中教大圖書館找書時,不小心看到的一本 2006 年出版的書:「作弊的文化」。

以前很喜歡逛書局、圖書館,有興趣的題材當然會翻,但更有趣的是因為工作人員排列習慣不同,常常會發現一些原本我沒機會瞄到,但事後卻發現很令人驚喜的書。雜食是件好事,這在我接觸「指數投資|被動投資」後體會更深。也在塑化劑事件後,對入口食品改採混亂原則。以前我中餐吃飯時可以連吃同一家的陽春麵半年,也不會受不了,當時的想法很簡單,這世界就那麼多家店讓我吃,如果累計起來,這碗陽春麵總共吃了 180 次,那我就連續吃完 180 次後再去煩惱要改吃什麼,省得我每天花心思在思考吃什麼。但現在不這麼作了,我怕連吃某樣食物半年,體內單一毒素太高,一次就畢業了。混著吃,不同毒物的累計量會平均一點。

這本書題材很特別,主要介紹美國氾濫的作弊文化: 學生考試作弊、購買或抄襲他人報告、入學及畢業資格花錢買來、假造學經歷、律師浮報鐘點、會計師協助作假帳、逃漏稅、侵佔公司資產(包含小物件,像是筆、紙)、使用禁藥、以商逼官或是商人去當官人…等現象。

作者提了一些改正措施,不過,我不相信他講得是對的。因為就算他講得對,也無法施行改正來證明措施正確。那當然他也歸納了一些想法來論述為什麼美國人會作弊,這作弊現象是由來已久,還是最近才興起的。同樣地,我也不相信他的歸納,因為我看過「黑天鵝效應」,歸納不見得是有意義的。

那這本書到底對我有沒有價值? 有! 當然有,看這本書,能夠讓我了解美國人作弊的手段有那些,只要作者是誠實以對,是科學訪談來的資料,就能讓我對美國生活有進一步的體會,這就是對我的價值。

學生考試作弊、購買或抄襲他人報告、入學及畢業資格花錢買來、假造學經歷這幾樣也可在臺灣社會體會到,這應該不難想像吧! 而且美國是更氾濫的。因為美國有很多"""高級"""私立學校是可以被「錢」操控的,建議各位可以去看看「女人香」這部電影。

而律師浮報鐘點,可以去看看「黑色豪門企業」這部電影來一窺全貌。

會計師協助作假帳,可以去看看「世界通訊」、「安隆」的倒閉新聞。

在逃漏稅部份幾乎是全民運動。在「蘋果橘子經濟學」中,也提到某一年全美國少了幾百萬個小孩,因為國稅局全面電腦化,可以比對大家的扶養子女是否有重複。

侵佔公司資產(包含小物件,像是筆、紙),我印象中好像有部電影提到職員拿到公司的信用卡後,結果大刷特刷的,忘了是那一部了。

使用禁藥部份請看艾拉馬奎爾麥可強森的故事。

以上作弊的事就請各位自行搜尋資料或是去看本書來深入了解。我想要討論的是「以商逼官或是商人去當官人」這種事。而且想從美國的現象來討論臺灣在這一部份的問題。

商人當官人,在臺灣政壇上,好像只有發生在「縣市首長」及「立委、議員」上,內閣部份就我印象以來,大概都是國營的金融相關事業董事長後來會當到財經首長,像是彭淮南先當中國商銀董事長後轉任中央銀行總裁,陳裕章從第一金董事長作到金管會主委,好像只有陳沖有當過合庫銀、中信證(民營)、永豐金(民營)董事長後再來作金管會主委及行政院副院長,其他的首長多半是先當官人,後才去當商人的,像是顏慶章、邱正雄、林全。就商人來當官人這件事,我覺得中華民國的防火牆作得還不錯。不像美國,一堆財政部長都是從華爾街跑去的,這一點可去看「高盛陰謀」來略知一二。

商人當官人有什麼不對? 如果是靠選舉選上的,那我沒話說,民主時代,選民接受商人當首長,也了解他會有利益衝突但還是讓他選上,這我沒話說,選後是大家一起承擔的。

但如果是指派的,那就大有問題了。因為無法直接監督,卻又得面臨他瓜田李下,所以可以看到 2008 美國次貸後,高盛活得比貝爾斯登、雷曼兄弟、美林、摩根史坦利還好。要不然,你們也可以想像一下,公共工程委員會主委曾任職於某家營造廠,那他監督的了舊公司所承攬的公共工程嗎? 搞不好,有些還是他經手的呢! 所以幸運的是這種事在中華民國不常發生。這值得慶祝。

而「以商逼官」這件事,我覺得臺灣就很嚴重了。當然,還沒有比美國嚴重啦。


上面這部影片,提到「公司」撥出大量的行銷支出去為候選人宣傳,這無非是希望將「有利於公司」的候選人送進政府體制中,在行政、立法方面協助公司經營。

除了送「合宜候選人」進政府體制,另外還有「形塑輿論」以迫使公務員執行政策轉向,因為公務員『買廣告』去宣傳政策是件不容易的事。要『買廣告』去宣傳,通常只能用在『拍馬屁』上。

有幾件類似『形塑輿論』的事,我分享給各位,但也有可能是我錯了,畢竟『形不形塑』都應該是檯面下的事:
  1. 別讓彭淮南總裁變成下一個袁崇煥!
  2. 證券交易所得稅會讓政府抽很多錢,導致沒有利潤。
  3. 立委名額太多是導致國會亂象的主因,所以我們要刪減立委名額。
第一項,中央銀行的作為是不容外界質疑的,它也不受其他首長的管理,那新聞、報紙講新台幣該不該升值、貶值,幹麼? 削總裁威信,看能不能讓高層換個人,如果不能,或許也能逼總裁心死離職。總之,一個獨立性機關建立了,也找了個正確人選進去,那再指三道四都是不對的。

第二項,很多股民在郭宛容事件後,堅信課徵證所稅是件可怕的事,他們不管租稅正義,只在乎股票表面價值。於是,永遠都是在分皮毛,然後讓大戶吃香喝辣。

第三項,刪減立委名額後,可以看見國會的政黨種類急速減少,從2004年2008年的結果看來,2004年泛藍 128 名,泛綠 147 名,其他有 148 名,小黨比例佔有 35 %,而 2008 年泛藍有 114 名,泛綠有 101 名,其他有 16 名,小黨比例佔有 7 %。小黨比例急速萎縮下,失去了政策多樣性。企業要買通立委,也可以花比較少的人力、金錢。這對弱勢團體來說,只有更失去支持聲音,看不來有什麼其他好處。

另外,還有一種是我覺得「大有問題」的「輿論」:「公務員領得錢比人多,事作得比人少」。

醜化公務員後,要幹麼呢? 首先大家都認為他們爛,所以就不介意立委們削他們預算,甚至讓機關合併但員額減少。事變多了,人卻少了,那他們就不能管那麼多事了。他們不能管那麼多事後,則「黑心企業」就爽啦! 沒人力來稽查業務,甚至要打通關節時,需賄賂的人沒那麼多,這對「黑心企業」都是成本下降的好機會。如果我開的是「黑心企業」,「醜化公務員」絕對是一條好策略。

在「作弊的文化」中,它也提到 IRS 被削弱資源,使得他們無法向逃漏稅的有錢人提出訴訟,因為有錢人有能力與 IRS 乾耗。使得他們只好把目標對向一般平凡百姓,這一類人往往無法找到高級稅務律師反辯。諷刺的是 IRS 資源正是被廣大的美國百姓要求刪減的,因為他們極度討厭稅務員。

簡單講,老鼠去說貓的壞話,結果主人相信了,還把貓趕走,那接下來是誰的天下?

但是話說回來,我們如何能分辯什麼是正確的「輿論」。

首先,別相信「廣告」:


這個廣告聽說效果很好。讓很多人下定決心投給那個團隊,不過,仔細想想,這「準備好了」四個字,講也只花了 5 秒鐘。但一個政策執行要花多少時間,像蘇花高從環島路網決策成形、選址、測量、工法決定…也花了幾十年了。你聽到「準備好了」也是花 5 秒鐘,但你該相信嗎? 另一個有「魔力的廣告詞」是「馬上好」,很多人聽到這句話後,就莫明奇妙地把票奉上了。我覺得很可笑。

第二個,要分得清那個是「廣告」:

看雜誌時,出版商常常把廣告作成報導本文,如果你沒能力分得出來,那如何知道那個是忠實報導,那個是自吹自擂。不過,像這類會把「廣告」及「本文」混合的出版商,最好把它們的讀物當作資源回收物,看過即忘。

第三個,少看新聞及雜誌,多看點書(也就是第一手資料,像是候選人政策白皮書):

了解政治或是選擇正確人選,從新聞、雜誌上獲得的幫助不大。多看點書來了解你想要的理想世界是什麼,這樣你才有學識去要求候選人作到。然後要看候選人政策白皮書,這樣你才知道,這個候選人到底想要作什麼,你也才有得選擇,別去聽新聞記者的轉述,二手資料常常是錯的。

最後我的結論是「了解作弊的手段是有助不作弊的人贏得比賽的法門」,所以不管你想不想、愛不愛,都得了解「作弊的方法」。

"ThinkPad USB Keyboard with TrackPoint" 在 Ubuntu 10.04 的中鍵滾動設定方式

2012/5/8 16:13:00 | hoamon's sandbox
參考了我與小黑(ThinkPad X200s)之小紅點文章後,可輕鬆地設定了我的 R60e 中鍵滾動功能,然而一直無法在我的桌上型電腦上以 gpointing-device-settings 方法或是用 xinput 指令設定成功。因為設備名稱不同所以 "TPPS/2 IBM TrackPoint" 要改成 "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" ,但它就是不成功,指令如下:

# 啟用中鍵模擬功能
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Middle Button Emulation" 8 1
# 啟用滾輪模擬功能
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Wheel Emulation" 8 1
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Wheel Emulation Axes" 8 6 7 4 5
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Emulation Button" 8 2

# 靈敏度
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Middle Button Timeout" 8 50
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Wheel Emulation Inertia" 8 10
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Wheel Emulation Timeout" 8 200


還好該文章有詳細參考文件 How to configure the TrackPoint ,從該文中,得知還有別種設定方法,所以我在 /usr/lib/X11/xorg.conf.d/20-thinkpad.conf 中,置入文句如下:

Section "InputClass"
Identifier "Trackpoint Wheel Emulation"
MatchProduct "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device"
MatchDevicePath "/dev/input/event*"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "2"
Option "Emulate3Buttons" "false"
Option "XAxisMapping" "6 7"
Option "YAxisMapping" "4 5"
EndSection

然後重開機,就搞定了。

AWS 初試

2012/4/5 5:04:00 | hoamon's sandbox
姻綠際會讓我有機會去研究 Amazon Web Service 。那是個與 GAE 功能相同,但操作模式不盡相同的雲端服務。

GAE 像是個套裝雲端平台,有些東西它已幫你決定好,要就用,不用就拉倒,當然可以寫 ticket 去建議他們,但不一定會立案。犧性自由的收獲就是得到『自動擴展性』,當你的網站流量大時, GAE 自動開分身,也因為你寫的程式一開始就受 GAE 平台的限制,而這些限制的目的主要就是為了提升擴展性,所以一開始在 GAE 上寫網站很痛苦,但後期維護很輕鬆。

AWS 就像是個高級積木組,你想怎麼兜就怎麼組,在自己架站環境中跑的網站,不用改任何一行程式碼就能移至 AWS 上。但等到你的網站流量大,使用者多時,就得再利用 AWS 提供的系統維護工具來自行維護了。缺點當然是你得多請一組系統管理員,但相較於自己搞機房、架站,利用 AWS 平台可以讓系統管理員工作簡單多了。

對我而言,兩種開發平台各有好處,這我當然兩者都學,唯其資源分配乃先 GAE ,後 AWS 。

AWS 的主力產品就是 Elastic Compute Cloud (EC2) ,一個 EC2 可以想像它就是你的一台電腦,只是放在 Amazon 機房裡。

我們可以開一台 EC2 出來後,在裡面安裝 ubuntu, nginx, django, postgresql 等軟體,讓它跑網頁伺服器。或是裝了 postfix 就能變郵件伺服器,或是裝了 vlc 變影音串流伺服器。簡單講,只要有安裝相對應的軟體, EC2 也能變火箭。

但是 EC2 的硬碟不多,近 10 G 而已,如果你想放很多資料,那就需要 Simple Storage Service(S3) 。而且為了擴展性,你也得用 S3 ,用了 S3 ,當網站熱門到得多開幾台 EC2 出來時,它們才有共同儲存的地方。

當網站只用一台 EC2 時,可以把 MySQL/PostgreSQL/Oracle 資料庫裝在同一個 EC2 裡,但當有多個 EC2 時,怎麼辦?  AWS 有給獨立的資料庫伺服器,除了關聯式資料庫( RDS )外,也有 NoSQL ( DynamoDB )的。把資料庫託給 RDS/DynamoDB 管理,也省得自己作備援、備份、調校等管理工作,而且以 Oracle DB 來看,可以不用購買授權改以每小時租用計費,這相當方便。易言之,在 AWS 上花錢就能換得輕鬆。

整個 AWS 架構是在一個虛擬化的機房內,每開啟一個 EC2 實體,它會得到一個虛擬 IP ,我們可以透過 boto(Python base) 去管理它,也可以直接在 AWS Management Console 頁面管理。

目前 AWS 在美國維吉尼亞、奧勒岡、北加州、愛爾蘭、日本、新加坡、巴西聖保羅都有機房。你想把機器開在那裡,自己決定就行了。

如果要讓 EC2 有公共 IP ,可以到 Elastic IPs 去索取一個實體 IP ,但記得在索取後就要把它綁定到 EC2 實體去,如果要了公共 IP ,但沒有拿去用,是會被 AWS 索取 0.01/hours 的罰款,我就被罰了 0.71 元美金,因為我關了 EC2 實體後,並沒有再去退 IP ,結果那個 IP 就被我佔了 71 個小時。

其他 AWS 產品還有 CloudWatch, CloudFront, CloudCache, SQS, SES, SNS, SWF...,實在很多,請自行到官網了解。

目前 AWS 有免費試用方案,方案為註冊後一年之內使用,而每個月的免費額度如下:

AWS Free Usage Tier (Per Month):
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">750 hours of Amazon EC2 Linux Micro Instance usage (613 MB of memory and 32-bit and 64-bit platform support) – enough hours to run continuously each month*
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">750 hours of Amazon EC2 Microsoft Windows Server Micro Instance usage (613 MB of memory and 32-bit and 64-bit platform support) – enough hours to run continuously each month*
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">750 hours of an Elastic Load Balancer plus 15 GB data processing*
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">30 GB of Amazon Elastic Block Storage, plus 2 million I/Os and 1 GB of snapshot storage*
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">5 GB of Amazon S3 standard storage, 20,000 Get Requests, and 2,000 Put Requests*
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">100 MB of storage, 5 units of write capacity, and 10 units of read capacity for Amazon DynamoDB.**
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">25 Amazon SimpleDB Machine Hours and 1 GB of Storage**
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">1,000 Amazon SWF workflow executions can be initiated for free. A total of 10,000 activity tasks, signals, timers and markers, and 30,000 workflow-days can also be used for free**
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">100,000 Requests of Amazon Simple Queue Service**
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">100,000 Requests, 100,000 HTTP notifications and 1,000 email notifications for Amazon Simple Notification Service**
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">10 Amazon Cloudwatch metrics, 10 alarms, and 1,000,000 API requests**
  • http://d36cz9buwru1tt.cloudfront.net/orange_bullet.png); background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; list-style-image: initial; list-style-position: outside; list-style-type: none; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;">15 GB of bandwidth out aggregated across all AWS services*

我已把未送到 bitbucket.org 的專案及 zotero webdav 丟上 AWS 了。

自己家裡的機器正式結束「網站」的工作,專職作「寫程式機」了。

轉移至 Nginx

2012/3/11 20:37:00 | hoamon's sandbox
2012 三月全世界的網頁伺服器市佔率圖 from netcraft.com 

上圖可以看出歷久彌新的 Apache 持續雄距首位,有超過 15 年的時間,沒"器"可挑戰它的地位。直至 Nginx 的出現,或許它現在只有 10% ,但從各方評價看來,它絕對是 Apache 有史以來最強大的對手。短短 5 年,它已經爬上第 3 名的位子,從趨勢線上看來,要超越 IIS 也是有很大的機會。

而 Nginx 為什麼短短幾年竄起,絕不是因為『用的人多』。如果是這種原因的話, palm 、 Windows OS 、 x86 CPU 、 PlayStation 到現在會活得好好地,因為它們都曾有超越 50% 的市佔率。

Nginx 被選擇的原因有幾點:
  1. 跨平台: *nix, Mac, Windows 皆可。這那算優點呢!!! 那個網頁伺服器沒跨平台,喔喔~講太早了, IIS 就是不能跨平台,或許這就是它市佔率持續下降的原因,強迫綁 Windows OS ,結果只要 Windows OS 下滑,它就必死無疑了。
  2. 開源的 BSD-like 授權。
  3. 靜態檔案輸出省資源。
  4. 不怕慢速連線。
  5. 比較不怕 DOS 攻擊。
  6. 穩定性高。
簡單講,除了效能,還是效能。而我要的功能, Nginx 都有提供,唯一算得上缺點的,就是因為 Apache 活得比較久,安全性已被磨得比較好了。所以對於我們愛研究的研究生來說,還有什麼理由不切換過去呢? 大概只有「懶」是個原因吧!

目前我們使用 Apache + Django 的方式多是利用 mod_python 的技術。然而這種作法是比較不安全的,把很多事都包給 Apache 去作,那不管是我們程式設計有錯,或是它用的元件有錯,只要出錯那就是管理員等級的錯。不過這個「錯」也不算是 Apache 的錯,是「用 mod_python 」的錯,如果用的是「 mod_fastcgi 」,那安全層級就能拉高了。

所以說來,這次的「升級」是把「 mod_python 」丟掉,改用「 mod_fastcgi 」。那麼我心裡想想,都要換成 Django 自己跑 fcgi mode 了,為什麼不乾脆連前端網頁伺服器也換一下呢! 因為重點已換成 Django 的 fcgi server , Apache 的重點性大減,前端網頁伺服器的功能只剩下靜態檔案輸出、虛擬站台切換、 https 處理等,那我何必跑一個 Huge Apache 呢? Nginx 就是我的新選擇。

安裝很簡單,如果是在 Ubuntu 中,請打:

$ sudo apt-get install nginx

如果是在 Windows 中,請到官網下載 nginx.zip 檔,解開了,就是一個可執行的 nginx 程式。

而我用的方法是下載源始碼自己編譯:

$ wget some_file_link.tgz
$ tar -zxf some_file_link.tgz
$ cd nginx
$ sudo apt-get install libpcre3-dev libssl-dev # 這些是編譯時,須用到的函式庫程式碼
$ sudo apt-get install libxml2-dev libxslt-dev # 這些是編譯時,須用到的函式庫程式碼
$ sudo apt-get install libgd2-xpm-dev libgeoip-dev # 這些是編譯時,須用到的函式庫程式碼
$ ./configure --prefix=/usr/local/nginx --with-debug --with-http_dav_module \
--with-http_addition_module --with-http_geoip_module --with-http_gzip_static_module \
--with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module \
--with-http_ssl_module --with-http_sub_module --with-http_xslt_module \
--with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail \
--with-mail_ssl_module
$ make
$ sudo make install

這樣 Nginx 就安裝完成了。

接下來,我們作 Django 程式的設定,讓它可以跑在 fcgi mode 上,方法很簡單,原本我們在本機開發時,都是用:

$ python2.7 manage.py runserver 127.0.0.1:8080

讓它跑在 http://127.0.0.1:8080/ 上,現在則改用:

$ cd /home/somewhere
$ su - someuser -c "python2.7 manage.py runfcgi host=localhost port=3033 daemonize=true method=threaded workdir=/home/somewhere pidfile=/home/somewhere/fcgi.pid"

這樣 django 會在 127.0.0.1:3033 中,幫我們開一個 someuser 帳號權限的 fcgi server , daemonize=true 則表示指令打完後,它就背景處理了,想要把這個 fcgi server 殺掉,就去看看 /home/somewhere/fcgi.pid 的內容,裡面的編號就是系統行程編號, kill 那個編號就能關 fcgi server 了。

同時殺掉 fcgi server ,再馬上啟動它的指令可參考如下:

$ su - someuser -c "kill `cat /home/somewhere/fcgi.pid` && python2.7 manage.py runfcgi host=localhost port=3033 daemonize=true method=threaded workdir=/home/somewhere pidfile=/home/somewhere/fcgi.pid"

請注意在這個階段,你用瀏覽器去看 http://127.0.0.1:3033/ 是沒反應的,因為它現在跑的是 FastCGI 協定,不是 http 協定。瀏覽器無法跟 Django FastCGI 溝通。

接下來,我們再到 nginx.conf 去設定。Nginx 與 FastCGI Server 互動原理如下:
圖來自陈辉的博客
先由 Nginx 與瀏覽器互動,得到 GET, POST 等變數後,整理成 fastcgi 協定的變數,然後用 Socket 或 Port 方式傳遞給 FastCGI Server ,接下來就是 FastCGI 去驅動程式去處理,完成後拋回。

以下是 nginx.conf 的設定範例:

user www-data; # 子行程用的是 www-data 帳號
worker_processes 4; # 常駐 4 個子行程
pid /var/run/nginx.pid; # 紀錄母行程的編號
http {
    server_tokens off; # 網頁上不顯示伺服器版本編號
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 30;
    types_hash_max_size 2048;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    gzip on;
    gzip_disable "msie6";
    server {
        listen 80;
        server_name www.whatever-you-want.com.tw;
        root /var/www;
        index index.html;
        access_log /var/log/nginx/TW-access.log;
        error_log /var/log/nginx/TW-error.log;
    }
    server {
        listen 443;
        server_name www.whatever-you-want.com;
        keepalive_timeout 60;
        ssl on;
        ssl_certificate /etc/ssl/hoamon.info/hoamon.info.crt;
        ssl_certificate_key /etc/ssl/hoamon.info/hoamon.info.key;
        location "/" {
            fastcgi_pass_header Authorization;
            fastcgi_intercept_errors off;
            fastcgi_pass 127.0.0.1:3033;
            fastcgi_param PATH_INFO                          $fastcgi_script_name;
            fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
            fastcgi_param  SERVER_SOFTWARE       nginx;
            fastcgi_param  QUERY_STRING                $query_string;
            fastcgi_param  REQUEST_METHOD         $request_method;
            fastcgi_param  CONTENT_TYPE                $content_type;
            fastcgi_param  CONTENT_LENGTH          $content_length;
            fastcgi_param  SCRIPT_FILENAME           $document_root$fastcgi_script_name;
            fastcgi_param  REQUEST_URI                     $request_uri;
            fastcgi_param  DOCUMENT_URI                 $document_uri;
            fastcgi_param  DOCUMENT_ROOT            $document_root;
            fastcgi_param  SERVER_PROTOCOL         $server_protocol;
            fastcgi_param  REMOTE_ADDR                 $remote_addr;
            fastcgi_param  REMOTE_PORT                  $remote_port;
            fastcgi_param  SERVER_ADDR                  $server_addr;
            fastcgi_param  SERVER_PORT                    $server_port;
            fastcgi_param  SERVER_NAME                  $server_name;
        }
        location "/media" {
            autoindex on;
            root /home/somewhere/media;
        }
        access_log  /var/log/nginx/whatever-you-want.access_log;
        error_log   /var/log/nginx/whatever-you-want.error_log;
    }
}

上面有兩個虛擬站台,一個是給 www.whatever-you-want.com.tw ,一個是給 www.whatever-you-want.com

www.whatever-you-want.com.tw 只是單純的靜態網站,預設首頁是 http://www.whatever-you-want.com.tw/index.html ,而它的硬碟位置在 /var/www/index.html 。

而使用者若是瀏覽 https://www.whatever-you-want.com/media 的連結,則 Nginx 會給它 /home/somewhere/media 資料夾內的所有檔案。除了 /media/.* 外,其他的連結都會用 3033 port 送到 Django FastCGI Server 處理。

而使用 https 的方法,只須要設定 3 個變數值: ssl , ssl_certificate , ssl_certificate_key 即可。

設定完成後,用指令開啟 Nginx :

$ /usr/local/nginx/sbin/nginx

重新載入:

$ /usr/local/nginx/sbin/nginx -s reload

關閉:

$ /usr/local/nginx/sbin/nginx -s stop

這樣 Nginx 伺服器就建立完成了。

在新架構下,可以由系統管理員獨立控管 Nginx 網頁伺服器的開啟、關閉,而讓程式設計師,自行作 FastCGI Server 的管理,程設師自己作程式更新、套用,避免給予過多的權限。畢竟這兩者的知識領域是有別的,少有人兩邊都作得很好。

=== 以下可能是 *nix(含 Mac) 專用(因為我不知道 Windows 能不能作 unix:socket 的指定) ===

如果我們一台機器有多個 django-base 的虛擬站台,那麼一個 django-base project 就要花一個 port ,這對於系統管理員及程式設計師而言,容易有搞亂的可能性,畢竟 "網址" <=> "port" <=> "django-base project" 的過程當中,是文字對應數字,再對應文字,難以記在人的腦中(也可能是我的記性比不上平均值吧!)。

所以我建議使用 Unix Socket 方式作對應。程式設計師把 socket 開在程式庫的 root 資料夾中,並取名為 django.socket 。再將 django.socket 權限設為 770 ,然後系統管理員把這個 django.socket 擁有群組設為 www-data 。

程式專案在 /home/someproject/ ,設定範例如下:

$ cd /home/someproject && /usr/bin/python2.7 manage.py runfcgi socket=`pwd`/django.socket method=threaded workdir=`pwd` pidfile=`pwd`/pid daemonize=true

上面程式設計師跑起一個 django-base 專案,並將 socket 開在 /home/someproject/django.socket 。

然後系統管理員作權限設定(也可以用 visudo 指給程式設計師作權限設定):

$ sudo chgrp www-data /home/someproject/django.socket
$ sudo chmod 770 /home/someproject/django.socket

系統管理員再把 nginx.conf 原本的 fastcgi_pass 127.0.0.1:3033 設定改如下:

        fastcgi_pass unix:/home/someproject/django.socket;

改成這樣的設定方式,對程式設計師來說,永遠是把 socket 開在同一個專案資料夾中,並命名為 django.socket ,而系統管理員也知道一定是專案資料夾下的 django.socket 。少了數字 port 的對應記憶,減少錯誤的機率。

「作弊的文化」讀後感

2012/1/15 0:33:00 | hoamon's sandbox
---- 聲明開始 ----


要檢討別人前,先自我檢討。

過去我曾在工作上,利用公司列表機印了幾本 PDF 書籍(大概幾千頁吧!),想當然耳,那些 PDF 檔還是違反著作權抓來的。印了近 10 本後就不這麼作了,因為浪費我的時間,印出來後還得整理裝訂,有時候列表機卡紙,也得自己處理,這根本就是打自己巴掌。於是,我直接花錢請印刷店處理,雖然書錢是自己出的,但一樣不脫「違反著作權」這條法令。等到會上 amazon 買書後,就不印了。買原版的書又精美,又對得起作者,何必跟自己良心過不去。當時自己印得不精美的書,後來也是全丟了,真對不起那些樹木。


另外在軟體使用(N 年前)上,也盜了不少的軟體: Matlab, MS Office, Windows 2000, Windows XP, 嘸蝦米輸入法, Dreamweaver, VisualBasic 6...。後來接觸 Open Source 後,一個一個戒掉了,因為要花錢的軟體,沒有比較好用。現在我用 Ubuntu Linux, Python, Netbeans 來工作,偶爾要用 MS office 時,就把裝在 VirtualBox 裡的學校授權 windows xp 打開,然後使用學校授權的 MS office 來看文件。是的,沒錯,中興大學花了一筆微軟授權費讓我可以在受到他人強迫時,不致於違法。


現在算來,我只有「嘸蝦米輸入法」是自己花錢買一套的,至今未買過其他軟體,當然這不含強迫中獎的微軟隨機版 OS ,還好後來的廠商自己也知道這不合理,所以我才買得到無 OS 的 Notebook 。


最後是音樂、電影,過去會用 emule, bittorrent 等作違法下載,但自從有了中華電信 MOD, 網樂通, Youtube 後,就不這麼作了。以前抓電影,還得自己找字幕、種子。用 mod, 網樂通方便多了,不過花個幾十塊而已。而音樂多半就聽我以前 CD 轉來的 OGG ,要不然就是在 youtube 上找 MV 來聽。


用 mod, 網樂通看電影很不錯,但還是有個缺點,電影類型不夠豐富,違法下載已有一堆網址了,但至今我還看不到「全境擴散(Contagion)」有在上映。只能繼續等,要不就是去買它的 DVD ,不過,現在好像也沒得買合法的。別叫我買 amazon 的 DVD ,我自認英聽還不夠好,沒字幕我是看不懂地。


我大學時是很少考試作弊或是抄別人報告的,要不然就不會被當了三十幾個必修學分,像我的結構學考試向來都是拿 6 分的,因為抄一題題目,老師會給 1 分,我乖乖地抄了 6 題。印象中,只有一堂經濟學考試是幫同學作弊,給他看答案,其他應該沒了吧! 如果還有,那就是我記性不好想不起來了。而研究所以後,我開始認真讀書了,不但成績比大學好很多,也不蹺課了。


以上,大概就是我過去作弊的事。


---- 聲明結束 ----


某日幫老婆在中教大圖書館找書時,不小心看到的一本 2006 年出版的書:「作弊的文化」。

以前很喜歡逛書局、圖書館,有興趣的題材當然會翻,但更有趣的是因為工作人員排列習慣不同,常常會發現一些原本我沒機會瞄到,但事後卻發現很令人驚喜的書。雜食是件好事,這在我接觸「指數投資|被動投資」後體會更深。也在塑化劑事件後,對入口食品改採混亂原則。以前我中餐吃飯時可以連吃同一家的陽春麵半年,也不會受不了,當時的想法很簡單,這世界就那麼多家店讓我吃,如果累計起來,這碗陽春麵總共吃了 180 次,那我就連續吃完 180 次後再去煩惱要改吃什麼,省得我每天花心思在思考吃什麼。但現在不這麼作了,我怕連吃某樣食物半年,體內單一毒素太高,一次就畢業了。混著吃,不同毒物的累計量會平均一點。

這本書題材很特別,主要介紹美國氾濫的作弊文化: 學生考試作弊、購買或抄襲他人報告、入學及畢業資格花錢買來、假造學經歷、律師浮報鐘點、會計師協助作假帳、逃漏稅、侵佔公司資產(包含小物件,像是筆、紙)、使用禁藥、以商逼官或是商人去當官人…等現象。

作者提了一些改正措施,不過,我不相信他講得是對的。因為就算他講得對,也無法施行改正來證明措施正確。那當然他也歸納了一些想法來論述為什麼美國人會作弊,這作弊現象是由來已久,還是最近才興起的。同樣地,我也不相信他的歸納,因為我看過「黑天鵝效應」,歸納不見得是有意義的。

那這本書到底對我有沒有價值? 有! 當然有,看這本書,能夠讓我了解美國人作弊的手段有那些,只要作者是誠實以對,是科學訪談來的資料,就能讓我對美國生活有進一步的體會,這就是對我的價值。

學生考試作弊、購買或抄襲他人報告、入學及畢業資格花錢買來、假造學經歷這幾樣也可在臺灣社會體會到,這應該不難想像吧! 而且美國是更氾濫的。因為美國有很多"""高級"""私立學校是可以被「錢」操控的,建議各位可以去看看「女人香」這部電影。

而律師浮報鐘點,可以去看看「黑色豪門企業」這部電影來一窺全貌。

會計師協助作假帳,可以去看看「世界通訊」、「安隆」的倒閉新聞。

在逃漏稅部份幾乎是全民運動。在「蘋果橘子經濟學」中,也提到某一年全美國少了幾百萬個小孩,因為國稅局全面電腦化,可以比對大家的扶養子女是否有重複。

侵佔公司資產(包含小物件,像是筆、紙),我印象中好像有部電影提到職員拿到公司的信用卡後,結果大刷特刷的,忘了是那一部了。

使用禁藥部份請看艾拉馬奎爾麥可強森的故事。

以上作弊的事就請各位自行搜尋資料或是去看本書來深入了解。我想要討論的是「以商逼官或是商人去當官人」這種事。而且想從美國的現象來討論臺灣在這一部份的問題。

商人當官人,在臺灣政壇上,好像只有發生在「縣市首長」及「立委、議員」上,內閣部份就我印象以來,大概都是國營的金融相關事業董事長後來會當到財經首長,像是彭淮南先當中國商銀董事長後轉任中央銀行總裁,陳裕章從第一金董事長作到金管會主委,好像只有陳沖有當過合庫銀、中信證(民營)、永豐金(民營)董事長後再來作金管會主委及行政院副院長,其他的首長多半是先當官人,後才去當商人的,像是顏慶章、邱正雄、林全。就商人來當官人這件事,我覺得中華民國的防火牆作得還不錯。不像美國,一堆財政部長都是從華爾街跑去的,這一點可去看「高盛陰謀」來略知一二。

商人當官人有什麼不對? 如果是靠選舉選上的,那我沒話說,民主時代,選民接受商人當首長,也了解他會有利益衝突但還是讓他選上,這我沒話說,選後是大家一起承擔的。

但如果是指派的,那就大有問題了。因為無法直接監督,卻又得面臨他瓜田李下,所以可以看到 2008 美國次貸後,高盛活得比貝爾斯登、雷曼兄弟、美林、摩根史坦利還好。要不然,你們也可以想像一下,公共工程委員會主委曾任職於某家營造廠,那他監督的了舊公司所承攬的公共工程嗎? 搞不好,有些還是他經手的呢! 所以幸運的是這種事在中華民國不常發生。這值得慶祝。

而「以商逼官」這件事,我覺得臺灣就很嚴重了。當然,還沒有比美國嚴重啦。


上面這部影片,提到「公司」撥出大量的行銷支出去為候選人宣傳,這無非是希望將「有利於公司」的候選人送進政府體制中,在行政、立法方面協助公司經營。

除了送「合宜候選人」進政府體制,另外還有「形塑輿論」以迫使公務員執行政策轉向,因為公務員『買廣告』去宣傳政策是件不容易的事。要『買廣告』去宣傳,通常只能用在『拍馬屁』上。

有幾件類似『形塑輿論』的事,我分享給各位,但也有可能是我錯了,畢竟『形不形塑』都應該是檯面下的事:
  1. 別讓彭淮南總裁變成下一個袁崇煥!
  2. 證券交易所得稅會讓政府抽很多錢,導致沒有利潤。
  3. 立委名額太多是導致國會亂象的主因,所以我們要刪減立委名額。
第一項,中央銀行的作為是不容外界質疑的,它也不受其他首長的管理,那新聞、報紙講新台幣該不該升值、貶值,幹麼? 削總裁威信,看能不能讓高層換個人,如果不能,或許也能逼總裁心死離職。總之,一個獨立性機關建立了,也找了個正確人選進去,那再指三道四都是不對的。

第二項,很多股民在郭宛容事件後,堅信課徵證所稅是件可怕的事,他們不管租稅正義,只在乎股票表面價值。於是,永遠都是在分皮毛,然後讓大戶吃香喝辣。

第三項,刪減立委名額後,可以看見國會的政黨種類急速減少,從2004年2008年的結果看來,2004年泛藍 128 名,泛綠 147 名,其他有 148 名,小黨比例佔有 35 %,而 2008 年泛藍有 114 名,泛綠有 101 名,其他有 16 名,小黨比例佔有 7 %。小黨比例急速萎縮下,失去了政策多樣性。企業要買通立委,也可以花比較少的人力、金錢。這對弱勢團體來說,只有更失去支持聲音,看不來有什麼其他好處。

另外,還有一種是我覺得「大有問題」的「輿論」:「公務員領得錢比人多,事作得比人少」。

醜化公務員後,要幹麼呢? 首先大家都認為他們爛,所以就不介意立委們削他們預算,甚至讓機關合併但員額減少。事變多了,人卻少了,那他們就不能管那麼多事了。他們不能管那麼多事後,則「黑心企業」就爽啦! 沒人力來稽查業務,甚至要打通關節時,需賄賂的人沒那麼多,這對「黑心企業」都是成本下降的好機會。如果我開的是「黑心企業」,「醜化公務員」絕對是一條好策略。

在「作弊的文化」中,它也提到 IRS 被削弱資源,使得他們無法向逃漏稅的有錢人提出訴訟,因為有錢人有能力與 IRS 乾耗。使得他們只好把目標對向一般平凡百姓,這一類人往往無法找到高級稅務律師反辯。諷刺的是 IRS 資源正是被廣大的美國百姓要求刪減的,因為他們極度討厭稅務員。

簡單講,老鼠去說貓的壞話,結果主人相信了,還把貓趕走,那接下來是誰的天下?

但是話說回來,我們如何能分辯什麼是正確的「輿論」。

首先,別相信「廣告」:


這個廣告聽說效果很好。讓很多人下定決心投給那個團隊,不過,仔細想想,這「準備好了」四個字,講也只花了 5 秒鐘。但一個政策執行要花多少時間,像蘇花高從環島路網決策成形、選址、測量、工法決定…也花了幾十年了。你聽到「準備好了」也是花 5 秒鐘,但你該相信嗎? 另一個有「魔力的廣告詞」是「馬上好」,很多人聽到這句話後,就莫明奇妙地把票奉上了。我覺得很可笑。

第二個,要分得清那個是「廣告」:

看雜誌時,出版商常常把廣告作成報導本文,如果你沒能力分得出來,那如何知道那個是忠實報導,那個是自吹自擂。不過,像這類會把「廣告」及「本文」混合的出版商,最好把它們的讀物當作資源回收物,看過即忘。

第三個,少看新聞及雜誌,多看點書(也就是第一手資料,像是候選人政策白皮書):

了解政治或是選擇正確人選,從新聞、雜誌上獲得的幫助不大。多看點書來了解你想要的理想世界是什麼,這樣你才有學識去要求候選人作到。然後要看候選人政策白皮書,這樣你才知道,這個候選人到底想要作什麼,你也才有得選擇,別去聽新聞記者的轉述,二手資料常常是錯的。

最後我的結論是「了解作弊的手段是有助不作弊的人贏得比賽的法門」,所以不管你想不想、愛不愛,都得了解「作弊的方法」。

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

2011/11/26 23:45:00 | hoamon's sandbox

請上露天拍賣網址(結標時間: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 相關的書籍留給其他適合的讀者。願意作它們的新主人嗎?

= 後記 =

已全賣出。