カブクエンジニア開発合宿に行ってきました 2020冬

2020/01/28
このエントリーをはてなブックマークに追加

おはこんばんちわ、カブクの足立です。
前回から約半年と2ヶ月、第7回目となるカブクエンジニア開発合宿に行ってきました。
本記事では信州たてしな観光協会様にご協力いただき実現した開発合宿体験記をお届けします。

信州たてしな観光協会現る!

開発合宿ブログを綴り続けてはや7回目。なんと信州たてしな観光協会様から「立科に開発合宿にいらっしゃいませんか?」とのお誘いの連絡を頂きました。

そういう波には前のめりで乗っていくのがカブクのエンジニアチーム。
「そうですねぇ、、、話だけでも聞いてみましょうか(めっちゃ行きたい!)」と2つ返事で事が進み始めました。

「2泊3日で立科を満喫してください!」
「蓼科牛のステーキがおいしいですよ!」
「夜は凍った湖の上でキレイな星空を鑑賞できます!」
「雪上乗馬体験で自然を満喫できます!」
「スキー場が徒歩1分です!」
※立科の嘘偽り無いPRです

と立科の魅力を沢山ご提案頂いたのですが、落ちついていこう、まだあわてるような時間じゃない。
開発合宿なので開発がメイン。
開発ができる環境なのかがまず大事。

カブク開発合宿で抑えるべきポイントは次の7点。

  1. 東京近郊から電車で2時間以内
  2. WiFi完備
  3. 当日チェックイン前から開発で使える会議室がある
  4. 翌日もその会議室を使って開発できる
  5. ご飯が美味しそう
  6. 温泉があると尚良
  7. プロジェクター、ホワイトボードがあると尚良

今回、お世話になった「蓼科荘」さんは温泉こそなかったのですが、それ以外は全て兼ね備えていました。
移動に関しては東京駅から佐久平駅までは新幹線で、そこからは送迎バスに乗り継ぎがあるので、少し手間ではありますが、トータルで2時間以内なので許容範囲内です。

※「たてしな」には「立科」「蓼科」「たてしな」などの表記がありますが本レポートでは固有名詞を除いて「立科」と表記します

テーマとルール

テーマとルールはずっと変わっていません。

テーマ

ちょっと先の仕事に役に立つかもしれない何かにチャレンジする。
(個人にとって)新しい技術を楽しみましょう的な感じ。

ルール

1: 就業時間を守る
ハッカソンみたく、深夜まで追い込んで何かを作り上げるということはしません。
限られた時間で最大の成果を目指します。これがいつものカブクのやり方です。
参加者同士の懇親も大事にしたい。残業無し!

2: 発表する
必ず成果を発表する。
大切なのは手を動かしてチャレンジすること。
手を動かして初めて得られる知識がエンジニアの肥やしになると考えています。
発表は資料を作っても、作らなくてもOK。
聞く人に伝われば問題ありません。
合宿時間は短いので、時間を効率的に活用できるのがBEST。

3: 自由参加
自治と自由を重んじるカブクですので、参加も自由です。

場所

前述の通り、蓼科荘さんです。
開発環境として最も大事なWiFiは施設全体に10〜30Mbpsの通信速度が出ていましたので、ストレスのないインターネット環境でした。

朝食・昼食・夕食はすべて開発部屋に持ってきてくださるとのこと。
特に昼食の移動は時間を取られるので、できるだけ近場で済ませられると良いと経験的に分かっています。
ですので、すべて同じ場所で済ませられるのは時間を効率的に使えて良かったです。

コンセントタップやブレストするためのポストイット、模造紙、ペン(複数色)などあると嬉しい小物・文具まで揃えていただいて見知らぬ場所でも何不自由なく開発に取り組めました。
もちろん、発表のためのプロジェクターやスクリーン、ホワイトボードも完備。
無料のコーヒーやお茶が常備されているのも嬉しい。

となりのカフェバーとホテルがつながっているので、夜の懇親会は良い雰囲気でまったりワイワイ会話が盛り上がります。

スケジュール

今回、信州たてしな観光協会様より「撮影に協力したら割引サービスあり」とのご提案を頂きましたので「是非お願いします!」。
乗れる波はなんでも乗っていこう!
ということでいつもの合宿に観光要素が追加されたため、スケジュールがちょっと過密になりましたw

1日目の朝の開発時間を長くするため10時に現地入り、2日目午後に観光があるため7時起床にして、いつもと同じぐらいの開発時間を確保できました。

01月23日
07:52 – 09:08 / 東京駅→佐久平駅バスで送迎
09:20 – 10:00 / 佐久平駅→蓼科荘
10:00 – 18:00 / ランチ、開発
18:00 – 18:15 / 翌日の発表順決めと部屋決め
18:15 – 18:30 / 部屋へ移動
18:30 – 20:00 / 夕食、お風呂
20:00 – 20:30 / 星空鑑賞+凍った湖に乗る体験
20:30 – / Free(懇親会、お風呂)

01月24日
07:00 – 07:30 / 朝食
07:30 – 11:00 / 開発
11:00 – 12:30 / 発表、ランチ
12:40 – 14:50 / 移動、モンゴル乗馬
14:50 – 15:40 / 移動、道の駅でお土産購入
15:40 – 16:10 / 佐久平駅に移動
16:46 – / 佐久平駅→東京駅

1人発表と質疑合わせて7分としました。
※いつも発表途中から質問が出るので、今回からトータル時間で管理

いつもの通り全員ほとんど違うテーマに取り組みました。
今回の参加者は全員で10名。レベルの高い10個の異なるテーマに集中して取り組んだ成果を一気に楽しめるのが合宿の醍醐味。本当に楽しい。
カブク開発合宿は知らなかった技術に沢山出会える場。

フォトレポート

(※カブク開発合宿2020冬のtogetterを見ていただくと臨場感のある合宿風景をよりお楽しみいただけます)

集合場所は佐久平駅です


信州たてしな観光協会の方がお出迎えしてくれました。こういうの嬉しい!


佐久平駅のある佐久市は北斗の拳の原作者、武論尊氏の故郷とのことで、北斗の拳35周年の色々を楽しめるようです。


冬の信州ということで、約1名の装備が本気です。いや冬山合宿なのだからこれが正装!
早速、送迎バスに乗り込み、合宿会場の蓼科荘さんへ。


バス移動中も開発合宿なのです!

会場に到着


※写真は翌日早朝に撮影したものです
バスで30-40分で蓼科荘さんへ到着です。


ここが合宿会場となる座敷です。
椅子+机と机の2パターンがあり、20-30名ぐらいなら収容できそうな会場を10名でゆったりと使わせていただきました。

開発スタート!


早速、開発開始。手慣れたもので淡々と開発環境をセットアップして各々開発スタート。


屏風で仕切られた集中コーナーも準備されており、ガッツリ開発に取り組めます。

ランチ


会場に昼食の御膳を持ってきてくださるので、時間ロスなく昼食をいただけるのはありがたい。
トンカツ、ニジマスのお刺身、小鉢とボリュームも申し分なし。
美味しいです!


昼食中もAPIリファレンスのチェックに余念がありません。

Day1開発終了


ホワイトボードで恒例の「明日の発表順」と「部屋割り」をあみだくじで決めます。これ意外と盛り上がるんですってw

夕食


残業禁止合宿なので、夕食のタイミングから各々好きなものを飲み、お食事を楽しみます。
幻の牛すき焼き、ニジマスの塩焼き、馬刺しと夕食も豪華です。


夕食後はお風呂に入ったり、ゲームしたり各々懇親を深めます。


最後はみんなが集まりホテルにつながった雰囲気の良いカフェバーで会話を楽しみました。

Day2


朝食もこの通り、美しい御膳で美味しく頂きました。


1日目はあいにくの雨で、夜に予定されていた星空鑑賞と凍った湖に乗る体験ができませんでしたが、2日目は晴れそうだということで、急遽、朝食後に凍った湖(女神湖)の上に乗る体験へ!
全力でEnterキーを打鍵(打拳?)しても氷は割れません。
※許可を得て凍った湖に乗っています

最後の追い込み


女神湖から帰ってきたらイッキに最後の追い込みです。
集中!集中!集中!

発表とランチ

いよいよ発表です。発表の途中でランチとして「蓼科牛のハンバーガー」を持ってきてくださり、これを頂きながら発表を聞きます。


このハンバーガーがまた美味しいんですよ!

今回は一人の持ち時間は7分です。
発表中に質問も飛び交いますが7分でキッカリ交代です。
時間の超過は何故か部屋に置かれていたマラカスとタンバリンで知らされます。

DXFパーサを作る


DXFという設計図面用のデータフォーマットがありますが、既存のパーサは勝手にデータコードを捨てたりして、もやもやしていたのでロスレスなパーサを書きたい気持ちが芽生えた。

やせたい


やせるためにリングフィットアドベンチャーを開始。ゲームはデータのビジュアライズが弱くモチベ維持に難があるので、トレーニング結果のスクリーンショットをGoogle Vision APIで画像・文字認識。抽出データを成形してスプレッドシートでデータ管理・ビジュアライズできるようにした。

機械学習を簡単Web化してフィードバックを得たい


機械学習は試行錯誤の連続なので、ユーザから早くフィードバックを得られるよう、Webサービス化してみた。
馬をシマウマに変換するデモでは、半裸で乗馬している人もシマシマにw
これはCycle GANの課題。

TSLintは衰退しました


これからはESLintの時代。Angular CLIではまだTSLintが使われているので、ESLintへの移行のために開発が進められているOSSにコミットするよ。
ターゲットを2機能に絞って、そのうち1つは別の誰かが以前にプルリクを送っていたことが判明。でもめげずに本プルリクの完成度などをアピール。

Three.js CSG + WebWorker


Three.jsのTHREE-CSGMeshをベースに、OffscreenCanvasとWebWorkerを駆使してCSG処理を見た目高速化できないかを検証。WebWorkerにしたところでCSG処理は高速化できないけど、UIをノンブロッキングにできるかも。
検証中に同形状のSTLファイルを使うだけでCSG処理が遅くなることが発覚。これはFuture Work。

WebAssemblyにコンパイルする in Elm


ElmでWebAssemblyコンパイラを実装。まずは簡単な算術演算から。
watファイルはスタックマシンなので、パーサジェネレータを使うと簡単に実装できた。
本コンパイラはwatファイルを生成、wasm化は既存ツールにおまかせ。

図面の画像を3D化したかった。なんならAR表示したかった


たとえば手書き図面画像を読取り、いい感じに図面化→3D化できるんじゃないか?
まず図面化するのが結構手間だが細線化を繰り返すなど、雑な画像でもなんとか線分を取出し、矩形化するところまではできた。ここまでできたら3D化は見えているが時間切れ。3D化できれば、それを手書き図面画像空間に表示すればAR化はできるはず。

スプレッドシートをマイクロサービスにするアレ


スプレッドシートの一部機能をコンパイルしてnode.js化してAPIサーバを自動生成したい。コンパイラはPEG.jsで。

HandTrack.js+Three.jsで小鳥と戯れる


HandTrack.jsをWebAssembly化して高速化できないかなぁ。
まずはTensorFlow.jsのバージョンアップして…。
あれ?DeprecatedなAPI使ってる…
TFの機械学習モデルファイルを変換して…
あれ、変換ツールで変換できない…機械学習モデルが非互換…
あれ?あれ?
よーっし、小鳥と戯れよう!

アプリの依存ライブラリをリノベーションする


Renovateを使って依存関係を自動更新する。CI的に実行できるよう、Cloud BuildでRenovateを実行して依存関係に更新があればPull Requestを作成する仕組みを開発。ライブラリ更新が半自動化して便利!ブログ(未完)まで書いたよ!
公開されました(更新日: 2020/01/30)

乗馬体験

無事、開発と発表が終わったので乗馬体験のためモンゴル乗馬ノーサイドさんへ移動。

モンゴル馬に乗って雪の中を散歩できるコースです。


今年は暖冬のため雪が少ない点は残念ですが、気持ちの良い快晴と素晴らしい眺望で楽しく乗馬できました。

道の駅でおみやげ

全行程バスで移動。最後は道の駅でお土産を購入。

蓼科牛のステーキなども売っていて土地ならではのお土産が買えるのが嬉しい。

おわりに


第7回目は開発と観光の二本立てで楽しい合宿となりました。
合宿としての開発時間を確保しつつ観光も楽しむ。
「両方」やらなくちゃあならないってのが、「カブクエンジニア」のつらいところだな。
覚悟はいいか?オレ達はできてる。

とはいえ、両立するにはどこかで無理をする必要があり、それは間違いなく時間です。
開発するトータル時間は変わりませんが、結果的に開発時間を集約することになり、
開発に集中できる時間が長くなりました。
その分、脳が疲れるのですが、観光で肉体も疲れ、健全な開発合宿になったと思います。

立科での開発合宿のお誘いを頂き、全行程でサポートを頂きました信州たてしな観光協会の皆様に感謝です。ありがとうございました!

カブクは技術が好きなエンジニアを募集しています。なんだか面白そうだなと思ったらカジュアル面談を気軽にお申し込み下さい。陽気なエンジニアと陽気に技術トークしましょう。

では、また半年後。

その他の記事

Other Articles

2020/03/19
[Web フロントエンド] Elm に心折れ Mint に癒しを求める

2020/02/28
さようなら、TypeScript enum

2020/02/14
受付のLooking Glassに加えたひと工夫

2020/01/30
Renovateで依存ライブラリをリノベーションしよう 〜 Bitbucket編 〜

2019/12/27
Cloud Tasks でも deferred ライブラリが使いたい

2019/12/25
*, ::before, ::after { flex: none; }

2019/12/21
Top-level awaitとDual Package Hazard

2019/12/20
Three.jsからWebGLまで行きて帰りし物語

2019/12/18
Three.jsに入門+手を検出してAR.jsと組み合わせてみた

2019/12/04
WebXR AR Paint その2

2019/11/06
GraphQLの入門書を翻訳しました

2019/09/20
Kabuku Connect 即時見積機能のバックエンド開発

2019/08/14
Maker Faire Tokyo 2019でARゲームを出展しました

2019/07/25
夏休みだョ!WebAssembly Proposal全員集合!!

2019/07/08
鵜呑みにしないで! —— 書籍『クリーンアーキテクチャ』所感 ≪null 篇≫

2019/07/03
W3C Workshop on Web Games参加レポート

2019/06/28
TypeScriptでObject.assign()に正しい型をつける

2019/06/25
カブクエンジニア開発合宿に行ってきました 2019夏

2019/06/21
Hola! KubeCon Europe 2019の参加レポート

2019/06/19
Clean Resume きれいな環境できれいな履歴書を作成する

2019/05/20
[Web フロントエンド] 状態更新ロジックをフレームワークから独立させる

2019/04/16
C++のenable_shared_from_thisを使う

2019/04/12
OpenAPI 3 ファーストな Web アプリケーション開発(Python で API 編)

2019/04/08
WebGLでレイマーチングを使ったCSGを実現する

2019/04/02
『エンジニア採用最前線』に感化されて2週間でエンジニア主導の求人票更新フローを構築した話

2019/03/29
その1 Jetson TX2でk3s(枯山水)を動かしてみた

2019/03/27
任意のブラウザ上でJestで書いたテストを実行する

2019/02/08
TypeScript で “radian” と “degree” を間違えないようにする

2019/02/05
Python3でGoogle Cloud ML Engineをローカルで動作する方法

2019/01/18
SIGGRAPH Asia 2018 参加レポート

2019/01/08
お正月だョ!ECMAScript Proposal全員集合!!

2019/01/08
カブクエンジニア開発合宿に行ってきました 2018秋

2018/12/25
OpenAPI 3 ファーストな Web アプリケーション開発(環境編)

2018/12/23
いまMLKitカスタムモデル(TF Lite)は使えるのか

2018/12/21
[IoT] Docker on JetsonでMQTTを使ってCloud IoT Coreと通信する

2018/12/11
TypeScriptで実現する型安全な多言語対応(Angularを例に)

2018/12/05
GASでCompute Engineの時間に応じた自動停止/起動ツールを作成する 〜GASで簡単に好きなGoogle APIを叩く方法〜

2018/12/02
single quotes な Black を vendoring して packaging

2018/11/14
3次元データに2次元データの深層学習の技術(Inception V3, ResNet)を適用

2018/11/04
Node Knockout 2018 に参戦しました

2018/10/24
SIGGRAPH 2018参加レポート-後編(VR/AR)

2018/10/11
Angular 4アプリケーションをAngular 6に移行する

2018/10/05
SIGGRAPH 2018参加レポート-特別編(VR@50)

2018/10/03
Three.jsでVRしたい

2018/10/02
SIGGRAPH 2018参加レポート-前編

2018/09/27
ズーム可能なSVGを実装する方法の解説

2018/09/25
Kerasを用いた複数入力モデル精度向上のためのTips

2018/09/21
競技プログラミングの勉強会を開催している話

2018/09/19
Ladder Netwoksによる半教師あり学習

2018/08/10
「Maker Faire Tokyo 2018」に出展しました

2018/08/02
Kerasを用いた複数時系列データを1つの深層学習モデルで学習させる方法

2018/07/26
Apollo GraphQLでWebサービスを開発してわかったこと

2018/07/19
【深層学習】時系列データに対する1次元畳み込み層の出力を可視化

2018/07/11
きたない requirements.txt から Pipenv への移行

2018/06/26
CSS Houdiniを味見する

2018/06/25
不確実性を考慮した時系列データ予測

2018/06/20
Google Colaboratory を自分のマシンで走らせる

2018/06/18
Go言語でWebAssembly

2018/06/15
カブクエンジニア開発合宿に行ってきました 2018春

2018/06/08
2018 年の tree shaking

2018/06/07
隠れマルコフモデル 入門

2018/05/30
DASKによる探索的データ分析(EDA)

2018/05/10
TensorFlowをソースからビルドする方法とその効果

2018/04/23
EGLとOpenGLを使用するコードのビルド方法〜libGLからlibOpenGLへ

2018/04/23
技術書典4にサークル参加してきました

2018/04/13
Python で Cura をバッチ実行するためには

2018/04/04
ARCoreで3Dプリント風エフェクトを実現する〜呪文による積層造形映像制作の舞台裏〜

2018/04/02
深層学習を用いた時系列データにおける異常検知

2018/04/01
音声ユーザーインターフェースを用いた新方式積層造形装置の提案

2018/03/31
Container builderでコンテナイメージをBuildしてSlackで結果を受け取る開発スタイルが捗る

2018/03/23
ngUpgrade を使って AngularJS から Angular に移行

2018/03/14
Three.jsのパフォーマンスTips

2018/02/14
C++17の新機能を試す〜その1「3次元版hypot」

2018/01/17
時系列データにおける異常検知

2018/01/11
異常検知の基礎

2018/01/09
three.ar.jsを使ったスマホAR入門

2017/12/17
Python OpenAPIライブラリ bravado-core の発展的な使い方

2017/12/15
WebAssembly(wat)を手書きする

2017/12/14
AngularJS を Angular に移行: ng-annotate 相当の機能を TypeScrpt ファイルに適用

2017/12/08
Android Thingsで4足ロボットを作る ~ Android ThingsとPCA9685でサーボ制御)

2017/12/06
Raspberry PIとDialogflow & Google Cloud Platformを利用した、3Dプリンターボット(仮)の開発 (概要編)

2017/11/20
カブクエンジニア開発合宿に行ってきました 2017秋

2017/10/19
Android Thingsを使って3Dプリント戦車を作ろう ① ハードウェア準備編

2017/10/13
第2回 魁!! GPUクラスタ on GKE ~PodからGPUを使う編~

2017/10/05
第1回 魁!! GPUクラスタ on GKE ~GPUクラスタ構築編~

2017/09/13
「Maker Faire Tokyo 2017」に出展しました。

2017/09/11
PyConJP2017に参加しました

2017/09/08
bravado-coreによるOpenAPIを利用したPythonアプリケーション開発

2017/08/23
OpenAPIのご紹介

2017/08/18
EuroPython2017で2名登壇しました。

2017/07/26
3DプリンターでLチカ

2017/07/03
Three.js r86で何が変わったのか

2017/06/21
3次元データへの深層学習の適用

2017/06/01
カブクエンジニア開発合宿に行ってきました 2017春

2017/05/08
Three.js r85で何が変わったのか

2017/04/10
GCPのGPUインスタンスでレンダリングを高速化

2017/02/07
Three.js r84で何が変わったのか

2017/01/27
Google App EngineのFlexible EnvironmentにTmpfsを導入する

2016/12/21
Three.js r83で何が変わったのか

2016/12/02
Three.jsでのクリッピング平面の利用

2016/11/08
Three.js r82で何が変わったのか

2016/12/17
SIGGRAPH 2016 レポート

2016/11/02
カブクエンジニア開発合宿に行ってきました 2016秋

2016/10/28
PyConJP2016 行きました

2016/10/17
EuroPython2016で登壇しました

2016/10/13
Angular 2.0.0ファイナルへのアップグレード

2016/10/04
Three.js r81で何が変わったのか

2016/09/14
カブクのエンジニアインターンシッププログラムについての詩

2016/09/05
カブクのエンジニアインターンとして3ヶ月でやった事 〜高橋知成の場合〜

2016/08/30
Three.js r80で何が変わったのか

2016/07/15
Three.js r79で何が変わったのか

2016/06/02
Vulkanを試してみた

2016/05/20
MakerGoの作り方

2016/05/08
TensorFlow on DockerでGPUを使えるようにする方法

2016/04/27
Blenderの3DデータをMinecraftに送りこむ

2016/04/20
Tensorflowを使ったDeep LearningにおけるGPU性能調査

→
←

関連職種

Recruit

バックエンドエンジニア(Python・Go)

業務内容

当ポジションは弊社Webサービスのバックエンド機能設計及び実装を担当します。 サービス毎の開発チームで2週間スプリントのスクラム開発を実施しています。 週次で開発チームミーティングを実施し、実装設計の相談や工数見積もりを行います。 全ての開発コードはレビューと自動テストによって品質を保っています。 また、リファクタリングやフレームワークのバージョンアップも開発フローに組込み、技術的負債を放置しない開発を目指しています。

フロントエンドエンジニア(TypeScript)

業務内容

当ポジションは弊社Webサービスのフロントエンド機能設計及び実装を担当します。 サービス毎の開発チームで2週間スプリントのスクラム開発を実施しています。 週次で開発チームミーティングを実施し、実装設計の相談や工数見積もりを行います。 全ての開発コードはレビューと自動テストによって品質を保っています。 また、リファクタリングやフレームワークのバージョンアップも開発フローに組込み、技術的負債を放置しない開発を目指しています。

インターン(Webエンジニア)

業務内容

業務から独立した、調査・研究系のタスクをおまかせしています。コードレビュー、 社内での報告会、 ブログ記事執筆を通して着実にスキルアップしていただくことを目指しています。 (希望があれば、プロダクトの開発業務もおまかせします。)

→
←

お客様のご要望に「Kabuku」はお応えいたします。
ぜひお気軽にご相談ください。

お電話でも受け付けております
03-6380-2750
営業時間:09:30~18:00
※土日祝は除く