まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:hackathon

読売新聞社様主催のジャイアンツハッカソン、4月27日に決勝に残ったチームによる最終審査が行われました:
http://www.giants.jp/G/gnews/news_3910572.html

2016042801



ITを通じてファンと球団との距離を縮め、試合観戦などをより楽しむことができるようなアイデアを広く募集し、アイデアを詰め、短期間で開発し、その出来栄えや実用性、ビジネス性を競い合う、というコンテストでした。数多くの独創的なアイデアや製品が生まれましたが、その中でもコミュニケーションツールを活用して選手をより身近に感じてもらうサービスを発表した "TEAM PAAK" チームが最優秀賞に輝きました。TEAM PAAK の皆様、おめでとうございます。また同ハッカソンに参加された多くの皆様、データ提供や審査などに参加頂いた協賛企業の皆様、大変お疲れ様でした。

同ハッカソンではアイデアを実現するためのお手伝いとして、データスタジアム様や読売巨人軍様から各種データ(試合/打席/投球/選手のデータや画像、球団グッズの売上記録など)を提供いただき、ハッカソン内で利用させていただきました。日本アイ・ビー・エムはサムライインキュベート様と共同で同データをアプリケーションから利用できるよう、各種データを API 化し、クラウドサービス(SoftLayer & Bluemix)と合わせて参加チームに提供しました。この「各種データの API 化」という部分のお手伝いをしたこともあり、この部分を少し掘り下げて紹介させていただきます。

簡単にいうと、データを提供する側の都合と、データを活用したい側の都合をあわせるための場を提供させていただきました。試合の記録データは本来有料で企業に提供されているもので、このハッカソンでの利用に限り、参加チームへは無料で提供いただきました。画像データや売上記録については、これら自体は売りものではありませんが、権利関係などで本来は公開されていないものを含めて提供いただきました。データを使う側からすると、これらのデータを丸ごと(例えばファイルごと)入手できると嬉しいかもしれませんが、上記のような事情からそういった形での提供は望まれていないものでした。 ではどのようにこれらのデータを提供するか、というのが我々の課題でした。

その答が API 化して、参加チーム毎の利用状況を管理しながら提供するという方法でした。この点についてもう少し詳しく説明します。

まずは「API 化」です。API とは Application Platform Interface の略で、ここでは「ウェブを通じて実行できる関数」という意味で使っています。少しわかりやすく説明すると、例えば「○○年□月△日、巨人戦の1回表。最初の打者の第×球目の結果は?」のような条件を与えて問い合わせをすると、「ピッチャーは●●、打者は■■、0対0、ノーアウトランナーなし、カウント 0-1、外角のスライダーで空振りストライク」のような結果が返ってくる仕組みを REST API と呼ばれる手法で用意しました。

これらのデータそのものはデータスタジアム様や読売巨人軍様から提供いただいているものです。1球毎、1打席ごと、1試合ごとなど、粒度の異なるデータを1年ちょっと全試合分提供いただきましたが、そのデータファイルそのものが流出するリスクは回避したい(つまりデータファイルは参加者に渡したくない)という事情がありました。そのため、上記のような問い合わせ条件にあうデータを取得できるような仕組みをウェブ API として(IBM Cloud を通じて)提供させていただきました。


ではそのようなウェブ API の仕組みをどのようにして短期間で(2日程度で)用意したのか? この答は実は以外とシンプルで、以下の3つの仕組みを組み合わせただけでした:
(0) 提供いただいたデータを全てリレーショナルデータベースに格納
(1) StrongLoop LoopBack を使ってデータベースを丸ごと API 化し、ウェブを通じて読み書き更新削除検索といった REST API を自動生成
(2) API Management サービスを使って (1) で作った API のうち、検索(問い合わせ)の API だけをハッカソン参加者に公開


2016042801


まず準備段階 (0) として、提供いただいたデータはいわゆる「ファイル(オフィスファイル、画像ファイル、テキストファイル混在)」でした。このままでは利用や配布/提供が難しかったため、一旦リレーショナルデータベースなどに全データをロードしました。今回は IBM の SoftLayer クラウドのサーバーを使い、その中にデータベースエンジンを導入して、全データをまとめてロードしました(要するにデータベース化しました)。 技術的にはこれでこのデータベースに適宜アクセスできるような仕組みを用意すれば外部から検索したりできる、のですが、上述の理由からデータベース丸ごとでの提供をするわけにはいかない、という背景がありました。

次にこのデータベースを API 化しました(1)。IBM Bluemix でも提供されている StrongLoop LoopBack サーバーを使うと、各種データベースを指定するだけでその中身を読み書き更新するような REST API を自動生成してくれます。

また自動生成された API には削除したり更新したりできるものもありますが、今回のハッカソンではあくまで参照(問い合わせ) API だけを公開したい、という事情がありました(2)。作成した API をわざわざ無効にする、という方法もありますが、今回はこれも IBM Bluemix から提供されている API Management 機能を使って、実際には問い合わせの API だけを公開し、かつ利用状況も合わせてモニタリングできるような方法にしました。


なお、今回の API 生成で使ったこのような (0) (必要であれば)DB を準備、(1) API 化、(2) API を限定公開して監視 という3ステップについては、以前にこちらのブログエントリで詳しい手順を紹介しています。詳しい手順などはこちらを参照してください:
Bluemix だけで REST API を作成/公開/管理する


「API を用意する」と聞くと、ちと面倒そうな印象を受けるかもしれませんが、IBM Bluemix や SoftLayer 、そして これらから提供されている各種サービスを効率よく使うことで、面倒な作業を簡略化し、目的の API を(仕様書に相当するドキュメントごと)作って公開して管理する、といったことが簡単に実現できてしまいます。 もちろんデータベースの操作に慣れた方からすると、直接データベースを扱えた方が効率は良かったかもしれませんが、様々な事情を考慮した結果の1つの実現の形として、今回はこのような提供形態とさせていただきました。今回のジャイアンツハッカソンの成功を受け、「このやり方がある程度は正しかったのではないか」と思っています。もちろんまだ改良・改善の余地はあると思いますが、「データを取りまとめて API を提供する」という役割については一定レベルで果たせたのではないかと考えています。 そしてその作業は、上記のように(IBM クラウドを使うことで)結構簡単に実現できるものだと思っています。


ABC朝日放送様主催のハードウェアハッカソン「ABCハッカソン」が6月20日深夜に放送されました。関東地方ではニコ生と Youtube でサイマル放送され、ネットで試聴することができました:

新世紀発明バトル ABCハッカソン~ひらめきで世界を変えろ!~



ハッカソンをテーマとしたドキュメンタリー番組です。そのハッカソンも一般的な「ソフトウェアハッカソン」ではなく「ハードウェア(+ソフトウェア)ハッカソン」です。しかもテーマは「1万人規模のイベントを盛り上げるガジェットを作る」というもの。なかなかにハードル高そうなハッカソンですが、ハードウェアのハッカソン自体が珍しいこともあって、どんなものが生まれるのか興味津津でした。

私も現地で IBM Bluemix のサポート要員として参加していたこのイベントの結果を、初回放送が終わったこともあり(多少のネタバレが許されるという判断で)、自分なりの視点で情報を少し補足しながら説明したいと思います。なお、以下の内容には一部私の推測も含まれていることと、会社としての見解ではないことをご了承ください。


最優秀賞を獲得した「レコチョク’s」チームが取り組んだのは、音楽イベントでアーティストと目が合えば、それを教えてくれるデバイス "目、あいましたよね?" の開発でした。自分の好きなアーティストやアイドルのコンサートに行って、「今一瞬こっちを向いてくれたような・・・??」と(都合よく)解釈することもできますが、その事実を客観的に知らせてくれるサービスです。

具体的には株式会社ジェイアイエヌ様が開発したスマートメガネ JINS MEME を使ったものです。アーティストがこのメガネを装着してステージ上を動きまわる間、その視線の方向をほぼリアルタイムに計算してサーバーに送ります。一方、観客は専用のデバイスを持っていると想定し、(スマートフォンを通じて)送られてくるデータによって、アーティストの視線の方向に自分がいるかどうかを知ることができる(いたと判断したら、そのデバイスが反応する)、というものでした。 今回のハッカソンでは開発期間の問題もあり、スマートフォンがその通知を受けることができる、というものの実現を目指されていたようです。

この仕組み、JINS MEME からの情報量や更新頻度にもよるとは思いますが、観客が数人(デバイスが数台)であれば、MEME からの情報を http でウェブサーバーに送り、デバイスが(1秒おきなどで)定期的に Web サーバーを見に行く、という普通の(?)アルゴリズムで実現できるかもしれません。

ただ実用化を考えると問題もあります。まず http のような重いプロトコルで実装してしまうと、デバイスの電池消費の問題に直面します。そのデバイスはコンサートイベントの間中動き続けてもらわないといけないため、あまり電気を使うような実装方法は避けたい、という背景があります。また電池の問題はともかく、1万人規模のファン(1万台規模のセンサー)が定期的に Web サーバーに対して1秒おきレベルの頻度でアクセスを繰り返す、というのは、重い http プロトコルではサーバーの負担が大きく、すぐにパフォーマンスの限界が来てしまう、という現実的な問題もあります。「目があったかどうか」というリアルタイム性が重視されるこの処理はネットワークにも演算処理にもパフォーマンスが求められる厳しい要求仕様が隠れていることになります。アイデアの実用化を考えると、これらの問題点をどうやって解決するか?という問題を解決する目処が見込める必要があるのでした。


実は IBM Bluemix にはその答が用意されています。Bluemix が提供している IoT アプリ開発環境である Node-RED フローエディタや、そのインフラとなる Internet of Things Foundation サービスは軽量な MQTT プロトコルを使ってセンサーデータを集めます(集めるための手段やサーバーも提供しています)。プロトコルを軽量にすることでセンサー側の電池消費量を抑え、ネットワーク負担も減らし、その結果処理自体を軽く実装することが可能になります:
2015062302


また Node-RED フローエディタはセンサーデータのワークフローを視覚化された環境で作っていくと実際に動くものが作れる、という特徴を持っています:
2015062301


これらの Bluemix に用意された機能やサービスを使うことで、サービスやデバイスの開発者の余分な負担や心配を減らすことができ、生産性の高い開発が実現できるようになります。同時に多くの実績を持った実現性の高いインフラ環境が提供されていることで、開発者のメリットだけでなく、運用者やベンチャーキャピタルに対するメッセージにもなります。「パフォーマンスが厳しくなってきたから途中からインフラを変える」のは、言うほど簡単ではないし、この辺りをきちんと事前にアセスしておくことも大変だと思っています。そういった部分をプロにアウトソースできる IBM Bluemix はデバイスアプリケーション開発に適していると思っています。


今回はレコチョク’sチームの皆さんに Bluemix を採用いただくことができ、我々もその実現に向けて限られた時間の中でしたがご支援ができました。レコチョク’sチームへは企業賞である IBM 賞も贈呈させていただきましたが、結果として斬新なアイデアとその実現性の高さが評価された上で最優秀賞に選ばれたのだと思っています。改めてレコチョク’sの皆さん、おめでとうございました。

なお、このハッカソンでは最優秀賞のレコチョク’s以外にも、優秀賞を取った "五感王" の「ごったがえし」チーム、サイボウズ賞 "FLUERIR" の「チーム共犯者」にも IBM Bluemix を採用していただきました。 我々もハッカソン前には「ハードウェアのハッカソンで、果たして何チームが Bluemix を採用してくれるのだろう?もしゼロだったら・・」と不安を抱えての大阪入りでした。結果的として3つのチームに採用いただき、最終的にはいずれの3チームも何らかの評価を得る結果になりました。IBM としても非常に嬉しい結果になりました。


このイベントにはアイデアソンの段階から参加させていただき、普段思いつかないような多くのアイデアを目の当たりにする機会があり、とても刺激的でした。また IBM 同様にスポンサーとして参加した企業の皆様との交流機会もあり、得るものがとても多い3日間であったと思っています。


5月9日~11日において大阪の朝日放送様主催で行われた ABC ハッカソンに参加してきました:
ABC Hackathon | 朝日放送

このハッカソンは「イベント×IT×モノづくり」をテーマとしたもので、一般的な「プログラミングコンテスト」的な要素は少し薄くなっています。あくまで多くの人が集まるイベントで活用できるハードウェアを作るコンテストであり、そこに IT の要素を組み合わせてイノベーションを起こそう、というものです。なお、この様子は関西地方では朝日放送様のテレビ番組として放送される予定であると聞いています。

私は参加といってもいわゆる「参加者」ではなく、クラウドおよび IoT サービス環境としての IBM Bluemix を利用者に提供したこともあり、その技術サポート要員として参加してきました。

番組の内容に関わることを話すつもりはないのですが、まず参加者の熱意とデバイスのアイデア、そしてそのデバイス(ソフトではなくハード)を3日間で作り上げようとする集中力&チームワークに感動しました。ハッカソンの規模的にも私がこれまでに参加したハッカソンの中でも最も大規模な開催であったと思います。

そして本戦の中で数社のエンジニアの方をサポートさせていただきました。IBM Bluemix は最初は慣れなくてとっつきにくい環境だったと思いますが、作るモノや利用目的がハッキリしていたこともあり、思いのほか環境に慣れていただくまでも早く、後半ではトラブルがあっても話を一緒に聞いているうちに結局自分で問題を見つけて直してしまう、というレベルにまで達していました。サポート要員として非常に楽でした(笑)。何よりも使って頂いているうちに IBM Bluemix の環境に慣れて、活用されて、応用されていく様子がこちらにも伝わってきて、それが一番嬉しかったです。今後も引き続き IBM Bluemix を活用いただきたく思っています。

そして、実は参加者とだけではなく、他のデバイスや API 提供会社のサポートとして参加されていた方々とも貴重な交流ができました。正直、普段はコンペとなるような関係の会社も参加されていましたが、参加チームの中にはその会社の提供する機能と我々の提供する機能を組み合わせたデバイスを作ろうとする所もありました。我々には思いもよらない使い方でした(苦笑)。ハッカソンに参加されていた皆様は知らないと思いますが、実は主催社チーム同士でもかなり密な交流があったのでした。 (^^; 色々な意味で本当に貴重な3日間でした。


このイベントに参加された方、主催された方、サポートで参加された皆様、お疲れ様でした。そして貴重な機会をありがとうございました。本当に楽しいイベントでした。機会があればまたどこかでお会いしたいです。そしてこのような刺激的なイベントへの参加を認めていただいた自社に感謝します。


 

少し前の話になりますが、IBM Bluemix のハッカソンに参加してきました。

限られた時間の中で4~5人のチームをビルドして、アイデアを出し、実現可能性を調べた上で実装する、というハッカソン。今回は PaaS である IBM Bluemix を使うという前提で「旅をハックする」という制作テーマが与えられていました。

Bluemix は PaaS とはいえ、CloudFoundry をベースとしていることからかなりの自由度があり、また Bluemix から提供されている各種サービスを使うことでシステム構築の手間を大幅に減らすことができます。加えて DevOps によるチーム開発環境も提供されています。 実は私自身、このようなチーム制のハッカソンに参加したのは初体験でしたが、DevOps 環境にもすぐに馴染めたこともあり、Bluemix は非常に相性のいい環境であると感じました。

各チームに与えられた時間は8時間プラスアルファ。チーム内で役割分担して開発するとはいえ、必ずしも充分な時間とはいえません。そのため出されたアイデアのどの部分を実装するのか(どの部分は諦めるのか)、という判断も必要になります。


我々のチームが開発したアプリケーションがこちらです(いちおう動きます):
http://tabihack2014teame.mybluemix.net/

独立した環境下で Twetter Streams API を使い、特定エリア(日本)の位置情報をリアルタイムに集めてDBに格納します。その情報を使い、地図上に表示されたエリア内で最近ツイートされたのはどんな情報か、を可視化するウェブアプリケーションです。

上記 URL にアクセスすると、まず位置情報 API によって、現在地が特定され、その周辺の地図が表示されます。同時に地図内の青みがかったエリア内で最近ツイートされた内容が画面右部に表示されます:
2014111702


また画面を下にスクロールすると、そのエリア内の宿泊施設や、周辺のマンホール(笑)の情報が表示される、というものです:
2014111703


地図をドラッグして青部分が移動すると、ツイート/宿泊施設情報/マンホール情報も、そのエリア内や周辺の情報に切り替わります。
2014111704


加えて、画面上部のファイル指定ボタンで位置情報が埋め込まれた画像を指定すると、その画像に含まれた位置まで地図が移動し、そのエリア周辺のツイートや宿泊施設の情報が表示されます。


今回のハッカソンで作れたのはここまでです。ひたすらに位置情報 API を組み合わせて感じ(苦笑)。本当はツイートを検索してもっと絞り込んだり、位置情報に付随した別の情報を表示したり、UIをより見やすくしたり、といったこともやりたかったのですが、優先度の判断で落としました。チームビルドやアイデア出しを含めて8時間で作ったにしてはまあまあの出来だと思っていますし、実行/開発環境やサービスをその場で手配して用意できる Bluemix 環境のすごさを目の当たりにした結果でもあると感じています。


このハッカソンで Twitter Streams API を使っての印象として、やはりこれだけの情報を集めることができるようになったことは、非常に面白いと感じました。地図上で可視化する、というアイデア1つにしてももっと別のアプローチもあるでしょうし、またほとんどが位置とは関係のない情報ばかりである一方で、たまに隠れている「その地域の役立つ情報」を如何に探し出して表示するのか、という新しい課題も浮き彫りになりました。 限られた時間の中での作業だからこそ、見えてくるものもあります。

ハッカソンは終わってしまいましたが、このアプリを今後少し改良してみるつもりです。ハッカソンにはこういう「終わった後の楽しみ」もあっていいですね。








 

このページのトップヘ