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

2014年2月27日 星期四

用 python turtle 寫 Flappy Bird

這個 Flappy Bird Clone 的主要目的是拿來當某種形式的初學者 Tutorial。
第一次使用是在花蓮.py 二月聚會,當作一系列介紹 Python 遊戲框架、引擎、工具的一部分。更精確地說,是拿來當作這一系列的開頭。因為在介紹這個簡單遊戲的撰寫過程後,就會發現 turtle 缺少什麼東西(進階繪圖功能、音效、物理引擎、碰撞偵測),然後我就可以順理成章地說,這就是為什麼我們需要遊戲引擎。替往後的介紹鋪路。
不過在寫這個 Demo 的時候,我主要還是以程式語言初學者 Tutorial 的方向來思考。所以寫的過程中,盡量不使用我認為比較進階和複雜的概念。所以複雜一點的 nested function、 OOP、decorator、 yield 這些都盡量避免了。
我還是有用一個 class 定義, 但那純粹拿來當成 struct 用,避免太多需要修改的 global variable。
裡面也有一個 lambda, 但那個 lambda 是準備拿來說明 lambda 語法的。
也許這個原因, 所以被 Keith Yang 發現在 Python 2.7 也能跑。
同樣也是因為教學的理由,所以只用內建的 turtle module。音效方面也捨棄 PyAudio 而採用呼叫 mplayer。
這個 project 以後會慢慢變成 step-by-step tutorial, source 在 https://github.com/tjwei/Flappy-Turtle
配合 python 3.3 或 2.7,使用空白鍵就能玩。

2013年12月27日 星期五

The Time of The Doctor 語錄


蒐集一些 Doctor who 2013 聖誕特輯的對白
Everybody's naked underneath.

Works two out of three times, guaranteed
Number ten once regenerated and kept the same face - I had vanity issues at the time.   
講實話的時候,總是比較好笑一點。
Boss of the psycho space nuns. So you!   
不曉得,總是覺得上面這句好像該收進來。
Oh, Doctor, fixing toys and fighting monsters.
如果不常常修理玩具,那怎麼打怪呢? 因為根本分不清誰才是怪物啊。
We all change... when you think about it. We're all different people all through our lives.
And that's OK, that's good, you've got to keep moving, so long as you remember all the people that you used to be.
沙烏地阿拉伯諺語說, 「若是在沙漠中迷路 就只能尋原路折返」。我們會不斷改變。像是學了很多魔術之後,往往會忘了當初還不了解魔術時的那種感覺,甚至會感覺過去的自己很陌生。當然不只魔術,學其他很多東西到了一個程度之後,都會有種重生(regenerated )成不一樣的人的感覺。但不要忘了最初的感動。
I saw him on a pier on a rainy day.
I'd seen him before, lots of times. But he just looked so beautiful standing there.
I wanted everything to stop. I wanted nothing to change ever again.
If he could just keep standing there, so beautiful...
每個人都有希望時間靜止的時候(......不是那一種),有那種希望感動的剎那能夠變成永恆的經驗(或者將會有這種經驗),有時在那個當下,有失去時間感的錯覺。這也就是很多人不知怎麼,就是喜歡拍照的原因。

I will not forget one line of this. Not one day. I swear. I will always remember when the Doctor was me.
Better than "I don't want to go".
對於 11th 的結局,不管是遺憾、不捨還是滿足,套句沙烏地阿拉伯的諺語總結:「無論如何旅行仍有得不到的財富」

2013年12月19日 星期四

松鼠博士的 2013 回顧


年終歲末,檢視一下【松鼠博士的魔法眼鏡】 2013 年的文章。
發現這兩年因為小松鼠出生的緣故,心態慢慢轉向思考要為小孩和年輕人準備一個怎麼樣的世界。


魔術相關:
就我而言,希望、夢想以及無窮的可能性是魔術最寶貴的價值。 --  不用後製的姨夫 Style 魔術 
上面這篇引起一些爭議,稍微延續了 YIF 事件的熱度,可惜不夠久。

後製魔術影片是否會驅逐"真正的魔術"?我覺得不會,我對於人類的好奇心相當有信心。假使我錯了,真的如王偉忠所說的,跟不上潮流,大家都比較喜歡後製的魔術影片,那也無妨,就讓傳統魔術就像傳統戲曲一樣,從大眾轉向小眾,電影、電視劇變成大家主流的戲劇。 不過我認為他的機會渺茫就是了。 -- "視頻魔術"的爭議

今年也請了粘立人老師和梅幻牌老師來東華大學演講和教魔術。

就在你拿出繩子後,突然聽見一位小朋友在台下大聲說:「我看過了耶...你是不是要學電視上大魔競的剪繩還原?」。
「天哪!我連剪刀都還沒拿出來啊。」 你心中跑出來這樣一句話。 -- 魔術師的小朋友問題
舊文重貼,不過也許該歸到故事類吧。

故事類:


會場的氣氛就好像打開窗戶一樣,馬上活了起來。
「是啊,哈哈!賣給猴子的話,一定大賣呢!」
「可以順便附送一隻 iMonkey 就好了啊。」  -- 發明多點觸控的故事(一)
史提夫其實也有一樣的想法,他無法否認,他記憶中的「正常」世界,隱藏著讓人不安的不合理。
事實上,在他還有十隻指頭的時候,就一直有這種違合感了。 -- 發明多點觸控的故事(二)
據說史提夫還沒被解雇的原因,是老闆覺得他上次的報告很逗趣。 -- 發明多點觸控的故事(三)
難得把 TODO list 中的故事真的寫出來。

電腦類:
學了 Go,

練習用 Blender 畫 Python Girl

弄了個可以當成 python, ruby, java, perl  來跑的圖檔


開始玩 Arduino, BeagleBone black, raspberryPi, Lego Mindstorm。

不過這類文章很多,就沒辦法一一列出了。


心靈雞湯類:

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

「未來不僅僅是明天而已」。某種意義上來說,這個未來包含了父母對於理想的寄託。
如同 Jor-El 一樣,Jonathan 也將 Clark 視為未來,自己信念的延續。
Jonathan 問 Clark,難道種種田不也是幫助人嗎?為什麼一定要用超能力來救人?
他的意思並不是要 Clark 待在小鎮一輩子不出去。
他的問題就只是一個問題。
 如果 Clark 連這麼簡單的問題都無法很有信心、很清楚的回答,那他還沒有準備好。

同樣的,雖然
Jonathan 時常叮嚀 Clark 不要顯露他的能力,因為 the world is not ready.
但他的意思並不是要等世界準備好才顯露能力,而是
 世界還沒準備好沒錯,但世界永遠也不會準備好。 問題不在於世界是不是準備好了,而是你有沒有準備好面對這個不理想的世界。
以上是鋼鐵英雄觀後感,這部根本應該在每年父親節上演才對。
所以我完全同意如果媒體增加國際深度,就會增加整體國民的國際觀的這個因果關係。但全世界最沒用的就是這個「如果」。這樣的說法,就像說:你被曬傷,並非因為你沒擦防曬油就出門,而是因為太陽太大。如果太陽沒有那麼大,就不會被曬傷了。  -- 沒國際觀是因為媒體很爛,那然後呢?
雖然並非公認如此,但我覺得真夏方程式是加利略系列中,讓我感覺最深刻的一部。
一開始的文字,描述的是真夏方程式的故事,也是描述台灣這個夏天的故事。
在小說中,湯川學為了防止「某人的人生被扭曲」,決意揭開真相。
「任何問題一定會有答案。」
「但答案不見得能立刻導得出來。換成人生也是一樣。今後你會碰到很多無法立刻提出答案的問題。每一次煩惱都有價值,但沒有必要焦急想要找出答案,很多時候自己必須成長才找得到。所以人一定要學習要努力要不斷磨練自己。」
當你決定要開始追求答案時,答案不會自己跑出來找你。只有自己動手驗證、了解,答案才會是你的。
所以湯川學帶著小孩一起動手做實驗。但科學有極限,人也有極限。找到答案的過程也許很難,也許辦不到,但像是湯川學這樣的科學家會告訴你,你不是孤單一個人,有很多人都跟你抱著同樣的問題,一起煩惱下去,直到找到答案為止。 --  真相の方程式

當一個人可以帶給大家歡笑、讓人快樂時,我們會喜歡他。但喜歡他的原因並不是他有讓人快樂的這個貢獻與功能... 你喜歡他是因為你感到快樂 ...
不過,如果你是一個經紀人、秀場老闆,就會以他帶給人歡笑的能力來衡量他。因為你本來就不是把他當成人來衡量他。今天如果一隻猴子、甚至一顆石頭更受觀眾歡迎,你一定二話不說的一定選猴子和石頭。 -- 樹不當木材,人拒當人才

不過似乎最受歡迎的是當個興趣人。看來這似乎是不少人共通的生活經驗。

2013年12月15日 星期日

要當個興趣人

CC-BY-SA-NC Ben Rollman

前一陣子有篇「大學生應該避免的事」引起了一些討論。我大致上認同,不過我對於「不要當興趣人」這點倒是持相反的意見。

首先看其中碰到的症狀:
每次看到學生說「這不是我的興趣」、「和我想要的不一樣」,我雖然會細心引導其脫困,但其實也都覺得有點倒彈。
所以他要年輕人挑一些沒興趣的事情來做,然後鍛鍊意志力。而且,不試試,怎麼知道自己沒興趣呢?

乍看之下這樣的論點言之成理,沒有什麼問題。不過呢,請仔細聽一下上面學生說的話。注意到了嗎?他說的是自己「沒興趣」、「這不是我想要的」。
沒有錯,他很明白說了「沒有興趣」,那你怎麼會覺問題在於他是「興趣人」?
你請別人吃東西,別人說不想吃,你會要他別當貪吃人嗎?

問題反而在於他不是「興趣人」。

可能有人會覺得這根本是詭辯,況且,誰沒有幾個興趣呢?唱歌、跳舞、打球、看電影、看漫畫、玩玩神魔之塔、旅遊什麼的。

先讓我告訴你什麼才叫做興趣。很多人有的不是興趣,而是打發時間的消遣。

狂熱與挑戰是「興趣」的要素。

會讓你瘋狂、廢寢忘食的才叫做興趣。
有挑戰,會讓你想要不斷鍛鍊、鑽研、進步的才叫興趣。

我認識不少寫程式、玩魔術、下棋的瘋子。但不限這些領域,打牌、唱歌、跳舞、打球、衝浪也很多瘋子。當你對一件事情擁有狂熱興趣時,必然會被沒有狂熱經驗的人當成瘋子。

那些等我退休、等我有時間我就要來學跳舞、學日文什麼的,不叫興趣。有閑情逸致才做的事情,依照定義就是打發時間的消遣罷了。
興趣是你沒時間也要硬擠出時間來做的事。

挑戰跟難度不完全一樣。擲骰子等待四個六出現當然也很有難度,但除非你正在鍛鍊你控制骰子點數的能力,那也只是消遣。

拿神魔之塔當例子好了,這可以是一種興趣,也可以只是一種消遣。當你轉珠能力或者是遊戲中的相關知識、策略有在不斷進步時,那的確可以算是一種興趣。但絕大多數應該只是打發時間,轉移對現實的注意力。 星海就比較有競技以及進步的空間。

我認為大多數學生的問題在於沒有真正完整的「興趣」的經驗(或者說成年人也一樣)。

培養興趣這種事情是會成癮的。當你真正對一件事情產生過興趣,產生過狂熱之後,你會很難忘懷這種從無到有、從不會到會、改變人生的經驗。你很自然的會繼續嘗試其他的興趣,企圖重複這種過程。一次、兩次之後,慢慢就會養成習慣。
之前用  blender  來畫 python girl 是一個相當不理智的決定。因為找專業的畫師,絕對可以達到更好的效果。但是我無法抗拒學習、摸索新東西的那種感覺。

當你治好興趣缺乏症之後,你會對所有事情都充滿興趣。真正阻礙你,讓你沒有辦法從事某項興趣的唯一原因是(除了維持你的生命跡象和基本生活水準的時間外),就是你正在做一件你更有興趣的事情。

我沒有 DIY 四軸飛行器及 3D印表機的原因,不是沒興趣,而是我一直有更有興趣的事情在做。我最近練了 Freeline 飄移板,不是我突然對他產生興趣。我大概五六年前聽說這個東西後就有興趣了,只是我的興趣列表很長,我要靠機緣來決定要從事哪一項。

就像一個電玩迷,通常不會只迷一個遊戲。一個電影迷也很少只看一部電影。一個「興趣迷」自然會不斷尋求新興趣。一直反覆看同一本小說的,也難稱為小說迷。
有多次這種「興趣」的經驗後,你甚至可以刻意誘導自己,讓自己對特定事物產生興趣。

所以真正的興趣人是不會回答「這不是我的興趣」的(除非你太像是要來直銷或傳教的)。

也是有人對於某種興趣入迷後,就當成終身志向。很多大人會這樣擔心小朋友誤入歧途。
但通常一個事物越鑽研下去會越難,如果他能持之以恆,不斷破關,持續進步,有何不可? 怕只怕已經不是興趣,而是變成習慣和舒適圈了。

反而是因為太多大人過分強調什麼是正事(讀書),要小朋友把興趣當成是做好正事後,閒暇之餘行有餘力再做些「休閒嗜好」來陶冶性情。其實連大人們自己也是這樣對待自己的「興趣」。
因為這樣的觀念影響,才讓許多學生從來沒有完整的「興趣」經驗,也對於興趣帶有罪惡感,覺得好像得要很痛苦的做「正事」才是正途。 弄得有點像是興趣的厭食症。

沒有興趣,才需要刻苦的培養意志力。

就算再枯燥無味,只要有愛,就沒問題了。
但你能期待一個沒有愛過經驗的人,直接越級打怪嗎?



2013年11月1日 星期五

Great Python Challenge

就像長頸鹿問題一樣,我們也來個蟒蛇 Python 問題。
答案的程式碼很短,不過是個 one-liner,所以不用擔心花太多時間 。


失敗者請換上蟒蛇相關照片,直到想出來為止。
準備好了嗎?
題目在下面。

2013年9月22日 星期日

派特的幸福劇本 Silver Linings Playbook


雖然 MOD 上有不少我平常會選的影片,如鋼鐵人三、闇黑無界:星際爭霸戰,不過我最近選的影片是名魔生死鬥、派特的幸福劇本這類比較小品的東西,原因是不想讓小孩經過旁邊時,看到太多暴力場景(雖然看了才發現,其實這兩部的內容也不太適合小孩看,特別是名魔生死鬥)。
名魔生死鬥及派特的幸福劇本的故事結構還挺類似的,降到谷底的主角,最後又找回春天,老套到不行。所以情節大綱老套根本不是缺點,就像螢幕比例 16:9、棒球比九局、烤雞是拿雞來烤一樣,只是一種套路規則。重點在於如何處理及敘述這樣的故事。
名魔生死鬥不算太差,我不後悔花錢看,也得到一定的娛樂,但就算我沒看過,肯定也不會覺得遺憾。
相對來說,我比較喜歡派特的幸福劇本。嚴格來說,就算錯過這部影片,我大概也不會覺得太遺憾,但我很高興我選了這部電影,特別是這個片名對我的吸引力很低。
整體的調性來說,介於沒問題先生及充氣娃娃之戀中間。整部片的幽默與情感起伏,都很平淡,但是看起來很舒服。


以下有劇透,我覺得以這部影片來說,沒看過之前先不要看內容比較好。


主角剛從精神病院出來,被許多人視為避之惟恐不及的瘋子。主角的確在情緒及精神上有些障礙及困擾,但現實生活中,每個人多多少少都有類似的困擾,憑什麼來判定誰是瘋子而誰不是?這條線由誰決定?我想,每個人都有自己的一把尺,而且多少有點主觀。
結局的給分象徵了這回事情。5.0 以上是沒問題,不到 5.0 是壞的,即使多數人給了你低於 5.0 的分數,但真正重要的是有人給你超過 5.0 的分數。
主角一開始對很多事情感到憤怒與執著,最後發現了許多人都在用自己的方式在幫助與愛他,(雖然有些幫助的方式,看起有點討人厭),但轉念一想,就像主角跟他哥哥說的,我能給你的只有愛了。每個人都不完美,都有能力上的限制,只要能對不完美有所包容,就能接受與欣賞別人的這些舉動了。
這些舉動包含派特的父親找他看球賽、他母親一碰到家庭緊張氣氛就提供點心食物、女主角主動獻身,甚至他哥哥老是要用言語酸他。
主角最後接受了這些愛,而且反過來用自己的方式回饋這些關心他的人。事實上,有時候接受別人的愛與幫助本身就是一種回饋。
另外一個有趣的點,就是提醒我們「有策略的瘋狂」很重要,因為這就是你的特質。
片名的劇本或者 Playbook,就是指戰略、策略。女主角說:"there's always gonna be part of me that's dirty. But I like it"。每個人都有自己瘋狂的一部分,保持正面的態度來看問題,才能找到一線曙光(雖然有點多餘,還是強調一下,不只是正面,還要看問題)。


Arduino, Beaglebone, Raspberry Pi, Lego Mindstorms 心得比較(下)


RPi

我只裝了以及跑了一下 RPi,安裝上面還算容易。儘管官方的版本跑的是 LXDE,感覺跑完整的圖形環境還是太吃力。連帶的,我也比較難利用零碎的時間測試一下原本想測試的 WIFI USB Adapter 和無線鍵盤滑鼠。
我想過利用 RPi 來在某種有限制的環境下做軟體/程式設計教學的可能性,不過主要的困難一個是上述圖形環境太慢的問題,二是要找個適合而且便宜的螢幕才行。

Beaglebone Black

BBB 在價格上不會比 RPi 貴多少,大致上 Arduino 和 RPi 能做的, BBB 也都能做。不過網路資源和社群比 RPi 和 Arduino 要小,不過也還算充足。
不過軟體穩定度還不夠成熟。除了一開始 ssh 的狀況外,完全按照網路上的說明來裝 usb wifi adapter 是無法成功的。我依照經驗,覺得是 kernel 版本的的問題,只是不知道是目前的 image 比文件新還是比文件舊。不過裝軟體沒有越裝越舊的道理,所以就往前追到最新的 image, upgrade 所有套件。不過還是失敗,因為文件上面用的版本在更舊的 image。最新版本的 image 裡面所附的 usb wifi driver 其實不管用,跟不上 kernel 更新的速度。得要另外抓最新的 driver 自己 compile 才行。
所以這裡面表示了兩個問題,一個是文件更新的速度不夠,另外一個是官方提供的 image 不夠成熟穩定。
再來就是我拿類比輸入做了些實驗,發現大多數的文件都只告訴你怎麼讀取一次資料。當然你可以重複一直讀取資料,不過這樣採樣的頻率只有 1~2khz ,遠遠不及硬體 ADC 規格能辦到的 24Mhz。新的 kernel 其實有人修正改寫,已經能連續讀取,我實際照樣操作,繞過一些小問題後,的確能辦到連續讀取。不過還無法控制採樣頻率。
所以雖然相較 Arduino 來說強了很多,但是也複雜很多,對 Linux 不熟或者沒有耐性的話,入門可能會碰到一些困難或限制。

Arduino 和結論

Arduino 前面已經說得很清楚,很適合外行而且自學的初學者。能與他相比的,只有 RPi,不過 RPi 的面向有點不同。
雖然長期以來,就已經有許多電子零件、套件、開發版、入門套件、教程,這一波起來的開源硬體,難道只是個噱頭嗎?
也許類似傳統武功傳授及精武體育會的差異吧。