はのちゃ爆発

はのちゃが技術ネタとか日常のこととかを書いてます。

開発合宿で私がやった作業、そして開発合宿によるその成果。

開発合宿記事もおそらくこれが最後の記事になります。 お待たせしました、開発合宿でやったこととその成果についての記事です。

開発合宿でやったこと

大きく分けて2つ。

  • AtCoder Beginner Contest(ABC) 051
  • Serverless with C# で画像処理する何かを作る

前者は事前に考えていなかったが、当日になってABCがあることに気付いて急遽参加した感じ。

ABC 051

嫌な事件だったね…

まさかのB問題が解けない事態。 途中Bを飛ばす判断をしてCに挑んだのは正解ではあったが…

解けなかったB問題は以下のような問題でした。

問題文

2 つの整数 K,S が与えられます。 3 つの変数 X,Y,Z があり、0≦X,Y,Z≦K を満たす整数の値を取ります。 X+Y+Z=S を満たす X,Y,Z への値の割り当ては何通りありますか。

制約

2≦K≦2500 0≦S≦3K K,S は整数である。

何か効率の良い解法、あるいは何かシンプルな方程式で解が導出できる、と思いこみ、 愚直に解くということをしなかったがために死んだという感じ。

制約で3つの整数の最大値が2,500と、愚直に回す感じでもイケそうな値に設定されてることに気付くべきだった…という反省。

C問題は解けたけど、だいぶ汚いコードになってしまったのでもうちょっときれいに書けたのでは…?という気持ち。

D?知らない子ですね…

Serverless with C# で画像処理する何かを作る

別記事にまとめたので詳細はそちらをご参照ください。

hanocha.hateblo.jp

C#が(そんなに書けないけど)好きなのと、AWS LambdaでC#が使えるようになったのと、 丁度Lambdaで画像処理やりたいみたいな機運が高まってたりしたのと、 じゃあちょうど開発合宿あるしやっていくか、となりました。

当初の想定ではそんなに手古摺らないはず、と思っていたので、 「やっぱ高速化大事だよね、どうやったら高速に出来るんかな」とか余裕かましてたらひどい目にあいました。

最終的になんとかそれっぽいことができそう、というところまで行ったので許してください。

タイムスケジュールと照らし合わせてみる

時間に関してまとめた記事を見ながら、どんな感じで作業時間を使っていたのか見返してみます。

1日目

1日目の作業タイミングは「宿到着~夕食前」と「夕食後~就寝」の2つ。

宿到着~夕食前に関しては、結構BBQの準備をしていたのであんまり作業できず。

夕食後~就寝までに関しては、主にABCへの参加がメインで、 なんだかんだ就寝も早めだったのであまり画像処理周りの作業はできず。 やったのも前述の高速化のこと調べてた感じだったし俺のバカ…

なので1日目は基本的にABCやった、という感じになってしまいました。

2日目

2日目の作業タイミングは「午前中」、「買い出し後~夕飯」、「夕食後~就寝」の3つ。

午前中

高速化のこと調べるのはやめてとりあえずServerlessやろう、と思い立ち作業開始。

C# Serverless の資料があまりなく、そもそも Serverless を動かすところから手古摺る。 ていうかそもそも Serverless って何やねん、ということすらよく分かってなかった。

とはいえ Visual Studio のおかげで簡単に Serverless アプリを作ることができることが判明。 サンプルアプリを実際に動かすところまでやって昼食&買い出しへ。

買い出し後

買い出しから戻ってきてからは謎の頭痛に襲われてしまい、薬を飲んで寝込む事態に。 なので買い出し後~夕飯の作業時間がすべて失われてしまった。悲しい。 頭痛の原因は謎です。

夕食後

最後の夕食後~就寝までのタイミングでは体調もなんとか戻り、作業できるように。

が、 System.Drawing が使えなかったり、代替となる画像処理ライブラリがなかなか見つからなかったり、 見つかったと思ったら NuGet に上手く登録できなかったり、やっと入れたライブラリが動かなかったり…

想像していたような簡単さはどこへやら、壁に何度もぶち当たりながらなんとか動くレベルの状態まで持っていきました。

本当は成果発表をする予定でしたが、持参したプロジェクタが動かなかった時点でだいぶそれも困難になり、 終わってから後日会社でやろう、という感じで終了しました。

まとめ

2日目に体調を崩すという事態になったのもあり、作業時間がだいぶ少なくなってしまったのが悔やまれます。

当初の目標としては

「ユーザが任意の画像をアプリに投げると、Lambdaでいい感じに画像処理して、処理された画像を返す」

というところまで行けたらいいな、と思っていたので、全然そこにたどり着けなかったのは悔しいです(´・_・`)

とはいえ、当初想定していた簡単なものとは全く違い、いろいろな壁をなんとか乗り越えて到達した成果なので、 「Lambda with C#で画像処理をする」というところまで行けただけでもとりあえずは頑張ったのかな、とか思ってはいます。

次回の開発合宿では、

  • 体調を崩して作業できないなんて事態にならないようにする
  • 目標を達成するための最短ルートで作業する
  • 各々の進捗状況をマメに報告できる場を設ける

といった点に気を付けてやっていきたいと思います。開発合宿に限った話ではないですが。