ハッカソンvol7に参加した

事前準備

前回の記事に続き、今回もサポーターズ主催のハッカソンに参加しました。 今回も前回同様にランダムチームで参加することにしました。 まず、チームが出来て最初にやることはミーティングして

  1. 何を作るか
  2. メンバーが何を出来るか
  3. 自分は何が出来るか
  4. 作成するために何を使うか
  5. 誰が何を担当するか

等の事を確認・決定します。これをやるために、まずミーティング設定します。 正直このミーティングの設定の前まで基本的には誰が最初に動き出すかの探り合いな気がします(笑)。 なので、探り合いが苦手自分が最初に動くようにしてます(笑)。 ここで、どれだけチームとして議論が出来るかが一番大事です。最悪作るものがここで明確に決まらなくても議論が出来るなら後でいくらでも挽回できます。(決まった方が断然いいのは事実ですが)

ということで、今回のチームですが、自分以外にもハッカソンに参加したことがある人がいたり、チーム開発の経験がある人などがいて何かしらの形でチーム開発の経験がある人が大半というチームになっていたので前回のほぼ初心者チームという感じではなくメンバーにもちゃんと一つ一つの役割を振っていっても大丈夫そうだなと感じました。 そして、テーマと製作物決めです。 今回のテーマは技育展というサポーターズのイベントにつながるように11テーマが用意されていました。

  • 世の中を楽しくする
  • 世の中を便利にする
  • 無駄開発
  • スマホアプリ
  • ゲーム
  • オンラインコミュニケーション
  • 開発/スキル支援
  • ハード/組み込み
  • インフラ/セキュリティ
  • AI/データ解析
  • 事業化目指してます

この中で「このテーマでこれを作りたい」というのが出なかったので、僕がかなり前から考えていた「日程調整アプリ」を作成することを提案してそれに決まりました。 これは、研究室で日程調整の役割を任される僕にとって乱立する日程調整の連絡だったり、他の人がイベントを作成したときにわざわざ同じ日程を入力しないといけないという煩わしさを改善したいと考えていました。 そこで、このアプリで達成したいこととして具体的には以下の目標がありました。

  • ユーザの識別
  • 事前に入力した授業の予定などはイベントの予定に自動反映する
  • 任意のカテゴリーを設定する(主催側)
  • イベントへの参加・不参加の数を見れる
  • カテゴリーでソートできる

この目標をチームメンバーに話しましたが、いきなりこれを言われても研究室に配属されているのが僕だけだったので、「なぜカテゴリーが必要なのか」、「どういう形で入力するか」、「どいうった形で出力するか」などの点が中々伝わっていないと感じました。 特に「任意のカテゴリーを設定する」については誤解を生んでしまった感じが強かったですね。 そして、時間は過ぎていき、ミーティングしたのが1.5h程度と少なかったので、「どの機能を実装するか」や「何を使うか」などの具体的な部分まで決めることはできませんでした。

ハッカソン開始

1日目

まず、開会式前に焦ってチーム名を作りました。特に何も思いつかなかったので、メンバーのイニシャルを取って、「3y1w」という名前にしました。

開会式の後何を目的として考えいてるのかのイメージを共有して使用するものなども決めました。 作業分担と何を使うかを分けていきました。

種類 言語
フロントエンド HTML/CSS, JS
バックエンド Python
DB SQLite

という構成になりました。 この中で僕が担当したのはバックエンドの部分です。前回もバックエンドを担当したわけですが、今回は前回よりも入力の自由度が低いためどうやって入力をデータベースに記録するかという部分をメインに考えることが多かったです。 僕はSQLの利用経験がなかったため、このハッカソン中にDBを担当している人に教えてもらいながらなんとか実装していきました。

一日目の締め会の後バックエンド&DBをフロントエンドにつなげる作業をして、翌日やるべきことの洗い出しなどをやっていったという感じで1日目(日付越え)が終わりました。

2日目

この日の15時までが開発のデッドラインです。なので、時間はないので最低限動くものを作成することを目標にそれぞれの役割をこなしていきました。

追い込みで一気に画面が増えたので、対応するバックの方も関数の修正とデータの取得に合わせて、HTMLファイルをいじったりしていた。 その間に画面を作る人と画面の操作に対応する僕以外のもう一人の人にはスライドを作ってもらったりという感じでチームで役割分担を適切にできて一気に進んでいきました。

15時になり、画面を作る人と僕もスライド作りに参加して何を発表するかどう、発表するかを決めていきながら作業していきました。 今回は3分の発表時間だったので、前回よりも話すことを多くできたのでアプリの動画を取ったり、スライドの作成をするという形で準備していました。

そして、発表は案を持ってきた僕が発表することになりました。3分で話すのはなかなか骨が折れるので、早口になるわ噛むわでなかなか難しいなと思いました。

(やっぱり焦るとうまくいかないな)

そして他のチームもレベル高くて楽しかった!

全部の発表と審査が終わって授賞式、努力賞、優秀賞の順で呼ばれていく(今回は再優勝賞なし)。どのチームが来るのかな?と考えいたら呼ばれたのは僕たちのチーム。 最初聞き間違えじゃないかと思うほどびっくりした。

なんの準備もできていないまま発表した僕が代表者としてコメントをするわけですが、まず呼ばれると思ってなかったのと、最初になるとは思わず、驚きと喜びで何を言ってたいのか覚えてないです!

前回は自分たちの動画を出せなかったということも含めて悔しい思いをしたので、今回は動画を出して発表が出来たことに加えて受賞できたことが凄く嬉しかったです! 出来なかったことが出来るようになる経験はやっぱり嬉しいし、そのタイミングで人に評価されて認められたのは凄く嬉しかったです!

また出たい!そしてもっといいものを作りたい! 最優秀賞を取りたい!

今度は後輩を巻き込んで今は触れてないフロントも触ってみたい。(バックは後輩に任せるとして)

そして、今回作ったものが完成していないので、一人でも作っていきたいなと思っている所存。

初ハッカソンに参加してみた

初の記事投稿ということで簡単に自己紹介をします。

現在機械系の修士1年生です。

現在は、就活と授業と研究とその他もろもろに追われながら忙しくも楽しく生活しています。

忙しいのに記事を始めたのは、何となくイベントとか出た時のことを書いて残しておくのはよさそうだなと思ったというだけです。

趣味は読書、プログラミング、サッカーです。

競技プログラミングをしていて、ユーザはMelbeckです。

多分この記事も、そのTwitterから飛んでる人が見てくれてるんじゃなかろうかという気がしてるので、言うまでもない気がしますが。

秋みたいなラインナップ?

なので、食事も好きです。いっぱいは食べれないけど。

 

7/9(土)~10(日)に初めてサポーターズ主催のハッカソンに参加させていただきました。

で、ハッカソンとはなんぞいというと、

ハッカソンは、ハック(hack)とマラソン(marathon)を組み合わせた造語とされ、 プログラマーや設計者などのソフトウェア開発の関係者が、 短期間に集中的に開発作業を行うイベントを指します。

です。

そう、がっつり情報系のイベントです。

何故、このイベントがあること知ったのって言うと、そりゃ調べたからという話なのですが、何故、機械系の僕が参加したかというと、「インターンの練習したい」、「なんか作りたい」って思ったからです。

(成果物発表して、アンケートに答えるとお金ももらえるしね)

という不純っぽい動機が個数としては7割弱あったわけです。

気持ちとしては、「なんか作りたい!」65%、「インターンの練習したい」20%、「ついでにお金欲しい」15%みたいな感じでした。

 

参加まで

という気持ちの割合を示すと僕はめちゃくちゃ何かを作れそうな人みたいになるので、それは誤解です。趣味で適当なものを作ったりはしていましたが、とてもとても自分以外に需要はなさそうなものばかり。世の人に使ってもらって便利となるものは作れてなかったのです。そして、忙しい毎日追われて開発からほど遠い日々を送っていました。

 

けれど、運よくインターンに受かりました、その時は凄く嬉しかったです。そのインターンハッカソン形式のアイデアを実装して形にするというインターンです。

そこで、僕は考えました「自分はインターンで使い物になるのか?」、「インターンの経験を吸収できるのか?」と。そして、考えた結果「ならんし、できん!」と思いました。こうなった僕は慌てて、開発をするイベントやら他のインターンやらを探し始めました。

その時見つけたのがサポーターズのハッカソンです。そこにはなんと、「ハッカソン初心者歓迎」の文字がありました。これだと思いました。

けれど、そこで僕は考えました。「就活のイベントもあるし、小テストもあるし、大変そうだし、やっぱなんか怖いし自分はやれるのか?」と。負のスパイラルに入る思考ですね。でも反対に、「楽しそう、どうせやるからやりたいな」という気持ちがありました。

そこで、「何も知らんままやらない選択をするのはもったいない」と思って、どんなもんかなと思って、サポーターズの勉強会に参加してみました。そこではサポーターズ社長(許可とか取ってないので、公開されてるけど実名は避けときます)ともう一人の方が講師としてIT業界でのエンジニアのキャリアやらエンジニアを目指す学生のレベルとかを分かりやすく解説してくれていました。

 

うん、面白いなー

 

となっていると同時にサポーターズ社長さんが「開発をしている人はレアキャラ」とか「上位相は好き勝手に作ってる」とか言ってるのを聞いてなんだかんだ、ちゃんと開発したことがないのがもったいない気がしてきました。そして、自分も作ってみたいという気持ちが凄くふつふつと高まってきました。

なので、そのまま勉強会の途中にハッカソンに申し込んでいました。(笑)

で、本当は「初ハッカソンなので、どういうこと勉強したらいいですか?」ってことを聞こうと思ったら、「楽しそうなので、申し込みました!」的なことだけ書いて、勢い余ってEnterキー押してコメントが流れていき、少し恥ずかしかったです(笑)

 

参加

そんなこんなで、ハッカソンに申し込み、翌日キックオフ。

ここでは、どういった形で参加するのかの事前のアンケートに答えるというのとどういうイベントなのかを教えてくれる会です。(このキックオフの直前にインターン合格連絡が来て飛び跳ねる程喜んでました。)

参加形態は大きく分けてしまうと「個人」か「チーム」の二つです。さらに、自分の開発に使いたい言語とか、テーマとか答えて終わりです。

 

後日チームが決まります。

で、アンケートに答えてさて、さっそくテスト勉強です!だらだらと余裕をかましている時間は無くなりました。(いや、のんきが過ぎる)

 

ということで、テスト勉強の傍ら、チームが決まりました。

僕たちのチームは5人チーム、そしてなんと一人の人以外みんな非情報系、そして、全員ハッカソン初参加というメンバーでした。

そんな僕たちのチームは「beginners」という名前になりました(笑)

(サッカーとYoutuber好きな人はオマージュが分かってくれるかも)

で、そんな僕たち5人は何をするかっていうことで、テーマを決めます。で、今回のテーマ5個ありました。

  • 開発/スキル支援
  • インフラ/セキュリティ
  • オンラインコミュニケーション
  • 世の中を楽しくする
  • ゲーム

です。この中から選んだのは「開発/スキル支援」です。だって、他よくわかんないしね!

ということで、作るものを決めていきました。

そこで、決まった製作物が「レシート管理アプリ」です。

経緯としてはチームの一人が、研究室でまとめて飲食物を買って、それを研究室内部で転売していたのです(笑)その転売の管理を自動化したいという思いの元開発物が決まりました。

開発物が決まったので、担当が決まっていきます。

僕は、画像から読み取った文字から必要な情報を取り出す担当になりました。

 

1日目

で、これからさらにハッカソン当日まで時間があるので、テストをこなして、Pythonの「Flask」を勉強してたら1日目です。

まず、全体で顔合わせします。チームの代表者が簡単にチームの説明します。最初の方は単騎の人ばかり凄い....

となりながら、僕たちのところは、とりあえず、僕が簡単に説明しました。緊張して結構暗くなってしまった。

 

ということで、開会式が終わって、さあコードを書きます。

まずは、「日付」の取得からすることにしました。これが意外と面倒でした。

何故かというと、画像から文字を読み取るので、文字化けします。そして、日付の入力って全部同じではないのです。曜日があったりなかったり、とか、「%Y/%m/%d」みたいな標準的な形だったり、「%Y/%m/%d %H:%M」みたいに時間と分まであったりとかイヤー色々あるわけですよ。

そして、画像から文字を読み込むので文字化けします。特に日本語それも画数多いやつって思ったら(木)が(本)になって曜日がとれないっていうこともあったり。もう、「うわーーー!」ってなりましたね。気付いたときは。

でも、結局解決できました。冷静に分析したら

  • %Y/%m/%d
  • %Y-%m-%d
  • %Y年%m月%d日

と時間と分の組み合わせだけでした。

なので、この日付と時間を強引にくっつけて、文字化けする可能性ある曜日は排除して、日付を取りました。

そしたら、うまくいきました。というところで、1日目の締めのミーティングです。

その後、他のチームの人と話す懇親会をして、チームでDiscordに集まって、連絡して、またやることを考えます。

僕の次の課題は商品の情報の取得です。しかし、時間はとうに9時を過ぎ、10時を過ぎどんどん眠くなります。そして、コードを書けないほど眠い。寝ました。

 

2日目

翌日8時に集合して、現状を確認しながら作業を再開します。眠くて、あんまり頭働いてなかったような気もしましましたが、徐々に眠気もなくなってまともにコード書けるようになりました。

ということで、商品の情報の取得作業をします。これは日付が出来たので、あと他の情報も応用が利きますね。

そう、出来ました。

しかし、時間がかかりましたね。分析する時間と精神力がいりますからね。まあ、それでも何とかやり通しました。

結果、「日付」、「商品名」、「個数」、「金額」という情報を取得できるようになりました。

でも、画像から読み取ったデータが文字化けしてるので、正しい入力は程遠かったですね。

そして、そこで僕の担当が終わったことと、ひとまず、結果を抽出できるという状態にこぎつけたので、優先順位の問題でバックの人がフロントにも回りました。

ちなみに僕はフロントほぼ触ってこなかったので、HTML内部でfor文を書けるのかも知らなかったのです。でも、ここでこそ競プロで培ったその場力の見せどころです。

「だって、プログラミングなんだから構造は一緒でしょ」という気持ちでfor文調べて実装しました。出来ました。

だけど、その他は手が回らずタイムアップ。

さて、発表資料の作成です。かろうじて、動くものが出来ましたが、問題多発で動画を載せるのは無理でした。

なので、画像をてんてこ舞いになりながら用意して、5人でひいひい言いながら1時間で発表時間2分のスライドを作ってました。

正直発表時間2分のスライド作るのは至難の業です。だって、2分だもん。何話すのよっていう話と、どう話したら伝えられるんだってことです。

まあでも、そこは、普段も発表資料が多くて、削らないといけない研究の発表資料の作成の時の経験とチームの協力で何とかストーリ性を保ちながら出来ました。

そして、発表もできました。(僕じゃなくて製作物のテーマを持ってきてくれた人が発表してくれたんですが)

結果は、残念ながら参加賞!(発表してアンケート答えるとみんな1,000円もらえるよ)

他の人強い、すごいってなりながら見てた。そして、発表資料も製作物も面白いものが凄く刺激的だった。発表資料は学会とかで絶対見ないし、使わないような奇抜なスタイルの物ばかりだし、2分の発表なのに分かりやすいしどれも面白かった。

ので、こういう風にかっちりしてるんじゃなくてエンタメの要素があるような場なら、インパクトがあって面白い資料を作りたいなと思った。なので、次回作ってやる!(笑)

 

感想

感想として実際どうだったのかというと、凄く楽しかったです!!

凄く濃い二日間でした。二日で18時間ぐらいコード書いてました。

めちゃくちゃ大変だったし、めっちゃ眠かったけど、出てよかった!

そしてまた出たいと思える凄くいいイベントでした!

サポーターズの運営の方々ありがとうございます!

また出ます!よろしくお願いします!

 

なので、まとめると趣味が一つ増えました!