九月 18, 2012

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 「黑天鵝效應」讀書心得

書籍請見博客來

簡短摘錄書籍內容

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

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

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

火雞問題

一隻被餵養了 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 格式請點選這裡下載。

六月 11, 2011

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» Install Python2.5 on Ubuntu 11.04 x86_64 for Google App Engine

之前所提的「Install Python2.5 on Ubuntu 10.04 i386 for Google App Engine」,主要是在 i386 Ubuntu 的安裝方式。我這一次換了電腦,也裝了 Ubuntu 11.04 amd64 的版本,所以安裝方式有些許不同:

1. 系統內建的 sqlite 函式庫無法連結。
2. 某些 .so 檔不再放在 /usr/lib ,而是在 /usr/lib32, /usr/lib64, /usr/lib/x86_64-linux-gnu 等地。

另外在安裝 python2.5 時,也想順便套上 readline 及 ipython 。以下是安裝過程:

先裝上 Ubuntu 內建的函式庫:

$ apt-get install liblcms1-dev zlib1g-dev libfreetype6-dev libjpeg62-dev libsqlite3-dev libssl-dev tk-dev libreadline-dev

安裝 sqlite3:

$ cd sqlite-autoconf-3070603/
$ ./configure --prefix=/usr/local/sqlite3 --enable-readline --enable-threadsafe --enable-dynamic-extensions
$ make && sudo make install

安裝 Python2.5.6:

$ cd Python2.5.6/
$ ./configure --prefix=/usr/local/python25 --with-zlib -with-zlib-library=/usr/lib/x86_64-linux-gnu --with-zlib-include=/usr/include --with-tk --with-tk-library=/usr/lib32 --with-tk-include=/usr/include --with-tcl --with-tcl-library=/usr/lib32 --with-tcl-include=/usr/include --libdir=/usr/local/sqlite3/lib --includedir=/usr/local/sqlite3/include --with-freetype2 --with-jpeg --with-readline
$ make && sudo make install

安裝 ipython

$ cd ipython/
$ sudo /usr/local/python25/bin/python2.5 setup.py install

安裝 GAE 相依模組 ipaddr:

$ cd ipaddr-2.1.1/
$ sudo /usr/local/python25/bin/python2.5 setup.py install

安裝 GAE 相依模組 python-ssl:

$ cd python-ssl-1.15/
$ cp -rf ../Python2.5.6/Include/* /usr/local/python25/include/ # 需要 Python 源碼
$ sudo /usr/local/python25/bin/python2.5 setup.py install

安裝 PIL:

修改 Imaging-1.1.7/setup.py 中的參數如下:

TCL_ROOT = '/usr/lib32'
JPEG_ROOT = '/usr/lib32'
ZLIB_ROOT = '/usr/lib/x86_64-linux-gnu/'
TIFF_ROOT = '/usr/lib32'
FREETYPE_ROOT = '/usr/lib32'
LCMS_ROOT = '/usr/lib32'

檢查模組是否可使用

$ /usr/local/bin/python2.5 setup.py build_ext -i

測試模組

$ /usr/local/bin/python2.5 selftest.py

看到如下訊息,就代表模組皆有支援

 --- PIL CORE support ok
 --- TKINTER support ok
 --- JPEG support not installed
 --- ZLIB (PNG/ZIP) support not installed
 --- FREETYPE2 support ok
 --- LITTLECMS support ok

再執行

$ sudo /usr/local/python25/bin/python2.5 setup.py install

最後,再把 dev_appserver.py, appcfg.py 中的 #!/usr/bin/env python 改成 #!/usr/bin/env python2.5 即可(也不是必須的,只要你知道執行 GAE server 時是用 python2.5 就夠了)。

完成後就可以在 Ubuntu 11.04+ x86_64 中開發 GAE 程式了。

八月 22, 2010

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» IBM R60e 上的 Ubuntu 10.04 透過 HTC wildfire 上網

我的 R60e 在裝了 Ubuntu 8.04 或是 Ubuntu 9.04 之後,無線網路的運作一直很奇怪,在開啟無線網卡後,訊號十分不穩定,用 ping 來測試,往往時間都會超過 500ms 。一直到現在的 Ubuntu 10.04 都是一樣的,無線網路能連但是不能用。嘗試了很多方法,都沒效果,再加上我家有一段時間是沒有 AP 的,要到學校研究室才會遇到這個問題,而往往我都是用"有線網路"來解決這個無線網路的效能問題,所以也就沒有認真地想把這個問題解決。

一直到我買了一支 HTC wildfire 後,因為對 3G 無線上網的需求實在不高,我大部份時間都待在家,所以就弄了台 AP 擺在家裡。 wildfire 使用無線網路當然是非常順暢地,要不然宏達電不會躍升為全球第八大的手機商。既然 wildfire 上網很順,我想不如就把它的網路分享給 R60e 用吧!

為此,我找了個周日,打算好好地研究一番。想說這種分享方法,原則上應該會在 Ubuntu 上生成一種 usb 裝置,然後我再找出它設定方式就解決了。

結果,我只是用 usb 線把 wildfire 跟 R60e 接起來後,在 wildfire 上選擇「網際網路分享」,它就能用。

它就能用了耶!

六月 4, 2010

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 升級到 Ubuntu 10.04 後,發生無法使用公私錀登入問題

Ubuntu 10.04 對我而言,最大的優點是內建了家目錄加密的功能。然而在實際使用上,才發現這與我預期的有一段落差,只是這個落差是當初我沒想清楚所造成的。


原本,我以為用了家目錄加密後,一般使用者可以不怕檔案被 root 看光光,但
這是錯的,創建帳號的管理員一開始就可以備份「加密錀匙」,所以就算一般使用者登入後更換密碼,也不會重新製作一把「加密錀匙」,所以更換密碼的動作,只把「加密錀匙」用另一組密碼保存起來,帳號管理員一樣可用之前所保存的「加密錀匙」還原檔案。除非,使用者更換「加密錀匙」(但很麻煩,也需要系統權限),或是一開始,就不要帳號管理員設定「家目錄加密」功能,而是使用者自己作「目錄加密」的動作

原本,我以為不打「登入密碼」,就看不到家目錄,但
這是錯的,只要該使用者登入後有掛載該目錄,其他人就可以透過權限驗證方式來觀看,因為該使用者已將目錄解密了。

原本,我以為一般人可以在自己的家目錄執行網頁程式而不被其他人知道他搞了什麼網站,只要 apache 設定檔有設定 Include /home/xxx/self.conf 之類的語法即可,但
這是錯的。家目錄既然已加密,那 apache daemon 就沒辦法進到網頁程式的目錄,又如何執行它們。

嚴格的說,這個家目錄加密功能,只能用在其他人無法使用光碟開機或是重灌系統來獲取硬碟資料,就只是這樣而已,而這功能,我的 IBM Thinkpad 用硬碟密碼就作到了,我白玩了。但這一切都是我自己先想錯了呀!

而且在使用此功能還發生一件非常烏龍的鳥事,就是無法使用公私錀登入,因為公錀資料夾是放在家目錄的,既然它被加密了,那 ssh daemon 又如何拿到公錀來驗證呢! 解法很簡單,在 /etc/ssh/sshd_config 中,設定

AuthorizedKeysFile /home/ssh-keys/%u/authorized_keys2

即可,也就是將使用者公錀放到沒被加密的資料夾。解法很簡單,但我卻搞了兩天,因為我在 sshd_config 中寫的是

AuthorizedKeysFile /home/ssh-keys/%u/authorized_keys

,但在資料夾中放的是
authorized_keys2 。一個 2 ,我看了 2 天,才發現不一樣。這就是人生呀!

五月 28, 2010

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» Install Python2.5 on Ubuntu 10.04 for Google App Engine

Ubuntu 10.04 已經預設不包 Python2.5 了,對寫 GAE 的人來說,這有點麻煩,到目前為止 GAE 並未正式地支援 2.6 ,所以最好認命地在 Ubuntu 10.04 中創建一個 Python2.5 的環境。


裝 2.5 的目的是為了開發 GAE 程式,所以我們需要額外下載這些程式碼:
  1. Python2.5
  2. PIL
  3. python-ipaddr
# 利用 apt-get 安裝相關函式庫,除 libssl-dev 外,其他的套件是給 PIL 用的
$ sudo apt-get install liblcms1-dev zlib1g-dev libfreetype6-dev libjpeg62-dev libsqlite3-dev libssl-dev

# 安裝 Python2.5.5 至 /usr/local
$ tar -jxf Python-2.5.5.tar.bz2
$ cd Python-2.5.5
$ ./configure -with-zlib=/usr/include
$ make
$ sudo make install

# 安裝 GAE 相依模組 ipaddr
$ tar -zxf ipaddr-2.1.1.tar.gz
$ cd ipaddr-2.1.1/
$ sudo /usr/local/bin/python2.5 setup.py install

#安裝 PIL
$ tar -zxf Imaging-1.1.7.tar.gz
$ cd Imaging-1.1.7
# 修改 setup.py 中的使用函式庫位置
# LCMS_ROOT = '/usr/lib'
# TCL_ROOT = '/usr/lib'
# JPEG_ROOT = "/usr/lib"
# ZLIB_ROOT = "/lib"
# TIFF_ROOT = '/usr/lib'
# FREETYPE_ROOT = "/lib"

#檢查模組是否可使用
$ /usr/local/bin/python2.5 setup.py build_ext -i
#測試模組
$ /usr/local/bin/python2.5 selftest.py
$ sudo /usr/local/bin/python2.5 setup.py install

最後,再把 dev_appserver.py, appcft.py 中的 #!/usr/bin/env python 改成 #!/usr/bin/env python2.5 即可。這樣就可以在 Ubuntu 10.04 中開發 GAE 程式了。

五月 25, 2010

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 用隨身碟安裝 Linux

我的電腦有些是沒有光碟機的,事實上,光碟機的使用機率是愈來愈低,我曾有一台 Thinkpad 大半年沒開過光碟機,結果要用時,它卻發生讀片錯誤。

所以這次重新安裝 Ubuntu 10.04 時,我是採用隨身碟安裝的方式,而也因為 Open Source 工具愈來愈多、愈來愈方便下,我只使用了 usb-creator 程式,就將 ubuntu-10.04-alternate-amd64.iso 燒到 4G 隨身碟了,方法很簡單,先安裝 usb-creator(# apt-get install usb-creator) ,然後在命令列裡執行 usb-creator-gtk 。選擇要安裝的 iso 檔,並抹除隨身碟內的資料,就可以「製作開機磁碟」了。



接下來,就是重新安裝機器了,首先要切換 BIOS 的開機選項,在技嘉的 BIOS 上,我只選了 usb-hdd 就可從隨身碟開機,然而華碩的 BIOS ,除了要將 boot 選項切到 remoted-device 外,還要調整 usb storage 的 Forced FDD 類型。調整後,就如往常一樣重灌 Ubuntu 了。



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

參考了我與小黑(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 TrackPoing ,從該文中,得知還有別種設定方法,所以我在 /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

然後重開機,就搞定了。

五月 20, 2010

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 使用公私錀登入 Linux 後,如何掛載被加密的目錄?

登入後,因為還沒有輸入過系統密碼,所以無法掛載加密目錄,這時候只會在家目錄看到


Access-Your-Private-Data.desktop README.txt

兩個檔案,其中 README.txt 的內容如下:

# cat README.txt
THIS DIRECTORY HAS BEEN UNMOUNTED TO PROTECT YOUR DATA.

From the graphical desktop, click on:
"Access Your Private Data"

or

From the command line, run:
ecryptfs-mount-private

也就是要你執行 ecryptfs-mount-private ,執行後,它會問你系統密碼,鍵入後,加密目錄就被掛載進來,只是你要重新再進入一次家目錄,才會看到還原的內容。

快速進入家目錄指令:

# cd

» 使用 eCryptfs ,記得一定要備份下「加密錀匙」

使用 eCryptfs 加密目錄時,通常會隨機生成一把 32 字元的加密錀匙,來作目錄作加密,然後再使用使用者密碼來對「加密錀匙」作加密。所以如果因故弄丟了「加密錀匙」,但還記得「使用者密碼」,也是沒有用的。


所以記得,在使用此加密功能前,一定一定一定要先備份「加密錀匙」。

備份方式如下:

# cd /home/.ecryptfs/YOUR_ACCOUNT/.ecryptfs
or
# cd ~/.ecryptfs

# ls
auto-mount auto-umount Private.mnt Private.sig wrapped-passphrase

這個 wrapped-passphrase 就是「加密錀匙」被「使用者密碼」加密後的檔案。

# ecryptfs-unwrap-passphrase wrapped-passphrase
Passphrase: '''輸入使用者密碼'''
b19becdz81z8ba06aa4z35e6z1c0227f

這個 b19becdz81z8ba06aa4z35e6z1c0227f 就是「加密錀匙」,趕快把它記錄到其他檔案去。

十二月 16, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

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

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

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

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

過去,我回到 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: 男子漢不空口說白話。

十一月 21, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 莫明奇妙的 _ 網域名稱錯誤: 只發生在 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 大神,這問題就不會拖一個月了。

九月 3, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 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} 。

七月 25, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 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 即可。

五月 25, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

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

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

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

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

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

四月 30, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 我還是受不了了~

明明打定主意 8.04 要用三年。不過,還是屈服於新鮮的誘惑。

你看看! 全世界的人都在下。



一個小時後,我就要重灌我的 R60e 了。

四月 25, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 我不在 Ubuntu 星球中了(誤)

是我自己發現的,版主刪了我的 Blog RSS 前也沒通知我,當然我也不知道確切的理由,事後,問了版主,他是說:「我的 Blog 中與 Ubuntu/Linux/Unix 相關的文章太少了」。詳知我的發現

最近,的的確確我不太寫 Ubuntu 的文章,理由是 Ubuntu 對我來說,已經不是問題了,會有問題的,可能是在 VirtualBox, Django, NetBeans, Mercurial, GnuGP 上。而我也不打算更新至 9.04 版,因為我打算 8.04 用個三年再說,甚至我也有可能轉到 OpenSolaris 上。

只是被人拒絕的感覺不是很好,尤其是最近我又寫了不少政治性質文章,我希望這不會是讓人嫌棄的理由之一

不過,話說回來,除了被我管的人有時會對我「嫌棄」外,也沒什麼機會讓人嫌棄的。所以這是一個磨練機會,可惜的是,我不知道要怎麼作會更好

>>>> 後記 <<<<
原來是星球版主不知道我的文章都會設定 tag ,而我也以為 Ubuntu 星球不能以 tag 作收集的原則。現下,版主已將我的文章中定下 linux 標籤的文章作收納了。圓滿解決。感謝魏藥版主

另外當初主要被刪除的原因,的確是因為「政治文」太多了。我想本來這就是非常兩極的文章,所以,我都刻意在標題上即下「政治文」,讓不喜者勿入。

二月 9, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 難道我真的是 Windows 白癡! 搞個 https 憑證花了一個上午還是沒成功

照著這位仁兄的筆記: http://blog.roodo.com/myroodo/archives/4219557.html ,就是會在最後一個指令

> openssl ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt

出現

I am unable to access the ssl
ewcerts directory
ssl
ewcerts: Invalid argument

查了相當多的地方,也找不出原因。後來想想,這不過是個憑證,它是一種資料,所以它應該與平台無關,且之前我在 Linux 上作了那麼多的憑證,也沒遇過機器重灌,憑證得重作的現象,所以它應與當時製作的平台也無關,索性在 Ubuntu 上打了三個指令,作出憑證,再送到 Windows 去用。

您猜猜,這麼著了?

It's Work~

六月 30, 2008

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

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

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

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

四月 24, 2008

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

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

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

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

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

二月 15, 2008

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

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

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

或是 google:// pgp key

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

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

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

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

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

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

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

biggo.com.tw

A Django site.