Dive into Ofuton

お布団に飛び込もう

下書き供養 楽天ハッカソンに言ってきた話(2014.11.01/02)

久しぶりにブログ書くか〜〜〜という気持ちがSoftSkillsを読んで湧いてきたので、書こうとしたらいつだかの下書きが出てきた。

楽天ハッカソンではMatzさんの話があって、最近Mastodon関係でも話を聞くことがあった。
なんかタイミングもいいなと思ったので、だいたいそのままで公開。

以下本文

11/1, 2日にあった楽天ハッカソンに行ってきた。

ちょっと振り返る

準備

当日になって0からスタートはやべえよなってことで、本検索APIAndroidから使えるかどうか試すところまでやった。

初日

9:30〜21:00というスケジュールをみて、10分前くらいに着けばいいかと思って楽天カフェを目指してみたら、9:30開場10:00開始だったようで、少し暇を持て余すことになった。
前日アルバイト先でリリースしたアプリに不具合が見つかったようで対応してくれというメッセージが飛んできており道中原因調査していたという話はおいておこう。

開場に到着して、名札に名前を書いたんだけど、ちょうど前にいた集団がみんなローマ字で書いていたので私もそれに倣ってローマ字で書いた。さすがグローバル企業楽天主催のハッカソンだと思っていたら、実はその集団は留学生だっただけで、別に英語で書く意味はなかった。

プロとアマの話

最初にまつもとゆきひろさんのお話があった。
スポーツの世界ではほぼ間違いなくプロが勝つが、プログラムの世界は少し違っているということだった。
多くのお金と人と時間をかけたプロダクトが必ずしも良くなるわけではなく、少人数でささっと作ったものが広まるということがよくあるということ。
人が増えるほど、コミュニケーションコストがかかり、柔軟性がなくなり、開発が進まなくなる。
周りからの期待が大きいほど、冒険ができなくなる。
この辺りの話はイノベーションのジレンマという言葉に集約されるのだろうか?

いま世界中で使われているものは、世に出た当初は「おもちゃ」扱いされていたということ。
「おもちゃ」と言われたら勝ち。

批判してくれる人に感謝しつつ、開発し続けよう。

チームビルディング

当日はチームビルディングの時間があった。
まず、どんなアイデアがあるのか、どういう人と組みたいのかというのを一人ずつ発表していき、その後の時間で組みたい人と話し合いながらチームを組むというもの。チームが決まり次第一緒に昼食を食べながら、アイデアを更に煮詰めていくようだ。

一人で開発する気満々だったんだけど、周りがどんどんチームを組んでご飯に行くのをみて若干不安を覚える。

気づいたら、ハッカソンに誘ってくれた友人と、koboで何かしたいと言っていた人と、楽天で公開されている全API叩くと言っていた人と、私のアイデアで優勝ですって人の5人だけになっていた。

進行係の人に、とりあえず飯に行ってこい会場を追い出され、近くのパスタ屋に入ることにした。
気づいたら全APIを叩くと言っていた人が消えていた。他のチームに吸収されたようだ。

結局、優勝アイデアを持ってる人も別のチームになったため、残り物の3人でチームを組むことになった。
チームOTS、結成の瞬間である。

何をするか

koboを使って、簡単に書籍のリコメンドができたらいいなと思っていた。
私は、最近話題になっていた、顔写真をから年齢、性別、感情などがわかるReKognizeというサービスを使って、本をおすすめ出来ないかなということを考えていた。
お昼一緒に食べてる時に、座席の空席状況kobo使って分かるといいよねっていうアイデアが出てきたりもした。

今回チームの3人で得意なものが、私→Android、ほか2名→サーバー側だったのでうまいこと分担する必要があった。
座席状況は店内のkobo以外からも見れる必要があるのでサーバーが必須だとして、顔の写真を撮って本をおすすめするところは頑張ればAndroidですべて完結するのだ。それをすると、そう、俺が死ぬ。

なので、顔写真を撮ってReKognizeに投げるところはAndroidでやり、返ってきた情報を元にクエリを作って本をおすすめする部分はサーバー側でやることになった。

分担をまとめると、

私:Android(顔写真)
友人;サーバー(書籍リコメンド)
メンバー:サーバー(空席状況)

となって、作業量的にもちょうどいい感じっぽくなった。

開発タイム 1日目

開発中はひたすらもくもくと開発していた。
カメラの部分については、ちょうどバイト先でカメラアプリを作っているのもあり、ハマりどころにはことごとくハマっていたおかげでかなりスムーズに実装できた。
21時までに、顔写真取得して、ReKognizeに投げて、結果のJSONを書籍リコメンド用サーバーに投げるところまでいって、会場をあとにした。
おやつが最高だった。

開発タイム @ごみばこアジト

友人のおうちに泊まり込みで更に開発。
残念ながらkoboを持ち出せなかったので、自分のAndroidスマホデバッグしつつ開発していた。
koboとは内部的に持っている画像の向きが違っているせいでReKognitionでなかなか顔を検出できなかったり、
koboだと動かなかったAndroidのFaceDetectionListenerがちゃんと動いたりしてわけがわからなかった。
謎のテンションだったので、基本的に思考が口からダダ漏れだった気がする。

んで、顔認識したらその位置に矩形を表示しようとしてたらティンときた。

「顔認識できれば目の位置に楽天カード合成すりゃ楽天カードマンいけるんじゃね?」

というわけで、矩形表示ができるようになったら、楽天カードマンの実装を始めた。

「あー、動かん」
「なにこれ、動かん」
「あー」
「あーーーー」
「動いたアアアアアアァアアァッ」
「なんかずれてる」
「ヨッシャ」
楽天カードマーーーンwwww」

僕の方はだいたいこういう感じ。
友人の方は、感情やら年齢やらを元にうまいことクエリを作っていい感じの検索結果になるよう頑張ってました。

手巻きタバコとお酒おいしかったです。ありがとうございました。

2日目

2日目は、発表があるので15:30頃に開発終了だったため、あまりコーディングに割ける時間がなかった。
発表に向けたスライドをちょいちょい作りつつ、サーバー側との通信部分を実装した。
あと、本日のおすすめコーヒーという機能を友人が作ったので、それをクライアント側で表示できるようにした。

最後の方で、座席のところに顔写真載せるようにしたら面白いんじゃないかというアイデアが出て、ぎりぎりまで開発していた。
座席表の写真を楽天カードマンにしてやりたかったが、残念ながらできなかった。マジで残念。

ちなみに2日目もおやつが最高だった。

発表

いよいよ発表。
Android端末上のアプリをプロジェクターに映すので、設備の都合上一番最初の発表になった。
結果としてこれは結構ラッキーだったのではないかなって思う。

持ち時間が5分と短いこともあり、スライドは何故作ったのかというモチベーションについて、各画面のスクショと簡単な説明、アプリの構成というシンプルなものにした。

デモの部分では、せっかくメンバーが作ってくれた機能の一部を忘れるというポカをやらかしてしまった。
指摘してくれてありがとうございました。ごめんなさい。
Chromeで表示してバックグラウンドに残しておいて準備はしていたんだけどやはり人間焦るといけない。

最後に40秒くらい時間が余ったので、楽天カードマンモードを見せることができた。

楽天カードマンが表示された瞬間、会場が最高に盛り上がった。
インカメラ&縦画面のプレビューに綺麗にカード重ねるため費やした一晩の苦労が報われた。
最高。

結果発表

何か一つだけでも賞を取れてたらいいなあと思っていたら、一番最初のAPI賞で呼ばれた。
やった!賞取ったぞ!という気持ちと、API賞止まりか、という気持ちが半分ずつくらいな感じでした。
それから少し後に、kobo賞の発表があった。
kobo賞は別チームで良さそうなアプリがあったので、受賞はそのチームだろうと思っていた。
そしたらなんと司会の人が自分たちのチーム名を呼ぶじゃあありませんか!
これにはビビった。まさか2つも賞を取るとは…!
そして副賞はkobo arc7 HD。Androidの入ってるハイスペックなkobo。中身はTegra3でメモリ1GBなので、初代Nexus7と同じくらい、なのかな。
タブレットは前から欲しかったのでとても嬉しかった。

その後いくつか部門賞の発表が続き、最後に優秀賞、最優秀賞の発表。
wktk

他部門受賞がありということに気付いてしまったので、結構期待しながらドラムロールを聞いていた。

ドコドコドコドコドコドコ

\ジャン/

呼ばれたァアッァッァッァアァアアアアアァ

優秀賞きましたわー。

感動しました。

そしてなにより驚きました。

まさか3つも賞をいただけるなんて思ってなかったですもん。


========

下書きはここで終わってた。
読み返しながら当時のことを思い出して懐かしくなった。
ハッカソンに出るにあたって目標を決めていたんだけど、それについて全く触れていなかったので書く。

動くものを作る

これはハッカソンに出るからには絶対の目標だった。
デモがない発表は嫌なので。
多少不具合があってもとにかく動かせという気持ちでコーディングしていた。

就活

就活用のネタが欲しいなというのがそれなりにあった。
学部の頃にも就活をしたが、そのときは胸を張って言える成果物が全然なかったので苦い思いをした。
入賞すれば自信になるだろうし、出来なくても参加して人脈が出来たらラッキー、と考えていた。
結果としては入賞、しかも二部門+優秀賞なので、とても自身になった。

懇親会でも、心なしか声をかけてくれる人が多かったような、そんな気がした。
とは言え結局、その場で会った人たちと就活で接点はなかった。
自分からメールする勇気がなかったし、懇親会でもあまり話せなかった。

ネタを仕込む

これはちょっと最初から目標にしていたか?と言われると微妙なところ(夜中作業中に思いついただけなので)
だけどなんとなく、真面目なだけの発表だとつまらないよな、という気持ちはあった。

ハッカソンはこの一回しか参加したことがない。
振り返っているとまた行ってみたくなってきた。