「『夏には日陰を歩きたい』という欲望を満たすために計算する」のふりかえり

やろうと思った目的

  • GW10日間チャレンジ
    今回、10日間という例年にない長期休みだったため、普段の勉強とは違い、何か具体的な課題に取り組みたいと考えた。

  • 課題への時間の見積もりができるようになりたい
    業務で分析課題を行う際、「どのくらいでできるか」と問われてもなかなか答えられなかった。これは、経験値が少ないことも当然あるのだけど、自分が「何の作業にどのくらいかけているか」をあまり意識できていないこともあると思った。
    今回、解決までが見通せていない課題に取り組む中で、どのような過程で何を考え、何に何時間かけたかを記録して、時間感覚を得たいと考えた。

  • 見えていないものを見える化してみたい
    普段漠然と感じていることを数字に落とし、それを視覚化することで容易に理解できる形にする。すでにある数字から何かを作るのではなく、数字化する部分からやってみたいと思っていた。

当初目標としていた内容

当初は、地図の画像を読み込んで建物を検出し、それぞれに高さを与えて任意の時間における影を地図に重ねて描きたいと考えていた。
結果的に、以下の理由により断念した。

  • 建物の輪郭だけを得るのが大変
    無料で使用できる白地図が見つからなかったので、OpenStreetMapを利用させてもらうことを考えた。だが、自分の技量不足により、建物の輪郭を検出する際に、地図上の建物名や通り名等も検出されてしまい、うまくできなかった。

  • 建物高さを得るのが大変
    とりあえず自分の行動範囲だけでよかったので、Googleマップ等で目視で調べようかと思っていた。だが、GW中に完成させるという目標に対し、それをしている時間がなかった。また、地図上の建物と高さを機械的に紐づける方法も思いつけなかった。

8日目の時点で諦め、目標を「単純化した建物モデルに対し、道路の方位角ごとに影のでき方を調べる」に変更した。

作業の変遷

開始時点では、以下のような認識だった。

  • 各建物のコーナー部の座標が得られれば、そこから影は求められそう
  • 建物の色と地の色に差があれば、画像処理でうまく建物だけ検出できないかな? 画像処理ってどうやるのかわからないけど
  • 著作権の問題で、Googleマップとかは使えないかもなあ… 無料で使える地図ってないのだろうか

そのような認識から始めたので、作業は以下の3分野を並行して進めていくことになった。

  • 地図から建物外形を得る:地図に描かれた建物の枠線を検出しようとしていた。建物名や通りの名前が入った状態の地図から枠線をうまく検出できず、最終的に断念した。

  • 建物の座標を得る:テスト用の図を自分で用意し、その図の中の建物の枠線を検出し、コーナー部のみになるよう間引き、その座標を得ることができた。

  • 影を計算して描く:建物のコーナー部の座標に対し影の位置を計算し、影の枠線を描き、道路のうち影の重なる面積を求めた。また、ある経路の方位角を求め、日陰になる割合を求めた。

3分野ごとの作業内容を時系列で示すと以下の通り。

円の面積はかかった時間に比例している。また、灰色の円は結果的に不要だった作業を示す。
かかった時間は全体で60時間、そのうち結果的に不要だった作業は9時間くらいだった。また、色々調べたり検討したりしていたのが12時間、コードを書いていたのが48時間くらい(後者はコードを書くために調べていた時間も多いとは思う)だった。60時間と聞くと「かかりすぎだな」と思うけど、上図のように一つずつの作業に分解すると、「今の自分の力だとそのくらいはかかるか…」という気もする。

次回の改善点

  • 作業に取りかかる前にゴールを明確に設定する
    今回、8日目の段階で当初の目標を断念して目標を変えたため、結果的に無駄になる作業が出たり、回りくどいコードになったりしてしまった。開始当初の時点で「現時点の知識からして、10日間でこの目標を達成するのは難しそう」と感じていたので、変更した目標を当初から目標としていれば、もう少し短時間で目標を達成できたと思う。

  • もう少し系統立てて進められるようにする
    やり方を調べるところから始める部分が多く、最後の数日になるまではずっと混沌の中で進めていた。
    「今どこまでできていて、何が課題なのか」を脳内で考えるだけでなく書き出して進めていけば、自分の脳内を整理する意味でもよかったかなと思う。

感想

  • 普段の土日を何週か使って進めていたら、たぶん途中でやめていた。「遊びのコード書いてないで、普段の業務に直結することやろう…勉強したいこともたくさんあるし」となっていたと思う。「この10日間で完成まで持っていく、何らかの形にする」と決めてやったことで、集中してやることができた。
  • 段階ごとに自分で小さな問いを立てて、それをクリアするとゴールに近づいていく嬉しさがあった。今回の課題は、さらにそれが現実世界とつながっている面白さみたいなものもあったと思う。
  • 楽しかったけど、やっている最中は「どこが間違っているかわからない」「落ち着け」「あと3日なのに、全然ゴールが見えない」「ここ直したいけど数時間かかるだろうし」とほぼ焦燥感の中にいた。他者が作ってくれたライブラリを利用させてもらっているだけで、しかもうまく使えてないし、色々わかってないし、と道のりの長さを感じるけど、足元に目を落として一歩ずつ淡々と進んでいくしかない。