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

2011年4月22日 星期五

與 Python shell-like pipe 類似的東西

多年前寫了一個 python shell like pipe (minipipe),主要是可以讓 python 有像是
ls|wc
ls|tail(n=5)|sort
cat/"*.py"|grep("def")
grep("pipe")/"*.py"/"/usr/include/*.h"
grep("^a","aaa\nbbb\nccc\nabc".splitlines(), open("text","rb"))
這樣的語法。
最近看到一個極為類似的東西,Pipe: Infix syntax for Python
我的 minipipe 其實比較複雜一點,原因是
  • 為了能直接打 ls 就能在 interactive shell 中直接顯示結果,也可以寫成 ls|wc 而不是 ls()|wc
  • 多了 /"*.py" 這樣的運算
  • 能和吃 iterator 的普統函數直接作用(也就沒有加上 @pipecmd decorator 的)。原因在於minipie 的傳回值都是 pipe object  (PipeCmd),即使碰到普通函數,會自動把魔法傳下去。
 類似的還有 python-pipeline/ 這個。
以相似度來說,我的 minipipe 和 ASPN Recipe: Shell-like data processing 其實原理和用法上都有差異。 Recipe 中的 cat, ls 等等,是個別的 class。而 minipie 主要的概念是 class 包函數(這個概念是 OO 語言中的常見方式),運算的傳回值都是
Pipe: infix 用法和原理類似 minipipe 。差異是,他傳回的值是 iterator 而不是 pipe object。好處就是,傳回值預期的類型。缺點是,一旦變成普通物件,就失去魔法了。他的 | 就是另外一種 function call 的語法,一些語言一樣 function calling語法 (haskell 太久沒用忘了, F# 是 |>) 。
python-pipeline 程式碼比較複雜,不過看起來用法差不多,原理沒仔細看。
回頭看了一下自己以前寫的程式碼,看起來還是很醜。

2011年4月21日 星期四

語錄 2011-4-21

 "Any sufficiently advanced financial instrument is indistinguishable from fraud." ---(來源
「高興就又跑又跳,悲傷就又哭又喊,那是上野動物園猴子幹的事。流行歌詞,笑在臉上,哭在心裡。說出心裡相反的言語,做出心裡相反的臉色,這才叫人哪。」--- 小津安二郎
"The use of condoms is acceptable in exceptional circumstances" --- 教宗 Benedict XVI
比方說想要用水球攻擊異教徒,但手邊剛好沒有氣球時,在這種情形下,因為情況緊急且特殊,可以特別通融,允許用保險套來代替氣球。
"All that is necessary for the triumph of evil is that good men do nothing."  --- Edmund Burke
Or when good men start doing evil things.
"The secret to creativity is knowing how to hide your sources."  ---愛因斯坦
怪不得現在的新聞都好像連續劇一樣。
"An eye for an eye makes the whole world blind."   --- 甘地
也許全世界都沒有眼睛反而好,小混混(或者狗)會因為你用眼睛看他, 就覺得你不尊重他、挑釁他,暴力爭端因此而產生。
"Whatever you do will be insignificant, but it is very important that you do it."  --- 甘地
 "Creativity is allowing yourself to make mistakes. Art is knowing which ones to keep." --- Scott Adam
"Decisions are made by people who have time, not people who have talent."   --- Scott Adam

「人之所以不幸,是因為他不知道他是幸福的;僅僅是這個原因。這就是一切,一切!誰要是明白了這一點,他此時此刻馬上就會變得幸福起來。 」 ---  費奧多爾·米哈伊洛維奇·杜斯妥也夫斯基

「我有一個計畫,就是做一個瘋子。讓人們去狂怒,讓他們來醫治。」 ---  費奧多爾·米哈伊洛維奇·杜斯妥也夫斯基
「人人需求同一,人人都是一個樣,誰若感覺不同,誰就進瘋人院。」  ---尼采
「抗議和無理取鬧的猜疑,或有嘲弄癖好的人是健康的。那些無聊件接受所有事物的人,是有病的。」  --- 尼采
“The true man wants two things: danger and play. For that reason he wants woman, as the most dangerous plaything.” --- 尼采
「在這個世界上,總有一條除了你以外,別人無法走的路。途中千萬別詢問路究竟通向何方,只顧走下去吧!  」  --- 尼采
「最後的旅程,也許很苦,也許孤單,但那是你自己的選擇,你必須自己一個人,獨自把它走完……你必須把自己選擇的路走完,你才能找出自己的道」  --- 孫曉,英雄志 論述正道
「一些人統治是由於他們願意統治;另一些人統治是因為他們不願意被人統治---對於他們來說,統治不過是兩害中之輕者」 --- 尼采
「我秦仲海只要想到一件事,夜里便會偷偷地笑,哪怕多刺十個字,再斷一條腿,我也感到值得!那便是秦仲海此生不必跪人!好好想吧!你們這幫人書讀得再多、武功練得再高,這輩子還是得跪人!不過求一口飯吃,頭便要按得那麼低,你們甘心麼?大家一樣是人,那幫賊只不過投胎投得​​好了,便能高高在上,頤指氣使,你滿腹經綸,一身武功,卻要日也怕、夜也怕,忍氣吞聲,這種人生便如在豬堆裡打滾,縱使富貴滿門,卻又有何滋味!來!學我吧,志氣點,將那一把怒火燒起來,打打殺殺一樣可以度日,誰能奈何你呢?」 --- 孫曉, 英雄志中論述造反的理由

2011年4月20日 星期三

松鼠URL 2011-4-20

Matrix67: 随记:我们需要怎样的数学教育?
陳安儀的筆下人生: 讚美與獎勵制度
Lifehack: 5 Sci-Fi Brain Hacks That Modern Science Is Making Possible
A Neighborhood of Infinity: Image-based rendering and some ancient history
關於知識的兩個有名而且有趣的悖論:
  1. What's New: The blue-eyed islanders puzzle – repost  這個問題中,會用到「假定我沒有藍眼,則你會想,假設你沒有藍眼,他會想.....,但xxx知道至少有一個人藍眼,...所以....」這樣的推理,所以涉及假設性情境下「知道」的問題,某種意義上是「能知(knowable)」和「必知(在所有假設情形下都知道)」之間的微妙關係。
  2. Matrix67: Fitch悖论:我们已经掌握了所有的知识 Fitch's paradox 的主軸就是「能知」和「知」之間的關係。
The Surprise Examination Paradox and the Second Incompleteness Theorem (pdf 檔)
Surprise exam paradox 又稱 hanging man paradox,也是極有名的悖論。悖論的成因有更種不同的說法,有一種看法認為跟「知識」的本質有關,因為用到數學歸納法,其中也涉及到假設情形下的「知」。這篇文章利用這個悖論來證明 Godel's incompleteness theorem,並反過來,用不完備性來解釋這個悖論的成因。
簡單的說,就是將「知」比為「證明」時,「猜不到」 就類同於「不能證明」。這樣,就牽扯到了 consistency。

2011年4月15日 星期五

成功的 Acer Stream 的 HDMI 測試程式

由於找到 mini HDMI 接線了,所以又繼續了之前的失敗的 Acer Stream HDMI 測試, 然後就...成功了。
程式完全沒有改,還是之前那個非常即興的程式,草率到按鈕名稱都用預設的 Button, Button2。程式 apk 放在這裡
但只要這樣就行了,將 Acer Stream 的 hdmi 線接上,然後按下 Button2 即可。

要注意幾點:
  • 電視螢幕解析度是 16:9,而手機螢幕是 480x800,這會造成問題。所以手機 Portrait mode 時,電視是在 landscape mode,手機變成 landscape,電視顯示會變成橫向。這對大部分的程式會造成問題。
  • 可以用 touch screen 和按鍵可以操作。但是Home 鍵似乎無效。
  • 大部分的播放器在 Fullsreen 播放時,會進入 landscape 模式,所以電視會變成橫向,而且畫面變得細長。
  • Youtube 直拿時,播放效果還不錯。Angry bird 可以進入,但是會變成橫向,很難玩。Abduction 2可以玩,而且因為是直拿的,所以正向。但上下長度太窄,看不容易玩。
  • 內建的瀏覽器似乎會當機。
  • 程式是利用 jni 呼叫 libnemoPlayer_hdmi_jni.so 切換的。 acer 有公佈 kernel source,裡面有 /dev/adi752x 的 driver,所以可以找到對應的 ioctl 參數。但寫 HDMItest 時我還沒有裝 ndk。
  • 要 Clone 螢幕,比較難,要改寫 adi752x 的 driver 才行。
  • 也許透過修改 AndroidManifest 來讓原本 landscape 的程式可以在 hdmi 上跑。
  • 如果有 open source 的 SFC,PSX 模擬器,配合 Wiimote ,應該可以讓 Acer Stream 在電視上玩老遊戲。
(更新)*****************
  • psx4droid 和 snesdroid 等模擬器,只要把 orientation 設定成 portrait mode ,即可玩。光這個就值回票價(?),所以其實這個小程式算是有點用途。
  • Youtube 直拿時可播,但解析度低。
  • Opera Mobile 似乎是可用的。
  • 電視最好設定成點對點映射模式。
  • 電源鍵也會失效。
  • 有時螢幕會消失(比方在 Launcher 中),連背景音樂也停住,似乎是機器會間歇性的卡住?