Hack Day 2016の振り返りとハッカソン駆動学習のすゝめ
先日(2/13-14) Hack Day2016に参加したので簡単に振り返ろうと思います。 若干時間が経ってしまいましたが、反省等色々あったので、備忘録的に書き残しておきます。
Hack Dayとは
ヤフーが主催するハッカソンです。 フリーテーマ&開発期間は24時間という条件の中で何かを作って90秒でプレゼンするというなかなかストイックな感じです。
詳しくはこちら
Hack Day 2016 : ヤフー主催の日本最大級ハッカソンイベント@秋葉原、2/14(日)の一般公開ステージは観覧自由!ぶっとんだアイディアを見にいこう #hackdayjp
エンジニア×3、デザイナー×2の5人チームで参加しました。
作ったもの
作ったものはこんなやつです。タイトルは「Happy Valentine?」
(写真全然撮ってなかったので素材がこれくらいしかなかった…笑)
簡単に説明すると、 ・前面にくっついているiPhoneカメラで男女2人で写真を撮ると ・写真から2人の相性を診断し ・診断の結果をもとにした味のチョコレートが生成される というバレンタイン感満載のデバイスです笑
プレゼン映像は自分の滑舌が悪すぎて引いたので紹介を控えますがw、この中のどこかにいます。
仕組み
iOSアプリを作成し、カメラ機能を実装。カメラで写真を撮ると、まずGyazoAPIを叩いてGyazoに画像アップロードします。
こういうプロトタイピング時にちょっと画像をどこかに置きたい時はGyazoが超便利ですね。
Gyazo
その後、Gyazoに上げた画像のURLをパラメータに付けてMicrosoft Project OxfordのEmotion APIを叩き、画像に写っている人物の"感情"をデータとして取得します。
Microsoft Project Oxford Emotion API
Emotion APIは写っている人物の顔の位置(Topからの距離,Leftからの距離,幅,高さ)と感情(anger, contempt, disgust, fear, happiness, neutral, sadness, surprise)を取得できるAPIです。
公式のLive Demoはこちら
Microsoft Project Oxford Emotion Demo
そして、そのデータをWEB&DBサーバー(node.js×MongoDB)に渡して、DBに保存。
その後、Arduinoを接続しているMacからサーバーにリクエストし、感情データを取得。 happiness, sadness, angerの値をちょっと調理してシリアル通信でArduinoにデータを渡し(この辺はPythonで実装しました)、その値を元に3つのサーボモーターを動かし、それぞれ注射器を押し出してチョコレートを調合しています。
Happinessの値は甘いチョコレートの量に、sadnessの値は苦いチョコレートの量に、 angerの値はタバスコ入りチョコレートの量に反映されています。
(PC側でどうやって検知してるかですが、10秒に1回リクエストしました!笑) 気合実装感が半端ないですが… まあハッカソンあるあるということで笑
一応チョコレートを温めておくとチョコレートが出るには出るのですが… このようになかなか際どい感じです笑
サーボモーターでチョコレートの量を制御するのが思いの外難しかった… 本当はチョコレートをずっと温めておける機構をつけたかったり、見た目をもうちょっと綺麗にしたかったり、他にももっと何とかしたいなーとは皆思ってたものの、時間切れになってしまいました。
結果
何も賞にひっかからず… という悲しい結果で悔しさに打ちひしがれました笑 完成度的に賞はちょっと厳しいだろうなーというのは薄々感じていたのですが、上位の作品をみるとやはり自分達の作品と比べて完成度が高く、もっと頑張らねばなーと思いました。
以下上位入賞作品のプレゼンを貼っておきます。
GRAND PRIX
グルメスパイ - チーム名: AdriaBlue
GOLD
ぬるぬる動くメビウス変換 - チーム名: リーマンズ
SILVER
IoP - チーム名: fujikkys fujikkys
BRONZE
BATAMU - チーム名: 部屋の済に落ちている靴下
他の作品も面白いものが多く、見ていて楽しかったです。(量が多くて流石に見切れなかったですが)
ハッカソン駆動学習(HDL - Hackathon Driven Learning)
なんとなく興味はあるけど、日頃なかなか学習する機会がないもの
こういうものって、皆さんにもいくつかあるんじゃないでしょうか。
僕の場合電子工作がその一つでした。
Arduinoを数年前に買ったものの、"Macに繋いでLEDを光らす"とか、"センサーを繋いで値を表示する"くらいしかやったことがなかったので、 もうちょっと何かできるようになりたいなーと思っていました。
(別のハッカソンで電子工作的なことをしたことはありましたが、電子工作の部分は詳しいメンバーにやってもらっていました)
何かを学ぶには、それを使わなければいけない環境に身を置くのが一番の近道であると個人的には思っているのですが、短い時間の中で開発を完了する必要があるハッカソンの場は学習にはもってこいです。
というわけで、今回は"電子工作系を絡めた何かをやる"というのも頭の片隅におきつつ作品を考えました。 (「どうしても電子工作がやりたい!」というわけではなく、Unityとかにも興味があったので、「3D使った何かをやろうかー」という話も出てました。)
今回の実装に関しての前提知識はほぼありませんでしたが、
pyenvを使ってMacにPythonの環境を構築する - Qiita
【Arduino】サーボモータをPWM制御
PythonとArduinoでサーボモータを制御
この辺の記事を読みながら、24時間で “WEBサーバーから数値を受け取ってシリアル通信でArduinoに値を渡してサーボモーターを動かす” ところまでできるようになりました。 まあ、そこまで難しくもないんですけどねw そのうち勉強しようと思ってもなかなかやらないので大きな一歩です。
ハッカソンに参加をされてる方の中にはこういった思想で取り組んでる方も結構いらっしゃるかもしれませんが、これまで参加したことがない方も半分学習目的でハッカソンに参加してみてはいかがでしょうか。
(ちなみに、サーボ動かすところはまあちょっと調べれば何とかできるだろうと思っていたものの、"サーボが動いたからといってチョコレートが出てくれるわけではない"という点については大きな誤算でした笑)
感想とか学んだこととか反省とかその他色々
以下箇条書きで。
Microsoft Project Oxford Home
アイデアは事前ブレストで考えたが、"面白プロダクト"を作ろうと意識しすぎて、Hack感がなくなってしまった気もする。面白いものを作るというところはゴールにせず、日頃感じている課題等を持ち寄ってそれをどう解決するか考えたほうが開発の熱量も上がったかもしれない。やり方にもよるのかもしれないけど、最初からみんなでブレストすると中庸なアイデアになりがちな気がする。
一応ネタは事前にブレストして用意していたものの、チョコレートの量の調整方法等は当日に考えたのでバタバタしてしまった。(秋葉原の部品屋は18時頃に閉まってしまうので結構焦った) 実装方法は大枠だけでも決めておけばよかった。
慣れないことをしたので実装において不確定要素を作ってしまった。それによりスケジューリングに甘さが出て結果的に完成度を下げてしまったので、慣れないことをするなら事前に多少のインプットなり検証なりをしておいたほうがよかった。
デモ展示の時に「食べられるんですか?」という質問を結構いただいたが、衛生面で不安があったので見ていただくだけにした。このやりとりで多少のがっかり感はでてしまうので食品系はやめたほうがいいのかなーと思った。
開発に熱中して写真も動画も全然撮ってなかったので、いざブログとかで書こうと思ったら素材が全然なかった笑 時々写真はとっときましょう。
VR篠崎愛の整理券配布が初日受付の先着順だと知らず、自分たちが行った頃には整理券がなくなっていた。参加動機の9割はこれだったと言っても過言ではなかったので非常につらい。参加要項はしっかり読もう。
ハッカソンに出たのは数回目で、いつも締切間近になると体力的にもきつくなって「なんで出たんだろう…」と後悔するのですが、終わるとまた出たくなるので不思議なものですね。
次はもっと良い物を作ろう。