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

2012年5月2日 星期三

Python 的 decompiler

搜尋 python 的 decompiler,可以找到像是 decompyle, unpyc, 但似乎不是太舊,就是有沒有開放,總之就是沒辦法真的用(更正:原本寫得時候沒有注意到 uncompyle2,而 unpyc 其實也沒那麼舊)。
在注意 clyther (簡單來說,是 python to opencl compiler)時,發現了 meta 這個 package。
取這種名字通俗的名字,下場註定就是讓你很難用 google 搜尋到。但 decompile 的結果看起來還不錯。
比方用 meta.decompile(some_code_object),就能把 some_code_object 反編譯成 ast。
用 meta.decompiler.decompile_func(some_func),就能把函數反編譯 ast。
然後用 meta.dump_python_source(ast) ,就能把原始碼印出來了。
不過注意到的原因,還是因為 meta programming 的關係。
最近用 python 寫 psx emulator,效率當然很差,一個問題就是 python 沒有 inline 和 switch statement。當然硬用 if else 寫,然後手動 inline 也行,但是實在太醜。
後來的解法是用 pythonic 的寫法寫,但是用 meta programming 的方式(用 decorator)把 dict based 的寫法換成 switch,然後順便把 function inline。
但是問題是,讀取 source 只能用 inspect 來讀。但是程式碼本身如果已經是動態產生時,inspect 就讀不出來。因為寫 decompiler 工程浩大,我取巧的方式是動態產生程式碼的時候,順便把程式碼寫入暫存檔。附帶的好處是,除錯也方便些。
clyther 做的事情也類似,也是用 decorator 把 python function 轉換,翻譯成 opencl。查看之下,才發現他還真的把 decompiler 寫出。
不過試用了一下,就發現了好幾個 bug,看起來還不算完全成熟。
不過未來倒是挺看好這一塊進入 python 的標準 lib,補足 ast 的功能。

2012年4月25日 星期三

原來羅馬的緯度跟北海道一樣

臨時拿起平板想使用一下 Google Earth,沒想到卻跳出嚇人的訊息。
我那時想要查的是,羅馬的緯度跟北海道的緯度。
某次吃飯時,同事跟我說,義大利的緯度其實跟日本差不多。
那時我想,不會吧,義大利不是南歐嗎?感覺上陽光普照,大概很南邊吧,不是再下去一點就到非洲了?而日本,不要說北海道,就連東京冬天也會下雪。
不過我那時大概是九成以上相信了,只是還是想要確認一下。有空時,就拿出平板想用 Google Earth 查一下,沒想到就碰到慘劇了。
後來用 wikipedia 確認一下,羅馬緯度是 41° 54′ 0″ N,而北海道首府札幌市的緯度則是43° 4′ 0″ N,只差了兩度不到。事實上,北海道函館的緯度是41° 46′ 0″ N,比羅馬還要南邊一點(扎幌跟函館的直線距離大約 150公里,大約是台北到彰化的距離。或者略多於花蓮縣的南北距離 )。
 日本緯度介於 24° 至  46°N 之間,而義大利緯度  35° 至  47°N 之間,大約就是日本東京以北的部份。

2012年3月10日 星期六

超能力筆記: 預言

有人說預言未來的的最好方式,就是創造它。
這不過是外行人的胡扯。
這種程度的預言能力,我六七歲的時候就會了。
小學一年級的時候,老師問我們,最希望有什麼樣的能力,比方說像馬跑一樣快,還是像鳥一樣會飛等等。我想要能夠看清楚東西的能力,這本來沒什麼問題,但是壞在那時還沒學物理,結果我說的是我想要眼睛像放大鏡一樣。眾所周知,所謂的放大鏡就是凸透鏡,所以呢,我到現在臉上都還得掛著一副凹透鏡來中和那時鐵口直斷的效果。

2012年3月6日 星期二

用 Python 處理泛黃的老照片

可能是婚宴時,也可能是在 FB 上,常會到泛黃的舊照片。其實簡單的處理就能賦予舊照片新生命(可能只有一點點新生命就是了)。
最簡單的方式是用 gimp 的 auto white balance,也就是 自動白平衡處理。
但不需要用到 gimp 這麼大的程式,其實 python 和 PIL 就能處理,而且程式碼很短。
gimp 的白平衡原理,就是把 RGB 個顏色,除了上下 0.5% 外,盡量線性拉長。
下面的 PIL 可以達到相同效果(但我用了比較強的參數,上下 1.5%)


from PIL import Image, ImageOps
ImageOps.autocontrast( Image.open("a.jpg"), 3).save("f.jpg")

實際的例子:原圖
處理後

2012年3月4日 星期日

關於 Now.in 被抄家

最近 Now.In 被抄家滅族的事件在台灣引起了比 MU 還大的反應。
我本身沒有使用 Now.in,只有之前在 PycTW 2011 時,問了 Victor Lin 關於 client 使用權的問題。當時的回答是雖然不是 Open Source,但也不反對別人逆向工程修改。對我來說,這樣已經很有誠意的答案。因為怎麼授權,有很多因素需要考量。就拿到機器馬上會想能否改機的族群來說,能 Hack 的東西就是好東西。

2012年3月2日 星期五

How I Met Your Mother 的明星臉

去年才開始看 How I Met Your Mother,總覺得劇中的角色都有點似曾相識感。
飾演 Lily 的 Alyson Hannigan,因為 Buffy The Vampire Slayer 和美國派本來就很有名。演 Marshall 的 Jason Segel 因為演過的電影 Forgetting Sarah Marshall, Knocked Up,眼熟也不足為奇。倒是其他幾個主角,明明確定沒看過他們,卻又覺得眼熟。


2012年3月1日 星期四

IU You & I 與 Doctor Who 河流之歌