- Horrible Bosses(IMDB, Wikipedia),中譯:老闆不是人。還算是好笑的片,裡面蠻多大牌客串的,不過3個男主角有點過於用力擺爛了。3個男主角的老闆很機車,讓他們動了殺意,於是就開始殺人計畫。到最後,殺人計畫失敗,但是仍然成功的達成目的,讓3個男主角擺脫了惡老闆。Jennifer Aniston 在這片裡,相當的火辣,就看一看囉。
- The Descendants (IMDB, Wikipedia),中譯:繼承人生。這部片的配樂很精彩、很好聽。Matt 的老婆因為意外而變成植物人,遵照她的遺囑,她不願意使用維生裝置延續生命,所以要拔呼吸器。醫生告訴 Matt,請 Matt 把跟她相關的人都找來道別,所以 Matt 就找了她的女兒、父母、朋友來看她。在這段期間,Matt 從女兒嘴裏知道了妻子的背叛,跟女兒重修破碎的關係,也去找了妻子的情夫,請他來看妻子最後一面。整個故事相當平淡,沒有令人驚奇的結局,但是很好看。還有就是大女兒的身材很棒,有幾個片段穿比基尼的時候,還不錯看。
APN的一些筆記
前一陣子看APN的一些筆記。
TelephonyProvider是主要的提供者,從這裡就可以撈到 APN 的列表,這是在第一次開機或 Reset 時,由 /system/etc/apns-conf.xml 載入到 sqlite3 的資料庫裡。
在「設定」那邊的 APN 列表,主要是根據 sim card 上的 mcc, mnc 去查詢符合條件的記錄,然後列出來。查詢 mcc, mnc 的方法是透過 System Property:TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC,這是在開機,Phone 相關服務初使化以後,會存到 System Property 裡。當移除 sim card 時,自然會因為無法取得 mcc, mnc (System Property:TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC 是空的)而查詢不到資料,列表就會是空的。這時候去撈 TelephonyProvider,還是可以撈到完整的 APN 記錄。
電影流水帳(2012/3/6~2012/3/21)
- 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”,就可以順利啟動並解鎖了。