2011年05月11日(Wed) Google I/O 2日目 [長年日記]
● 少しだけ雨がぱらつくかな?と思う2日目の朝。てなわけで今目がさめますた。朝ごはんの配給にいかなきゃ。もぐもぐ食べてたらなんだか集っているというので行ってみたら解散直前だけど集合写真その1・その2にだけ入っちゃいました。みんな良い顔してるよなー :)
● Keynote 2日目 (google.com)
今日はChrome一色のようだ。
ライブコーディングも交えつつ進む。
HTML5も使った三次元グラフィックスの例ROME。手元のChromeでは残念ながらWebGLに対応していないとかで見られなかった。
今日のおまけはChromebookとのこと。後日もらい方のメールが来る。Hackできない計算機はなあ... (自分勝手w
● Cloud Robotics (google.com)
Robot Operating System (ROS)はmessage passing systemとのこと。この名前、どっかのレイバーに載ってたOSみたいな名前だね (それはHyper Operating System)。
ROSほ最初からクラウドで働くように作られている。PR2などロボットの消費電力はモーターではなく計算機に消費されているため、処理をクラウドに預けた方が有利だから。
センサーも高い。だがkinnectで変わった。
自分のロボツトで家の中のストビューを!
rosjavaを使うとROSとAndroidとの間での通信が可能になる。
● 昼飯。3階の使われていない部屋に持って行って食べると、すいていて静かで良い。
● Designing and Implementing Anrdoid UIs for Phones and Tablets (google.com)
HoneycombではBackに加えてUpボタンが追加されるとのこと。また混乱が加速されるような...
Google IOスケジュールアプリのコード。例ではHoneycomb用のリソースに、-v11という接尾辞が付いてる。API levelから来てるのかな。どのリソースをどのテバイスに使うかは自由に決められるって言ってたからv11から昆布への対応はAndroidmanifestかなにかに書くのかもしれない。
● Identity and Data Access: OpenID and OAuth (google.com)
下記は手書きのメモからの再構成です。誤りが含まれている可能性が大きいのでご注意ください。
OpenIDがAuthenitcation (本人確認) を担当し、OAuthがAuthorization (リソースへのアクセス許可) を担当する。
OpenIDではIdentity Provider (実社会だと例えば運転免許を発行する機関)とRelying Party (実社会だと例えば警察官)が存在する。
2要素認証(Two-Factor Authentication)。Who you areあるいはWhat you knowに加えて、What you have (携帯電話機)などで本人確認をする。持ってるモノを使うので強い…落としたりしたらどうなるのかな。
Google Identity Toolkitを使えばモバイルアプリもOpenIDを使える。 アプリケーション内からブラウザを起動して、httpsのURLを表示させると、 ユーザーが同じブラウザで既にログインしている場合にクッキーを活用して 手間を省けるのが良い。確認後アプリケーションに処理を戻す。 ClientLogin #FAILを参照。
OAuthはアクセス先のリソースの管理を誰がしているか、 によって使うべきプロトコルが分かれる。
リソースを、Authenticateされた個人が持っている場合は、OAuth 2.0を使う。 開発者がclient_id、client_secretを得て、 ユーザーはclient_idとredirect_uri、scopeをリソースに渡す。 リソースはcode=<auth_code>が付いたURLにリダイレクトする。 アプリケーションは、clinet_id、client_secret、auth_codeを返し、 リソースからaccess_tokenとrefresh_tokenをもらう。 access_tokenでリソースにアクセスし、この有効期限が切れたら/切れる前に、 refresh_tokenで有効期限の延びたaccess_tokenをもらいなおす。
リソースをユーザー以外のビジネスなどが持っている場合は、 2-leggedd OAuth 1を使う。
consumer_keyやconsumer_secretなどの取り扱いに ハッシュ関数などが絡んできて複雑なので、ライブラリを使うべき。
● Android Development Tools (google.com)
Room 11Tへの列。交通整理してくれてるお姉さんも「入れるかなあ」とか…。
新しくなったWyswygレイアウトエディタ、カスタムビューのコード変えたらちゃんと変化したすげー。言語とかテーマとかも選べる。画面の大きさも。右クリックからリソースなのかたまりをincludeにくくりだすこともできる。アニメーションも動く。パワーポイントみたい。
プロファイラ。なんか表示がかっこいい。
エミュレータ。「GLのレンダラもARMのコードに変換されてから実行されてるので解像度が高いと遅い。ハードウェアにレンダリングさせることで速くしたい。サンドボックスとの兼ね合いと、ハードウェアのGLとのバージョン?の違いをなんとかしないといけない」
GLをハードウェアに任せているエミュレータのデモ。現在はGLの部分とそうでない部分が別のウインドウで走るw
リブート速くするスナップショット機能はもうリリースされてたかも。
● Memory Management for Android apps (google.com)
みんな大好きガーベッジコレクションのお話。廊下一本分並んでるよ。
Dalvikのヒープの大きさはテバイスで決まってる。G1:16MB、Droid:24MB、Nexus One:32MB、Xoom:48MB。ActivityManager.getMemoryClass()で得られる。 アプリから大きいヒープを要求したい時はAndroidManifest.xmlの<application …>内に「android:largeHeap="true"」と書けば良いが推奨はできない。
Gingerbreadからガーベッジコレクションのやり方を変えた。 これまでは、単純なMark & sweep。GCの時は他の実行は止める。 ヒープが大きいとポーズも長い。 Honeycombでからはmostly concurrent、paetiall collections。
ビットマップイメージ。 これまで実データはnativeメモリに覚えていた。 解放するにはfinalizerが喚ばれるのを待つ必要があった。 Honeycombからはdalvikのヒープ内に実データも置くようにした
メモリの解析はheap dumpで。 ddmsから緑のタンクの横に赤い矢印のアイコンをクリックする。 hprofに変換してMAT (Eclipse Memory Analyzer)で解析する。
Androidアプリケーションのメモリリーク。 contextとかviewとかactivityを参照してると 解放できないオブジェクトがたくさんになる。
メモリの解析。 Retained heap。あるオブジェクトを解放したときに一緒に解放できるヒープ。 Dominator treeを見るべし。
メモリリークする例。staticな変数からactivityのインナークラスへの参照。 例えば、Activityのインスタンスが複数あったら要注意。 Staticではないinner class (Runnableとか)、キャッシュとかも要注意。 インスタンス変数はstaticにすると参照を離さないのでGCを妨げる。 (てかzundaはJavaの勉強をちゃんとすること)
- http://android-developers.blogspot.com
- "Memory Analysis for Anrdoird Applications"
- "Avoiding Memory Leaks" by Romain Guy
- Markus Kohler's Java Performance Blog
● 夜はkimitakeさんにJapan Townに連れて行ってもらってごはん。焼き鳥定食に牛肉が入ってるのは許せなかったが、あやしい感じにもかかわらずそこそこおいしかったよ。
● 夜は、ベッドでごろごろしてたらみんながホテルの近くのアイリッシュバーでたむろしてるという情報を得て、行ってみましたよ。ビールが出てこないのでベースボールバーに移動して、しばらくSimejiを使ってないのを思い出して使ってみたり(Android 2.3.4以前よりはずーっと安定してたけど、結局落ちちゃった)、なにより皆さんにお会いできたのがうれしかったのですが、やっぱり覚えられない…。それにしても同年代の人がけっこういらっしゃるのですね。
最近のツッコまれどころ