はじめに
だんないよ、nikkieです。
#mokupyに行ってもくもくしてきました。
勉強会の概要
この勉強会について
主にPythonに関するやりたいことを各自持って来て、進めていく感じのゆるい会です。 もくもく開発をして情報共有したり、交流を深めることができればと思っています。 是非お気軽にご参加ください。(Python初心者の方でも大歓迎です!)
取り組んだこと
来週の#stapyでLTしようと、「Djangoにモザイクアート」を進めていました。
#mokupy
— nikkie (@ftnext) 2018年3月31日
Django上でモザイクアートのプログラムを動かすためのフォームを作ります。
この画像をモザイクアートにしてと指定できるようなフォームです。
モザイクアートのソースコードの修正のほうが中心になってしまう予感。。
- モザイクアートにする画像を指定するフォーム作成
- フォームを動かすためにモザイクアートのソースコード修正
- LT準備(スライドに盛り込む項目考える)
フォーム作成:済
Django Girls Tutorialには「Django フォーム」のセクションがありましたが、
フォームからDBにレコードを入れたいわけではないので、HTMLタグでformを作りました。
(今にして思うとCakePHPみたいなフォームヘルパーがあるのか調べてみればよかったな)
やりたいことはプルダウンからモザイクアートにしたい画像を選択して
サブミットボタンを押すとその画像でモザイクアートが作成されるようにすることです。
フォームのactionにURLが紐づくビューのメソッドには
request.POSTという形式でPOSTの内容が渡ってきます。
指定された画像の取得は意外と簡単でした。(request.POSTをdictのように扱えばよい)
(余談)プルダウンの内容は決め打ちにしたのですが、
ビューでモザイクアート対象画像の一覧を取得、
それをテンプレートに渡し、テンプレート内でfor文でプルダウンのタグを作る。
これで動的なプルダウンが実現できるんじゃないかと帰り道に気づきました。
モザイクアートのソースコード修正:済
新たな技術的負債を発生させながら、内在する技術的負債に取り組んでいました。。
今回返済した技術的負債は、モザイクアートにする画像と、
作成したモザイクアートのファイル名をソースコード内に直接書いているというものです。
以下のように修正しました。
- モザイクアートにする画像は引数で渡せるようにする
- 作成したモザイクアートはファイル名に日時情報を入れて区別できるようにする
(作成したモザイクアートが全て同じファイル名だとDjangoで一覧にしたときにまずい。モザイクアートどうしは区別する必要あり)
前者の修正は既に終わっていたため、もくもく会中は後者の作業が主となりました。
Bugfix/#21 モザイクアートのファイル名の区別 by ftnext · Pull Request #24 · ftnext/mosaic-art-python · GitHub
3パターンのモザイクアート作成処理が統合できていない
(平均の色を使う場合、中央の色を使う場合、一番使われている色を使う場合それぞれのファイルが存在している)
という超弩級の技術的負債(DRY原則違反)がソースコードにあります。
今回の修正も同一の関数をやむなく各ファイルに埋め込む形になってしまいました。。
この負債を早く返済しないとソースコードがメンテナンスしにくくていけないです。。
(釈迦に説法だと思いますが、DRY原則はマジで守りましょう)
本日の作業後のDjangoにモザイクアートのソースコードはこちらです。
GitHub - ftnext/mosaic-art-on-django at develop
LT準備:途中
急ぎGitPitchでスライドを作り、成果発表で練習LTしました。
staticフォルダの配置の情報が2つ見つかったという質問を盛り込んだところ
好みの問題だが、プロジェクトの下に1つだけ設けることが多いという回答をいただきました。
独学の身には参考になります。ありがとうございます。
3日まで日がないので、明日完成度80%まで持っていきます。
感想
お昼のときにPythonもくもく会にはそれぞれ色があるという話を聞いてなるほどと思いました。
個人的には
- #pyhack:もくもく中、猛者の会話が多いが、勉強になるのでありがたい。作業しつつも耳は研ぎすませている状態がベター
- #rettypy:もくもく中の会話は中程度。最初の自己紹介で困っていることを共有するので教え合いやすい
- #mokupy:もくもく中の会話が少なめ。皆さん作業に没頭している感じ
というようなグラデーションかなあと思います。それぞれ色があるのも私は好きです。
FlaskとKerasでNBLのプレーヤー分類を作った方がいらっしゃいました。
こちらかな? pillow使ってるようなので興味あります。
紹介(宣伝?)されたDjango連載など時間を作って読まなくちゃ。
もくもく会関係者と出席者の皆さま、本日はありがとうございました。1日お疲れ様でした。