昨天去了GTUG聽了關於Arduino的分享, 硬體我是大外行, 但這東西還真的是很有趣呀! 其實在Google I/O拿到了免費的ADK 2012, 目前也還沒想到除了高級鬧鐘外, 我要拿它來玩啥, 先來個開箱好了…呃…但其實我老早就把箱子給破了….好吧, 這是個偽開箱

 

整個東西其實是用磁鐵吸住的, 所以要把這鬧鐘箱打開, 其實很簡單, 打開後分為兩塊版, 上面那塊版據說是Arduino Due, 下面則是一堆Sensor

 

這一塊就是Due, 後端有SD

 

前端則有兩個USB加上電源, 它可以由USB供電, 也可以由這個電源供電, USB一個是連接PC用, 一個則是手機

 

Sensor則是有溫濕度感應, 大氣壓感應, 光感應, 顏色, 加速度, 磁力, proximity sensor等等… (呃, 這樣還是個鬧鐘嗎?)

當然也有NFC:

整個合體的外觀就像這樣:

 

當然, 這不是普通的Arduino, 這是ADK 2012, Android手機可以透過USB或藍牙與它連結

Android developer網站上有開發簡介: http://developer.android.com/tools/adk/adk2.html

也有一個範例程式, 可以從Play store上下載

Device-2012-07-19-170809

不過還沒想到該拿它來做啥, 不過以這形狀, 如果想拿來做個啥機器人之類的, 就有可能會需要把它給拆了吧?

不過如果能做一個這樣的東西, 也不賴呀:

這篇主要來自Google I/O 2012這兩個Sessions:

Making Good Apps Great: More Advanced Topics for Expert Android Developers

Doing More With Less: Being a Good Android Citizen

在這兩堂演講中有提到, 可以利用"PackageManager.setComponentEnabledSetting“把不用的Intent receiver給停用, 這在Android中的確相當有用處, 常常Intent broadcast都是一個造成系統忙碌的主要原因, 在早期的Android版本, 甚至常常碰到因"android.net.conn.CONNECTIVITY_CHANGE"所導致的ANR, 這是因為註冊聽這Intent的receiver常常非常的多(大多網路相關, 而智慧型手機最常見就是網路相關的軟體)

不過這邊要講的並不是這個問題, 不過也可以應用到同樣的技巧

Android中, 可以設定多個Activity去處理同一種的Intent, Share (android.intent.action.SEND)就是最典型的例子, 但這也造成另一種困擾, 註冊的應用程式太多, 導致整個Share menu相當的雜亂難選:

由這個例子看來整個list相當的長, 這對使用者來說可能不好用, 而且問題在於, 有些可能不用一開始就出現, 比如說如果沒有登入任何一個e-mail account, Mail這選項是可以被藏起來的, 這作法就是

ShareActivity 預設成disable:

<activity android:name="ShareActivity” android:enabled=“false”>

這樣如果沒enable它的話, 就不會在Share list出現, 只要我們在某個點(比如說已經完成登入帳號)去enable它, 它就又可以回到這list了:

if(pm.getComponentEnabledSetting(cname) != PackageManager.COMPONENT_ENABLED_STATE_ENABLED ) {
            pm.setComponentEnabledSetting(cname, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
        } else {
            pm.setComponentEnabledSetting(cname, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
        }

尼克大說,對Julian的十大IO問題之一應該是"你是自己花錢去的嗎?“, 今年的確自費出國參加了幾個活動, 本以為今年也無緣IO了, 不過最終還是成行了, 不用繼續怨念, 這都得感謝很多人呀…首先是Tiffanie的幫忙牽線, 以及Elvis的慷慨讓票(老實說他大可以拿去賣黃牛票賺一筆,卻原價轉賣給我), 還有wuman, 不曉得幫我跟他朋友煩過幾次, 後來聽到尼克大也差點幫我弄到票, 實在非常的感動….還得感謝Arthur, 我這次就可以不用自費出去了(還得間接感謝這時候離職的Johnny :P , 還有也有幫我問的mifong), 反正終於不用在台灣枯坐在電腦前熬夜看轉播, 雖然去了美國還是熬著夜被公司這邊要東西(不是有人拿著保障名額出去的?), 好吧….總歸還是很高興….很感謝這麼多的人….

好了, 感謝完了, 進入正題, 猶豫半天, 還是把這篇當半遊記來寫, 反正好像還在Jet lag (呃, 都回來三四天了), 還睡不著, 適合胡言亂語, 寫寫流水帳

這次的Google I/O是第一次一口氣舉辦了三天, 大概越來越熱門了, 才會讓Google這次乾脆延長了一天, 不過票價也提高到了九百鎂, 這大概也已經成為每年developer最大的活動之一了, 老實說, 第一次來的我也有點興奮過頭了, 早上"六點"不到就到了Moscone Center, 本以為我已經夠瘋了, 結果:

DSC03266

好吧, 早來其實沒特別好處,  除了可以早點來吃早餐, 吃完早餐後看到長長一列的排隊人潮就發現, 完全沒佔到便宜, 一堆人排隊等著上樓聽Keynote呀! 我這時候才排, 已經是落後了, 事實上, Keynote開始時, 我還被卡在外面呢….

不過排隊排的後面也不完全差, 不知道怎回事, 我就這麼被擠到這位子:

DSC03293

雖然在邊邊, 但這是前十排的位置呀….中間的位置好像是媒體

不意外的, 今年Android也是一大主題, 這幾年, Android, Chrome似乎就已經佔去Google話題的大半, 當然, Glasses還有跳傘噱頭也是今年的一大亮點, 不過, 畢竟還不算是現實的東西

會場很多比較東西都跟Android比較相關 (機器人比較好做話題吧, 總不會要Chrome拿來當神奇寶貝球):

DSC03323DSC03318DSC03320DSC03317

今年雖然增加了三天, 但Keynote還是維持跟往年一樣就只有兩天, Keynote內容基本上也跟去年差不多, 第一天著重在Android, 第二天著重在Chrome, 只是第一天這次插入了Glasses和G+, 第二天則是加入了Drive, Cloud…有老面孔也有新面孔…

老賈上天堂後, Vic是我覺得現在Keynote講的最好的一個, 條理分明, 速度也控制得宜, 不像Cook的那種拖長長還不知道他表達什麼, 現場聽Keynote的感覺是…. "比較熱鬧”…台上的3D投影也很炫…不過就是少了跟朋友同步聊天的樂趣, 在台灣看還可以同時用Skype, Facebook, Plurk, 現場人多混亂, 認識的朋友也早不知道被擠到哪去了, 上網也很不穩定, Wifi, 3G都不是很OK呀….

大老遠跑去現場跟在家看轉播錄影有啥不同?除了說可以去一些沒有轉播的場次外, 跟外面一堆攤位的互動, 也是在家沒辦法辦到的…. 本來很認真的邊聽Keynote邊排好後面想聽的東西, 不過後來想想就沒照著跑了, 大部分時間同時在多個場次跑來跑去, 還有在外面的攤位逛逛, 主要是覺得, 大老遠跑去, 如果只是去聽那些會有錄影轉播的場次, 其實挺浪費的, 因為那些回去還可以反覆複習, 不用去到裡面打瞌睡, 打游擊, 然後回去再複習錄影, 收穫可能比較多, 而且, 外面還是有些寶可以挖呀

今年跟往年一樣, 也有大放送一堆東西, 首先第一天是Android developer三寶 - Tablet (Nexus 7), Phone (Galaxy Nexus), 和Nexus Q, 第二天則是Chromebox

DSC03347

大老遠跑過去, 雖然不完全是為了這些贈品, 但說不想拿這些就太虛偽了 :P 開箱時忘了拍照片(其實是懶得拍), 所以就不放照片了, 由於今年Android的主題是新版的4.1 (Jelly bean), 因此Tablet和Phone都已經升級到最新, 馬上可以把玩了

除了這些, 還有T-shirts外, 如果跑對門路, 還有別的東西, 比如說我和Wuman跑去ADK這個場次, 賭的就是去年這topic有送ADK, 今年應該也會, 果然這也是有送的場次, 此外第二天Sony在場外(離會場很遠)也舉辦了活動, 有送前五百名參加者Google TV, 結果我們一行人, 冒著冷風排了兩個多小時, 排倒數20名內, 成功的進去讓Sony請喝酒拿Google TV

雖然Google排了三天的內容, 但第三天其實就是垃圾時間了, office hour也都收了, 這天想問問題根本就白跑了(本來想去問問G+ history API的說), 連便當都只剩下盒餐, 只好跟Tiffanie搜刮一下桌上的Jelly bean

555768_3977770399215_694333072_n

 

這次的一些重點內容心得(大略想到的, 以後有機會再補充);

Android Jelly Bean: 實際上的感覺真的是非常的順暢, 感覺下了很多功夫在performance上面呀, 雖然整個Usability還不夠好, 但也有了不錯的進步, 整體流暢度可以幹掉iPhone了, 第一次拿到裝了JB的Galaxy Nexus後, 就有點愛不釋手了, Google Now雖然不像是直接針對Siri來的, 但感覺像是一個以Search為中心整合的一個產品, 不過, 我實際試用, 不覺得它有台上展示的那麼聰明, 我拿著它的建議搭車, 老要我搭下一班, 不過JB真很令人惶恐, 尤其時Android手機製造商呀, 快被Google打成純製造商了吧….

Nexus 7: 拿在手上, 還是擺脫不了廉價感, 不過就199, 能要求啥? 一打開到桌面, 濃濃的Play store味, 很明顯的感覺Google的重點不是放在硬體跟OS, 而是內容, 擺明的就是跟Kindle Fire嗆聲, 不過, 雖然電子書也是它的其中一個重點, 但實際上看, 覺得這螢幕看電子書, 不舒服

Nexus Q: Google進軍客廳的一個"實驗", 為啥說是"實驗"? 因為這東西功能實在不多, 也不特別突出, 就是上Play store下載下來播放, 某種程度上跟Apple TV近似, 但卻又賣超貴(比起Apple TV), 而且, 進客廳, 跟原本Google TV的重疊度太過於高了~~設定程式必須跑在JB的裝置上, 現在JB裝置也就那兩個, 所以到時候它開賣時, 想買它的人搞不好還得同時搬個Nexus 7回家(假如Galaxy Nexus那時候還沒升級)

Google+: 在Keynote提的Event等於就是Facebook Event的升級版了! 看來它是試著去解決Facebook event碰到的問題, party mode是一個不錯的設計, 雖然我之前就有想要做類似的東西了, 至於這次也同樣發表的history api, 一整個看起來就是Facebook open graph的複製品, Google+有在進步, mobile client有做更好, 但其他的, 似乎太跟Facebook走了, 這不見得是好事

Glasses: 目前噱頭大於實際用途的東西, 感覺上現有的功能不多, 從keynote和會場的聊天聽來, 沒多少功能, 拿來Hangout還OK, 預購價格1500還算很貴, 不過預購的人不少, 功能不齊全, 明年才能拿到, 電池續航力都是個疑問

Chrome: 今年的Keynote主要集中在不同裝置間的Sync, keynote上太陽馬戲團用CSS3D, WebRTC做出來的東西還挺不錯的, 會場的攤位則是有展示各種不同以HTML5 API做的東西, 還有以Native client打造的遊戲(如古墓奇兵) , 至於Chromebox…用了之後的感想是, ChromeOS是個爛東西 = =“

其他: Google Drive API應該值得看一下(Drive整個好像Dropbox + evernote + google doc), Mobile Youtube API , 至於GCE, 細節似乎還不太多, 不過以後應該有機會來跟AWS做競爭

以上, 懶得寫了, 該睡了…

最後,

跟著老朋友新朋友, 一起參加這活動, 是意義非凡的一件事呀

DSC03316

Media_httpdistilleryi_mjmyk

Taken at 山頭火 Santouka

Instagram是一個我一直蠻喜歡的service, 主要是簡單, 加上有一些濾鏡可以豐富我隨手拍的照片, 當然, 重要的是, 高價賣給了Facebook而一炮而紅

上星期, 參加了AT&T Palo Alto Hackthon, 拿到大獎的團隊用了一個lib叫 caman.js 的, 這東西讓我有點小小驚艷, 它光用javascript (其實是Coffee script)就實作出了許多影像處理的功能, 這讓我興起想用這個來試著做出類似Instagram的東西, 當然是純用HTML+Javascript

首先面臨的一個問題是, 實作Camera的部份, HTML5支援media capture的方式有三種(請參考Reference 3) : Input tag, device tag, WebRTC (getUserMedia)

但很不幸, 除了Input tag以外, 大部分手機上的browser,如Android browser, Firefox, Chrome, 可以說幾乎全部都不支援, 這可真是有點令人傷心的消息, 因為用Input tag, 會離開browser跳到另一個程式, 這樣就無法結合自己的UI了

不過, 其實也沒那麼絕望, Android上的Opera Mini, 就支援getUserMedia (參考Reference 1)

因此就可以實作出像這樣的東西:

Device-2012-05-10-021018

WebRTC(getUserMedia)的原理是把media stream導到video tag去播放(理應就這樣做), 但這樣出來的比例是camera的比例, Instagram的照片都是方形的, 要實現這點, 其實也不難, 就另外把內容畫到另一個方形canvas, 在video play的時候開始每隔40ms畫一次, 把video畫到canvas的方式也不難, 就把他當image看待就行了

不過當第一次使用時, 瀏覽器會跳出詢問是否允許使用相機的對話窗:

Device-2012-05-10-021029

因為偷懶, 拍照的部份沒沿用原本的canvas, 另起一個Canvas, 並把可用的濾鏡放在下面:

Device-2012-05-10-021056

接下來就是神奇的CamanJS的工作了, CamanJS是一個以CoffeeScript實作出來的影像處理的lib, 還真的蠻厲害的, 害我都有點想研究一下CoffeeScript了

使用方式非常的簡單, 像以下面的程式:

Caman(“path/to/image.jpg”, “#canvas-id”, function () {

    // manipulate image here

    this.brightness(5).render();

});

就可以提高影像的亮度了,

此外還有許多預設的濾鏡, 我也偷懶直接採用, 這就是做出來的效果:

Device-2012-05-10-021122
Device-2012-05-10-020928

Source codes分享於此: https://github.com/julianshen/instagramlikecam

References: 

  1. http://dev.opera.com/articles/view/playing-with-html5-video-and-getusermedia-support/
  2. http://people.opera.com/danield/webapps/instant-camera/
  3. http://www.html5rocks.com/en/tutorials/getusermedia/intro/
  4. http://camanjs.com/