Windows XP 的自動更新不簡單

之前幫家裡電腦重新安裝 Windows XP,結果在升級到 Service Pack 3 以後, Windows Update 頻頻失敗,我還以為是我安裝步驟出錯,重裝了好幾次,很氣人。上網找解決方案,是有找到幾個,但是都沒辦法真正徹底解決。

後來想,好像有人自己弄 Service Pack 4,不如找來試試看吧,於是就找到三秒的偽 SP4 :三秒練功房v3: (偽) Windows XP Pre-SP4。下載的網址在 github 上,檔案很小,解開以後可以看到裡面只有下載的 batch file 跟 wget.exe,點選 build.cmd 以後,就會開始去微軟網站下載個別的更新檔案。下載完畢以後,還沒 SP3 的,就升級到 SP3,然後裝 IE8、WMP11 。裝好以後,點選 hotfix.cmd 就開始真正的安裝 SP4 。

安裝完成以後,重新開機,Windows Update 就可以順利運作並且安裝其他更新了。

百度雲網盤檔案的下載

前一陣子有趁中國那邊拼的火熱的時候去申請,拿到 1TB,現在升級成 2TB 了,是說也不知道該放些什麼。

後來才聽朋友說,可以 BT 下載,只要上傳種子以後,百度雲就會幫你下載。如果已經有人下載過,會一瞬間就下載完成,我試過幾個 Linux distro 都是如此,真的是瞬間下載好。但是人生往往就是這個 But,雖然已經下載好放到雲端,你還是要從雲端拉回本地端,這時候就杯具了,你要不就用百度提供的軟體,要不就只能用瀏覽器慢慢下載。我自己大部分時間都在 Linux 上,只能用瀏覽器,還蠻斷線的,而且還不能續傳。

後來找到好方法,可以取得真正的下載網址,然後就可以用續傳軟體下載。我自己是用 Firefox,然後在 http://userscripts.org 上找到 baidupandownloadhelper ,安裝以後,當你在百度雲的網頁介面上勾選要下載的檔案之後,上方會出現「批量下載」的按鈕,按下去以後,就可以看到連結,就可以拿這個連結來下載了。

我後來是額外安裝了 aria2,可以在 console 下載的工具,正好 baidupandownloadhelper 也可以直接複製 aria2 指令,真的是相得益彰。

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]