WinAMP 與 VFP

不,WinAMP 與 VFP 一點關係都沒有,相似的只是命運。

WinAMP 在前一陣子宣佈停止下載,也就是說,未來不會有更新了。今天在 solidot 上看到「Winamp用戶請求AOL開源代碼」,然後我就想到之前 Visual FoxPro 也是如此。微軟在 Visual Studio 6 之後,宣佈 VFP 將不再包含在 Visual Studio 裡;VFP 後續仍然有持續的更新,直到 9,然後微軟宣佈不再繼續開發,在當時就有不少人希望微軟能釋出原始碼到公眾領域,讓 VFP 能繼續存活下去。但是之後僅僅只有在 Codeplex 網站上有個 VFPX 在持續更新,為 VFP 9 提供 addon。

在 VFP 最大的社群 – Visual FoxPro Wiki 上,有一頁就是在討論這件事情,當然是不了了之。2010 年,Ken Levy 在他的 blog 發表了 Visual FoxPro Strategy at Microsoft ,他曾經擔任 VFP 的 Product Manager (也是最後一任),文章提到 VFP 的歷史以及為什麼微軟不開放的原因,主要原因就是 VFP 裡的許多技術與演算法已經被廣泛的應用在微軟其他產品上,像是 SQL Server 跟 Access,在商言商的結果,當然也不可能開放出來讓大眾檢視。

未來 WinAMP 的原始碼是否會釋出?我想如果沒有衝突到商業利益的話,也許會吧。

Log 與 Slog

在設定裡USB debugging 被關閉的情況下,Log 並沒有真正的輸出到 logcat。這種情況下就要使用 Slog,這樣子即使沒有 USB debugging 也會輸出到 logcat,但這時候要注意另外一點,因為 logcat 的緩衝區是有限制的,如果輸出過多,之前的訊息就會被刷掉。

執行指定的 CTS 項目

首先在 mydroid 目錄下要有 buildspec.mk,在編譯之後,再使用 make cts 就可以編譯完成。

使用的時候就執行 mydroid/out/host/linux-x86/cts/android-cts/tools/cts-tradefed ,接著就會出現 cts-tf > 的提示字元。這裡可以使用 help 查看可以使用的指令,要執行單一項目就是使用  run cts -c android.telephony.cts.TelephonyManagerTest -m testGetDeviceId 即可。

電影流水帳(2013/11/20~2013/11/26)

alice Mia Wasikowska ,飾演 The Kids are all right 裡的 Joni ,上網一查,發現她演過的電影還蠻多的,像 Alice in wonderland 就是。

  • The Kids Are All Right (IMDB, Wikipedia),中譯:性福拉警報。描寫同性戀家庭的故事,兩個女同性戀 Jules 跟 Nic 組成家庭,並且透過精子銀行,使用同個人 Paul 的精子,兩人懷孕分別生下一男一女,Joni 與 Laser。Laser 在 Joni 滿 18 以後,問她要不要找捐精人,也就是自己親生的父親。後來 Joni 答應了,於是他們透過精子銀行與 Paul 聯絡。Paul 跟他們一見如故,也介入了他們的家庭。Jules 跟 Nic 看似恩愛,但兩人卻有小心結,因此 Jules 在遇到 Paul 之後,動搖了,兩人天雷勾動地火,發生了肉體關係。Paul 愛上了 Jules,Jules 很掙扎。Nic 卻不喜歡 Paul,而其他三人都對 Paul 有好感,Nic 有被孤立的感覺,於是她提議一起去 Paul 家裡吃飯,以便讓她能更瞭解 Paul。Jules 外遇的事情在四人去 Paul 家裡吃飯後爆發,這一幕很精彩,Nic 在晚餐間去上了廁所,在廁所發現了滿是頭髮的梳子,在浴缸排水孔發現了毛髮,又到 Paul 的床邊發現了髮圈,Nick 的心裡有了底。回到餐桌上的時候,導演用慢動作模擬 Nic 的視線,她緩緩的望著自己的伴侶 Jules,自己的孩子 Joni 跟 Laser,然後是 Paul,把那種被背叛的感覺描寫的很好,但 Nic 沒有在當場爆發。回到家以後,Nic 質問 Jules,Jules 才哭著說出真相,兩人爭吵了一下,發現孩子在外面偷聽。孩子們不諒解 Paul 跟 Jules,Paul 則發現自己愛上 Jules,想說乾脆就在一起吧,但 Jules 不肯。到了最後,Jules 跟 Nic 與自己的孩子道歉,終於才獲得諒解,然後一起送 Joni 去大學宿舍。回程的路上,Nic 緊握著 Jules 的手,說明已經釋然。我覺得很不錯的一部電影,特別是在目前討論多元成家方案的時刻,這部電影更顯出他的意義。
  • Yogi Bear (IMDB, Wikipedia),中譯:瑜珈熊。在東森 Yoyo 台看的,故事平鋪直敘,女主角是我滿喜歡的 Anna Faris 。故事就是市長想要染指 Jellystone 公園,將這個自然的綠地轉換為經濟利益,就藉口了一些事情,將這裡的警衛 Tom 調走。Yogi 跟 Boo 發現 Tom 調走了以後,這個公園不再有遊客,因此也不再有人類的食物;同時,也出現了許多伐木的蹤跡。他們兩個決心阻止,就去找調到市區的 Tom。找到以後,回到公園遇到 Rachel,Rachel 是紀錄片的工作者,她發現了這個公園有疑似瀕臨絕種的烏龜。這隻烏龜就成了他們拯救 Jellystone 公園的救命稻草,經過一番歷險之後,他們將烏龜公諸於世,阻止了市長摧毀 Jellystone 公園,公園也恢復了原來人來人往的景況,而 Yogi 跟 Boo 又有食物吃了。

Android 與網路攝影機(2)

在可以播放以後,會想到的是能不能順便錄影?

Android 上的錄影在網路上可以找到的範例,多半是用既有的 MediaRecorder (Android 應用程式開發:如何錄製影片) 或是發 Intent 給可以錄影的 app (Recording Videos Simply) 來做。由於之前選用的是 Motion JPEG,這兩個方法都不可行。MediaCodec 似乎可用,但沒認真去找範例。

延續前篇,看了 MjpegView 原始碼,裏面的 MjpegViewThread 是使用 MjpegInputStream 在讀取 Motion JPEG,讀到一張圖,就畫在 SurfaceView 上。在 StackOverflow 上有看到 jcodec,可以餵給他 bitmap ,然後會壓縮出 H.264 影片。這正好是我所需要的,就拿來試試看了。

套用以後的結果放在 github 上,這裡就不貼程式碼了。實際上,jcodec 是合用,而且有特別針對 Android 提供一些方便的 Helper function,但是還是有缺點,第一個文件不是很齊全,StackOverflow 上能找到的 jcodec 範例或多或少都有點問題,建議是去下載最新的版本,然後參考裏面的 example 來使用;第二個是編碼後的影片不是每個裝置都能播放,電腦上播放倒是沒問題。第二個問題還蠻大的,關於這點,有人回報給 jcodec 的 issue tracker 了:Generate MP4 viewable on all versions of Android? · Issue #25 · jcodec/jcodec

後來沒繼續再深究下去,僅針對曾經有看過的部份做個筆記,就這樣。

電影流水帳(2013/11/9~2013/11/19)

Miley-Cyrus-Twitter-Picture1 copyMiley Cyrus ,就是演孟漢娜的女主角,Disney 力捧的新一代女星。不算漂亮,但是笑起來很可愛。

  • So Undercover (IMDB, Wikipedia),中譯:女生部裡的秘密。不怎麼樣的青春校園片。Molly 高中畢業以後就幫著他私家偵探的爸爸在調查案件,某天,自稱是 FBI 的人要 Molly 進學校去幫他查案,在生活壓力下,她只好接下這任務,去學校幫忙查案。查案的過程裡,就幫著姊妹會、跟男生約會等等的,說實話,還蠻沒邏輯性的。最後的結果頗出人意料,原來委託 Molly 查案的 FBI 並不是 FBI,真相大白之後,幫著真正的 FBI 將這個人抓起來。
  • The paperboy (IMDB, Wikipedia),中譯:性腥聞。有點像是紀錄片的形式,整體來說有點悶。片子一開始是由一個黑人女僕來進行描述,Jack 是 Ward 的弟弟,目前輟學,幫著爸爸的報社送報。Ward 則是一個記者,Ward 跟他的朋友 Yardley 在調查一件可能是冤獄的事情,Jack 就幫著開車。冤獄的人是 Hillary,被控告殺害了一位警長。Charlotte 則是一個有魅力的女生,不知道為什麼跟在獄中的 Hillary 勾搭上了,Ward 為了釐清案情,就找了她來一起調查。在調查的過程裡,Jack 愛上了  Charlotte ,也發現了一些 Hillary 可能不是兇手的線索。到後來,發生了意外,Ward 被虐待,Yardley 發表了報導,讓 Hillary 得以無罪釋放。Hillary 一出獄就去找了 Charlotte ,並帶走她。隔了好幾個月之後,Charlotte 在這期間寫了封信給 Jack,跟他說她選錯了,並不幸福,Ward 也慢慢復原並走出創傷。Jack 在父親結婚這天爆發了,找了哥哥一起去 Hillary 的住處,發現 Charlotte 被殺,衝突之下,哥哥 Ward 也被 Hillary 殺掉。Jack 趕緊跑掉,在沼澤裡躲藏了一夜,才又趁著 Hillary 在沼澤裡找 Jack 的這當下,回到 Hillary 的小屋把屍體運走,並報警處理。故事就這樣結束了,Jack 後來成為知名的作家。

Android 與網路攝影機(1)

大部份網路攝影機都會提供多種格式,例如 AVI、Motion JPEG 等等,這邊我選擇的是 Motion JPEG,主要原因是 Android 有直接支援這種格式 ,不會牽涉到「可能沒有解碼器」的問題。

首先是環境的準備,因為手頭沒有一般市售的網路攝影機,只好搭配手頭上有的 USB Cam ,克難的自己弄一個。 很幸運,正好有人用 python + OpenCV 寫了一個簡單的 Streaming Server,輸出格式正好就是 Motion JPEG ,網址是 https://gist.github.com/n3wtron/4624820

然後播放的部份,我是參考 StackOverflow 上的這篇 Android and MJPEG – Stack Overflow ,程式主要是繼承 SurfaceView 做出 MjpegView 來使用,MjpegView 裡則使用 thread 搭配 MjpegInputStream 去讀取指定位址的 Motion JPEG,進行播放。但這個程式有一個小問題,在 Android 3.0 以後,以 HttpClient (MjpegInputStream 裡使用了 HttpClient )去讀取網路資源時,會丟出 NetworkOnMainThreadException 。因此需要對程式進行改寫。

很幸運,StackOverflow 又有人提出解:Android ICS and MJPEG using AsyncTask – Stack Overflow 。這樣拼拼湊湊之下,要播放網路攝影機上的影像不是難事。

P.S. StackOverflow 上的範例程式有個問題,就是沒妥善處理 onPause/onResume,因此在按 Home 或切到別的程式再回來時,會沒辦法繼續播放。

[Android]用 am 輸入 MMI code

在 Android 裡,用 am 撥號,可以這樣用:am start -a android.intent.action.CALL -d tel:09xxxxxxxx

在撥號畫面裡,使用 MMI code 可以帶出一些特殊的畫面,每隻手機都不太一樣,但一般來說都會有 # 這些特殊字元,因此 -d tel:*#38# 這樣的參數就會失效。am 的原始碼在 frameworks/base/cmds/am 下,這邊可以看到 am 會用 Uri.parse 去解析 -d 後的參數,問題就出在這裡。因為是以 Uri 處理,因此也需要遵循 Uri 的規則,# 應該要使用 %23 才行。

所以使用 am start -a android.intent.action.CALL -d tel:*%2338%23 就可以成功。

小技巧是,你可以在編譯後,執行 out/host/linux-x86/bin/monkeyrunner ,在裡面依序輸入,就可以取得編碼後的 Uri 字串:

[python]
from android.net import Uri
print Uri.encode(‘your_string’)
[/python]

GoAgent 3.0.8 小記

升級以後,就爆炸了。而我居然直接覆蓋,沒留原來的檔案,只能摸摸鼻子把它修好。

是故,得重新設置,主要就只要改 proxy.ini 。第一個要動的部分是把 [proxy] 裡的 enable 設為 1,然後修改 host/port,這是因為公司內部需要透過 proxy 上網,而我又弄了 cntlm 去繞過 microsoft proxy server 的 NTLM 的關係,這裡的 host/port 是我的 cntlm 的 proxy/port。第二個要動的是 [gae] 裡的 appid/profile/obfuscate,appid 是 goagent 說明文件有特別提到的部分,profile 是為了解決 403 錯誤,詳情可以閱讀 【已解决】goagent打开页面出现403错误:Your client does not have permission to get URL /2 from this server,obfuscate 則是為了解決 Connection() argument 1 must be OpenSSL.SSL.Context 問題,這是我閱讀 local/proxy.py 以後看到的,設置 validate 應該也可以解決,但我沒試。

server 部分只要執行 server/uploader.bat 重新上傳就行了,執行的時候,會詢問你 appid/帳號跟密碼,依次輸入就可以。uploader.bat 裡蠻有趣的是, python 可以直接執行一個 .zip 檔。在閱讀原始碼的時候,發現 server 的版本沒跟著調整,仍然是 3.0.7 版。在上傳以後可以在瀏覽器裡輸入 <your_appid>.appspot.com/2 看是否順利運行。

電影流水帳(2013/10/31~2013/11/8)

Aubrey Plaza Safety Not Guarantee 的女主角 Aubrey Plaza ,我覺得還蠻漂亮的。今年8月的 GQ 有她的專訪喔。

  • Safety Not Guarantee (IMDB, Wikipedia),中譯:超時空徵友啟事,好像有在 2012 高雄電影節上映過。雜誌社發現了一則徵求同伴一同回到過去的啟事,就決定去採訪這個人 Kenneth,特約記者 Jeff 找了兩個實習生一起去。Jeff 其實只是想回到那個地方找舊情人,實習生 Darius 則假裝自己有興趣,去面試當同伴,結果意外成功。Kenneth 開始訓練 Darius ,為回到過去做準備。在這段準備的日子裡,發生了不少事情,兩人相互愈來愈有好感,而 Jeff 也重溫了跟舊情人的感情。到了要回到過去的那天,Darius 的身份曝光,Kenneth 驚訝之餘,自己就逃走了。Darius 緊跟著追去說明,最後在 Jeff 與 FBI 的見證下,兩人搭著時光機器回到過去。故事還蠻有意思的,有時光機器的元素,但科幻元素並不濃厚,主要還是有意思在人跟人之間的互動。Kenneth 在營火旁唱的歌蠻好聽的,Youtube 上有人節錄出來了 <a href=”http://youtu.be/_Dz_nQYwkl4″>http://youtu.be/_Dz_nQYwkl4</a>。
  • The Experiment (IMDB, Wikipedia),中譯:判獄風雲。蠻沈重的片,大意就是一個監獄實驗,這個實驗意外挖掘出人的另外一面。一開始大致介紹每個人,並且有穿插訪談,讓觀眾了解每個人大致的個性。然後就關進去了,在監獄裡,因為相互的不了解跟誤會,不滿的情緒慢慢積累,並且蔓延開來。在扮演犯人的一方被壓迫到極致的最後,就是爆發了衝突,有人死了,獄警被追著打,在打開監獄大門看到陽光的一瞬間,突然大家想起了自己的身份而停手。之後就在房子前面等車子來接,有人死了,活著的人都拿到了錢,但是心裡都帶著疙瘩。
  • Seeking a friend for the end of the world (IMDB, Wikipedia),中譯:末日倒數怎麼伴。在衛視西片台看的電影,故事很有意思。因為有外太空的隕石即將到地球,無法避免,這等同是宣告了世界末日的到來。Dodge 樓下的鄰居 Penny 酒醉,走錯到了 Dodge 的房子,Dodge 只能先收留她,等到她酒醒,就送她回去。兩人邊走邊聊,Dodge 卻意外發現了自己的太太有外遇,然後拿了一堆信回來。Dodge 非常難過,出去胡搞了一夜,原本想要自殺,但自殺失敗,反倒收養了一隻狗。接著他在新聞看到有暴民,馬上就有人丟石頭進來,他趕緊去找 Penny ,要一起逃走。兩人邊走的路上,相互了解,並且愛上對方。到了 Dodge 爸爸那邊,Dodge 跟父親和解,並請父親帶 Penny 走,自己獨自開車回到住處。開門一進去,Dodge 看到他的管家來打掃,管家跟往常一樣跟他打招呼,Dodge 生氣的說「怎麼不跟家人團聚還來這邊打掃呢?」管家說,「不來這兒打掃,我也不知道該去哪兒啊?」 Dodge 突然氣消了,跟管家說,「我不是這個意思,抱歉。」管家說沒關係,笑著說,那麼,下週見囉。Dodge 說,「好」。接著,Dodge 看了最後一則新聞,主播在播報隕石來的時間之後,跟大家告別;然後持續的聽著音樂,直到沒電睡著了。醒來的時候,發現 Penny 也回來了。兩人開始一直聊天,聊到說,怎麼沒早點認識之類的。我印象很深的一句話,Dodge 說,「如果不是這種情況,恐怕我們不會在一起,而你也不會愛上我…」大致就這樣,相當不錯的電影,蠻值得一看的。