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

2012年7月6日 星期五

PDF 簡體/正體轉換

 
網路上的簡體資源很多,圖書館中很多中文電子書也都是簡體的。雖說有時直接閱讀簡體不影響,但總是有些時候,我會比較想用正體字來閱讀。當然,也有不少人有正體轉簡體的需求。
文字檔的轉換不是什麼問題,但如果你上網搜尋 PDF 簡體/正體轉換的方式,得到的結果大概會是「先轉成 DOC/HTML,然後轉碼,最後再轉回 PDF」。
這是一般所謂的電腦專家可以給你的最好答案了。 但你是程式設計師,你是 Python 玩家,所以這個答案對你不夠好。

2012年6月29日 星期五

iOS 版的 Google Chrome

聽到 iOS 的 Google Chrome 出來了,馬上拿起 ipad2 下載。一開始可能是太新,搜尋不到,後來先找到 google search,然後再查看同為 google 出品的產品才找到。 馬上拿來跑上星期寫的超任模擬器,看看 ipad2 的 CPU 和 xoom 的差異。 結果 javascript 速度很慢,跟 iOS Safari 一樣。 這只是個假 Chrome,沒有 V8, 唯一的好處大概只是帳號 sync 而已。
我還是用 Google Search App 就好了。

2012年6月22日 星期五

Javascript SNES Emulator WIP


這是一個可以在瀏覽器裡面跑的超任模擬器。
基本上是把修改過的超任模擬器 SNEM 經由 emscripten 轉換,所得到的 javascript SNES 模擬器。
以前的 jsnes 只是 NES 紅白機的模擬器,不是超任模擬器。這個大概是第一個。
目前算是半成本,還沒有聲音,效能還有待加強。但如果你的電腦還算新,那大概能在上面玩玩 Super Mario World。
桌機上的 Chrome,Firefox,Opera,Safari 都能跑。
我的 Xoom 上的 Firefox 及 Chrome 也都能跑,手機上的 firefox 也能跑,只是速度極慢,而且可能需要實體鍵盤才能控制。
ipad 2 上測試是無法玩,還要看看原因。

比較成熟以後,將會釋出原始碼和編譯過程。
下面先提供兩個暫時的連結,供測試。

http://www.b81.org/~tjw/smw
Super Mario Wrold,開始時會讀取一個 512K 的檔案,所以先稍待數十秒。

http://www.b81.org/~tjw/xnes
可以跑一些 public domain  的 rom。開始時會有一個 10M 的檔案下載,請耐心等候 1 分鐘。

操作方式為 方向鍵,C,D(start, select) S,X,A,Z(ABXY 按鈕)


2012/6/27 更新:
ipad2 上的 safari 可以跑了,雖然非常慢。其實只是因為有個沒用到的 Float64Array Heap,而 iOS Safari 不支援 Float64Array,很快的 sed 一下修掉就可以跑了。Android 4.0 的內建瀏覽器也能跑了。
速度上來說, xoom 上的 firefox beta(能在 tablet 上跑的舊版),Android 4.0 內建瀏覽器及 ipad2 上的 Safari 速度不相上下,都被 Xoom 上的 Google Chrome 海放。 Opera Mobile 還是無法正常執行。

2012/9/1 更新:
新網址
http://tjwei.github.com/xnes/

2012年6月11日 星期一

關於 Pycontw 2012 的抽獎程式 pylottery

這次 pycontw 2012 的抽獎效果似乎還不錯,這邊簡介一下背後的故事。 一開始是 yyc 借鏡 Eric Floehr 在 PyOhio 的經驗。然後 Peter Wolf Wang 爭取了 Wingware IDE Professional 兩個 license,並且提出貪吃蛇抽獎程式的構想。這大約是五月底的事情。
6/2 日, Peter 用 Pygame 實做這個程式的第一版。這個是他第一次用 Pygame 。
但是 6/3 他就因水痘住進隔離病房,註定無法參加 pycon。這時程式的雛型已經差不多,I am so ready 及 爆破音效也都有了,只是蛇是由綠色的圈圈組成。
6/7 我接手修改程式。我對 pygame 也沒什麼經驗。

 我修改的部份只有:
  • 把蛇改成 pycontw logo。
  • 蛇碰到自己尾巴會有待避動作。
  • 蛇的長度改成有限,但是吃到球之後會增長(也就是真正的貪吃蛇 style)。
至於最為大家津津樂道,優秀的蛇去追球的 logic,完全原汁原味沒有更動。

這個程式的結構其實不好,開獎時完全不吃 event。我後來修改的動畫,效率非常糟糕。而且還有不少 bug(剛發現我的 16:9 螢幕全螢幕時會有問題。)。

但還是 open source,以昭公信 https://bitbucket.org/yungyuc/pylottery。只是千萬不要拿來當成寫 pygame 程式的範例,除非是拿來當錯誤示範。

如果這個程式一開始是我做的,我相信程式的結構和邏輯應該會比較正常一點,但這個程式絕對會失去靈魂。怎麼說呢?因為這個樂透程式之所以有趣就在於他的不合邏輯。
為什麼要用貪吃蛇?蛇跑來跑去跟號碼有什麼關係?
如果是我構想,應該會用鬼腳圖(阿彌陀籤)的方式,然後讓蛇沿著鬼腳跑。因為這樣才有邏輯上的關聯。

這種點子是我一輩子都想不出來的。

當我跑了 Peter 的程式後,我楞了幾秒,才感受到 Pylottery 會達到的效果以及潛力。所以我樂意接手修改這個程式。我的修改主要就是強化凸顯這些特質。

這個抽獎方式很蠢,完全沒必要,完全沒道理,但 pycontw 這類活動一樣很蠢。工作人員義務出力,還要自掏腰包買票參加。 250  個參加者,只因為喜愛 python,就願意給沒什麼戰績的主辦單位機會,掏錢買票。很蠢,完全沒必要,完全沒道理。
也正是如此,我知道這個抽獎方式會得到共鳴, 也理解跨海而來的日本朋友為什麼會對這隻 "stupid snake" 笑得那麼開心。

2012年6月9日 星期六

在 pycontw 2012 的 PySX 投影片和影片

在 pycontw 的閃電秀。

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 之間,大約就是日本東京以北的部份。