その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

海外のiBeaconハッカソンで1位になりました!

一昨日・昨日と2日間に渡ってドイツはベルリンにて開催されたハッカソン『Travel Hackathon with Beacons by Deutsche Telekom & Lufthansa』にて、オーディエンス投票で1位をいただきました!


(一緒に写ってる方はスポンサーの会社の偉い人)


賞品としてドローンを3つ(!)いただきました。

つくったもの

ハッカソンのタイトルの通り、「iBeacon を使い、空港における何らかの問題を解決する」(※スポンサーがルフトハンザ航空)、あるいは「新しい体験を提供する」というのがお題でした。


で、僕は

  • 出発までの待ち時間が長い
  • → インターネットがありさえすればOK(仕事もできるしだらだらSNS見たりもできる)
  • → 空港にはだいたい無料Wi-Fiがある
  • → しかし、著しく通信が遅いときがある

というところに課題を設定し、「空港内の地図上に、各iBeacon設置ポイントにおけるWi-Fi通信速度をマッピングして表示してくれる」アプリをつくりました。


現在位置もiBeaconにより特定して表示するので、このWi-Fi通信速度マップを見れば、より通信品質の高い場所に移動して快適にネットできる、というものです。

Wi-Fi通信速度マップをつくるしくみ

ここが作品のキモなのですが、Wi-Fi通信品質は、次のようなしくみで行っています。

  • 本アプリのユーザーがビーコンの近くを通ると、アプリはバックグラウンドでそのビーコンを検知する
  • ビーコン検知をトリガとして、バックグラウンドで通信速度計測を行う
    • 所定のURLにある画像をダウンロードするHTTPリクエスト *1 を発行
    • 画像のデータサイズ・レスポンスを受け取るまでの所要時間から通信速度を計算
  • 計算した通信速度を、検知したビーコンの major, minor とセットにしてクラウドサーバーに送信する


これらの処理はすべてバックグラウンドで行われるので、ユーザーは通信速度計測に関しては意識する必要がない、というのがポイントです。


で、クラウド上に集められた通信速度データを対応する各ビーコンごとに(つまり場所ごとに)平均化したものを、空港内地図にマッピングして表示する、というしくみになっています。

チームを抜けて独りになった経緯

他のチームはだいたい4人か5人(MAX5人というルールがあった)だったのですが、僕は開発もプレゼンも1人で行いました。




ただ、もともとは違うチームに入っていました。インターナショナルなチームで、英語でコミュニケーションしながら開発を行う経験をする、というのもハッカソン参加の目的の一つだったので。


チームに入った経緯はFacebookの投稿に書いたのでそこから引用します。

  • 行く途中のバスの中でけっこういいアイデア思いついて、しかもひとりでつくれそうなのでいつものように一人でもくもくやろうと考える
  • 会場でなんとなく話してるうちにいつの間にかチームに入ってることになってしまった
  • いろんな国から来た人たちと英語でものづくりをする、というのも参加目的のひとつではあったので、それなら、ということで自分のアイデアは捨てて、そのチームのアイデアに乗っかろうと考えを改める
  • 自分のアイデアをシェアしたら、それもいいね、って話になる
  • 議論が聞き取れてなかったのだけど、気づけば3つのアイデアを同梱するアプリをつくる話になっていた!ひとつひとつが勝てるアイデアだったとしても、3つ合わさると勝てない。何の問題を解決するかがぼやける。メンバーはハッカソン未経験者が多く、このへんの塩梅がわかってないのかと
  • ただ僕としては議論をいつまでも続けるよりは、早くつくりたい。僕の想像もつかなかったような統一感の見せ方がBizDevの人たちには見えてるのかもしれない。そのへんはプレゼンを見るまでわからない。ということでまずは作り始める
  • という感じで、いつものハッカソンとは違う展開。これはこれでおもしろい。


で、雲行きが怪しくなってきたのが翌朝。

プレゼンのストーリーのドラフト見たけど、やっぱり全然融合してなくて、僕がやってる部分は切り出した方がいいような。。今からチーム抜けて1人でやるか。。?


ビジネスデベロップメント(日本で言う「ディレクター」)が5人のうち2人いて、その1人が書いてきた「プレゼンのストーリー」の中に、WiFiの話がまったく入ってない。いい感じに融合させるアイデアどころか、あんまりその辺考えてないんじゃ。。と不安に思ってきて、しばらく迷った結果、チームに提案してみました。

I read the story. How will the wifi quality map be referred in this story? I think if we refer also to the wifi quality, it may be too much for hackathon presentation.
If everyone thinks so, how do you think that I become independent as another team?


(Wi-Fi品質マップの話はどんな風に出てくるんでしょう?Wi-Fi品質に言及したとしても、ハッカソンのプレゼンにしては盛り込み過ぎだと思います。みんなもそう思うなら、別チームとして独立しようと思うけどどう思いますか?・・・と書いたつもり)


そしたら、その場にいた2人から、「そんなことない、大丈夫だ、プレゼンの内容はもっと揉むから」と説得されたので、チームのみんなが納得してるならそれでいいかと思い、いったんはとどまることにしました。


が、そのあと修正されてきたプレゼンのストーリーを見ても、結局「空港のいろんな場面で便利なアプリ」「あれもできるし、これもできます」にしかなってないじゃん、と思い、やっぱり独立します、と伝えました。

Thanks, I read. This story makes sense, however I feel there are some features which solve different problems even now.
So I decided to be independent. Thanks so much.


そんなこんなで、ぼっちに。すでに残り2時間、みたいなタイミングだったので急いでプレゼン資料づくりを開始しました(実装はだいたいできてた)。


せっかく入れてもらえたチームを離れるのは寂しかったですが、インターナショナルなチームで開発する、という経験もできたし、自分がやりたいアイデアにフォーカスして発表できたし、そのチームも審査員賞を受賞していたしで、結果的には諸々よかったです。

おわりに

今回の約2週間のベルリン滞在のほぼ最後のイベントにあたるわけですが、インターナショナルなチームで開発する、という良い経験もできたし、賞もいただけたし、というわけで本当に出て良かったです。プレゼンが終わったあといろんな人が話しかけてきてくれて、まだまだ英語に苦手意識がある僕としてはやはりミートアップとかよりハッカソンは合ってるなと。


Q&Aで僕が審査員からの質問が聞き取れないのでヘルプに入ってもらったヒロさん、チームを抜けて弱冠へこんでいた僕の話し相手になってくれたハジメさん、(日本語なので読んでないと思いますが)他の参加者のみなさま、主催者のみなさま、どうもありがとうございました!


*1:バックグラウンドなので NSURLSession を利用