ひつじのにっき

mhidakaのにっきです。たまに長文、気が向いたとき更新。

Android開発者カンファレンス「DroidKaigi」のCFP受付は2/25 本日までです

この日記は開発者向けのAndroidカンファレンス「DroidKaigi」Call For Papersの受付期限のお知らせです。

「DroidKaigi」には責任者としてかかわってきました。現時点でCFPには46の応募があり、ここ数日は特に勢いを感じています。

- 応募されたトーク一覧

CFPの受付期限は本日24:00(この時間を過ぎて事務局担当者がWebからリンクを外すまで)です。お考えの方はお急ぎください。

- http://droidkaigi.github.io/

次回の「DroidKaigi」Webページ更新は、3月中旬のタイムテーブルの発表です。締切から少し間が空きますが(発表者さんとの調整、タイムテーブルの作成、Webページ作成があるためどうしても時間がかかりそうです)気長にお待ちいただければと思います。

Android開発者カンファレンス「DroidKaigi」開催にあたって

4月25日に、開発者向けのAndroidカンファレンス「DroidKaigi」を開催します。

- http://droidkaigi.github.io/

今回は責任者として関わってます。このエントリはイベント開催の告知です。開催にあたって何か残しておきたかったので書きました。現在進行形なので諸々いったんまとめておくか、という個人的な気持ちもあります。
またDroidKaigiでは現在、スピーカーを募集中です。ですのでエントリを読んで「スピーカーとして話してみたいな、チャレンジしてみたいな、参加してみたいな」と思ってもらえたら嬉しいです。

開催の目的

ざっくりと一言にまとめると、Android技術情報の共有とコミュニケーションが目的です。

Androidが世に出て6年が経ちました。時が流れるのはほんとうに早いです。もはや革新性というより、現在は定着したプラットフォームとして利用されることが多くなっています。Android WearやAndroid Auto、Android TVなどモバイル以外の分野に適用するべく、機能追加と試行錯誤が行われています*1

Androidの利用シーンは多岐に渡り、一人ではとてもカバーしきれなくなってきました。カンファレンスを通して業界全体で知見を共有し、より良いソフトウェア開発に繋げていきたいです。

開催の経緯

有志のAndroid開発者(個人)が中心となって準備しています。ボランタリーベースで費用面とかは手弁当で進めています。開催のきっかけは、クックパッドさんのpotatotipsという勉強会での雑談でした。勉強会はエンジニアが技術をテーマにはなして知識を共有できる、わりとIT業界独特の習慣だと思います*2

こういう場でのディスカッションは思わぬ発見があることが多くて、Androidをテーマに、開発が持ついろんな疑問、たとえば「どう実装したらいいんだろう」「普段の業務以外の分野を知りたい」「新しい技術の話が聞きたい」「聞いた手法を使ってみたい」が解決できる場を作りたくなった、ということが動機です。DroidKaigiに行けば技術のトレンドがわかる、知りたかったことがわかった、そんなカンファレンスになればいいな、と考えています。

個人的な経緯

個人的には凄く単純で、Androidの技術的なはなしを聞きたいという理由で取り組んでいます。

5年前、TechBoosterというAndroid開発情報のブログをはじめたころは新しい技術としてのAndroidに夢中でした。英語が苦手なのも忘れて(翻訳ツールを片手に)リファレンスを読み漁り、コードを書き、まとめることで好奇心が満たされました。このころAndroidという技術を通して多くの人に出会い、今でも仲良くしてもらっています。

最近では、Androidの商業書籍を執筆したり、ABC2014sでEffectiveAndroid*3トラックとして技術的なセッションを企画してみたり、オープンソースAndroidの教科書を作っていたり*4、同人誌を作ったり*5、とプログラミングに関わることが楽しくて仕方ありません*6

また技術に触れるためには、まとめて発信するという場もどこかに必要で不可欠なプロセスなのだろう、と思うようになりました。少し乱暴ですが、それなら話を聞きたい人が実行委員会を作って運営してみようよ、というわけです。

はじめてイベントに参加したときは少し緊張したことを憶えています。はじめて勉強会で発表するときは不安で、とても時間をかけて準備していました。

今回はじめての開催となるDroidKaigiがどのようなイベントになるかは終わるまで分かりませんが、開発者(スピーカー・一般参加者)が良いプラクティスに触れられる場であればいいな、と思います。またそのために、できるかぎり開かれたカンファレンスでありたいです。

DroidKaigiではスピーカーを募集してます

最後に。DroidKaigiではスピーカーを募集してます。アプリ開発手法、便利なライブラリの使い方、やってみた、なんでも結構です。トピックも一応わけてありますが参考です。応募は重複どんと来い、です。みんなで開発の苦労を共有してみませんか。

興味がでたら是非、下のリンクをクリックして応募してください。

*1:そしてこのようなチャレンジが順風満帆なわけではないのは、みなさんご存じのとおりです

*2:それだけ技術の進歩が早いということかと。楽しい業界です:)

*3:http://d.hatena.ne.jp/hdk_embedded/20131213/1386879188

*4:Android Open Textbookプロジェクト

*5:http://techbooster.github.io/c87/

*6:関係いただいてるみなさま、ありがとうございます

mozilla Open Web Day in Tokyoにいってきたよ

Mozilla Open Web Day in Tokyo

ということで行ってきました。"Mozilla に関係する東西さまざまなコミュニティや研究プロジェクトが集結し、その成果の展示・発表を行う収穫祭的なイベント"らしく、文化祭のような雰囲気。懇親会まであり、たのしかった。

会場も体育館で文化祭っぽかったです。KDDIさんのOpen Web Boardが展示されていたり、大学の研究プロジェクトが展示されていたりと個人や企業だけじゃなくて公的な組織もおおくて意外にアカデミックな側面も。

展示では、Webとハードウェア割り込みをつなげてみたよ

Floppy Bird的なゲームとハードウェアデバイスをくっつけた"Balloon Jamp"の展示をしてきました。

大きなボタンの効果もあり、沢山の人があそんでくれた。よかった。利用デバイスはRaspberry Piとわりとスタンダードなものを選んだのですが、ソフトウェア的には随分とキメラな構成になりました。

このデモでは、巨大なスイッチをGPIO経由で接続、GPIOの割り込みを検出してブラウザにイベントを(なるべく遅延ないように)送ってます。

OSとGPIO制御

OSはRaspbian(2014-09-09-wheezy-raspbian.img)を使用。ほんとはFirefox OSにしたかったのだけど、Raspberry PiはFirefox OSのサポートレベルであるTiar 1〜4(数字が小さいほどパワーをかけてサポートされている)のいずれにも該当せず、完全に野良デバイス。

Raspberry Pi向けのビルドコンフィグはあったのだけどHDMI出力で失敗してました。ざんねん。

./config.sh rpi
./build.sh

ちなみに、ターゲットボードをpandaboardにかえたら起動までは可能。ただし、こちらもやや条件があって、Firefox OS v2.0のブランチをつかってビルドしないといけなかったです。Issueにあるとおり画面(rotation)を90度傾ける問題があったり、マウスポインタが出ないなど実用上の問題があるので、手でpatchをあてます(自動でマージできないぐらいまでソースが進んでる)。

とりあえず今回はRaspbianつかったけど、https://wiki.mozilla.org/Foxberry_Pi_Demo のようにFirefox OSをRaspiむけに移植しようという動きがあるのでしばらくまってるとまともに動くようになるのかもしれません(しかし期待薄)。

Raspbianで、GPIOを制御しようとすると /sys/class/gpioあたりにぶら下がってるのでそのあたりをいじります。

echo  "7"  > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio7/direction
echo "1" > /sys/class/gpio/gpio7/value
echo "0" > /sys/class/gpio/gpio7/value

LEDのような単純なデバイスなら、コマンドラインから直感的に点灯/消灯を制御できます。以下のサイトがおもしろい。

あと、こういう直接的な手段以外に、GPIOを制御するためのコマンドもあるよ。

このあたり。インストールすると"gpio"コマンドが生えて、適当に制御できます。今回は未使用でした。

GPIOの割り込み通知

  1. LuaJITでGPIOの状態監視デーモンつくる
  2. GPIOの立ち下り、立ち上がり割り込みを監視
  3. 割り込みで起動したらスイッチイベントを作る
  4. 適当なキーイベントを作成して、LinuxのInput Sub Systemに投げつける
  5. キーイベントとしてブラウザが受け取る

キーイベントは日本語キーにない適当なものを仮想キー扱いでつくったよ。Raspbianのinputイベントは"/dev/input/event0"でした。

./input_key > /dev/input/event0

Cのプログラムでinput eventをゴリゴリつくります。コマンドとして投げます。このあたり興味あれば以下が面白いです。

- http://www.tatapa.org/~takuo/input_subsystem/input_subsystem.html

"Balloon Jamp"では、ブラウザにイベントを届ける、という作業が当初考えていたより手間がかかりました。たぶんもろもろがイレギュラー感あるシーケンスで無理やり達成した感じ。途中思ったのはイベント通知をWebSocket化できればよかった、ということなんだけど、画面更新しまくってブラウザをぶん回しているRaspberry Piさんは、CPU負荷が100%にはりついてしぬほど重い。WebSocketにした瞬間、ゲーム性もろとも死ぬとゴーストが囁いてた。

キーイベントなら取りこぼしもなく、ちゃんと伝わる。すごい(Linuxの歴史を感じる)。

JavaScriptからGPIOを読み取るライブラリはいくつかあったのだけど、ポーリングのような仕組みしか作れず、押してる瞬間に読み取れるとも限らないのでスイッチには対応しきれない感じ。このあたり良いライブラリがあれば良かったのだけど(見落としてなければ)。

非力なCPUや環境でブラウザにハードウェア的なイベントを送るには、という観点で頑張ったら、わりと面白い構成になったので制作記的にのこしておくことにしました。