2009年2月24日 星期二

為什麼有些書無法產生共鳴

昨天晚上,終於把去年買的《隱字書》 (原書名 Emdymion Spring, Matthew Skelton著) 讀完了。

這篇不是讀書心得報告,要交作業的可以跳過 XD

書背的折頁寫著,愛爾蘭獨立報的評價是,「這本書將威脅《達文西密碼》的賣座地位……真讓人愛不釋手。」

不論是達文西密碼,還是隱字書,不知道為什麼,看完以後總覺得少了什麼。
書本身不算難看,但總覺得失落,無法產生共鳴,似乎不明白為什麼評價會如此高。

剛剛洗澡的時候,突然領悟到一點:也許是文化的差異。

聖經對於西方人來說,是從小就深深刻印在腦子裡的既成印象,是真理,是與挑戰、質疑絕緣的事物。

也許在西方的國小國中歷史課本,就有教 Gutenberg 是活字印刷的發明人,是為了考試死背下來就對了的人名。

沒有相同文化背景的我們,在看這些書的時候,其實跟看銀河英雄傳說之類的架空小說,感覺並無兩樣。

換個位置想,今天你拿本火鳳燎原給外國人看,他可能分不出來跟北斗神拳的差別。

什麼?沒看過火鳳燎原?那換個例子。

如果有這麼一篇小說,裡面描述那些武將其實都是未來的機器人,劉備曹操孫權其實是坐時光機過去的未來人,諸葛亮是台超級電腦,華陀是一群爆肝死RD組成的團隊,幫關羽刮骨療毒只是售後服務,換根手臂而已。

任何一個中國人都看得出上面這個故事在惡搞,但是如果寫的夠生動,有創意,偶爾再抓幾個梗出來跟史實相呼應,說不定也可以大賣。

如果拿給一個沒讀過三國的外國人看,他會有什麼反應? "關羽? Who is he?"

當你好不容易把三國的歷史介紹完後,他會怎麼寫讀後心得?

"Sango is an advanced dynasty. There are many strong robot generals."

最後說不定還以為楊威利也是三國的人。

另一個無法產生共鳴的原因是,我們國小的課本教的是,發明印刷術的是中國人。

Gutenberg? 誰啊? Coaster? 那是誰? Emdymion Spring? 那又是誰?

2009年2月16日 星期一

Demo 之 Murphy’s Law

"Anything that can go wrong, will"

“如果有件事有可能會出錯,它就一定會出錯。”

 

不只!就連不太可能會出錯的,在關鍵時刻也會出錯!!

 

星期四到台北 Demo,之前已經演練了非常多次,測試了很久的時間,整個影像就是很順。真正到了 Demo 現場,機器架好,很有信心地把程式跑起來。

喵喵樂!為什麼昨天下午還跑得好好的程式,現在開始抖起來了!我的心也跟著抖起來了。

原本很順的畫面,現在變成會回頭;換句話說,就是人往前走,會後退抽一下,再往前走,再後退抽一下;嚴重的時候還會來回抽動好幾下。

把所有的設定全部檢查過,無誤;重新 reboot 再 run,照抖;全部的線重新接過,再抖。

火大換 CODEC,換成原本因為效能考量不 demo 的 H.264,咦?不抖了。見鬼了。

再換回 H.263,咦?又抖了,哪有這樣的啦!

在現場以為前一天 H.263 改到什麼東西,導致整個影像不正常。馬上決定改 demo 會卡卡的 H.264,至少畫面不會跳來跳去。

 

回到新竹後,開始查原因。查出來的時候差點飆淚:原因出在光線。

我們測試的環境,一向是在日光燈底下;當天 demo 現場是鵝黃色美術燈那種燈光,導致 webcam 認為環境很暗;又很巧,webcam 會自動隨著環境的光線調整光量;調整進光量的兩個因素,一個是快門,一個是光圈;webcam 的光圈已經固定,所以能動的只有快門;也就是說,光線越暗,快門的時間越長;快門越長,我們從下指令要從 webcam capture 一張畫面等待的時間要越久。

在每秒鐘 10 張 frame 的情況下,display 每 100ms 就會跑一次,只要 capture 並 encode 一張 frame 的時間超過 100 ms,就有可能發生 capture 一張,display 兩張以上的情況。也就是說,display 跑了兩次,會拿到同樣的東西。

照這麼說來,理論上畫面只會停在最後一個畫面,為什麼會跳來跳去?原因在於,實作 display 的同事,參考的 sample code,使用了 ping-pong buffer;簡單地說,buffer 有兩個,分別存了最後一張和倒數第二張的 frame;display 在存取時,會照著 buffer 1, buffer 2, buffer 1, buffer 2 的順序不斷抓 frame 出來 play。當 decoder 沒有資料寫入,把 buffer 更新時, display 就會一直抓到上一張、上上一張、上一張、上上一張;最後結果就是變成我們看到的,我又跳過來啦,我又跳過去啦,我又跳過來啦,打我啊笨蛋的情況。

 

所以,天時、地利、人和,缺一不可,在 demo 的時候,集所有不可能於一身的情況發生了,它就開始抖了。

 

再次證明了 Murphy’s Law 的真理。