20 September, 2009
14 September, 2009
論語 · 為政第二
下面的翻譯來自 James Legge子曰:吾,十有五,而志于學,三十而立,四十而不惑, 五十而知天命,六十而耳順,七十而從心所欲,不踰矩。
The Master said:``
At fifteen, I had my mind bent on learning.
At thirty, I stood firm.
At forty, I had no doubts.
At fifty, I know the decrees of Heaven.
At sixty, my ear was an obedient organ for the reception of truth.
At seventy, I could follow what my heart desired, without transgressing what was right."
22 July, 2009
黎曼猜想 - Riemann Hypothesis
繼 費馬最後定理 [1] (Fermat's Last Theorem) 及 龐加萊猜想[2] (Poincare Conjecture) 相繼被攻克之後, 黎曼猜想 (Riemann Hypothesis) 是一個數學家久攻不下的數學難題,底下簡介此猜想的內容及重要性。 Bernhard Riemann 在 32 歲 (1859 年) 時被柏林科學院 (Berlin Academy) 選為通信院士, 為了回報此一崇高榮譽,於是 Riemann 向柏林科學院提交一篇論文[3], 只有 6 頁,題目是「論小於給定數值的質數個數」 (On the number of primes less than a given quantity)
11 July, 2009
Python Idiom: Decorator II
def fibonacci(n): if n in (0, 1): return n return fibonacci(n-1) + fibonacci(n-2)
30 June, 2009
Proofs from THE BOOK
Paul Erdos 認為上帝把每一個數學定理最精妙的證明都寫在天書 The Book 中, 同時他還說你不必相信上帝,但身為一個數學家,你應該相信天書, 當然天書並不存在於世界上, 於是數學家 Martin Aigner 和 Günter M. Ziegler 就想要寫一本近似於天書的書, 在 Erdos 熱心地幫助之下, 他們將一些具有高超思想、聰明的觀察和出色的洞察力的證明 加以整理,收錄於 Proofs from THE BOOK 一書中, 此書於 1998 年 3 月出版,可惜 Erdos 在 1996年就去世了, 沒能看到此書問世。 網路上有此書的目錄還有第一章的內容「 質數有無限多的六個證明 」可以試讀。
23 June, 2009
11 June, 2009
Python Idiom: Decorator I
def func1(): print "inside func1()" def func2(): print "inside func2()"
我們希望在呼叫 func1() 前顯示 Entering func1, 而在離開 func1() 後顯示 Exited func1, 對 func2() 的要求也是相同,只是把函式名字換成 func2, 最直接的方法是修改 func1 及 func2 的實作內容, 可是這樣做實在太累贅了, 有沒有辦法把 func1 跟 func2 當作物件, 自己寫一個額外的函式來「裝飾」這些物件? Python 語言中所提供的 decorator 語法可以幫我們達到這個目的 (decorator 就是裝飾者的意思)。 decorator 的使用語法如下
07 June, 2009
使用快取加速遞迴函式
f(n) = f(n-1)+f(n-2), f(0) = 0, f(1) = 1Fibonacci 的公式是遞迴的, 因為要計算 f(n) 需要上次及上上次計算的結果。 直接套定義就有下面的函式 (in Python)
def fib(n): if n in (0, 1): return n return fib(n-1) + fib(n-2)實際測試,會發現上面函式的執行效率非常差, 比方說我們要計算 f(5),套定義,要先計算 f(3) 跟 f(4), 可是要計算 f(4) 又要先知道 f(3) 跟 f(2), 也就是說實際上 f(3) 算了兩次,依此類推 f(2) 計算了三次, 如果 n 很大的話,計算 f(n) 就會重覆很多不必要的計算, 要解決這個問題不難,在函式中加入一個快取來記錄之前算過的值就可以了
31 May, 2009
09 April, 2009
命令列使用:ls、cmd 及 start
ls -t
總是要等好幾秒才會看到結果,
由於這個指令太常用了,
必須想一個替代方案才行,
我的解法是利用 windows 內建的 shell,
ls -t
對應的指令如下
cmd //c dir //b //O-d
cmd 就是 windows 內建的 shell,
選項 //c 表示執行完後面的指令就結束,
而 dir //b //O-d
就是我們想要 cmd 執行的指令,
dir 會列出目錄中的檔案及子目錄,
選項 //b
表示去掉標頭資訊,
//O-d
表示依最新日期排序,
如果不清楚 dir 的使用方法,
可以試試選項 //?
。
下面是兩者的所需的時間:
ls -t |
2.812 secs |
cmd //c |
0.157 secs |
差了 10 倍以上,ls -t 實在太慢了。 接下來介紹一個我自創的指令, 假設想要執行目前目錄下的最新檔案, 比方剛剛下載了一個 pdf 文件或是一個 jpg 檔, 那這一個檔案就是目前目錄的最新檔案, 利用前面介紹的指令再加上 start 就可完成這個動作:
start `cmd //c dir //b //O-d | sed -n 1p`
start 1.jpg
會以預設開啟副檔名為 jpg 的程式來開啟 1.jpg,
而
start 1.pdf
會以預設開啟副檔名為 pdf 的程式來開啟 1.pdf。
問題來了,要怎麼產生目錄下最新檔案的名稱呢?
前面介紹的指令會將目錄下所有檔案由新到舊排列,
但我們只想要第一個,怎麼做呢?
簡單,利用 sed -n 1p
即可。
眼尖的人還會發現 start
後面的字串被反引號
`
括起來,
這麼做的目的是先執行反引號中的指令以取得我們想要的檔名。
出個練習題,寫一個 bash function 假設名稱是 t,
使得 t i
會執行目前目錄下第 i 新的檔案。
答案如下:
function t() { arg=${1:-"1"} start "`cmd //c dir //b //O-d | sed -n \"${arg}p\"`" }
上面用到 ${1:-"1"}$
是 bash 特有的
Shell Parameter Expansion,
非常好用,之前我有舉過一個 例子。
04 April, 2009
托福考試用書
在 Ptt 托福考試板 調查了一些評價不錯的托福考試用書:
- 聽說讀寫: 知英的 TOEFL-iBT 高分托福系列
- 字彙: 托福分類字彙
- 托福考試官方指南: The Official Guide to the NEW TOEFL iBT ,簡稱 OG
書的價格如下:
繁體 | 簡體 | |
閱讀 | 702 | 230 |
聽力 | 702 | 230 |
口說 | 432 | 190 |
寫作 | 540 | 240 |
OG | 1223 | 390 |
字彙 | 432 |
繁體價錢是以博客來為準,知英跟字彙都打 9 折(之前有打 8 折), OG 沒打折,簡體價錢是以奇摩拍賣 留學家族 為準。 繁體書的價格我覺得太貴,後來發現有簡體書可以買,內容好像一樣, 字彙不算在內,繁體與簡體的價差是 3599 - 1280 = 2319 元, 差距有點大,所以除了字彙我打算買簡體的,雖然簡體書的質感會比較差。
此外,我想提一下這一本書「 旋元佑文法 」, 在舊托福時代,文法是考試的其中一科, 所以那時文法書應該很暢銷,我妹剛好有買這一本。 我在念博班,常常需要寫文章,英文文法當然是要強化的一環, 網路上對這本書的評價很高,於是就拿來 K 了。 這本書實在令人驚豔,它改變了我對英文文法的認識, 一直以來,我認為文法都是靠死背或是死記, 可是這本書卻是教人以邏輯判斷來理解文法, 實在是了不起的想法。 不過,這本書已經絕版了,奇摩拍賣上還有得買, 只是 價錢 是出人意外的高,至少是原價 360 元的兩倍以上, 如果真的對這本書有興趣,又找不到人借,可以試試搜尋引擎,會有相當多的相關結果。
31 March, 2009
分析遞迴結構
(A ((B (C D)) (E F)))根據括號的順序以產生下面的結果
(C D) (B (C D)) (E F) ((B (C D)) (E F)) (A ((B (C D)) (E F)))該怎麼做呢?
27 March, 2009
26 March, 2009
校慶 3000 公尺
3月25日是學校校慶,我參加了 3000 公尺的比賽, 今年比賽日期是到3月初才公布, 害我只有3個禮拜的時間可以準備, 平常都是練 8-10 km 順順的跑,沒有特意加強速度, 為了參加比賽,我還練了間歇跑提升速度。 根據練習的數據來看,我最快可以跑到 11 分 30 秒。 去年一直在受傷的陰影中,沒辦法參加比賽,直到今年初才完全復原, 再加上又老了一歲,我想應該沒法在這一次比賽中突破之前的記錄。
07 March, 2009
用 bash 及 mv 換檔名
a.vcproj -> a.vc9.vcproj b.vcproj -> b.vc9.vcproj a.vcproj -> c.vc9.vcproj其實只要用 bash 寫一個 for 迴圈就解決了