P2HACKS 令和元年を開催しました!!

f:id:bob2525yokoyama:20191227000830p:plain

はじめに

先日P2HACKSという育成型ハッカソンを企画し,運営しました.学内開催にも関わらず参加者は50人を超え,スポンサー企業は6社集まりました!! 今回は,開催までのスケジュール感や私自身の運営に対するモチベーションなどをお伝えしたいと思います

p2hacks.c.fun.ac.jp

P2HACKSとは

P2HACKSは公立はこだて未来大学の学部3年次に行われるプロジェクト学習を控えた学部2年生をメインターゲットとした育成型ハッカソンです。プロジェクト学習を始める前にチームで開発する経験ができる他、サービスの考え方や技術力を身につけられます。また、P2HACKSでは先輩や企業の方々がサポーターとして皆さんをサポートします。大会の最後には、チームの表彰を行います。表彰されたチームには賞品を用意しています。
参加することで、プロジェクト学習、そしてその先の将来に活かすことを願っています。

ということです.一般的にハッカソンといえば,短期間でサービスやアプリを開発して競うイベントです.しかし,P2HACKSは育成型というスタンスであり,プレPBLという立ち位置です,狙いとしては,学部1年生や2年生のうちからチーム開発を経験し,その奥深さを体感してもらおうというイベントです. そして,今回が2回目となります.1回目の様子は,先輩のブログを御覧ください!!

pinkie-leader.hatenablog.com

期間

f:id:bob2525yokoyama:20191227000353p:plain

なぜこの日程なのか

スポンサー企業視点

  • 地方ならではだが,スポンサー企業が週便で東京に戻ろうとすると懇親会時間が満足に取れません.(函館発羽田行きの最終は,19時半です) そのため,最終日を発表+懇親会だけにしたいと考えました.

参加者視点

  • 初心者にとって.2日間でプロダクトを仕上げるのは難しいかもしれない.また,2日間では,方針転換が難しいとも考えました. そこで,1週間あれば,デバイスの購入や新しいことにチャレンジするのにも十分な時間があります.また副産物として,学校期間中であることから平日に大学でミーティングができることも考えました.

運営内訳

  • M2 2名
  • M1 1名
  • B4 3名
  • 教員 2名

運営は上記メンバで行いました.学生通しは普段からよく話すメンバであり,学年もバラバラであることからタスクの振り分けがしやすかったです.

メンター

当日参加者のサポートをしてもらうために,メンターを呼びました.内訳は上記の通りであり,フロントよりの領域を中心に幅広く招集しました.

スケジュール

  • 4月下旬:準備開始
  • 5月下旬:開催目的,ターゲット,開催日程
  • 9月上旬:エントリーフォーム作成,スポンサー募集開始,勉強会原案,懇親会会場予約
  • 10月上旬:エントリー開始,宣伝開始
  • 10月下旬:メンター募集,当日スケジュール調整
  • 11月上旬:メンター確定,ルーブリック原案,商品検討,お弁当・懇親会ごはん決定,スポンサー企業確定
  • 11月下旬:勉強会実施,スケジュール確定,商品確定

箇条書きではありますが,開催までのスケジュールは上記の通りです.反省点は,スポンサー募集を開始することが遅かったことです,夏前が良かったのかな...

ルーブリック

f:id:bob2525yokoyama:20191227000348p:plain

ルーブリックの特徴として学びと成長を評価する項目を考えました.結果として,ハッカソンの成果を評価する材料としては,難しかったです.なぜなら,参加者全員のピアレビューに目を通すには評価時間が 足りないことや,日頃の様子を見ているメンターや運営でなければ成長度合いを見ることができませんでした.ただ,評価項目として難しかったとしても,ピアレビューをすることに意味があると思うので,やってよかったと思ってます.

運営学生としての思い

以下,個人的な運営に対する思いです

これまで私は,多くの人に支えられてきました

bob2525yokoyama.hatenablog.com

developers.cyberagent.co.jp

bob2525yokoyama.hatenablog.com

ブログとして残したのは上記だけですが,それ以外にも家族や友達など本当にたくさんの方々です. そして,勝手な考えではありますが,この経験を後輩に還元したいと思うようになりました.還元するとは,機会と繋がりを後輩に渡すことです. 機会とは,P2HACKSのようなイベントです.自分が学部2年生当時のことを思い返すと,やる気だけはあるがどう頑張ったらいいかわからない・一緒に頑張る仲間が欲しいと思っていました.そんな時に参加したハッカソンでは,散々な結果に終わり非常に恥ずかしい思いをしました.しかし,その結果があったからこそ,今日の自分に繋がっていると思います.ぜひ,やる気はバッチリです!という後輩たちが,ステップアップする機会になって欲しいと思い,運営として参加しました.続いて繋がりですが,主に企業です.よく言われてる話ですが,地方学生のあるあるとして,東京への移動がしんどいだとか気軽に勉強会,カンファレンスに参加できなといった機械損失.さらには,そもそも各種イベント参加へのハードルといったものがあります.自分自身がそうだったので,気持ちはよくわかります.だからといって,時間は有限でありスピードが求められる業界です.そのため,今の自分ならイベントを企画し様々な企業のサポートを受けながら,大学にいながら企業と接点を持つことができる機会を提供できると考えました.

後輩へ

今回の経験を活かして,次のステップへ進んでください.全国レベルのハッカソンでもいいし,バイトでもOKです.春休みにインターンに挑戦するのもいいでしょう,そうやって,外の世界を知ってほしいなと思います.大学にすごい人はたくさんいますが,他大学や企業を見るとその何倍ものすごい人達がいます.ぜひ様々な経験をして,刺激を受けてください.そして,その経験を学校に持ち帰ってきてください.そうやって,次の世代へ貰う側から伝える側になってください!!

最後に

本イベントを参加するにあたり,大学やスポンサー企業,協賛企業様に大変お世話になりました.私自身は修論を仕上げて,来年からまたルーキーとして頑張っていきます!!

ETロボコン デベロッパー部門 アドバンストクラス 北海道地区予選に出場してきました

はじめに

2019年令・和元年の夏に,ETロボコン デベロッパー部門 アドバンストクラス 北海道地区予選に出場してきました.今回は,ETロボコンの説明と担当した箇所についてご説明します .

ETロボコンって?

公式HPには,開催目的として下記を掲げていました

技術教育機会の提供。5年後、15年後に世界をリードするエンジニアの育成を目指し、若手、初級エンジニア、および中級エンジニア向けに、分析・設計モデリング開発、製品サービスの企画開発にチャレンジする機会を提供する。

私はいくつかの競技内容の中から,デベロッパー部門 アドバンストクラスに参加しました.概要は下記の通りです.

プライマリークラスの経験者および応用学習者向け。技術を応用できるスキルを磨く機会を提供します。競技、コースの難易度が高いクラスです。競技の仕様変更にも対応します。

まとめると,共通のロボットを使用し走行タイムを競う競技です! 当日の様子は,Youtubeにアップロードされております.

https://www.youtube.com/watch?v=GSO2xvYsO6k

担当箇所

最終的な走行タイムは,コースを走行したタイムとボーナスタイムによって算出されます.私はボーナスタイムに関係するブロックビンゴを担当しました.ブロックビンゴとは,1から8までのブロックビンゴサークル上にロボットを用いてカラーブロックを運搬してビンゴを完成させるというものです.また,数字カードに対応するブロックビンゴサークル上に黒のカラーブロックを運搬すると,よりボーナスタイムを獲得できます

f:id:bob2525yokoyama:20190927225233j:plain

課題

ビンゴを完成させるためには,下記の課題を解決する必要があります

  1. カラーブロックが置かれている場所を把握する
  2. カラーブロックの色を識別する
  3. ボーナスナンバーを識別する
  4. 1-3をWebカメラから送られてくる動画を用いて行う

また,これらを高速かつ正確に行う必要があります.そこで,物体検出に強いCNNのうちYOLOを採用して解決することを目指しました.

解決方法

YOLO

YOLOについて

YOLOは,Redmonらが提案した物体検出アルゴリズムです.YOLOは始めに,入力画像をS*Sのグリッドに分割します.次に各グリッドのセルに対して,バウンディングボックスの座標とそれが物体である度合いを示すスコアを予測します.これと同時に,バウンディングボックスに対する条件付きクラス確率を算出します.これらの結果を組み合わせることにより,バウンディングボックス,クラス名,クラス確率を出力します.このように物体の検出と識別を同時に行うことにより,処理の高速化を実現しています.これまでにYOLOは,初期版のv1,精度と速度を向上させたv2,少し速度を落とした代わりに精度を向上させたv3が存在します.これらのうち,v3を使用してモデルを作成しました.

データセット

機械学習はデータセットの作成が本当に大変です.一言でいうとまんべんなく正解とするデータを集める必要があります.色々な参考書を読んだり,論文・記事を読みながらチームメンバと考えました.その結果,下記のようなデータセットが仕上がりました.

  • 当日を想定したアングルで撮影した画像と,汎化性能を向上させるための画像が半々.
  • 各クラス元画像は約300枚ずつ
  • かさ増し方法はガンマ補正,コントラストの調整,平滑化・ガウシアンフィルタ,ヒストグラムの均一化
  • 最終的な枚数は,各クラス2700枚

具体的な収集方法ですが,愚直に1枚ずつ撮影するのでは気が遠くなります.そこで,半自動的にデータセットを作成するツールを開発しました.ツールの概要は下記のとおりです.

f:id:bob2525yokoyama:20190927225358p:plain

これにより,作成のコストが大幅に低下します.コツはいくつかありますが,最も心がけたのは「不適切な結果を削除する」ことです.中途半端なモデルを用いて検出された結果ですので,ノイズや不正解が多く含まれます.ここで注目すべきは,正解ではあるがスコアが低い結果です.下記は,人間の目で見れば正解だと分かります.しかし,その時点でのモデルでは,3割ほどの自信しかないのです.つまり,このような結果こそウィークポイントであり,学習が足りない正解データだと考えました.

f:id:bob2525yokoyama:20190928132521j:plain

ハイパーパラメータ

ハイパーパラメータは下記の通りです.

ブロック

項目
クラス数 8
フィルター数 39
最大イテレーション 1000
バッチサイズ 64
訓練とテストの比率 7:3

ボーナスナンバー

項目
クラス数 5
フィルター数 30
最大イテレーション 10000
バッチサイズ 64
訓練とテストの比率 7:3

YOLOの作者によると,最大イテレーション数はクラス数*2000がよいとされています.しかし,何度も繰り返した結果,ボーナスナンバーは700~850の間で収束し,カラーブロックは2500付近で収束していたため,今回はこのような値にしました.

モデルを評価した結果

ブロック

Iteration TP FP FN map iou f recall
500 1066 3989 13427 10.15 13.69
600 3482 4710 11011
700 8110 9987 6383
800 10251 10285 4242 56.3 33.07 0.59 0.71
900 12182 7128 2311 77.94 43.52 0.72 0.84
1000 12166 3471 2327 81.53 55.37 0.81 0.84

f:id:bob2525yokoyama:20190927231206p:plain

ボーナスナンバー

Iteration TP FP map iou f recall
800 1231 1209 56.22 33.27 0.6 0.73
810 878 1154 47.44 28.47 0.47 0.52
820 1286 589 76.34 46.14 0.72 0.76
830 1385 728 70.45 43.51 0.73 0.82
840 1358 834 77.77 41.63 0.7 0.8
850 1395 645 73.52 45.13 0.75 0.83

f:id:bob2525yokoyama:20190927231224p:plain

上記の結果から,ボーナスナンバーは820,カラーブロックは900を採用しました.ところがここで,悲しいお知らせがあります.実は自分のチームは去年もYOLOを使っており,今年のモデルは去年のモデルの7割程度の精度しか出せませんでした....データセットやかさ増し方法,設定ファイルも引き継がれたのですが,去年の再現すら出来ず..何が足りなかったのか...

感想

正直,去年のモデルを超えられなかったことは悔しいです.去年のメンバに聞いても,「渡した以上のことはしていない.どんな魔法があったのか...」とww ちなみに数字カードとカラーブロックのモデルを分けた理由ですが,単純にデータセットの数が大きく異なり,同一のモデルとして作成するのが困難だったためです.なら,同じにしろよーと言われそうですが,ボーナスナンバーは見え方が固定されていることから,データセットが少なくてもOKだと考えました.もっと言うと,数字カードの識別にYOLOが必要?と言われそうですが,多分不要です.頂点を検出してアフィン変換やホモグラフィ変化を行った後に,特徴点による類似度算出でもいけそうです.ただ,今回は「機械学習を使うと評価を高くつけます」という事前アナウンスがあったため,YOLOを使用しました.

結果を補完・調整する

前処理

まず,検出前に行った前処理について説明します.

前処理 実施したか
ガンマ補正 NO
輝度のヒストグラム平坦化 YES
鮮鋭化 / アンシャープマスキング NO
背景差分 NO
平均画像 YES

ガンマ補正:全体的な明るさを調整すれば,精度があがるか?

ヒストグラムの平坦化:試走会2の結果を見ると,カメラ動画全体に明るさにムラがあった.なので,ヒストグラムを平坦化してならしてみたい.ただし,equalizeHistはグレー(一次元のみ)なので,YCbCrに変換してY(輝度)を当ててやる必要がある

背景差分:ブロックが置かれていない画像を背景情報として使用すると,上手く行けばブロックや数字のみを抽出して検出精度を挙げられるかもしれない

鮮鋭化 / アンシャープマスキング:カメラ動画はボケボケ.特に遠くのブロックは境界線が曖昧に映っている.そこで,鮮鋭化 / アンシャープマスキングを行ってやるとシャープネスにできるので,もしかしたら精度向上に繋げられるかもしれない

平均画像:1枚の画像に比べて,ノイズが低減され精度があがるか?

という仮設の元試した結果,輝度のヒストグラム平坦化と平均画像を採用しました.実施しなかった処理のうちガンマ補正と鮮鋭化は,見え方が完全に異なる状態になってしまい,逆効果となりました.背景差分に関しては,2値画像に対して行わず他の手段も試すべきでした.事実,HSVに着目して背景差分を行っていたチームもいました.

課題

作成したモデルを使っても誤検出・識別することが多々あります.加えて,検出数が足りないこともあります.今回の場合,極端な話精度100%が求められます.そのため,YOLOによる結果を補完・調整する必要がありました.これらをするに辺り課題は下記の通りです.

  • 検出漏れのブロックを拾う必要がある
  • 誤識別した色を調整する

課題

作成したモデルを使っても誤検出・識別することが多々あります.加えて,検出数が足りないこともあります.今回の場合,極端な話精度100%が求められます.そのため,YOLOによる結果を補完・調整する必要がありました.これらをするに辺り課題は下記の通りです.

  • 検出漏れのブロックを拾う必要がある
  • 誤識別した色を調整する

(ボーナスナンバーについては,補完する手段が思いつかなかったので割愛します)

課題の解決方法

本番は1分間のキャリブレーションタイムが設けられます.この時間を利用して予めブロックが置かれる場所に点を打ち,点の色情報を利用しました. まず,打った点とカラーブロックを対応付ける方法をご説明します.

  1. 打った点が,検出したバウンディングボックスの内側に存在するか調べる
  2. 内側に存在する場合,対応付ける
@classmethod
    # 対応付け
    def _association_logic(self, color_object_model, calibration_model):
        # YOLOで検出したオブジェクトを囲む短形を作成
        rect = np.array(
            [
                [color_object_model.left, color_object_model.top],
                [color_object_model.left, color_object_model.bottom],
                [color_object_model.right, color_object_model.bottom],
                [color_object_model.right, color_object_model.top],
            ]
        )

        if (
            # 座標が四角形の内側にあるかどうか
            cv.pointPolygonTest(
                rect,
                (calibration_model.position_x, calibration_model.position_y),
                False,
            )
            >= 0
        ):
            calibration_model.model = color_object_model

続いて,誤識別を調整します.誤識別は赤と黄に多く見られたため,下記のようにしました.具体的には,予め赤色と黄色を定義しておき,3次元の2点間距離を使用しました.

class FixColor:
    white = [255, 255, 255]
    red = [5, 5, 60]
    blue = [72, 51, 25]
    yellow = [0, 70, 100]
    green = [39, 57, 24]

# 色の誤識別を修正する
def fix_color(self, object_models):
    for object_model in object_models:
        # 中心位置取得
        center = tuple(
            np.array(
                [
                    int(object_model.clip_image.shape[0] * 0.5),
                    int(object_model.clip_image.shape[1] * 0.5),
                ]
            )
        )
        try:
            # opencvはbgr
            r = int(object_model.clip_image[center][2])
            g = int(object_model.clip_image[center][1])
            b = int(object_model.clip_image[center][0])
            vec_a = np.array([b, g, r])

        except Exception as e:
            print(e)
            return object_models

        distance_red = np.linalg.norm(vec_a - self.fix_color_lists.red)
        distance_yellow = np.linalg.norm(vec_a - self.fix_color_lists.yellow)
        if object_model.class_id == 2:  # 黄
            # 3次元の2点間の距離を算出し,短い方の距離に修正する
            if distance_red < distance_yellow:
                object_model.class_id = 0
                object_model.label = "red"
            else:
                pass
        if object_model.class_id == 0:  # 赤
            # 3次元の2点間の距離を算出し,短い方の距離に修正する
            if distance_red > distance_yellow:
                object_model.class_id = 2
                object_model.label = "yellow"
            else:
                pass

    return object_models

最後に,検出漏れのブロックを拾います.これについても,同様に予め色を定義しておき,3次元の2点間距離を使用しました.

結果

結果の例をいくつかご紹介しておきます.

f:id:bob2525yokoyama:20190928010630p:plain

f:id:bob2525yokoyama:20190928010116p:plain

感想

補完・調整方法としては,悪くなかったと思います,ただし,色の定義はもっと色々考えていました.例えば,様々なケースで獲得した結果からSVMを作成するとか,連立方程式からRGBを求めるなどです.ん〜時間が足りなかった!!

当日結果

1本目:検出・識別結果
  • ボーナスナンバー識別 ×
  • ブロックサークル上の黒 ×
  • その他 OK
2本目:検出・識別結果
  • 1つだけ青を緑と誤識別
  • その他 OK

当日を踏まえてこうしてたら良かったなと思ったこと

数字識別

CNNではなくて,特徴点やテンプレートマッチングの方が良かったと思います.全く検出されないということは一番マズイです.CNNでやるにしても,照明の当たり方によって,ボーナスナンバーが欠けて見えるというケースも考慮すべきでした.

ブロック検出,識別

当日のご識別は,補完・調整方法によるものではなくYOLOそのものによる誤識別なので,データセットをより潤沢にすべきだったと感じました.また,複数の補完・調整方法を用意しておき,当日の環境に応じて適切な方法を選択することも視野にいれるべきでした.

総括

 M2にしてETロボコンへ始めて参加しました.さらには,全期間を通して研究・学会発表と並行して準備,本番が行われました.正直な感想,地獄です.ただ,研究とロボコンの担当箇所の分野が被っていたことから,やりやすく片方で得た知見をもう一方に活かすということが出来たので良かったです.加えて,モデリング作業は,今後のエンジニア人生に対して確実にプラスとなりました.特に,1つの課題に対して順序立てて解決するフローは,全てに応用できる経験だと思います.また,機械学習・画像処理についても勉強できたと思います.

 個人的な反省点は,アルゴリズムや様々な変数の値を変えて調整できるように,ドキュメントを詳細にまとめておくべきでした.また,クラス間もより疎結合にして,単体テストをしやすいようにすべきでした.ただこれらは反省点であるものの,日頃興味関心を持って勉強している箇所であったことから,自分なりによくできた箇所でもあったと思います.

(後半投げやりな文章になってしまったので,後日修正するかもしれません)

文献

Web系内定者である地方大学生が伝えたい5つのこと

対象読者

  • 就職活動を始めようとしている人
  • 夏のインターンを探し始めている人
  • Web系を志望している人

自己紹介

  • 北海道の地方大学卒・大学院生
  • 2020卒
  • 大学からプログラミングを始めた
  • iOSエンジニア
  • 内定獲得数:1社

経歴

  • 1年~2年
    良くも悪くも真面目な学生.学校の課題をコツコツこなし,さらに,積極的なインプット・アウトプットはしていなかった.(後悔度合いが高いです...)
  • 3年
    PBLを通して,アプリ開発に着手し始めました.そもそもPBLとは,実在するニーズやクライアントの要求に対して,学生自身が要件定義から実装,リリースまでの活動を通して,問題解決能力などを養う実践的な学習です.このころから,インプットとアウトプットをし始めました.また,逆求人を知ったのもこの時期です.
  • 4年
    卒業研究と仲良くしながらiOS分野に興味を持ち,小さく手を動かすようになりました.また,逆求人サービスに登録し,面談を始めたのもこの時期です.その結果,19卒向けのインターンに参加することができました.
  • M1
    ~夏期(インターン)
    4月の頭からインターンを探し始めました.本当にサポーターズ・キャリアセレクト・逆求人ナビにお世話になりました.なぜなら,逆求人を通して自己分析・仲間づくり・企業さんとの繋がりを持つことができたからです.結果的に,2社のインターンシップに参加しました. bob2525yokoyama.hatenablog.com
    ~春期(本選考)
    10月の下旬に,もう一度逆求人に参加しました.その後,12月ぐらいから本選考へエントリーし始めました.結果的に7社ほどエントリーし,ありがたいことに第一希望から内定をいただくことができました.

就活

何を軸にしていたの? 就活を進める上で,必要になってくるのが軸です.この軸がはっきりしていないと,志望業界や動機・何がしたいのかなど様々な要素がブレていきます.自分の場合は,以下のことを軸にしていました.

  1. お給料・福利厚生
    理由は言うまでもないでしょう.ただ,あえて理由をあげるのであれば,借りている奨学金の返済を考えた時に,どのぐらいの額が欲しいのかを考えたことでしょうか.
  2. 働いているイメージを持てるか
    具体的には,上司や同期になりうる方々とお話した時に,その会社に毎日行って,働いているイメージを持てるかということだと思います.しかし,現実的にお話しするだけでは,イメージを持つことは難しいと思います.そこで鍵になってくるのが,インターンシップです.インターンシップには様々な種類がありますが,就業形をオススメします.ただし,初めてインターンに参加するのであれば,別の種類をオススメします.ちなみに就業形のインターンに参加した時の感想はdevelopers.cyberagent.co.jpに書いてあります.
  3. 自分の思い描くキャリアパスが実現できそうな環境か
    就活をする上で,近い将来や5年後に,自分がどうなっていたいか考える時期がくると思います.実際私も考えました.その結論を面接時などに伝えた結果,認めて応援してくれるカルチャーがあるかどうかを見ていました.

最終的な決め手は?

働いているイメージをどれだけ持てるか,この軸をもとに結論を出しました.

苦労したことは?

いろいろありますが,いくつかピックアップして書きます.

  1. 自己分析の進め方
    正解もゴールもなく,流動的に変化していきます.また,個人で行うのには限界があると感じました.したがって,友人や先輩,逆求人のお姉さん,企業の方々と進めていくことをオススメします.
  2. 研究とのバランス
    院生あるあるですね.学生の本分は勉強です.つまり,大学院生であれば研究ということになります.しかし,地方在住かつWeb志望となると,多かれ少なかれ東京との往復は避けられません.また,研究の進捗や研究室の制度によっては,インターン等の課外活動への理解が得られない可能性があります.(ありがたいことに,私が所属する研究室は,やることやっていればいいよスタンスです)そのため,早期から動き出すことが大切となってきます.
  3. 北海道と東京の往復
    さきほども書きましたが,地方在住であれば仕方がないことです.と言いつつも,金曜の終便で飛び,月曜の始発で帰ってくるという生活は,非常に辛かったです.
  4. 周りの学生との比較
    これは常について回りました.特に12月以降になると,既に内定が出ている友人もちらほら出てきていて,焦り始めていた記憶があります.早くもらった人が勝ち!というわけではありません.それはわかっているのですが,辛かったですね....

伝えたい5つのこと

さて,ここまで来てようやく本題?です.

  1. 早く動こう
    Web業界に限らず,就活は想像を絶する速さで進みます.インターンの募集は,今(5~6月)がピークです.本選考は会社にもよりますが,12月頃には選考ページがオープンするでしょう.
  2. 仲間を作ろう
    インターンや就活期を一人で乗り切ることは,正直厳しいです.そのため,同じような業界を志望する仲間を見つけることをオススメします.仲間がいることのメリットが言うまでもありません.おそらく知りたいのは,どこで見つけるか?ということだと思います.それこそ,逆求人や好きな技術のカンファレンス,インターンシップなどがオススメです.
  3. 学生カードを使い倒そう
    学生カードは非常に強力です.技術系のカンファレンスであれば,学生向けのスカラーシップがあります.インターンシップでは,お金をいただきながら圧倒的成長ができる環境に身を置くことができます.就活においても,逆求人を通して支援金をいただけます.
  4. 逆求人を利用しよう
    また言うのかと思われそうですが,逆求人を利用することを強くオススメします.下記に私がお世話になったサービスを示します.
    • キャリアセレクトcareerselect.jp
    • 逆求人ナビwww.studenthunting.com
    • サポーターズsupporterz.jp
      どれがオススメ?と思うかもしれませんが,全てオススメです.なぜなら,3社それぞれに強みがあるからです.また,中の人の雰囲気も異なります.そのため,全てにお世話になった上で, 自分に合ったサービスを選択してください.
  5. アウトプットをしよう
    大小なんでもいいです,とにかく手を動かしてください.ただし,下記のことを意識しておくといいと思います.
    1. 何故勉強しようと思ったのか?
    2. 何を参考にしたのか?
    3. つまずくポイントはどこか
    4. どのようにして解決したのか
    


    これらをQitta等に投稿するとバッチリです!

(今更ながら)VOYAGE GROUPのTreasure2018に参加してきた話

書き手

  • 名前:ぼぶ
  • どんな人:普段はエンジニアを目指して函館で学生をやっております
  • 好きな言語:Swift, go

執筆した経緯

簡単なお話です.ブログ執筆してみたいな〜て思っていたけど...という自分に対して,インターンの参加記録は書きやすい内容であったからです.
何より,Treasureはあまりにも激アツなインターンであったからです!! しかし,激熱がゆえに下書きで止まっていました(ごめんなさい..) 就活前に,仕上げてしまいます!

Treasureとは?

voyagegroup.com

VOYAGE GROUPが提供するサマーインターンの1つです .
概要は,以下のとおりです(引用させていただきました)

Treasureのテーマは「Go言語を使って学ぶ、価値のあるもの創りとチーム開発」
自分が作りたいもの、という視点だけでなく、実際に使うユーザー視点を持ちながらスモールスタートで無駄なく開発のサイクルを回していくためにはどうしていったらいいのか?チーム開発を加速させるトップエンジニアの考え方や習慣とは?プログラミング経験者が一同に集まり、最先端のフィールドで活躍するトップエンジニアの指導のもと、たった三週間で、「エンジニア」として研ぎ澄まされていく自分を体感するだろう。

何が言いたいかというと,「圧倒的に強い現場の方々に囲まれながら,最高の環境で成長できる」そんなインターンです
インターンの構成は,講義+チーム開発の計3週間です

参加するまでの経緯

今の自分の課題の一つとして,一人でサービスが完結できないという問題があります.swiftを使って何となくモバイルは書けるが,サーバーサイドは何もできません.そんな中学校のイベントにて,Treasureを知りました.そのイベントにてVOYAGE GROUPは,「Treasureは日本で一番熱いインターン」だと自負していました.正直,「どれだけ自信あるんだよ」と思ってしまいました.ただ,これは次の一歩を踏み出すいい機会なのでは?と思ったので,エントリーしました.

事前課題

インターンが始まる前に,多種多様な事前課題がありました. - Goによる簡単なサーバーの構築 - GitHubAPIを叩いてみる - DB設計 - セキュリティ どれもただ解くのではなく,なぜその解答なのかといったところまで求められました.

インターン内容:前半

講義:Go
講義:React
講義:API設計
講義:セキュリティ
講義:DB設計
講義:スクラム
講義:チームとは
講義:アイディアソン

上記の通り,フルコースのラインナップでした.また,そのどれもが現場のトップエンジニアの方々が講師として参加したことに加えて,何十人ものメンターのバックアップが常に付いてくださったので,ゴリゴリ質問しながら取り組むことができました.

チーム開発

常に,メンターが3人(人事1名・エンジニア2名)がついてくださり,安心しながら進めることできました.正直,メンバー5人に対してメンター3人は激アツで す!他のチームも同様でした.
実際の開発では,アイデア出しから難航して,開発期間の1/3は費やした記憶があります.かかった原因は,メンバーが得意とする市場から考えなかったことだと思います.旅行や音楽,恋愛など様々な市場を対象にして考えました.しかし,これだ!というサービスにはたどり着きませんでした...しかし,ボツ案を良く見ると共通項目として”応援”があることに気が付きました.ここから,作家志望の方・声優志望の方・早い時期から作品をキャッチアップしたいヲタクを繋げるサービスに繋がりました.
 システム開発までの経緯として,アイドルファンが運営に参加する事例(選挙,メンバーの選定など)が増えていることに注目しました.この時流を声優業界や作家業界にも適応できると考え,開発しました.コンセプトは「みんなでつくる」です.会員登録さえしてしまえば,台本を投稿することも声をあてることもできます.全員で一つの作品を作っていく過程を楽しむサービスです.
 自分は主にマネジメントに注力を注ぎました.いかにしてメンバーのパフォーマンスを120%出すのか,そこを意識していました.

最後に

あれから半年くらいが経過しようとています.Treasureで学んだことは.その後のハッカソンや研究開発において活きています.実際,参加していなかったら研究で開発しているサービスのAPI設計やDB設計をどうしていたんだろう??とゾッとします これから就活も佳境を迎えます.厳しい戦いですが,しっかり戦い抜こうと思います.(まずは,研究を落ち着かせること)

Wantedlyのスカラーシップ枠でiOSDC Japan2018に参加してきました!!

iwillblogと宣言したので,ブログを書きます!!
8月30日から9月2日に行われたiOSDC Japan2018に参加してきました!!  ちなみに,この記事がはてなブログ初投稿です 

iOSDCって??

f:id:bob2525yokoyama:20180902001131j:plain

iosdc.jp

iOSやswiftを中心としたテック系のカンファレンスです!!今年は,前夜祭+3日間の計4日間開催でした!!
タイムテーブルは↓

タイムテーブル | iOSDC Japan 2018 - fortee.jp

自分はインターンの期間とかぶっていたため,2日目から参戦しました!!
会場に入って受付を済ませると......

ミスドがたくさん...

どういう経緯で参加??

Wantedlyさんが募集していた学生スカラーシップ枠で,参加させていただきました!!

www.wantedly.com

Day3

オープニングムービー

www.youtube.com

iOSDC Japan 2018 会場 & 企画説明

www.youtube.com

iOSDC Japan 2018 スポンサー紹介

www.youtube.com

www.youtube.com

すごく作り込まれた動画たちだ......!!!
去年の参加者であり今年のスピーカーの1人である @n_atmarkさんによると,去年に引き続きミサトさんでした!!
素直に感動〜〜〜〜(泣)

オープニングの後は,さっそくセッションが開始!!
自分は以下のセッションをきいてきました!!
- In-App Purchase再考 ーサーバサイドエンジニアの運用経験と他決済手段との比較を添えてー - 二癖くらいある画面収録からの生放送 - Charles でネットワークデバッギング - Plasma - gRPC streamを利用したリアルタイムなユーザー体験 - 5000行のUITableViewを差分更新する - State of the Union ~2018年のアプリ開発事情~

特に印象に残っているのは,@huinさんのState of the Union ~2018年のアプリ開発事情~です
ひたすら新しい知見を得ましたね〜〜〜

上記のことを胸に刻んで,やっていきます!!
もう一つは,@kumamo_toneさんのCharles でネットワークデバッギングです!

API から何が返ってきているかわからない」「色々なパターンの返り値の表示を見てみたい」といった経験はないでしょうか?

インターンgolangを触った直後ということもあってか,自然と興味がわきました.

Day3 番外編

参加者に無料で提供されたランチが....すごい!!!

更には.....WantedlyさんによるReactorKitのライブコーディング!!! 圧倒的なスピード感に,「なるほど!よくわからん」という感じでした..

github.com

githubで公開してくれています!!神!! 読み込んで理解するぞ!

Day3 LT

セッションが終わった後は,お酒片手にLT会!!

印象に残っているのは,@koooootakeさん!!

自分の感想は,以下の通りです...

発表のテンポが良く,内容もスッと入ってきました. 自分もあんな風にプレゼンがしたいです...!!

懇親会

インスタ映えだ〜〜〜〜〜〜〜   f:id:bob2525yokoyama:20180902000700j:plain f:id:bob2525yokoyama:20180902000650j:plain f:id:bob2525yokoyama:20180902000454j:plain f:id:bob2525yokoyama:20180902000552j:plain f:id:bob2525yokoyama:20180902000611j:plain 豪華で美味しいディナーでした!!

Day4

最終日の朝も豪華!!

ランチももちろん!!  

自分は以下のセッションをきいてきました!!

  • iOSマイクロインタラクション入門
  • プロトコルを使って複数サービスを跨いだmusic playerを実装する
  • iOSエンジニアのための、SwiftからPythonのライブラリを使って機械学習する方法
  • iOS アプリの開発速度を70%高速化したデバッグノウハウ
  • あえてWebエンジニア以外の人に聞いてほしいWebRTCの話

最終日も知見しかなかったです..!! 特に,@koga_wiwiさんの iOSマイクロインタラクション入門と,@orga_chemさんの iOS アプリの開発速度を70%高速化したデバッグノウハウは”まさにそこが知りたかったんです!!”という感じでした!   今後ずっと仲良くしていきたいお話だと思うので,少しずつ理解していこうと思います!

最後に

2日間を通して,ひたすら知見を得ることができました!!
創作意欲が湧いてくること湧いてくること! この気持を忘れずに,次へ!!

@koga_wiwiさんによって,スライドがまとめられています!   いつでも見れる〜〜〜!!

qiita.com