2011年1月27日 星期四

[Android] Honeycomb preview emulator PREVIEW

今天早上, Honeycomb preview SDK已經出來了, 當然包含了模擬器, 不過真的是慢到嚇死人的不能用, 在我的MBP上動不了

剛剛注意到, 預設的Ram size只有256MB(小氣!!!), 所以就把它調大來試看看, 果然勉強可以動一下下 (我MBP只有2G RAM, 所以我設768MB給它用):

不過螢幕方向, 這實在很難看

Ctrl-F12 一下就可以不用擺頭看了, 但不管怎轉還是Portrait mode, 但還是Landscape比較有fu吧!

不過這只要去Settings->Screen 把Auto rotation關了就好, 這下有Landscape囉!

實在太慢了, 看不了幾項, Recent used application的呈現方式有WebOS的fu, 還不錯:

Browser....好熟悉呀...簡直就是Chrome嘛...

實機應該比較好(廢話)

 

 

[Android][筆記] 在進入Activity時不default開啟軟體鍵盤(SIP)

Android上有個很煩人的就是(尤其是某公司的手機), 如果畫面上有可以輸入的框, 預設會focus在那上面, 某些手機(或說某些公司的手機), 預設變成只要那邊取得focus, 就會跳出軟體鍵盤, 這對很多User來說, 會有點煩(要看場合啦).....

要在code裡面把SIP預先藏起來的話, 要用這段code:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

[Android] 調整UI layout的利器- hierarchyviewer

Visual UI design的工具在很多平台跟語言其實都有, 當然有好有壞啦, Android ADT也是有的, 所以並不稀奇, 不過Android有的是更好用的 - hierarchyviewer

一般WYSIWYG UI editor著重的是在開發時期拉UI layout的部份, 但更進階的通常就沒著墨了, ADT上的UI builder並不是很強, 真正要能夠調出複雜而且是自己想要的UI光靠那個也並不容易, 還是得對一堆layout有相當程度的了解才能比較得心應手, hierarchyviewer是屬於更進一步的工具, 他可以檢查做出來的成品的UI layout (當然也可以想辦法偷人家的看 :P), 由於Android上的layout設計是階層式的, 所以可以攤成樹狀, 由hierarchyviewer就可以很明顯看出各layout從屬關係, 並且可以從screen shot部分的對應看出某一段layout成果的長像是如何

此外還有一些更強的功能, hierarchyviewer可以幫你把整個畫面輸出成PSD 檔(Photoshop的檔案), 這不是只是簡單的輸出平面的screenshot, 而是利用PSD檔可以有層次(layer), 把畫面上不同的元件分作為不同的layer疊起來, 這樣從Photoshop就可以一目了然的看出是不是有哪些沒秀出來的原因是被另一個蓋到的

個人覺得最棒的是那個紅綠燈, 設計不良的UI的效能自然是很差, 這個紅綠燈就是幫助你把效能不好的地方抓出來, 分作三部分, layout, measure, draw, 可以由這三部分分析去進一步改善整體UI的效能

 

 

 

 

2011年1月25日 星期二

原來大部分的人的電腦都是拿來工作的呀(不然拿來幹嗎?)

剛看了一下Mac App Store上的排名:

從前幾名看來, Productivity 分類是最熱門的, 所以這表示大部分的Mac都是拿來工作的? 不過其實Game也不少啦 :P

2011年1月22日 星期六

Olympus E-PL2 開箱

買這台的起因是老婆是想要買一台好一點的相機取代她現用的那台Panasonic F-100

本來中意的是Panasonic GF-2, 我本來用GF-1就用的還蠻滿意的, 所以對GF-2也就還蠻放心的, 但昨天去台北逛了一圈, GF-2還真是有夠的熱銷, 隨便跑任一家店都可以看到正在交GF-2的貨, 一問之下, 大多公司貨都要先預定, 水貨也不是太好買又沒保固, 好不容易問到一家"可能"有現貨, 考慮了一個多小時後又回去問, 一查, 當天進的貨馬上被訂走, 老闆幫我調半天還是不確定下週會不會有貨, 回到新竹, 到新竹Nova問, 有家店家就說, 預定的連第一批都還沒完全拿到, 現在訂已經是第三批了, 運氣不好的話可能要到三月才有貨拿 orz

後來在一家叫做北極光的(店員服務真不錯)看到GF-2紅色水貨跟Olympus E-PL2的紅色機(公司貨), 但因為GF-2水貨沒保固也沒比公司貨便宜多少(公司貨保三年), 加上E-PL2外型也還不醜啦(是沒GF-2有型, 但紅色的看起來也不錯, 白色的看起來就太糟糕了), 而且又是M4/3, 鏡頭可以跟我的GF-1共用, 價格又差不多, 所以最後就決定買這台, 過年出去玩還可以拿來用, 不用苦等GF-2

P1020831P1020833

這一箱....包裝的還蠻樸實的, 我買的是E-PL2+14-42mm單鏡的組合

紅色的機身看起來還不錯看

正面:

P1020846

背面

P1020847

不像GF-2是採觸控的方式操作, 而是採傳統轉盤跟按鈕的方式, 或許習慣了, 我覺得這也還OK, 而且我也不覺得觸控會比較好用, 觸控的話有時需要單手操作的場合反而就不方便了

機身, 比GF-2略重, 但跟GF-1差不多(GF-2果然有進步), 體積也略大, 但這樣我反而覺得雙手持起來比較順手, 把手的設計也比較好拿, 不易滑手, 優於GF-1, GF-2

Olympus M Zuiko Digtal 14-42 F3.5-5.6 ED

P1020848

這顆鏡頭, 相當相當的輕, 剛拿在手上時還有點不太敢相信, 這樣也讓它被裝到機身後整體重量並不會比GF-2+餅乾鏡重太多

整體上來看, 做工感覺有點廉價, 不過是kit, 應該也是成本導向吧, 口徑只有37mm, 居然比Panasonic kit跟餅乾鏡用的都還要來的小, 應該只有DV是用這size吧?!

至於表現上, 還沒真的實拍, 還不知道真的品質如何

以下是簡單的交叉比對

E-PL2 + 14-42mm (@14mm F3.5) JPEGP1220001

E-PL2 + Panasonic 20mm F1.7 (@F1.8) JPEG P1220004

GF-1 + 14-42 (@14mm) RAW P1020854

比較起來, Olympus色調偏暖, Panasonic則明顯偏冷, 差異還蠻明顯的, 但E-PL2明顯優於GF-1則是在高ISO的表現, GF-1我從不敢開超過ISO 800拍, 800之後就真的很慘了, 但上面這三張照片, 前兩張Olympus的是開1600, GF-1是800, Olympus在1600的表現似乎還比GF-1在800的表現還要乾淨, 據說GF-2的可用ISO也可以到1600, 不過不知道比較起來表現有沒這麼好

下次等真的有實拍的時候再來仔細比較好了

買了新閃燈, Nissin Di466 - 沒開箱的開箱文

以前總想說, 用閃燈場合不太多, 而且想說打了燈, 打不好就變死白了, 就一直沒買閃燈, 想說光靠大光圈加高ISO可以撐一下就好, 不過直到今年尾牙, 拍回來的照片怎看都非常的不滿意:

實在是...有夠糟糕....後來動到內閃...唉... 拍的還是很爛

所以就想要買隻閃燈

Survey了好久, 本來考慮了Panasonic PE-36S, DMW-FL360, Olympus FL-36R, FL-50R, 以及本文主角 Nissin Di466

跟Ruey借了FL-36R和FL-50R, 本來很滿意FL-36R, 大小不會太過大(雖然略重), 支援TTL, 離閃, 而且可以上下左右擺頭, 的確蠻理想的, 但後來去查了價錢, 台灣賣的價錢根本就跟搶劫沒兩樣, 購物網站賣快12000, 但我到米國的阿馬龍查, 呃...折合台幣不到七千, 根本就只有半價, 而且東查西查, 好像還真不好買, 就打消這念頭, 至於他的兄弟FL360(明明就同一支), 價格合理點(好像也得八九千), 但也好像不好買

所以, 最後...跑了一趟台北....在新竹買了Nissin Di466... (呃, 那我幹嗎跑台北去問)

這隻因為跟老婆的E-PL2一起買的, 小殺了點價, 以3300買到, 但在台北問到的價格...居然想賣我4300...多貴一千!!!

支援TTL, 但如圖所見, 只能上下擺頭, 正常拿打跳燈應該還足夠:

P1020854

有支援TTL應該比較方便, 不用手動調來調去, 不過對我來說大概很多時候還是得手動吧, 我大部分的鏡頭都是手動鏡呀, 不能左右擺頭是個缺點, 不過便宜啦, 可以接受

家裡沒充電電池, 拿金頂先來頂著吧...之後再來買...測試了幾張:

90度跳燈 (周圍是木頭, 所以打起來就偏暖一點囉):

P1020813

直打

P1020817

這麼近直打還蠻容易過曝的, 不過加個擴散片好一點, 不過還是得減一點點光比較正常一點

大體上還算滿意, 而且便宜, CP值算不差啦....

2011年1月17日 星期一

[Android] Google Analytics for Android

今天晚上的GTUG請來了Tony Chan講GB的新features, 不過, 這些內容其實大部分都已經在Android網站上看過很多次了, 提起不了啥興趣, 雖然是對StorageManager有點興趣, 但卻不在這次講的內容, 可見這東西真的並不是個完成品, 不足以拿出來推

唯一讓我有點感興趣的是Google Analytics for Android, 所以回來的時候在車上稍微研究了一下

目前這東西, 說起來有點陽春, 把user行為的tracking定義成兩個分類 - pageview和event

pageview這觀念感覺就是從Web上來的, 但mobile application其實也沒啥page, 硬要分的話, 可以拿Activity來當做一個page吧, 不過有很多user interaction是在同一個Activity發生, 所以這分類應該是拿來應用在追蹤使用者使用某大功能的頻率

既然pageview不能夠表示in-activity的互動行為, 其實還可以拿"event"來用, 可以把button click, gesture之類的當做event來記錄分析

不過, 對於pageview和event其實沒有很明確的分野, developer可以在任何時候任何地方使用這兩者記錄, 並沒有特別強制性(比如說只能在activity用pageview或是pageview只能每個activity記錄一次之類的), 所以要胡搞也可以啦 (不過那就失去意義了)

比較恐怖的功能是可以允許developer自定變數, 如果把使用者個人資訊一起送上去, 就不妙囉

這整個功能上還稍嫌陽春, 如果要tracking使用者的使用流程, 這樣的東西並沒辦法做到

這部份有被問了幾個問題, 回來後我稍微查了一下:

1. 使用權限問題: 要不要使用者先同意收集才可以使用? 很不幸的, 這一點似乎是developer自由心證了, 並沒有任何強制步驟是使用者同意後才可以使用, 雖然使用這lib必須在manifest加上兩個uses-permission:

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

但這兩個, 一個是存取Internet, 一個是存取網路狀態的, 完全跟Privacy無關

2. Tony提到, 在沒有網路的時候會先keep在local的database等有網路時在上傳資料, 我當時提的問題是, 是否會有background service來做這件事, 還是AP launch之後才會真正去檢查網路並重送, 是只會有一個background service來做這件事? 還是每個AP獨立, 我會想到這問題有兩點, 第一點是資料庫問題, 如果每個AP負責自己的, 那每個AP會有各自獨立的資料庫, 而不會統一管理, 第二個是background processes數量問題

在會中時沒得到啥答案, 所以我只好自己簡單的追了一下, 基本上, 這設計沒我想的複雜, 簡單很多, 沒任何background service, 只有一個AnalysticsReceiver但看起來是來處理com.android.vending.INSTALL_REFERRER而非Connectivity change

所以這問題的答案就是, 它其實只是一個AP內的thread來處理而已(應該是NetworkDispatcher的dispatcherThread)

而且tacking code是存於各個AP的data目錄下一個叫google_analytics.db資料庫內, 所以只要取得這資料庫就可以取得了

 

整個設計上應該可以再加強, 尤其是保護User privacy這部份, 不然有可能被告吧? 我認為比較好一點的設計應該是在Market那隻AP裡面放個service來負責上傳analytics的資料, 只要提供API給AP去呼叫這隻service就好, 這樣第一步可以透過Android permission的機制先卡第一關, 而且可以比較容易統一設計一個end user agreement的dialog, 當AP第一次使用的時候跳出來取得user同意, 此外, 亦可以自動在網路狀態從無到有時自動把未送出的資料送出, 而非一定要AP正在使用的時候

2011年1月15日 星期六

[Android] Gingerbread: StorageManager and Obb

在Android Gingerbread引入了StorageManager這東西, 似乎是為了OBB(Opaque Binary Blobs)這功能而來的, 不過, 似乎是也還沒把tool含到SDK內, 也沒很詳細的說明文件, 所以看起來現在好像也沒啥人去用這個, 實際上試了一下, 最後還是有問題, 搞不好還有bug, 懶得繼續追下去了, 不過大致上理解怎來利用這東西

OBB是一個含有加過密的檔案系統的檔案, 唸起來頗繞口, 不過如果對Linux有點熟悉的話, 它是一個磁碟映像檔(image file), 最後會以loopback device的方式掛載入Android內(Android底層是Linux, 採用這種方式也不足為奇)

由於是加密過的, 所以, 應用程式可以把需要保密的內容放到這個檔內, 比如說私密的通訊資料庫啦, 或是見不得人的照片...(呃, 我講到哪去了)

要建立一個OBB的檔案需要幾個tool:

mkobb.sh

pdkdf2gen

obbtool

由於目前SDK好像還沒這幾個東西, 所以必須從aosp裡面去找, 前兩者是一組的, 要一起配合, 而且mkobb.sh只能在Linux底下跑, 如果你嘗試在Mac上跑(像我一樣), 是會失敗的 (不過想想, 目前沒支援Mac也很合理)

Linux下, 有幾個kernel module是一定必要被載入的

sudo modprobe cryptoloop

sudo modprobe twofish

sudo modprobe vfat

 

這樣你才可以建立一個被加密過的loopback file system image

執行的指令如下:

mkobb.sh -d obbdir -k password -o obbfile 

 

-d 後面那個obbdir可以改成任何一個存在的目錄, 建立好的obb檔會幫你含入所有這目錄裡面的檔案, -k 後面輸入加密的密碼, -o 後面加入輸出的檔名

執行後內容會如下:

 

最後一行裡的"5f88a3619e6544ef"這個salt很重要, 要抄下來, 之後會用到

接下來就要用obbtool加簽章了, obbtool用法如下:

加簽章: obbtool a -n com.yourcompany.app -v 1 obbtest.obb -s 5f88a3619e6544ef

移除: obbtool r ~/Dropbox/obbtest.obb

-n 後面是package name, 必須要跟你的應用程式的package name相同, -v 後面則是自定的版本, -s 後面接的就是剛剛做mkobb.sh後產生的salt了

這樣這個obb檔就完成了, 可以把它放到手機sdcard或其他地方讓你的程式存取

在程式內掛載obb的話就要用到StorageManager了:

不過目前, 我碰到的狀況就是, 明明state已經變成MOUNTED, 但我就是取不到mounted path, 怪怪的

2011年1月11日 星期二

格列佛遊記 (Gulliver's Travels)

http://www.traileraddict.com/clip/gullivers-travels/our-general

這部片其實蠻好笑的, 就是把原本格列佛遊記小人國的部份改成現代搞笑版, 含一小部分大人國的部份

想笑一下的可以去看一下, 但不值得看3D版, 太浪費, 3D效果實在少的可憐, 看3D真的只是折磨到自己而已!

裡面拿了很多電影來做文章, Star war, Top gun, GI Joe, Avatar, Titanic, Iron man .....尤其是跟Iron man決戰, 一直讓我有種似曾相識的感覺, 突然才想到,那個機器人其實就是仿Iron man ... :P

2011年1月8日 星期六

花蓮遠雄悅來飯店

好久沒有好好的渡個假了, 這次想說帶小遠來海洋公園, 難得來, 想說就住好一點, 就選了悅來, 離海洋公園也近, 而且還附贈門票, 不過這一趟從本來的去年底就要來的, 一來去年底忙的有點忘了催旅行社定相關的東西, 也沒多少空的時間請假, 後來挪到現在, 想說不管忙或不忙, 還是來放鬆一下吧

說實在的, 這邊貴有貴的價值, 風景真的沒話說, 海景房看出去是一片美麗的汪洋:

P1020525

夜景也沒話說, 實在很後悔自己沒腳架:

而且, 我們訂的價格是包含早餐, 一頓晚餐, 海洋公園門票(還可以重複去, 我們住兩晚, 櫃檯小姐說就算我們排兩天要去都沒問題), 還有四張飲料券跟一張遊戲券, 算是相當划算

晚餐是Buffet, 今晚去吃了, 菜色還算多, 但質的方面就不好了, 生魚片太早切放太久, 又沒啥人, 所以感覺不新鮮, 熱食外觀看起來不錯, 但吃起來就差很多了, 甜點的話還不錯, 但種類就少了一點, 今天已經是假日了, 感覺客人好少, 但服務生一堆, 盤子收的倒是蠻快的, 服務也蠻不錯的

飲料的部份在酒吧兌換, 換酒精類飲料要多加110, 但一般的不用, 我換了杯咖啡, 坐在這寫code, 寫了這篇, 兩個多小時了, 還幫我續杯, 不過這咖啡, 也不是很好喝就是了

剛剛賣店隨便逛了一下, 似乎賣的東西還不錯, 打算明天來去買些小禮物 

2011年1月7日 星期五

[Android][Dev tip] 在手機畫面上加上一個浮水印

其實這是一個沒啥用的技巧(至少我還想不出應用), 就是加上一個像是浮水印的東西在畫面上, 不管在哪都會出現的, 像是這樣:

因為這個image要讓他一直不會消失, 所以他並不會是一個Activity, 因為Activity會有他的生命週期, 離開後就沒了, 所以要透過WindowManager去加上這個ImageView, 而且加上View的動作必須要給Background service去處理(這樣也就可以去做一些變化, 或動畫之類的)

首先, 要建立一個Service, 要達成這目的也很簡單, 在onCreate加上:

WindowManager wm = (WindowManager) this

.getSystemService(Service.WINDOW_SERVICE);

 

ImageView logo = new ImageView(this);

logo.setImageResource(R.drawable.onepieceoverlay);

WindowManager.LayoutParams lparam = new WindowManager.LayoutParams(

WindowManager.LayoutParams.WRAP_CONTENT,

WindowManager.LayoutParams.WRAP_CONTENT,

WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 0, PixelFormat.TRANSLUCENT);

lparam.gravity = Gravity.RIGHT | Gravity.TOP;

wm.addView(logo, lparam);

這樣就好了, 其實很簡單, 就是透過WindowManager在system overlay上加個view

但這樣還不會work, 因為少了一個permission, 所以必須在AndroidManifest裡面加上

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission>

這樣就好了

不過system overlay沒辦法接touch event, 所以這邊放的view真的只是拿來放好看的

Evernote for Mac

昨天Mac的App store終於出來了, 這個東西還真是邪惡...不過, 也多了讓我們找好軟體的地方, 昨天抓了Evernote for Mac, 感覺還真好用

整個畫面很乾淨, 簡單, 不難上手

其中有幾個不錯的功能, 比如說可以從iSight拍照新增Note, 或是擷取screenshot來新增記事, 或是由剪貼簿貼入(如下)

加上所有的寫好的東西都是備份在網路上, 所以在其他裝置上也可以存取一樣的內容, 真的是很便利

2011年1月2日 星期日

告別2010, 101 89樓跨年體驗

其實本來沒想到要到這邊跨年, 起因是, 快到年底了, 公司旅遊補助還沒用, 又不知道該用在啥上面, 剛好打開雄獅首頁看到這個活動, 就訂了下去了, 挺貴的, 一個人要快2000台票, 而且, 還挺後悔的, 挺爛的.....

買到的是所謂的兌換卷, 要到101五樓去換"登機證"

號稱是所謂離月球最近的跨年 (好吧, 101的高度應該算離月球很近了)

去換這張票的時候, 看到現場的人潮就先失望一半了, 現場一團一團的大陸觀光團, 男男女女老老幼幼一大堆, 像我們這種散客看上去不多, 不過, 我也沒上去過101的89樓, 想說也好, 去見識見識

結果, 八點多換完票, 九點多開始排隊要上樓, 到了十點才真正登上89樓, 人實在有夠多!!

2011年1月1日 星期六

Kinect初體驗 - Dance Central (舞動全身), Adventures(大冒險)

雖然才玩不到一天, 講心得有點太早了, 來講講初印象吧

今天玩過了兩個遊戲, 一個是Adventures(大冒險), 一個是Dance Central(舞動全身)

大冒險是附在Kinect裡面的遊戲, 買來就有了, 裡面有相當多的小遊戲, 如果在外面看到有給人試玩的大都是這款遊戲, 而且玩的大多都是急流的那個小遊戲, 不過我個人比較喜歡玩的是Rallyball:

這遊戲很簡單, 就是想盡辦法去用全身去反彈球去打木箱, 打到標靶會有多餘的球跑出來, 所以突然畫面上一堆球有時後容易手忙腳亂的, 當然不只可以擋, 你還可以用手拍或踢增加球的速度跟力量

大冒險有個功能就是會透過Kinect上的攝影鏡頭不定時的拍下你的"精采動作"讓你之後可以分享, 不過我不是很喜歡這功能, 因為拍完後去回顧, 會覺得自己很蠢, 根本不是啥精采動作, 所以我後來就關掉它了... = ="

另一款是Dance Cntral(舞動全身), 這個大概就是今天玩最多的遊戲了, 玩到我氣喘吁吁的

這款內有很多歌曲, 今天玩了兩首歌, 大概就是底下這影片裡面人家玩的:

以前的跳舞機跟這比起來, 只能算是"踩"舞機, 傳統的跳舞機只是把控制器放大讓你用腳去踩, 所以也就根本只有腳在那邊亂踩一氣而已, 但有了Kinect就不同了, 還得搭配手部動作, 手腳不協調的人可能就難過了

這就不得不說Kinect還真是算蠻精準的, 動作捕捉的還算沒啥問題

每首曲子都會先讓你練習分解動作, 然後再挑戰整曲, 想要過關, 除了動作要正確外, 真的得去記舞步, 要不然就會手忙腳亂, 第一首的Poker Face還算蠻簡單的, 但也還蠻好玩的

Kinect本身鏡頭是可自己動的, 所以不管身高高矮, 它還是可以自己調到一個最佳的角度, 但要玩Kinect, 空間可能真的得大一點, 如果是小一點的公寓, 可能就有點麻煩

雖然控制器是同一個, 但辨識可能還是會跟遊戲有關, 在玩大冒險的時候, 換一個人還是可以捉到新換進來那人的動作, 但在舞動全身, 換一個人, 辨識精確度好像不一樣了, 必須要重新校正才可以解決

此外對於UI操作上的設計, 其實各遊戲也不是很一致, 大冒險採用的大多是按鈕, 手在上面放久一點就等同於按下那按鈕, 但舞動全身卻是靠手勢(老實說, 有點不是那麼好操作)

總之, 玩了Kinect之後會覺得, 像是Wii或是PS Move(PS3)那種要玩體感遊戲還得拿一個蠢蠢的棒子, 真的很蠢, 等級上就差多了!

不過, 體力不好, 玩起來還真累呀!!!

X盒子+Kinect 開箱!!開箱!! (小遠說, 跳跳跳的遊戲!!)

其實想買很久了, 不過家裡的主機好像真的已經不少了.. :P

剛領了獎金, 而且又適逢民國100年(藉口), 所以....就去順發把它抱回家....

不是4G的同綑包, 而是250G歡樂包(XBox 360"S")+Kinect+Kinect game 3選1+4 game選1....總價16690

光主機就蠻超值的, 裡面就包含Forza Motorsport 3和Alan wake, 4 game選1我又選了Halo Reach 限定版(不加4 game選一的這項的話只差700)

Kinect部份除了內附的大冒險外, 多買了Dance central

電源真的好大一顆

Xbox 360S的外型真的比PS3來的殺氣更重!!

Kinect比想像中大隻一點, 但質感也很好, 很搭配主機:

剛剛開箱結束後玩了大冒險的彈力球, 還有Dance central

天呀!還真累, 動到餓了!!!

不過沒事就亂拍照片這功能還蠻討厭的就是了!!