- Real steel(IMDB, Wikipedia),中譯:鋼鐵擂台。一個機器人拳擊與小孩的故事。個人覺得裏面機器人與親情的部份稍嫌薄弱,到了最後像是硬湊起來的結局。Charlie是一個醉心於機器人拳擊的人,他拋妻棄子,只為了機器人。就在又把機器人玩殘了以後,法院通知他說他的前妻死了,孩子撫養權需要他轉讓,才能讓給前妻的妹妹撫養,為此他勒索了前妻妹妹的丈夫一筆,並且同意他們去義大利玩的時候,暫時照顧這個孩子Max。於是Max就暫時跟著Charlie一個暑假,Charlie用這筆錢買了Noisy boy機器人打算大賺一筆,可是,Charlie實在不爭氣,Noisy boy機器人掛掉,他們去找零件時,Max不小心掉下去懸崖,還好Atom救了他,Max決定把他挖出來。挖出來以後,發現這是一個可以摹擬人動作的機器人,所以可以跟著Max跳舞,也可以跟著Charlie一樣打拳擊,在Max改造之下,Atom可以聲控,也重新記憶了Charlie的拳擊招數。然後再加上Max的提醒,他們鹹魚翻身了,Atom變得很紅,也賺了很多錢。最後挑戰Zeus,挑戰Zeus時,聲控壞掉,改成摹仿模式,摹仿Charlie打拳擊(這樣真的不算作弊嗎?),打贏了Zeus。這裏面的第一個疑點是,Charlie在遇到Max之前也實在太廢了,他的拳擊怎麼都沒派上用場?感覺上好像都在玩電動似的。第二個疑點是對於親情的描述不夠多,他們在暑假的感情是怎麼變得那麼好的呢?第3個疑點是Atom未免也太耐打,之前片頭一開始的機器人未免也太容易被玩殘,Noisy boy的頭一下就被扯下來是怎樣?
- Late Bloomers(IMDB, Wikipedia),中譯:內衣小舖。這是一部瑞士的電影。一個老太太他因為喪夫,整整九個月都提不起精神,這一天,有人委託她做旗子,她的好朋友就跟她一起去了伯斯採買,採買的過程裡,讓她重拾起往日想開內衣店的念頭,於是回來以後,就決定衝了。衝的過程裡遇到很多困難,第一個是某些朋友與兒子的不支持,這個隨著時間過去跟捉到兒子的把柄而解決;第二個是小鎮的傳統還是不能接受內衣店,這讓我才知道原來歐洲鄉下也是很保守;第三個是賣不出去,這個是靠著她朋友突發奇想,想到可以網拍解決;第四個是產能不足,網拍之後,受到好評,但是一個人做不了那麼多,後來商請安養院的刺繡班幫忙,才順利出貨。後面的部份有點過於歡樂跟簡略了,但是整個故事緊湊,相當好看,也可以當作創業的一個參考,創業最主要真的還是熱情跟願景,片裡的老太太就是為了圓他年輕時的夢想,才咬牙撐過來。
次方根與MathML
本週投資學老師提到了幾何平均數,公式裡面有應用到次方根,然後看我們excel還不錯,就問我們excel裡面怎麼算次方根?班上沒人答的出來…
同學被考倒之後,老師就說了,這其實是基礎數學,n的平方根,就是n的 1/2 次方(維基百科。除了 ^ 以外,excel 有一個函數也可以用來做這件事情,這個就留給你們回家自己去查了。
剛剛上網找了一下,這函數就是 power,power 是用來傳回數字乘幕(次方)的結果。所以
我看我的數學已經差不多都快還給老師了,到時候要跟兒子一起再學一次…
寫到一半時,我想到要用MathML來顯示公式,在FireFox附件元件網站找到FireMath這個編輯器,算是方便很多了,不過次方根我還是遇到障礙,後來是參考了網站提供的次方根範例,才正確地產生了次方根的數學公式。
MathML是網路上用來顯示數學公式的最佳選擇,理論上應該是要各家瀏覽器都支援的標準,但可惜,某些瀏覽器不支援,像Chrome、IE7、IE8都需要額外的plugin才能正常顯示,如果你沒看到數學公式,就請去找MathPlayer來安裝或是參考W3C上的說明去做,才能看到MathML的結果。
c# webrequest二三事
前幾天遇到的一些問題跟解:
- 要對ASP.Net網頁做POST,因為有ViewState的關係,沒辦法像一般簡單的HTML form那樣做,需要先讀取網頁之後,取出裡面的__VIEWSTATE 跟__EVENTVALIDATION ,再加上你要填的內容去重新組出網址,才可以正確地POST。參考自:C#的HttpWebRequest编程,支持带ViewState的网页POST请求、通过HTTP抓包,深入理解ASP.NET WebForm ViewState。
- 需要使用帶有Cookie的HttpWebRequest,HttpWebRequest有個CookieContainer可以用,所以套上Cookie即可,參考自:WebClient 保持 Session 和 Cookie,基本上就套它的HttpClient。
- Cookie怎麼來?除了可以透過WebBrowser控制項去撈以外,也可以用Win32 API:InternetGetCookieEx()去撈,我用WebBrowser控制項撈出來的有問題,後來就改用Win32API的InternetGetCookieEx()就行了。參考自:请问如何自动获取cookieContainer.Add()中的值、Is it possible to transfer authentication from Webbrowser to WebRequest
- utf-8轉big5的問題,轉了以後都放在字串裡,因為要拿來組網址,要使用Uri.EscapeDataString(),卻發現輸出結果一樣。沒辦法,只好自己來。首先先套轉換的過程,但是不要放回string,而是拿byte[]來用,拿來以後,取得每個byte的16進位,在前面加上 ‘%’ ,再組成字串,就可以拿來組網址。不知道有沒有什麼例外情況需要處理,又懶得去翻RFC,總之,試的結果是可以,沒問題,就先這樣用吧。
ping permission何時被更改?
在out目錄下看到的,會是正常的 755,那到了裝置裡為什麼變成 2755??
我是在 mydroid/system/core/include/private/android_filesystem_config.h 裡找到 system/bin/ping,那麼有誰引用呢?相當多程式,像是 make_ext4fs, genext2fs, cpio, mkyaffs2image…等等。換言之,是在製作 .img 時,去變更 ping 權限的。
因此如果要加自己的程式,然後不想在 init.rc 裡改權限的話,就得在 android_filesystem_config.h 裡加,然後記得不要加在 android_files 陣列的後面,加到後面,會因為陣列後面都是 * 的關係,而被忽略掉。
電影流水帳(2012/2/25~2012/3/5)
- 葉問前傳(IMDB, Wikipedia)。就某天剛好在第四台看到,就順便看完了。前半部還蠻好看的,就葉問跟他的義兄怎麼拜師學詠春,跟永成認識,去香港唸書遇到師叔學招。到了後面,就有點莫名其妙。原來他的義兄天賜原來是日本人,到中國來是來滲透,這個滲透的方法跟原因相當的牽強,總之,天賜在日本人協助下很順利的當上了精武會會長,高潮在此展開,原來的會長則在天賜結婚後被天賜與日本人殺了,葉問被冤獄,後來,天賜在美慧知道內情後,說服美慧跟他一起逃走,這邊沒交代清楚天賜的前因後果,所以美慧其實沒理由跟他一起走。逃走的途中,被日本人攔住,美慧被抓住,用來要脅天賜去殺了也知道了內情的大師兄。一行人就浩浩蕩蕩去殺大師兄,此時,永成以名節作假供,救出了葉問。葉問在給了永成承諾後,就跑去救人了。一場亂打之後,變成了兄弟單挑,天賜打輸,葉問知道內情後,趕去救美慧。天賜後來自殺,葉問則以盲打打贏了只有一人的日本人會長(太莫名其妙了,怎麼會只有一人?!),最後就以大團圓收尾,但是沒交代後來美慧去了哪裡。真的,我個人覺得後面收尾收爛掉了,好可惜。
- Toy story 3(IMDB, Wikipedia),中譯:玩具總動員3。隨著Andy的長大,玩具也失去了生存的意義。Andy要上大學了,媽媽吩咐他把該收的收一收,該丟的丟一丟,一群玩具在陰錯陽差之下,到了Sunny side幼稚園。幼稚園其實是一個恐怖的地方,由Lotso統治。Lotso因為被遺棄,而喪失了對人的信任,到了Sunny side則變成偽善的獨裁者。在幼稚園裡的玩具發現了真相,無法忍受,決定逃出。此時,Woody也回來幫他們逃離,展開冒險。最後是皆大歡喜,Andy以依依不捨的心情,將心愛的玩具送給了另外一個愛惜玩具的小女孩,讓玩具能繼續快樂過日子,算是為玩具總動員畫下了句點。應該不會再有續集了吧?!
續借學校圖書2
學校圖書館換新系統了,所以,又懶得打勾。這次修正兩個網頁,一個是強制一次顯示出30筆資料,要不然一次只有10筆,還要翻頁才能繼續。另外一個就根據原來的稍稍調整名字,碰到問題的是,上下有兩個「續借」,想要在兩個的旁邊都加上”Check all”跟”Uncheck all”,可是卻只能加上一個。後來追蹤以後才發現,當我加了第一次”Check all”與”Uncheck all”以後,getElementsByTagName()傳回的陣列(elements)居然自動也跟著變大了,所以後面的「續借」按鈕就沒找到。我的解法就先用 list 把這兩個「續借」按鈕都紀錄起來,後續再用另外一個迴圈去一次處理。
PUK解鎖畫面的開發
基本的思路是想在解鎖畫面的地方,緊鄰緊急電話按鈕的旁邊加上一個按鈕,用以解鎖,並且可以參考緊急電話的程序,來撥打上面提到的特殊電話號碼來解鎖。
依據這篇:Android中PIN和PUK碼解鎖研究的追蹤過程進行追蹤,可以知道:
- KeyguardViewMediator.java 的 onSimStateChanged() 裡有對 PUK_REQUIRED 做處理,dokeyguard()會顯示鎖定畫面,而dokeyguard()裡則是先檢查是不是被鎖住,是的話,就送訊息出去,表明該要顯示鎖定的畫面,送出去以後,handleShow()會收到並處理。
- handleShow()裡會先播放音效,然後呼叫mKeyguardViewManager.show(),這裡會去建View,並設置View相關Layout參數。從這邊可以追蹤到LockPatternKeyguardView.createLockScreen(),這個函數就直接回傳LockScreen,LockScreen是在frameworks/base/policy/src/com/android/internal/policy/impl/LockScreen.java。
- LockScreen則是去解析frameworks/base/core/res/res/layout 下的 keyguard_screen_tab_unlock 與 Keyguard_screen_tab_unlock_land 其中之一(依橫或直來決定)。裡面的emergencyCallButton有註解說在sim card為PUKd時,才顯示。至此,已經知道該改哪個畫面才可以多一個按鈕出來。
那麼多了按鈕之後,能否再帶一個畫面出來輸入PUK與PIN呢?
這邊繼續參考takeEmergency()的部分,takeEmergency()是直接送帶有ACTION_EMERGENCY_DIAL的Intent出去。ACTION_EMERGENCY_DIAL是一個字串’com.android.phone.EmergencyDialer.DIAL’,以這個字串去搜索,可以在packages/apps/Phone/src/com/android/phone/EmergencyDialer.java與Phone app的AndroidManifest.xml中找到,那麼這就表示是由Phone app在處理。
因此,決定仿效這樣的方法,在Settings app裡加上輸入PUK、PIN的畫面,並且在AndroidManifest.xml裡該畫面activity的intent filter裡加上客製的Intent字串。
Framework 層,則先在畫面加上新的按鈕,並且在按鈕的處理裡,仿效takeEmergency(),加上送出客製的Intent字串,這樣就可以串到Settings app的畫面去了。
程式都撰寫好之後,進行測試,首先遇到的問題是,按下按鈕以後,位於Settings app的畫面並沒有顯示出來,利用 adb logcat 進行追蹤,發現的確有送出 Intent,要求 Settings app 裡的 activity 啟動,可是畫面卻出不來,參考EmergencyDialer.java,發現需要在 onCreate() 裡加上 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED),這樣才可以在被鎖定時顯示出來。
第二個遇到的問題是,使用特殊的電話號碼去進行撥號,並沒有反應,也因此無法解鎖。這裡去搜索IccCard.java,發現有supplyPUK()函式,既然supplyPIN()是解鎖PIN,那麼supplyPUK()就應該是解鎖PUK。於是在畫面補上取得IccCard的必要程序,然後去試,這次根本連畫面都出不來了,參考 adb logcat,發現是 activity 啟動失敗,依據啟動失敗的錯誤訊息去搜索,發現是需要為activity加上android:process屬性,於是在 Settings app AndroidManifest.xml 新增的Activity tag上加上android:process=”com.android.phone”,就可以順利啟動並解鎖了。
電影流水帳(2012/2/15~2012/2/24)
- Flypaper (IMDB, Wikipedia),中譯:捕蠅紙。1990年也有部同名的Flypaper,然後裡面的演員有劉玉玲,真是讓我驚訝了一下,世界真是小,不過我不知道1990年的故事是否跟現在的一樣。這部片的故事,是講銀行同時被兩幫搶匪搶了,由於搶匪都沒預期到有另外一票人,所以很混亂。混亂的同時,有中情局的人死了。無法集中精神,可以同時注意很多事情的Tripp擔起偵探的角色,在銀行這個密室裡,試圖找出誰殺了中情局的人,在找出凶手的過程中,又死了一些人,最後還出人意料之外,結局不能說,說了就破梗了(是說,我也常破梗,這次就算了…)。整個故事有抽絲剝繭的推理,也不會拖泥帶水,節奏明快,真的不錯看。中間有一段,女主角Kaitlin強吻了Tripp,然後Tripp整個在地上打滾說我快死了那段,蠻有趣的,讓我印象很深刻啊。
- 3 idiots (IMDB, Wikipedia),中譯:3個傻瓜。很多人大推的片,的確很好看,就不多說了。故事的表達跟某些情結是有點誇張了,但他想表達的東西很值得人去好好思考。然後裡面有印度的歌舞穿插,很好看!還有最後不知道是在哪裡取景的(Ladakh是真的有這麼漂亮嗎?),風景很漂亮!
電影流水帳(2012/2/8~2012/2/14)
Thor真的是不怎麼樣的片,圖左是我覺得台詞很搶戲的女配角Kat Dennings,不算是很漂亮,但她在電影裡的獨特知性美吸引了我的目光。
- Thor(IMDB, Wikipedia),中譯:雷神索爾。長不怎麼樣的片,感覺上跟「美國隊長」一樣,就是為了要幫「復仇者聯盟」鋪梗,Ironman2裡有一段發現大坑的,就是接到這裡,那個坑是雷神之鎚掉下來所出現的洞。Thor是北歐神話裡的雷神,小時候有看過,所以裡面講的一些神還算是熟悉,不過其實也只要知道Loki、Odin跟Thor就夠了。Marvel的Thor基本上就是延伸北歐神話,所以故事大致上就是這樣發展,只是加上Thor三不五時會到地球溜達。故事大致是這樣子的,Thor是個臭屁又驕傲,不會聽人講話的人,準備要登基接奧丁王位的時候,冰雪巨人來亂,雖然沒事,可是Thor就很衝動,說要殺到冰雪巨人那邊去,奧丁不准。後來就自己帶親信跑去,要不是奧丁去救,差點就沒命。奧丁把他的超能都拿走,放逐到地球去。丟到地球時,就遇到女主角一行人救了他。女主角一行人因為不小心撞到他,良心不安,就把他帶回去。這裡有一幕,Thor邊穿衣服,邊講話,秀出他壯碩的肌肉,是真的很讚。後來就帶到Loki,Loki是奧丁撿回來養的,他很不爽,不爽奧丁都不重視他,所以才會放冰雪巨人進來偷暴風之匣。然後他跟奧丁吵起來,奧丁因此昏倒,長眠不起。Loki暫時接任王位,並且跟冰雪巨人達成協議,要消滅Thor。Thor的同伴因為Loki掌權,又不讓他哥哥回來,不是很爽,就跑去地球找Thor。冰雪巨人剛巧也在這個時候去拜訪Thor,然後就是一場大戰,Thor因為沒有神力就很廢,被打趴,然後突然因為Thor改變了心境,就回復神力,雷神之鎚也回到他手上,喔喔喔!!一下子就把冰雪巨人幹掉,然後回到Asgard,跟他弟弟打起來。這裡很不合理的是,Thor突然同情起冰雪巨人,也不願意打Loki。為了阻止Loki毀了Jothuheim,他用雷神之鎚把彩虹橋打斷,也因此回不了地球。然後Thor跟Odin打到差點掉下去,Odin突然甦醒,救了他們兩人,可是Loki卻自己放手掉下去。片尾帶到Dr. Selvig去參觀神盾局,鏡子裡冒出Loki的身影,顯示還有後續的故事。
- Underworld(IMDB, Wikipedia),中譯:決戰異世界。回味老片,趁第3集上映,趕緊看一下。狼人跟吸血鬼是世仇,吸血鬼Selene發現狼人怪怪的,就去調查,發現了狼人在找Michael Corvin,也發現了暫時攝政的Kraven跟狼人Lucian勾搭,要篡位。於是她就請出了Viktor,可是Viktor不是很相信她。之後真的確定了Kraven跟Lucian有勾結,Viktor就親率人要去把狼人幹掉,而Selene為了保護Michael也去救人,然後就打的亂七八糟,一踏糊塗。真相就隨之而出,狼人跟吸血鬼世仇,是因為Lucian愛上Viktor的女兒,可是Viktor不允許,就把他女兒給處刑解決掉了。而Kraven則告訴Selene,說她的父母並不是被狼人殺掉,而是被Viktor殺掉。Michael也陷入危機,他即將死去,Lucian告訴Selene趕緊咬他,讓他變成超越吸血鬼跟狼人的新品種,就可以救他。Michael被咬之後,就變成了新人種,跟Viktor展開決戰,最後在Selene跟Michael的聯手之下,Viktor被幹掉。
signalStrength.getGsmBitErrorRate() always return -1
用 PhoneStateListener.onSignalStrengthChanged() 來接signalStrength,就可以呼叫到signalStrength.getGsmBitErrorRate(),試了兩三台手機,都只拿到-1。上網查,很多人回報他的手機也是如此。查Android developer reference,這個要看 27.007 8.5,看了以後知道-1是不正常的值,也知道對Modem那邊是下AT+CSQ。
請同事幫忙看,他說直接對 Modem 下 AT+CSQ 有傳回值:”14,99″,這就怪了,所以就看了 Framework 層這邊,處理回來的 AT+CSQ 的地方是在 GsmServiceStateTracker.onSignalStrengthResult() ,這邊繞了一堆路,簡單的說,就只解析了第一個參數,存到 signalStrength 裡以後,就通知上面了,剛巧,signalStrength 裡 bit error rate 的預設值就是 -1,所以才會一直都拿到 -1。因此這邊加上解析第二個參數的程式以後,就可以順利取得99。
回頭再看 27.007 8.5,99 其實是 not known or not detectable,這還是沒辦法用,再加上 8.5 對 AT+CSQ 的說明是說 optional,不一定要實作完全,因此這就只能回頭問提供 modem 晶片的廠商了。



