京都 Girls Hackathonに行ってきた

実はHackathonどころか社外の勉強会も初参加(あー8年前くらいにJavaOneいったことあったかなあ)だったのでちょっと緊張気味でしたが、初心者OKという言葉を信じて行ってきました。申し込んでから、ノートPC仕入れたり(このために買った、Mac Book Pro Core i7 + SSD)、ノートPCをいれるかばんを買ったり、Android開発環境をセットアップしたり、エミュレーターではまったり。

行く前は、女子のエンジニアって、、、と自分を棚にあげて思ってたけど、いやいや、本当にGirlsが集まってましたよ!!奥さん!!どうだ、うらやましいだろう(このメッセージは[twitter:@tksmd]と[twitter:@yehara]あて)

Hackathonからの参加組3人でAndroid + Google Mapsを使用して、一個アプリをつくってみることに。締切5時なのに、4:45までどうやってもアフリカが表示されあせりましたが、直前で修正して完成。3位でドロイド君頂きました。

そこで、学んだことと感想などを。

つくったもの

携帯にむかってしゃべると、はなした言葉が、話した場所に表示されるアプリ。名付けて(ほんとは名付けてもらった)「世界の中心で愛をさけぶ」アプリ。


構成

起動画面:GPSで位置情報取得 
  ↓ 位置情報を次の画面に渡す
音声認識画面:ボタンをおして携帯にむかって叫ぶ。音声文字列を取得
  ↓ 位置情報と認識した音声情報を次の画面に渡す
地図上に話した内容が表示される

3画面構成で、私は音声認識部分を担当。

Androidメモ(自分あて)

行く前、HelloAndroidとHelloGoogleMapsくらいしかしていかなかったので、以下すべてハッカソンで学びました。先生方、そしてAndroidマスターの同じチームの[twitter:@lychee]さん、ありがとうございました。。

  • MVCらしい。でもModelは使わなかった
  • View はXM形式で、レイアウトとか、ボタンとかを記述する。その他、メッセージ文字列などなどアプリケーションで使用するリソースはすべて、resディレクトリにXML形式で規定し保存する。
  • XMLからRクラスが自動生成される(EclipseAndroidプラグインからやってくる)
    →ここが自動生成されるのを知らずに、自分でやったときはRクラスを直接書き換えたりしていた。XMLを変更して再ビルドすると、変更内容がRクラスに反映されるので、便利。
  • ボタンをおしたり、入力した時の処理は、コントローラにあたるActivityクラスに記述する。
  • ビューで定義したButtonなどのオブジェクトはRクラスを通して取得可能
  • 画面間のデータの受け渡しはIntentを使う。他のリソースから情報を取得したり、というのもIntentを利用する
    →今回音声認識の実装を担当したのですが、これもIntentを使用しました。
  • アプリケーションにどんなActivityがあるのか、とか、起動時にどのActivityを実行するか、といった情報は、AndroidManifest.xmlで定義する

つくってみて

Androidフレームワークインテントなどの仕組みでかなり分業しやすかった。でも、たぶん[twitter:@lychee]さんの設計というか、アプリの分割具合が秀逸だったのでは、とも思う。
あと、音声認識部分。結局ほぼサンプルコードの写経でできました。この音声認識が標準SDKのクラスで、かなり簡単にできる、というのはすごいなあ。さすがGoogleさん。ちなみに家帰ってからiPhoneに移植しようと思ったんですが、iPhoneには音声認識ライブラリがないんですね。これもそのうちGoogleさんがAPI公開してくれるらしい。。待ちます。

他のチームさんも

今回のHackathon、テーマがHTML5/Android/Mapsだったので、作品もバリエーション豊か、でしたよ。

  • 美容研究会チーム 魔法の鏡
    いけてない顔も超いけてる顔に!魔法の鏡をHTML5で作成。鏡に写真をドラッグ&ドロップすると、清楚系になったり、おめめぱちりになったり、顔黒・色白スライドがついてたり。ここは事前準備がしっかりしてたんで、プレゼンとか完成度が一番だったなあ。技術的にはどうやってやってたんだろう。
  • おたふくソースチーム
    Androidで15パズルゲームアプリ。でも、撮影した写真をパズルにしたり、ピースを動かすと音がなったり、携帯を振ったらパズルがばらばらになったり(これは時間切れで実装できなかったみたいだけど)。画像の分割はどうやったのだろう。
  • Android & Map チーム
    地図上の地点をふたつ選んで、携帯をがさっとふると、地図上どれくらい振ったか、が表示される、という。なかなか説明するのが難しいので、受けもあんまりよくなかったけど、あとから考えると「地図と加速度センサーの組み合わせでゲーム」ってかなり面白い。見せ方をちょっと変えたらかなりもっと伝わったかも。「今のお前は新幹線だ!なぜ、そこであきらめるんだ!今日から君は、スペースシャトルだ!」と[twitter:@shuzo_matsuoka]風に結果をいう、とか(ビール飲みながら書いてるので適当)。
  • 奈良の魅力 チーム
    Google Maps上で、奈良の名所を時系列で案内するアプリ。かわいい勤皇の志士が、維新あたりの史跡を案内してくれた。
  • 事務員の癒し チーム
    ほっと癒されたいときにクリックすると、かわいい枠に癒し写真がつぎつぎに表示される癒しアプリ。HTML5で、flickrの写真を取得してフェードイン・フェードアウトで表示しているのだけど、枠とか、映る写真が、とにかくかわいい。確かに癒される。

そしてHackathonの感想など

Hackathonって名前もハッカー+マラソンだし、ハッカーでも体力もない私はなかなか参加するのに勇気がいたが、子供二人だんなちゃんに押しつけて参加してよかった、です。チュータも多かったし、誰もかれも、質問にすごく親切にこたえてくれるし、本も情報共有の場所やMLやらレポジトリやら、もちろん会場とネットワークなんかを、ぜーんぶ用意してもらえたし。Android端末実機も、いーーーぱい戯れられた、いうだけでもよかった(そして、iPhoneはあの場でとても心理的に出しづらかった)。そして、短時間で1個なにか動くものができあがる、というのは、ほんと純粋に楽しいですね。なぜかこの1-2ヶ月ずっとOffice文書(というかOffice2007)と格闘してるので、やっぱ開発って楽しい、と思いました

ただ、反省点もありまして、私事前に知らされていたsvnの設定をしていかなかったため、開発時間の最初の一時間をsubversionの設定と格闘して終わってしまって。。しかもhttpsにしなければいけないところをhttpで指定していたため、readonlyでコミットできなかった、という。事前にやっとけ、ということや、事前に勉強しておけ、ということは、きちんとやっておこう、というのが反省その1。
もうひとつは技術の勉強も大事だけど、何をつくるか、予めかなりしっかり考えとかないとだめだなあ、ということです。使いたい、試したい技術っていろいろあるわりに、作りたいものってあんまりないんですよねー。もうこのあたりは私の人生の課題です。
 あと、帰ってから家で他のチームがどうやってつくったのか、ソース見ようとしたんですが、レポジトリに登録しているチームがうちも含めて2チームしかなかった... これはかなり残念だったなあー。発表時間はすごく短くて、技術的な質問なんかは全然できなかったので、あとで見ようと楽しみにしてたので。普段あまりバージョン管理システム使わないんですかね、みなさん。それとも職業エンジニアではないのだろうか。

というわけで、次は男子ばかりのHackathonに参加してみようかな、と思っております。その前にGDD、どうにかして行けないだろうか。夏休みで有給とったばかりで言い出しづらい。