Android螢幕解析度

需要寫一個程式同時支援平版跟手機,是故,螢幕解析度就是一個討厭的問題了。上網 Google 了一下,在 StackOverflow 裡看到一篇:Android : App support for multiple tablet screen resolutions,雖然還沒投票選出最佳答案。但是第一個回覆蠻中肯的,他建議先去看 Android 開發網站的這篇 Using new size qualifiers ,就是一般的就用原來的 layout,那平版就用 layout-sw600dp 或 layout-sw720dp ,甚至乾脆就用 layout-v11。總之,Android 開發網站上 Best practice 裡的 Support multiple screens 很值得一看,有提到設計的原則、圖形怎麼選用與縮放,也提到怎麼測試。

說真的,其實現在也不知道用的平板是那一塊,就先弄一般手機 layout 的就好,等知道了平板的解析度,再來調整也不遲。

 

EditText 的 setOnEditorActionListener

還是紀錄一下好了。

在改 2.3.3 Phone app 裡的 GetPin2Screen 時,很妙的一點,它只有去設置 mPin2Field 的 onClick 事件,這樣的結果是導致輸入完 PIN2,按下 Done 以後,一點反應都沒有。

上網 Google 了一下,看了一堆 EditText 的介紹/密技以後,發現是要用 setOnEditorActionListener 去攔截按下 Done 的動作。所以就老實地實作了 OnEditorActionListener 介面,然後 setOnEditorActionListener()。原本 mClicked 裏面的 code 則被我整理成 function,給 OnEditorActionListener 呼叫。軟體鍵盤右下角的 “Enter” 可以透過改 layout 解決,要幫 EditText 增加一個 attribute:android:imeOptions=”actionDone” 。

主要參考資料:

 

 

vim調整split後的區域大小

按下 ctrl+w s 與 ctrl+w v 以後分割出來的區域,vim 裡是叫作 window,所以用 google 去找 vim split window size 就可以找到說明。

要調整 window 的方法,也是要先按下 ctrl+w:

  • ctrl+w +、ctrl+w -:先按下 ctrl+w 再按下加號或減號,是增加或減少列數,也就是調整上下分割時用的。
  • ctrl+w >、ctrl+w <:先按下 ctrl+w 再按下大於或小於符號,是左右分隔線向右或向左的意思,主要是調整左右分割實用的。

以前就很想知道這功能了,其實早就應該去查了,這樣才會記的住,才不會老是在想說該怎麼弄。

Python Performance Enhancement Tips筆記

以下是摘要:
  • python -m cProfile -s cumulative $1
  • time 指令
  • 用 pypy 與 python 對比:time python a.py 與 time pypy a.py
  • 可以考慮組合應用,一部份用 pypy,一部份用 python,因為 pypy 無法使用某些模組。
  • thread 效能不彰,因為 GIL 的關係,儘量使用 multiprocessing module 來代替 thread。要注意不可以使用函式內的函式,否則會有 Exception 發生,參數函式跟回傳值都要是 pickable 的。
  • 可以考慮使用 gevent:淺談coroutine與gevent

 

 

電影流水帳(2012/9/11~2012/9/30)

Aishwarya Rai

  • Men in black 3 (IMDB, Wikipedia), 中譯:星際戰警3。這集玩的梗是時空悖論,在他們去阿波羅 11 號太空梭搭建ArcNet的那段,我覺得怪怪的,但我說不上來。在 1969 年被 K 關到月球監獄的 Boris 透過幫忙,逃出了監獄,他用時空跳躍器回到過去,殺死了 K。J 一覺醒來,發現自己超愛喝巧克力牛奶,而且周圍的人都不記得 K 了。O 告訴 J ,可能是有人回到過去,你會記得,可能是因為你們過去有牽絆。於是 J 就回到過去,跟過去的 K 一起冒險,他們要拿 Griffin 的 ArcNet 去阿波羅 11 號,把 ArcNet 發射到外太空以保衛地球。在把 ArcNet 放到阿波羅 11 號時,與兩個 Boris 展開激戰,最後的一段插曲真的很溫馨,不僅帶出了為什麼 K 那麼少話,也帶出了為什麼 K 與 J 會有那個牽絆,甚至在之後 K 錄用了 J。還不錯看,應該不會再拍 4 了吧?
  • Enthiran (IMDB, Wikipedia),中譯:鐵甲戰神。前兩年就看過有人介紹說不錯看了,今天正好在好萊塢電影台看到,就順著一直看下去,所以其實也沒有真的全部看完,大約是從十分之二左右處開始看。前面的劇情很老梗,就是有個印度科學家 Vaseekaran 造了機器人 Chitti ,他一直想藉此揚名立萬,但是國家科學委員會的委員長 Dr. Bohra 一直阻攔。藉著這個阻攔,Vaseekaran 讓機器人 Chitti 有了感情,並且向社會大眾證實了機器人真的可以保家衛國,拯救人類。豈料 Chitti 在有了情感以後,愛上了 Vaseekaran 的女友 Sana,這也是後面一場大戰的緣由。Dr. Bohra 一直阻攔是因為他想拿到這機器人的關鍵組件來製作可以作為戰爭用途的機器人,他接了恐怖份子的訂單,但是一直沒辦法研發出關鍵組件,眼見就要開天窗了。Vaseekaran 在這時候與熱戀上 Sana 的 Chitti 鬧翻,Vaseekaran 把 Chitti 解體丟掉。Dr. Bohra 在這時救了 Chitti,重新組裝以後,額外加上了紅色的破壞程式晶片,這個晶片讓 Chitti 變得非常邪惡與強大。仍然熱愛著 Sana 的 Chitti,首先就去搶了婚,接著製作自己的分身機器人並殺了 Dr. Bohra,Dr. Bohra 真的沒想到他的破壞程式晶片這麼強大 (這些人是都沒想到要裝後門嗎?)。Chitti 製作了許多分身機器人,成為一股勢力。Vaseekaran 要救女友,就化妝成 Chitti 的樣子混進去 (就在這時,我發現 Chitti 跟 Vaseekaran 是同一個人演的,囧,我也太遲鈍) 進行破壞。第1招是中斷電力,機器人是以電力作為能源的,中斷電力的話,就可以讓機器人失去動力,這招差點就成功,敗在汽車手下,在幾乎要沒電的時候,Chitti 用汽車電池充了電。捲土而來的 Chitti 更加強大,接下來的科幻程度超乎我的想像,這些機器人可以組成球、蛇甚至機器人開始追殺 Vaseekaran 跟 Sana,以人型機器人來做組合的這個段子在其他電影中沒看到過,想看精彩片段的可以參考 Youtube。第2招則是病毒,這招也不行,聰明的 Chitti 在打壞 Vaseekaran 的電腦後,自己啟動了殺毒程式,清除了自己與分身機器人身上的病毒。最後則是在解除 Chitti 磁吸程式,讓 Chitti 與分身機器人解除合體以後,以強力電磁鐵把真身 Chitti 吸到車子裡,快速地打開身體,啟動破壞程式破壞其他分身機器人,並拿出紅色破壞程式晶片,總算解除危機。造成這麼大的危害,Vaseekaran 被法院判了死刑,機器人 Chitti 跳出來以證物的身份翻案,指出其實是 Dr. Bohra 造成了,法官因此決定翻案,免了 Vaseekaran 死刑,但是 Chitti 要被解體。片子最後就是 Chitti 被解體,然後頭被放到博物館展覽。
  • The smurfs (IMDB, Wikipedia),中譯:藍色小精靈。不錯,重拾了兒時的回憶,如果小時候沒看過,也許對這部片就比較沒感覺,不過我家大公子倒是看的津津有味。我是從大約五分之三左右開始看的,前面大概可以猜到劇情,應該是因為某些原因,賈不妙打開了時空通道,讓藍色小精靈跟賈不妙一眾人等來到現在的紐約市。藍色小精靈認識了正因為懷孕而苦惱的男女主角,並得到他們的幫助,尋找如何回家的方法。而賈不妙則利用他的魔法開始追捕藍色小精靈。整個故事就是在紐約展開,在一連串的冒險之後,老爹找到如何回家的方法;賈不妙本來被抓到監獄,透過蛾聯絡蒼蠅以後,逃出監獄;藍色小精靈一眾人去舊書店找咒語時,被隨後而到的賈不妙看到,老爹犧牲自己,要其他人快回去。藍色小精靈當然不肯,回去跟男女主角商量以後,男主角出來幫忙,而小聰明則是打開時空通道,把所有村民都找來一起救老爹。最後當然是救出了老爹,所有藍色小精靈回到村子,有皆大歡喜的結局。

vim 凸顯游標所在列

因為要對 log,所以有此需求,印象中vim 可以做到,但不知道指令。

後來 google 了一下,找到是 cursorline,輸入 :set cursorline! ,游標所在列就會出現光棒或是有底線 (視 vim 所在環境而定)。有游標列,就有游標行,:set corsorcolumn! 就是了。

 

資料連線的重試

主要是看資料連線會怎麼個重試法。

從 ConnectivityManagerService 可以看到有追蹤 Mobile data state (MobileDataStateTracker),這裡會呼叫到 Phone 裡的 enableApnType(),這個函式最終是呼叫到 DataConnectionTracker.enableApnType(),而這個 method 其實是 virtual 的,分別由 CdmaDataConnectionTracker 與 GsmDataConnectionTracker 這兩個類別去實作。

在 CdmaDataConnectionTracker 裡可以看到利用 ALARM_SERVICE 進行重試連線的機制。Intent 名稱是 INTENT_RECONNECT_ALARM,而重試時間則是由 nextReconnectDelay 決定。nextReconnectDelay 則是從 mRetryMgr.getRetryTimer() 取得。mRetryMgr.getRetryTimer() 其實是依據 mRetryArray 裡的值來回傳,mRetryArray 則是在 mRetryMgr 被建立時,用 configure() 方法去初始的。configure() 收一個字串,CdmaDataConnectionTracker 裡會先看 ro.cdma.data_retry_config 這個 property,如果沒有,就丟 DataConnectionTracker.DEFAULT_DATA_RETRY_CONFIG 這個字串給 mRetryMgr.configure() 去解析。

字串裡的格式,主要以逗號分隔,可以有這四種:

  • default_randomization 預設亂數時間
  • max_retries 最大重試次數
  • delay_time 延遲時間,亂數時間則是使用 default_randomization
  • delay_time:randomization_time 延遲時間與亂數時間

DEFAULT_DATA_RETRY_CONFIG 裡是這麼寫的:default_randomization=2000,5000,10000,20000,40000,80000:5000,160000:5000,320000:5000,640000:5000,1280000:5000,1800000:5000  ,解析以後,會把 5000 到後面的值都放到 mRetryArray 裡,所以 mRetryArray 就有十個元素。

運作時會依據 mRetryArray 的值進行重試 (單位是 ms 亦即除以 1000 就是秒),當連線失敗,會等待 5 秒+亂數2秒,然後重試;如果失敗,接著會等待 10 秒+亂數2秒,然後重試;如果又失敗,接著會等待 20秒+亂數2秒,然後重試;依此類推;當重試超過第十次時,就會一直用第十次的值,繼續去重試。

這個重試的過程會一直持續下去,直到沒訊號、 漫遊或是設定裡的 Data Enabled 被關閉為止。

電影流水帳(2012/8/24~2012/9/10)

The Avengers movie art

  • The Avengers (IMDB, Wikipedia),中譯:復仇者聯盟。網樂通最近強推,就趁機會看完了,花了 48 元。這集的反派是Loki,而搶奪的東西則是宇宙魔方。宇宙魔方突然能量大增,Loki 出現,接著用魔法迷惑了神盾局的鷹眼與 Dr. Selvig,搶走宇宙魔方。神盾局當然不會坐以待斃,開始追蹤,並且找人,組成 Avengers。想不到 Loki 後來自投羅網,試圖造成 Avengers 的內鬨 (事實上也不全然是 Loki 所造成,神盾局本身與各個角色本來就有不少糾葛),的確,有造成此一效果,神盾局的那艘超級航母因此受損,我很喜歡的角色 Phil 也死掉了。這個人成為 Avengers 團結的關鍵角色,到了這個時候,片子也快滿兩個小時,再不大戰就悶了,於是 Dr. Selvig 在這個時候利用新建史塔克大樓的電力打開了時空門,讓外星人來到地球,Iron man、Hulk、Captain America、Thor、Black widow、回復神智的 Hawkeye 就開始跟外星人打起來。打了好一陣子之後,Loki 被打下來,Hulk 衝過去就抓起 Loki ,像甩打麵糰一樣甩打 Loki,邊說著,怎麼有這麼虛弱的神啊,這一幕讓人印象深刻。接著,很像是 SEELE 的美國議會不顧 Nick Fury 的反對,決定要發射核彈到紐約曼哈頓島,核彈在秘密的指令下被發射了,飛啊飛。這個時候 Black widow 透過 Dr. Selvig 的幫忙,控制了時空門,問說該不該破壞。從 Phil 身上體會了犧牲奉獻真義的 Iron man 說,這個核彈不能在曼哈頓島爆炸,於是奮勇利用最後的能源把核彈送到時空門的另外一邊,但 Iron man 自己也沒有能源,掉了下去 (是說,在外太空有所謂的重力嗎?為什麼會掉回地球? ),核彈爆炸了。眾人在等了許久,等不到 Iron man 回歸之際,Captain America 只能很沉痛的下令說要把時空門關上,Black widow 就破壞了時空門的裝置。Iron man 很幸運地在時空門關閉前掉了下來,但是沒有能源的他,就一直掉一直掉,Hulk 很帥地在這個時候救了 Iron man。最後,外星人都被殲滅了,Loki 被抓住並與 Thor 回了 Asgard,並且透露了會有續集的可能。
  • Act of Valor (IMDB, Wikipedia),中譯:海豹神兵。有點悶的片,這部片子裡沒有大牌,也沒有那種大場面的戰爭畫面,但是劇情很真實,就是海豹部隊出任務。從救人、阻止炸彈爆炸,都很像真的,我甚至覺得這會不會是一部有簡單劇情的紀錄片。

 

電影流水帳(2012/8/1~2012/8/23)

TANGLED | ENROLADOS

  • Journey 2: The mysterious island(IMDB, Wikipedia),中譯:地心歷險2-神秘島。很歡樂的片子,不太需要花力氣就能理解劇情,明顯是給中小學生看的電影。上集的主角有了新的繼父,雖然繼父對他很好,但是主角不領情。片子的一開始,主角因為收到神祕的電波,想收的更清楚而跑到衛星發射站去收,結果被警察追捕。繼父後來保了他出來,並且問他為什麼,並幫主角破譯,才知道是祖父在夏威夷神祕島發出的信號。於是他們就一起去了夏威夷要找祖父。在夏威夷遇到漂亮的女孩跟她開直昇機的父親,就出發去神祕島了。依據電波所指名的經緯度,他們算是順利的找到神祕島,但直昇機因為圍繞在神祕島周圍的風暴而墜毀了。到了神祕島,果不其然,一切事物都非常的奇妙,也找到了祖父。然後,去看遺跡的時候,主角的繼父用手掬起一把地上的水,舔了舔之後,就說,「水鹹鹹的,這島快沈了,大概還有兩三天的時間。」是有沒有這麼神?好吧,島上的地震頻繁,而且還有火山爆發,是真的快沈了。然後他們就決定去找 Captain Nemo 的鸚鵡螺號(不是Pixar的Nemo),想藉著潛水艇逃出神祕島。Captain Nemo 的鸚鵡螺號是凡爾納小說裡的神奇潛水艇,也曾經出現在The League of Extraordinary Gentlemen裡。經過一番歷險之後,就順利找到潛水艇,還用電鰻補了電,終於逃了出去。最後主角跟繼父、繼父跟祖父的感情變好,主角跟女主角也成為男女朋友,皆大歡喜。片尾似乎透露了還有拍第3集的意願,上月球?!
  • Tangled (IMDB, Wikipedia),中譯:長髮公主。故事是來自格林童話裡的Rapunzel,迪士尼稍做改變。巫婆因為神奇的花被國王拿去救懷孕的太太,太太之後生了小孩,而小孩的頭髮因為花的關係有了神奇的力量,所以把小女孩Rapunzel綁架走,帶到高塔之上。為了神奇的力量,她不敢剪Rapunzel的頭髮,就這樣過了十八年。Rapunzel在這十八年間,每年生日的時候都看到天燈,對外面心生嚮往。十八歲生日的時候,她跟以為是媽媽的巫婆繼母說,想出去走走,巫婆繼母為了神奇的力量,當然是不願意。後來,有個通緝犯逃了進來,Rapunzel 跟他做了交易,就出去冒險了。巫婆繼母為了神奇的力量,跟蹤出去,並且設計了詭計,讓Rapunzel以為外面的人不可以被信任。回到高塔以後,卻想不到一連串的冒險讓Rapunzel想起了嬰兒時期的事情,知道了自己就是國王所要找的公主,也知道自己誤會了男主角。男主角則是透過Max馬的幫忙逃出監牢,去到高塔。上了高塔之後,卻被捅了一刀,快死掉了。Rapunzel為了救男主角,跟巫婆繼母交換條件,救了男主角就跟你走。想不到男主角拼著最後的力氣,把Rapunzel的頭髮給剪了,神奇的力量就此消失。巫婆繼母大驚之餘,掉到高塔之下死去,Rapunzel抱著男主角屍體痛哭,這時候想當然爾的發生了奇蹟,男主角再次活了過來,Happy ending…

 

 

jsdx-toolkit的安裝

安裝碰到的問題,安裝時會要編譯,所以需要安裝必要的開發套件,其實也就3個:libclutter-1.0-dev、libmx-dev、libclutter-gst-dev,然後再安裝 jsdx-toolkit 即可:npm install jsdx-toolkit

奇怪的是我執行了兩次 npm install jsdx-toolkit 才成功。