平成最後はgRPCなサーバーを書いてハッカソンしていた話
こういうのってあとから書こうとすると時間が経ちすぎてなかなかポストできなくなりますよね。
そういうわけで書きます。
何してきたのよ
サイバーエージェントさんの 平成最後のハッカソンに出場してきました。
4月の頭くらいからtwitter上で人事の方々がこのハッカソンについて話をしていたので、「ちょっと出てみるかぁ」みたいなノリで考えてました。
出場するまでの流れ
そんなことを考えてると、最近イキりがすごい id:NoahOrberg が
みたいなことを言ってきました。
「プログラミングができる5歳児」ことのあくんが、インターネットで赤ちゃんをしている id:yt8492 を推していましたし、なによりもマヤミトくんと一緒に出たいなと僕も少し考えていたのでこの3人で出ることにしました。
チームの人員としては
- プログラミングのできる5歳児 (サーバー&技術担当) のあ id:NoahOrberg
- SNS広報担当とチームの平均体重を引っ張り上げる(サーバー) 僕 id:flying_hato_bus
- 精神年齢生後3ヶ月(Android) マヤミト id:yt8492
この3人で蠱毒みたいなチーム作って参加登録しました。
数日後にはみんな参加できることが決定し、やっていきを高めてました。
お題が発表される
今回のハッカソンのお題は 「平成生まれの私たちが、平成を楽しく振り返ることができるサービス/モノ」というものでした。
さっそくのあくんとマヤミトくんと何を作るかを話し合うことにしました。
話した時に出たものはこちら
主に出たのはこの3つでした。
選ばれたのは黒歴史を共有するものを作るというプラン。
他の2つは
- プログラミングのできる5歳児 (サーバー&技術担当) のあ id:NoahOrberg
- SNS広報担当とチームの平均体重を引っ張り上げる(サーバー) 僕 id:flying_hato_bus
- 精神年齢生後3ヶ月(Android) マヤミト id:yt8492
このチームの人員から考えても、そんなおしゃれなものを作るよりはネタに振り切ったほうがいいだろう、という考えでボツにしました。 僕達がそういうプロダクト作るのは似合わないってことですね
黒歴史を共有できるものということで深堀りしていき、出てきたのがこのホワイトボードのようなことです。
黒歴史 x ブロックチェーン
黒歴史というものは、オタクならば結構な人たちが作ったことであろう歴史です。
- イキリ満載のブログエントリ
- 某動画サイトに実況動画を投稿
- 肌にペンで傷を描いて学校に登校
- 霊感があるキャラを装って心霊写真を捏造
こんな感じで「あの頃はこれがかっこいいと思った」「他人とは違う自分を演じたかった」という考えで突っ走ってしまう行為です(全部僕の体験談です)
黒歴史というものはあくまで「歴史」、勝手に改変されたり、なかったことにされるということはもってのほかです。
勝手にネット上で作った黒歴史を消されてはいけません。
つまり、これを恒久的に保存してあげる必要があります。
ここでブロックチェーンです!!
ブロックチェーンは情報の改ざんに強いデータベースです。
つまり、この黒歴史の情報をブロックにしてしまえば、半永久的に黒歴史は保存され、歴史の改ざんも防ぐことができるようになります。
作るにあたって
作るにあたっての作業分担はこんな感じ
- ブロックチェーン 技術全般 ... のあ id:NoahOrberg
- サーバー(gRPC) ... はとバス id:flying_hato_bus
- ネイティブアプリ(kotlin) ... マヤミト id:yt8492
サーバーは Go x gPRC、ネイティブアプリは Kotlin x gRPC という感じの構成。
それぞれのgithub repositoryです。
のあくんとマヤミトくんがいろいろと頑張ってくれたので実装は早く終わりました。
gRPCを使ってみた感想
今までやってきたようなRESTfulなJSONサーバーより断然書きやすかったです。
gRPCは自動生成されたgoのファイルを見れば何を実装すればいいか一目瞭然ですし、入出力がProtocol Buffersなので、jsonを扱う時のように Marshal / Unmarshal しなくて済むというのがめちゃくちゃ楽でした。
goではstructで扱えるので変数に型があり、どういうデータなのかがすぐ分かりますし、何よりもシリアライズされたデータが行き来するので速さが出ます。
そんなわけで大体のサーバーはハッカソンの3日前には大方の実装が終わり、マヤミトくんに頑張ってもらうだけになってました。
ブロックチェーンについて
ブロックチェーンは †最強†エンジニアののあくん id:NoahOrberg が担当しました。
合意形成アルゴリズム
ブロックチェーンの中心とも言える合意形成のアルゴリズムはのあくんが独自に実装してくれました。
独自合意形成アルゴリズム HEISEI
- 独自合意形成アルゴリズム HEISEI とは、PoW (https://en.wikipedia.org/wiki/Proof-of-work_system) をベースに作成した独自の合意形成アルゴリズム
- HEISEIアルゴリズムでは、平成初頭の日本のインターネット界隈を牽引してきた文字コードであるEUC_JPでの "平"(0xCABF), "成"(0xC0AE) (ref. http://charset.7jp.net/euc.html) が作成されたハッシュの中にビットパターンとして存在していればブロック作成の権利を得る
合意形成アルゴリズムは平成を使いました。いい感じにブロックが生成されるのが "平" "成" の二文字を使った時でした。
これも前日にはのあくんがすべて実装していたのでさすがですね。
ネイティブアプリ
一人で全部実装したマヤミトくんの記事でしっかり書かれているはずです。
学部2年生ながらここまでやってくれたマヤミトくんは煽り抜きで最強だと思います。
これで彼女がいれば敵なしですね。
ハッカソン当日
ハッカソン当日には黒歴史ブロックチェーンがある程度出来た状態で参加できました。
あとは繋ぎこみをするだけという状態です。
まあ、こういう時は大体苦労するんですよね、苦労しました。
サーバーにバグが結構残っていた
本当に申し訳がなかったです。許して、マヤミトくん、のあくん。
直前まで小さなバグがちょっとずつ出ていてそれを潰す作業をしていました。
前日まで散々イキっていたのにこのザマです。精進します。
発表のフォーマットが特殊すぎた
チームが多すぎて発表の時間が押していた結果、
「スライドは2枚、1枚は実際に動いている動画を貼り、2枚目には説明を書く」
というものになっていました。
見た目にインパクトがあるものが有利になったのかなと思います。
僕らのチームは 見た目のインパクト < 技術 & 発想力
みたいな部分があったので技術力としてはそれなりにあったと思いますが、インパクトが足りませんでした。
優勝者のチームが以前会ったことのあるはととさんだったことにも衝撃でした。
優勝しました!#平成最後のハッカソン
— はと (@kthatoto) April 30, 2019
作ったものが。「マリオのゲームで平成を振り返る」というコンセプトで、web上でマリオのステージが進むごとにゲームハードが進化していくという技術力がやばいやつでした。
「Vueのちからってすげーーーーー!!!!」
まさかの発想がかぶる
「黒歴史という発想は被りそうだな〜〜〜〜」
とマヤミトくんとのあくんと笑いながら話していましたが、見事に被りました。
それも同じ大学のmtのチームでした。
思わず笑い合いました。
ちなみに、他のチームとは黒歴史のネタがかぶらなかったです。奇跡かな。
さいごに
懇親会で他の参加者の方とお話をしていたら
という声を結構聞いて嬉しかったです。やっぱり他の人からフィードバックを受けるというのは気持ちがいいです。
ブロックチェーンをフルタイムで働きながらも作ってくれたのあくん
のあくんのひどい彼女イキリに耐えながら完璧なネイティブアプリをつくってくれたマヤミトくん
最後の最後でマヤミトくんがキレながらのあくんに 「は!?!?」 と言っていたのは見ててめちゃくちゃ面白かったです。
二人のおかげでとっても面白いものが作れました。ありがとうございました。
おしらせ
お仕事をください
私を働かせてください!!!!!https://t.co/Unus7ockvF
— 飛ばすはとバス (@flying_hato_bus) March 30, 2019