preload
4月 07

Android勉強会に行ってきた(090406)

Java コメントは受け付けていません。

日本Androidの会主催の定例イベントでお話を聞いてきましたので、簡単にレポートします。

DalvikVM on JavaVMの話をメインで聞きにいきましたが、後半の家電ビジネス周りのお話も初めて知ったことが多くて、勉強になりました。とても濃いお話で楽しめましたです。

Ust録画がここで見られそうな予感。幹事のかた、スピーカの皆様、ありがとうございました。

イーフロー 久納さんによる、DalvikVM を Pure Java (CLDC) で実装した話

  • 久納さんがこれまでにつくったものの紹介
    • QuickBASICの処理系
      • 6000行くらい
    • JavaScriptで動くGameboyエミュレータ
      • ほんとに動いてた。変態だw
      • Canvas処理周りが、Google Chromeが最速とか
      • Wiiブラウザでも動くようにつくってあるとか
      • 4000行くらい
    • Skype4Java
      • Skype APIのJavaラッパ .. Skype公認とか
  • DalvikVMをつくってみたことについて
    • Google公開の仕様ドキュメントがやけに少ないので、自分でつくってみて、よく理解してみようとおもったらしい。ふむふむ
    • すでにケータイJavaVMで動くJavaVMの実装を作ってあったらしく、それに手を加えて4日半くらいでつくったとか。おおー
    • オープンソースで公開することで、イーフローさんがDalvikVMに取り組んでることをアピールしたいとか。なるほどねえ。勉強させていただきます
  • つくったDalvikVMの動き
  • どうやって作っていったか、とか、作っていて気づいたこととか
    • dexdump使って、dexバイトコードをダンプしてみて、追ってみる
      • バッチファイル書いて効率化。$ adb shell “<adb shellで実行するコマンド>” とかでadb shellへコマンドを飛ばせるらしい
    • DalvikVMの命令コードは2Byte(16bit)単位の可変長(最大80bit)らしい
    • バイトコードのエンコードを短くするための工夫が見られる。長いメソッドディスクリプタに命令コードを割り当てなおしたり、配列のデータをとり回す処理が一命令コードになってたり。
    • メソッド内でのレジスタの使い方が変わってる?引数やメソッドローカルな変数などはレジスタに。返り値や例外は、特別な場所へ入れてる?(このへん、意味がよくわからず)
    • 命令コードの説明などなど。Constなんとかでレジスタへの変数格納とかとか。
  • ベンチマーク
    • Embedded Caffeine Mark
    • Google Dev Phone(Dalvik)とP905i(JBlend)で比較
    • StringでDalvikVMの方が1/10くらい遅い
      • なぜか?実行コードが単純に多いからっぽい。JITコンパイラ使って最適化すれば、高速化の余地はありそう
  • VM on VMについて
    • 開発済み資産の再利用とかとか
    • Java MEの世界でいえば、動的なクラスロードができないという制約を超える一手としても

Celevo 岩佐さんによる、家電向けDalvikVMとCE向けAndroid Marketに関する話

  • CE は Windows CE(懐かしい)ではなくて、Consumer Electronics のほうでした
  • Celevo の話
    • 家電ベンチャー。デジカメ作ってるそうです
  • デジタル家電がハード勝負からソフト勝負になっていってる話
  • 家電メーカーにとって、ソフト差別化が(いろんな理由で)難しいし、舵切りできてないという話
  • ハードで勝負するにも、モジュール化が進んでて、海外の部品特化メーカ(IntelとかT1とかNVIDIAとか)が強い
  • 家電にユーザが作ったアプリが載る時代 .. 家電メーカーからすると「来ちゃったか」
    • PCつくるのは儲からない .. 家電もそうなっちゃうかも
  • 小規模でもハードウェアに参入できるようにもなってきたという話
  • デジタル家電のプレイヤーの話
    • 量販では、BUFFALOとかI/O DATAの売り場と(旧来からの)家電売り場で流通マージンがちがうのでごにょごにょ
    • 大手家電メーカは動きにくいね、という話
  • CE 向け Android Market の登場が、大きなターニングポイントになりそう
    • メーカは家電販売が主。そういうアプリの販売機能を持ちにくい。サーバホスティングもやりたくない、らしい
    • 出てくるには、メーカをまたいだUIの標準化や仕切り、メーカ承認フラグみたいな仕組み、DRMとかとかも必要に
  • 誰がやるんでしょうね、とかとか

日本Androidの会 木南さんによるLBSの話

  • LBSつくった話と、アイデアなど。
    • ショートペッパー、良いですね!
Tagged with:
3月 22

Android Hackathon に参加してきた

Java コメントは受け付けていません。

3/19, 20 に開催された Android Hackathon に参加してきました。参加者は 2 日間いずれかへの参加を選ぶ形式で、僕が参加してきたのは 3/19 のほう。主催は Android SDK Japan(User Group)、会場は Google さんの東京オフィスでした。というわけで、イベント概要やら、そこでつくったものの報告とか、メモとか、感じたこととかを書いておきます。

ところで、Hackathon というのは、Hack + Marathon の造語らしいですが、平たく言うと、お泊まり無し(そうでない場合もあるかもだけど)の開発合宿みたいなものです。で、今回は、Android Hackathon だったので、みんなで Android アプリ/サービスをつくろうぜ、的なイベントだったということになります。

今回の Hackathon では一週間ほど前に事前ミーティングが開かれており、そこで参加者のチーム分けや Ideathon なるアイデア出しの打ち合わせがおこなわれていました。チーム区分は以下の通り。

  • Lifestyle & Travel – 日常生活や旅行先で使える便利系アプリ/サービス
  • Multimedia – マルチメディアを駆使(?)するもの
  • News & Weather – ニュースとか天気とか。RSSフィード使ってごにょごにょとか。
  • Specific Device(Feature) – デバイス固有の機能を使ってごにょごにょ
  • Tutorial – テーマは決めず、チュートリアル的になんか作ってみる

僕は Specific Device のチームに参加させていただきました。で、Ideathon でいろいろ討議した結果、「端末によるモーションジェスチャを検知する仕組み(ライブラリ)の開発」&「その仕組みを使ってかめはめ波を撃つ」という壮大な目標にチャレンジすることとなったのでした。

さて、Hackathon 当日の成果ですが.. 結果から言うと、「かめはめ波」の捻出には至りませんでした。まだまだ修行が足りなかったようです。残念。

ただ、以下のような見栄えの、「単純なジェスチャの検知」アプリまでは行き着くことができました。

device

上の画像は、アプリ起動後、端末を上方向に持ち上げたときの画面表示です。とりあえず、端末を平面方向タテヨコナナメに直線に動かした際の8方向について、なんとなくジェスチャが検知できています。ほんとは、ここからこういったシンプルなジェスチャを組み合わせたジェスチャコマンドを認識させ、かめはめ波を撃って、あと、昇竜拳くらいまで行きたかったのですが、残念ながら力及ばず.. でした。

当日開発されたソースコード一式は、以下の hackathon-jp リポジトリから取得できますので、ご興味のある方、どうぞご覧ください(コミット権限はHackathon参加者に限っているようですので、read-onlyにてご了承ください)。

http://code.google.com/p/hackathon-jp/


さて、以下、今回の Hackathon 参加で自分なりにやってみたことや感じたことをメモしておきます。

今回は、事前準備として OpenIntents の Sensor Simulator を動かしてみたり、OpenIntents の trunk にいつのまにか入っていた SensorGestureDetector の実装を読んでみたり、なんとなくヒントがあるんじゃないかと Firefox の All-in-one Gestures の実装を読んでみたりしてました。

また、「ジェスチャを複合して『かめはめ波』のような複雑なジェスチャを組み立てるより、任意のジェスチャパターンを学習させられるようなトレーニングアプリを作って、ジェスチャパターンを数値化していくのが良いんじゃないか」とも考え、ジェスチャ時の各種センサの値をcsv出力するデモアプリを作ってみたりもしました。そんな折に、チームの方から、「HMM(隠れマルコフモデル)による学習/識別が主流らしい」との情報もあり、ググってみて、なんだか難しい論文に行き着いたりしていました。

ただ、Hackathon 当日は、なんだかんだで時間制限に押され、

  • ジェスチャで取得できたcsv値も隠れマルコフモデルとかもよくわからん.. 深みにハマりそう
    • やっぱしとりあえずはシンプルなジェスチャを認識させるところを作ろう
  • どうも加速度センサの値がオカシイ
    • 重力加速度の影響を受けてしまっているみたいだ
      • 重力加速度をキャンセルできるように、逆向きの加速度を渡してみよう
        • 端末のどちら側が地表側を向いているのかを適切に数値化するのが難しい..
          • とりあえず、端末の向きは固定で使うってことにしよう
  • Z軸方向のジェスチャの認識を加えると、認識精度が落ちるみたいだ
    • とりあえず、今日のところは X-Y 2方向の平面ジェスチャのみでいこう
  • 平面でもイマイチ精度が悪い
    • 一定時間(回数)以上、同方向の加速度が取れることをジェスチャ認識の条件にしよう
    • センサデータ取得時の速度を変更させるオプションがあるらしい => 最高速度(SENSOR_DELAY_FASTEST)に!

と、まあ、こんな感じに試行錯誤の繰り返しに多くの時間を使ってしまっていたような気がします。最後のプレゼンが終わった後になって、他の参加者の方に「重力加速度のキャンセルにはローパスフィルタ使うといいよ!」って教えてもらったり、既に試行錯誤されていた方のエントリを発見したり、という感じで、なんだかんだで準備不足、力不足を痛感したわけでした..

とはいえ、こういった開発は久しぶりに新鮮でした。「時間制限(のプレッシャー)」と「チームでの開発」があったおかげでしょうか。意見交換したり、コード見せ合ったりしながらも、ひとりで深みにハマる前に、上のような「問題の単純化(「あきらめ」ともいう)」や、「仕様の割り切り」「当座の目標決定」を短いサイクルで繰り返し、一日での成果を出すことに集中する、ということができたような気がします。で、しかも、それが、とても楽しかったわけです。良いですね、こういうの。僕、いわゆる「開発合宿」には参加したことが無いんですが、その楽しさの一端が垣間見えたような気がしました。


そんなこんなで、当日の他のチームのプレゼンや飲み会の部まで含めると、とても書き切れないほどの多くが得られた、楽しいイベントでした。同じチームの皆様はじめ、ご参加の皆様、主催や協力の皆様、お疲れさまでした。ありがとうございました。

Tagged with: