小松鼠嚇了一跳,有了魔法眼鏡後,這世界看起來完全不一樣了

2013年7月2日 星期二

追求卓越 成功就會隨之而來


標題這句話來自電影三個傻瓜,是該片主角的名言。
在 PTT 電影板看了一些討論,意外發現,不管喜歡或討厭這部電影,幾乎沒有人真的懂這句話在講什麼,有一些人大致上模模糊糊了解,但一些關鍵點說得不是很精確。
比方下面引用某討論
: 看一部電影我通常都會想一下他想表達的是什麼  
: 三個傻瓜很明顯就是在諷刺教育體制的問題  
: 諷刺社會刻板印象與填鴨式教育中所培養出來的人 
  再說一次,導演想表達什麼大家都知道
  問題在於他的表現手法相當糟糕
: 為了考試而讀書(無聲屁)
  讀書是手段,考試是中間過程,功成名就賺大錢是 他的目的 當他的志向是如此,又怎麼能說他的方向是錯的呢?
  到頭來只是回到表面高尚的問題而已
不管正反兩方都沒有搞清楚那句話的意思,甚至還有人記成類似「追求自己想要的,成功就會隨之而來」。
先不論這句話是否正確,電影是否過於浮面膚淺,總要先了解這句話在說什麼吧!
我用下面這個實驗來說明(很遺憾,我找不到資料來源,就當成是個故事好了)。

有心理學家找一些人來做實驗,讓受試者做一些測驗,讓受試者們來比賽。想當然爾,名次好的會有獎品。

這些受試者被分成兩種狀況。
第一種是完全不讓他們知道其他受試者的目前成績或者任何資訊,只讓他們埋頭苦幹。
第二種,則是給他們即時的敵手資訊,包含做了幾題,得到幾分等等。

顯然有了競爭對手的得分、排名資訊,可以幫忙調整策略。 比方如果時間快到了,分數還差很多,顯然就需要冒險挑戰分數較多的題目,才能擠進得獎圈。
現實生活中,有大型比賽經驗的人,多少都會看一下別人積分,然後調整自己的策略吧。

所以第二種的受試者,明顯有利,看來實驗結果只告訴我們這些資訊的幫助有多大而已。
結果很意外,第一種的受試者反而表現的比第二種要好。
最簡單的解釋就是,這些額外的資訊反而會干擾受試者的表現。專心提昇自己的分數,反而更有效果。

當你的目標是世俗所謂成功的時候,就像老梗笑話講的一樣,「我不需要跑得比老虎快,只要比你快就好了」。你自然會想卡位、攻擊對手。因為你的焦點本來就是擊敗對手。
但是反過來,你的目標是提昇自我,成就偉大結果,那你的焦點會放在遠方的目標上,會放在自己身上,而不是對手身上。也只有這樣,你才有可能跑得比老虎快。

所以電影中無聲屁為了追求第一名,不只是自己唸書,而且還想辦法讓別人考不好。最後還千方百計的想要證明自己過得比藍丘好。

不過,以上只是單純解釋一下這句話。
不要忘了,電影中的所有學生都是有天份又努力的人,現實生活跟實驗條件也不完全一樣。

2013年7月1日 星期一

超人:鋼鐵英雄觀後感

(可能內含電影以及東野圭吾小說「時生」的情節)
到了我這個年齡,周圍的朋友都有了孩子。問及生下孩子的原因時,所有人的回答都是「順其自然」之類。但我更想知道的,是他們能否在孩子面前自信地問:「作為我們的孩子,你覺得高興嗎?」孩子是否會回以「我非常慶幸有你們這樣的父母」,其實是永遠的謎。我一直想解開這一謎團,這便是《時生》的源頭。——東野圭吾
小孩出生後,就很少進電影院了。上一次進電影院看的是賽德克巴萊。
昨天難得的去看了一場電影。因為很難得進電影院,所以選了應該有很多特效的超人來看。
最後的打鬥的確符合期待。令我意外的是,前半段的情節能打動我,讓我感動。這種感動有種似曾相似的感覺。回家回想了一陣子後,發覺原來近似於閱讀東野圭吾小說「時生」時的感動。
時生這部小說講的是主角的小孩患有天生疾病,即將去世前,穿越時空回到了主角年輕時,與主角相。
年輕時的父親與兒子經歷了一段旅程後,更加了解對方,而且一同成長了。
主角本身無可避免的有自身的包袱。他是一個從小被遺棄的養子,對自己的生母不諒解。
故事主軸,圍繞著孩子是父母的未來這回事(包含生父母以及養父母)。
「未來不僅僅是明天而已」。
某種意義上來說,這個未來包含了父母對於理想的寄託。

有興趣的話,可以找小說來看,或者搜尋一下網路上的書評,因為我的描述過於精簡而且不精確。

從這個角度來看「超人:鋼鐵英雄」的劇情,就很容易了解了(我情節有可能記錯,不過以下是我的理解)。
開頭的一大段,說的就是超人父親 Jor-El 如何將未來寄託於超人(Kar-El) 的故事。
Jor-El 認為有希望、有不同的可能性才有未來。除了象徵極理論意義外,超人的母星也實際上因為超人種族採取僵化的制度而即將滅亡。
很多小朋友會吐 Jor-El 很腦殘的被 Zod 刺死。其實 Jor-El 的未來都已經寄託在隨著小艇出發前往地球的 Kar-El 身上了,他也認為自己和所有這個星球上的人早已死了,所以自己的生命根本不重要了。
打個比方就像是你跟對手下一盤很重要的棋,最後你贏了,把王吃掉,比賽結束。你會在意對手惱羞成怒,翻桌把棋盤砸爛嗎?
這是一個標準的別人笑我太腦殘,我笑他人看不穿的典型範例。
當然 Jor-El 大概沒料到電影為了曾增加緊張氣氛,讓 Zod 命令屬下攻擊小艇,所以其實他還沒有確定成功。不過就算他還活著,也沒有辦法改阻止 Zod 他們,他已經達到他能完成的最好結果了。
電影中多次強調 Jor-El 夫婦認定克里普頓星上的人都已經死了。不是因為星球即將爆炸(後來他跟實際上還活著的 Zod 說過同樣的話),星球爆炸只是一個「果」而已。而是因為他們因為僵化的社會、文化,而失去了希望與未來。
「未來不僅僅是明天而已」。用 Jor-El 的話來講,就是活著不僅僅是活著而已。

另外一個被狂吐的點就是超人的養父 Jonathan Kent 之死。

Jonathan 時常叮嚀 Clark 不要顯露他的能力,因為 the world is not ready.
很多人會覺得你就像正常的超人一樣不就好了?到處救救人,成為超級英雄,大家不就會相信你了?搞什麼悲情捨身救狗,簡直太腦殘了。
其實捨身這件事情,有點像是干將莫邪的捨身煉劍,有種藝術上的必須性。 Jonathan 心中的 Clark 就是將來必有大成的偉大寶劍一樣。原料是有了,但是靈魂還沒有完善。
如同 Jor-El 一樣,Jonathan 也將 Clark 視為未來,自己信念的延續。
Jonathan 問 Clark,難道種種田不也是幫助人嗎?為什麼一定要用超能力來救人?
他的意思並不是要 Clark 待在小鎮一輩子不出去。
他的問題就只是一個問題。 如果 Clark 連這麼簡單的問題都無法很有信心、很清楚的回答,那他還沒有準備好。
世界還沒準備好沒錯,但世界永遠也不會準備好。 問題不在於世界是不是準備好了,而是你有沒有準備好面對這個不理想的世界。
可能有人會說,能力那麼強,是要準備個什麼啊。
打個比方,每天能治好一個人的疾病,什麼病都能治好。這能力夠強了吧。但你要怎麼決定哪一個人該活?先不論到時候黑道特務什麼的把你抓走,脅迫你這回事。你先要面對的是自己的良心,我真的選擇了最該幫助的人了嗎?
好吧,你可能會說,這是能力不夠強的緣故。那讓我加強一下你的能力。你每天可以選擇跟以前一樣救一個人,或者救最多十個人,但之後三十天都不能救人。這時候當有人求你多再救一兩個人的時候,之前你可以攤手說抱歉,剛才用掉了,明天請早。現在要怎麼說?因為你還不夠慘,一個月內還會有比你更需要幫助的人的機率是 0.673。
要不要再讓你更強一點,可以選擇一天都不救人,把名額存起來,可以給你利息喔!
能力越強,煩惱會越多。心理如果不夠成熟,最簡單的作法就是完全把良心丟掉,很簡單的訂個價格,一千萬起跳下標,價高者得。 額外名額三億起跳。
對巴士見死不救,也許有點慘忍。但重點倒不是救或不救,而是他是否有辦法承擔自己的決定。


更何況,前面還只是自己內心部份。直到電影最後,軍方都還對他不完全信任。
所以小時候的 Clark 會害怕的把自己關起來,說世界太大了。他的養母給了他不錯的回答,後來牧師也給他不錯的回答。他的養父也以生命做例子,告訴他堅守自己的信念,可以到怎麼樣的地步。但養父不直接給他答案,因為只有他自己去找,才能找到自己的答案、自己的定位(而不是被指定的答案,被指定的角色。不然就像原克利普頓星人一樣了)。
當然很離譜的是, Clark 居然能遇到這種干將莫邪等級的養父母。也許就像時生一樣吧,父母其實也會與小孩一同成長。

雖然情節還是有許多不完美處,深度上,我也比較喜歡「時生」給我的感動,但看的時候,的確能趕受到電影中傳達的情感。

2013年6月24日 星期一

ㄈㄈ尺正夯

 男人對 CCR 的恩怨情仇不是一天兩天的事情,我老爸年輕的時候,就做過拿石頭丟路上散步的 CCR 情侶這種熱血愛國的事情。
不過還在用 LKK 這種詞的 LKK 可能不太了解這些新詞,所以下面做個解釋整理。

  • CAR: Cross Automobile Romance 的簡寫,以前叫做車震。少數人當成 Cross Age Romance,但現在通常用 Cross Generation Romance。
  • CBR: Cross Brotherhood Romance 的簡寫,超越兄弟情誼的羅曼史。可視為甲甲或 BL的通稱。
  • CCR: Cross Culture Romance 的簡寫,有些人堅持稱為 ㄈㄈ尺(因為平常沒有其他機會展現過人的機智與知識)。
  • CDR: Cross Dimension Romance 的簡寫。通常是指二次元及三次元之間的戀情。由於跨次元通訊技術相當困難,所以通常是單方向。
  • CER: Cross Evolution Romance 的簡寫。Ex: 新聞
當然 CFR - CZR 也都有,不過由上面的舉例,相信大家應該都能舉一反三。
由於 PTT 上只有 CAR 和 CCR 有板,顯然不公,所以常常引起其他族群嫉妒與攻擊。

2013年5月26日 星期日

我的 PyCon Taiwan 2013 投影片

2013年4月27日 星期六

用正常人的方式在 Go 裡面做大數運算

Go 裡面沒有 Operator Overloading 的功能,所以雖然內建 Big Integer,但長一點的計算會變得很醜,比方說你要算個 (5*2+3*6)%10 好了,樣子就會有點像是
a := big.NewInt(5)
a.Mul(a, big.NewInt(2))
b := big.NewInt(3)
b.Mul(a, big.NewInt(6))
a.Add(a, b)
a.Rem(a, big.NewInt(10))
更複雜一點的算式就更難懂了。其他像是矩陣、分數、向量、多項式或者任何自訂的計算 type,下場都一樣悲慘。
底下是利用內建的 parser,壤我們可以用正常人的語言在 Go 裡面計算。
雖然有人會說什麼失去了編譯時期靜態檢查的特性,但真要比除錯,寫個 E("(5*2+3*6)%10") 絕對比上面一串外星文出錯的機會比較小一點。
可以到 http://play.golang.org/p/Toqkc4XY2J玩玩看。

2013年4月25日 星期四

Go 1.1 達到類似 Python 的 map 及 list comprehension


Go 1.1 的 reflect 新增了 SliceOf, ChanOf,以及 MakeFunc。
SliceOf 及 ChanOf 可以達到類似於 Python 裡面的 list 及 iterator 的功能,MakeFunc 可以搭配 Call 使用,達到類似 decorator 的功能。
以下是簡單測試了一下 Python 的 map 及類似 list comprehension 的效果。


2013年4月15日 星期一

Google Jam 2013 資格賽題目的數學證明


這篇用英文打的,就不轉成中文了。原來的題目可以在這裡找到。

1 Problem A. Tic-Tac-Toe-Tomek

No math involved, but complex number is builtin in python and go, so I use to represent “ “, T, O, X. So if , then some one won.

2 Problem B. Lawnmower

Theorem. is a possible pattern if for every .
Proof.
Can be easily proved by induction on , where .
         
     

3 Problem C. Fair and Square

Let , where and . Denote by the -th digit of , then we have .
Assume is a palindrome, i.e., for every .
Let be the coefficient of of that is,

Theorem. is also a palindrome iff for all .
Proof.
( )
Trivial.
( )
Observe that for all . We prove the statement by mathematical induction on for .
Case :
Since and it is easy to see that . So .
Moreover, we also know that has digits and hence for all .
Case :
Suppose for all , we want to show .
By the induction hypothesis, we know that for all . So
On the other hand, Therefore, , hence
  
  
Corollary. is also a palindrome iff .
Proof.
.
( )
for every by Cauchy-Schwarz inequility.
( )
Trivial.
In particular, if , then .

4 Problem D. Treasure

Let be the set of all key types. Assume .
Construct a directed graph as following:
  • iff we starts with at least one key of type .
  • If , then iff there is a key of type in a box of type . for every palidrone by Cauchy-Schwarz inequility.
Denote by the number of boxes of type and the total number of keys of type (including the keys you start with and keys in boxes).

Theorem. All box can be opened iff for every , and there is a directed path from to in graph .
Proof.
( )
If , then we don’t have enough keys of type to open all boxes of type .
If there is no path from to , then it means we are unable to get any key of type .
( )
We prove this by induction on the number of boxes. Denote by the number of boxes.
Assume for every , and there is a directed path from to in graph .
Case :
Then all vertices in are leaves except and the type of the only box. So there must be an edge from 0 to the type of the box.
Case :
Suppose the theorem holds for the case with boxes.
There are at least one . Consider we open a box of type (that contains a key of type if possible). Assume we destroy the key and the box just opened, then we have a setting of boxes. In this setting, we still have for all . Let be the directed graph of this -box setting.
If , then all children of in become children of , can still reach all other types in .
Assume .
If , then we can open a box of type that contains a key of type .
Otherwise, because , we still hold at least one key of type after we open a box of type (and destroy the key).
Either way, . Therefore, for every child of in , either
1. (if a key of type is in the box we just opened), or
2. and so there is a path from to and then to .
So can still reach very vertex in .
By induction hypothesis, the remaining can also be opened.
  
  
By the proof of the theorem, there is a simple algorithm to open all boxes: open any box unless you have just one key of that type and box does not contain a key that can open itself.
However, this algorithm may not yield a "lexicographically smallest" way to open the boxes.
The solve the problem, you should open the box with smallest number such that either this box is the last one of type or there is still a way to get a type key.