ほつた@はてな

ほつたが技術的な事や個人的な出来事を中心に投稿します。

東海大学ICTRATチームとしてサバフェス!2016に参加して学生賞をもらいました

サバフェス!2016について

IDCフロンティアさんのところで、2013年から毎年サーバーのチューニング大会として開かれてるサバフェス!。今年のサバフェス!2016は、チューニング大会ではなく、健康をテーマとしたIoTのハッカソンでしたので参加して見事に学生賞を貰うことが出来ました。自分は当日、実際にお見せできなかったRuby on Railsを使ったサイトの開発を担当しました。

2016.serverfesta.info

開発するまでの経緯

参加賞としてRaspberry Piが貰えるということで、それに釣られてとっさに何にも考えず未計画で申し込みましたが、1人だけで参加となると心細いものです。必死に誰か参加しないかとTwitterで呟いていた所、東海大学ICTRAT*1*2として、Firefoxハッカソンでチーム参加した同級生の@prprhytや先輩と一緒に参加することとなり、また彼が同学年の友人に声をかけたりなどで4人集まりました。ただ、IoTと健康が本題ということでハード面に強いメンバーが居ないと不安です。他にハード面で技術面で優れている誰かと出来ないかと模索していたところ、たまたまTwitterで同学部の先輩(@dwight_1011)が1人だとどうしようと呟いていたのを見つけ、一緒にやることとなり、最終的に計4人で参加すること*3となりました。サバフェスに向けてアイデア出しや話し合うために東海大学生用のSlackを用意し、そこで早くからアイデア出しを始めましたがなかななアイデアがまとまりません。そうしているうちに説明会当日になり、以前からお世話になっていた、てきめん(@youkidearitai)さんとお互い何をやるか話をしていた所、「脳波が取得できたら面白いに違いない」なんて話をすることが出来た事により思わぬ、非常に良い展開を迎えます。自分の中で脳波を取ったら面白いのではないかと確信し、その夜にnecomimiが脳波を取っているのを知りました。

necomimi

necomimi

ICTRATに居た先輩がnecomimiで遊んでいたのをふと思い出し、速攻necomimiを譲ってもらえないか相談したところ「いいよ」という太っ腹対応でしたので、necomimiを使って脳波を取得して上手いことをすることでメンバーは一致団結しました。 実際はnecomimiでデータを取得したとしても身近なデータではないのと本来の健康とは違うもので、本当に上手く使えるのかメンバー全員疑っていましたが、開発するにつれてnecomimiを使って脳波が取得できれば面白いに違いないという流れになりました。

同学部の先輩(@dwight_1011)の凄さ

とっさに先輩(@dwight_1011)がnecomimiの分解、改造作業に着手して翌日ぐらいにはもうデータが取れるようになっていました。先輩以外に、ハード周りの知識はほぼ皆無で分解から接続までハード面の全てを熟していて、本当に素晴らしかったです。 先輩がハード周りについて詳しい経緯、知見が上がっていますので詳細は下記の記事を見て下さい。

dwight.hatenablog.jp

脳波(necomimi)の不可解な壁

ハード周りの進捗は本当に良かったのですが、対比的にデータ周りの進捗は著しく悪かったです。予定ではnecomimi(TGAM1)からESP8266(Arduino)を使ってWi-Fiでサーバーへデータを送り、Node-REDでデータを解析し、Ruby on Railsを使ってデータをサイトで表示する予定でした。上手く行けばデバイスコンパクトに収まるはずだったのですが、ESP8266なのかNode-REDが原因なのかデータ形式がよくわからないことになるなどで不可解な壁に立ちはばかれ、数日間@prprhytが頑張ったものの断念。前々日くらいにnecomimi(TGAM1)からラズパイと接続し、ラズパイ上で解析する事となりました。*4*5

@prprhytにはこの苦労話を書いて貰いたかったですね。

atofaer.hatenablog.jp

自分は何をしていたんだ

ところで、サイト担当の自分は開発期間の前半、サイトにデータを表示するという基盤を捨ててYConnectにこだわってユーザーごとに見れて上手いこと出来るんじゃないかと夢見ていました。試しに環境構築の手間がなくて楽で大好きなCloud9を使って、デモを作ってみるものの環境変数が反映されないCloud9の仕様なのかまともに動かず嵌まり、前半は進捗0の状況で過ごしました。彼に急かされ、やっと目が覚めた次第です。とっさにIDCFの本番環境の構築に着手しました。DockerからRuby on Railsの環境構築をしたところ、どはまりしてまともに動かずNode-REDやmyThingsの環境構築をした上でやっているせいなのではないかとあれこれ試行錯誤しているうちに後半の前半を潰してしまいました。普通に環境構築するのは面倒で、昔とある勉強会で教わったDockerで出来たら最高だよなと思っていたのが間違いでした。Vagrant DockerでRailsのローカル環境を構築する手順 · suzukiyuichi/git_practice Wiki · GitHub時間が限られているハッカソンなのでさっさと普通に環境構築をするべきだったと思います。*6

迫り来る時間

メンバー全員、ESP8266でやれるという希望に掛けてしまったからか、この方針に前々日まで拘ってしまい、結果的に大きな問題となりました。

実際、どんなデータが取得出来るのか全く分からず、サーバー担当の自分はどうしようもありません。前日まで、どのような方法でデータが渡るのかが見えず、データが無ければ仕様が固まらない状況だったのは非常に良くなかった事だったと激しく反省しています。なんとか前日からサイトの仕様が見え始めたので、一生懸命何とかサイトで脳波の情報を見れるように開発をし始めました。同級生の@baookouki1206に適当なサイトのデザイン作り(Bootstrap)を頼んで、いい感じのテーマを見つけて来てもらったおかげでその辺りの心配をする必要がなく、本当に助かりました。最初は脳波データをこのサイトを参考に保存しようと試みていたのですがMySQLでやり直さなければならなかったからか断念。Progateでやった事を参考にSQLite3で保存して読み込むという基礎中の基礎的な開発を進めました。Ruby on Rails 初級編 | プログラミングの入門なら基礎から学べるProgate (プロゲート)やはりまだ不慣れでルーティング周りを理解するのに数時間掛かり、やっと適当なデータをグラフ表示する事に成功しました。WebSocketでデータの受け渡しをするという話が出てきたのですが、WebSocketを扱える自信がなかった自分は@prprhyt担当の解析の方でSQLite3に保存してもらえるように日付が変わったころに急遽頼みました。

当日、最悪の事態を迎える

開発期間中、毎日のようにみんな学校に集まって開発をしていたのですが、自分は毎日のように集合時間を破ったりと本当にメンバーの皆さんには大変申し訳ない事をしました。*7 そんな中、本当に重要な当日だけはなんとしても遅刻しないように家を早く出た所、早く着く事が出来ました。SQLite3のファイルを読み込んでグラフ表示するというところまで仕上がったので実際にSQLite3のデータを削除出来るようにしたところ、destroyだけではSQLite3のデータを削除するところで謎のエラーを吐いてしまうことに気づき、また1時間くらい嵌まりました。さりげなく持参したこの本を見て、destroy.allとすることで解決することが出来たので本当に良かったです。

Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

その後、しっかりした脳波データを試しにrake db:seedで入れてテストしてみたところ、桁が多すぎたからかグラフ表示に見事失敗してる事に気付きました。そうしているうちに@prprhytの開発が終わり、実際にnecomimiのデータを取得することになりましたが、necomimiのご機嫌が悪いからか、ラズパイ上で上手くデータを受け取る事が出来ず、まさかの一番恐れていた最悪な事態を迎えてしまいました。*8そして、発表の方はスライドを@baookouki1206が開発期間中にじっくり作り上げてくれて任せっきりでしたが、急遽先輩(@dwight_1011)が発表することとなり手慣れた発表をして頂きました。

f:id:hotu_ta:20160330013925j:plain

悔やまれた展示時間

necomimiに惹かれたからか沢山の人に来ていただいて驚きました。実際に脳波の測定が出来れば良かったと今でも悔やんでいます。

実際に見せられる予定だったサイトのスクリーンショットです。

f:id:hotu_ta:20160330013628p:plain f:id:hotu_ta:20160330013743p:plain

学生賞に見事選ばれる

開成高校の高校1年生の方が居て、本当に驚きました。

https://twitter.com/hotu_ta/statu713704902854205440

学生賞の発表の直前まで、サンディスク賞を獲得していた高校1年生の彼が学生賞も取るのではないかと思っていましたが、IDCフロンティアの方々をはじめ、審査員の方々のおかげで見事、学生賞に選ばれました。

メンバー全員が開発に夢中となり、当日の直前まで実際に動かなかったものの最後まで諦めなかったことにより賞を取れたのではないでしょうか。幸運にも学生は自分たちと開成高校の方くらいしか居なかったからかもしれません。*9

チームとしての課題

最初のアイデア出しは雑談を交え、和やかなスタートとなりましたが先輩(@dwight_1011)と@prprhytは想像もつかないほどの苦労をしたのではないでしょうか。それを自分は全部理解できなかったことによりチームの間であってはならないズレというものがあったのではないでしょうか。それを理解できなかった理由として、技術力不足が1番に違いありませんが、状況を逐一整理し、進捗状況の報告も欠かさずにみんなが情報共有出来るようにまとめ上げる必要があったのではないかと痛感しています。また、同じようなメンバーでチームを組めたら、進捗状況の共有を第一にもっと良い開発が出来るように心がけたいです。

開発を通して感じた個人的な課題

当たり前のことですが、今回のハッカソンを通して、技術力が不足していることを痛感しました。自分はRuby on Railsのサーバーでグラフ表示させるところを担当しましたが、Dockerで環境構築をするところでハマリ、やはり不慣れで相次ぐエラーに見まわれ、どうにかしてsqlite3からデータを表示させることが出来たのは当日の終了間際となってしまいました。結局、データの解析周りは@prprhytに任せっきりでもっと知識と技術力があれば、少しでも手伝えたはずに違いないと思っています。

自分としてこれから

まだまだ技術面に関しては未熟なことを非常に痛感しましたので引き続き、技術面の勉強に励んで、色々とプログラミングをして、技術力を磨いていこうと思います。簡単なサンプルアプリでも何か実践という形でやってみるのが一番ですが、今回ラズパイからデータの受取に使ったWebSocketを全く知らなかったり(チャットとかでよく使わられてるだとか)とプログラミング以前のことでまだまだ知らないことが沢山あると思いますのでそれも一緒に学んで行きたいと思います。*10

ハッカソンについて

今回は、人生で3回目のハッカソンでしたが、嵌ってしまったら、時間を区切って良いと思い込んでる方法を思い切って捨てて、とにかく動くものを作り上げ、見た目を大事にする事が重要だと思いました。その後に改良を重ねていく方が少なくとも直前まで慌てて開発しなくて済むのではないでしょうか。また、表(見た目)で動いている事が重要で裏側はそこまで求められませんし、実際に審査で中の実装まで見てもらえない悲しいものです。見た目というか、デザインが重要な鍵を握っているに違いないと今回を通して確信したのでその辺りも勉強していきたいと感じました。

最後に

じっくり書いていたらサバフェスが終わってからもう数日が経っていて平凡な生活に戻ってしまって少し寂しさを感じています。せっかく3000円分のクーポンを頂いたので出来れば今後もじっくりと開発を続けたいです。大学の春休みの期間中にこのような機会を設けていただいて、サバフェスの運営や協賛企業の方々、本当にありがとうございました! 開発は本当に辛かったですが、サバフェスを通して少しでも成長することが出来た気がします。また来年もあれば是非とも参加したいです。*11

togetter.com

*1:東海大学から支援金を頂いて活動するユニークプロジェクト、情報通信研究プロジェクトの略称。 正式名称はInformation and Communication Technology Researchers at Tokaiらしい。

*2:ゴタゴタがあって2016年3月末に自然消滅。

*3:ICTRATの先輩は、仕事が忙しいらしく、音信不通で結局4人で参加

*4:この点に関して当事者ではないので@prprhytからマサカリが飛んで来るのを覚悟してます(笑)。みんな忘れたかのようにこの事に関してブログに書いていなくてかなり違和感を感じています。

*5:f:id:hotu_ta:20160330014244j:plain

*6:Ubuntuへ普通にRuby on Railsを突っ込むとなると辛いのですがググッて何とか構築できたので良かったです。 gem install railsでこけてググってもいい情報がヒットしなかったので適当にこれらのコマンドを叩くのをおすすめします。

*7:前日、学校に着いたのはなんと17時半。家庭内の諸事情もあってだなんて言い訳をしたところでどうにもなりません。厳しく@prprhytに叱られました><

*8:データを受け取れたとしても実際にサイト上で好ましい表示はできなかったと思います。

*9:自分はnecomimiの耳のおかげで、運良く学生賞を手に入れられたと感じていて、オリンピックで言うと何とか銅メダルを手に入れられたのではないかと思っています。

*10:プログラミング以前のことを学ぶために、経営システム工学科から通信ネットワーク工学科へ編入学を真剣に検討した方が良いかなと薄々感じてます…。

*11:チューニングは苦手なので出来ればハッカソンでお願いします...。