Processing でのデバッグ。バグが無いことに意味なんてあるのかな?
ポロロン♪
というわけで、みなさん楽しくデバッグしていますか?
このノートではプログラミング的なデバッグではなく、クリエイティブコーディング的に「正しく動く」とはどういうことかを考えてみます。
println() や Processing 3.0 系から標準装備されたデバッガを使ってのデバッグ手法は解説いたしません。
プログラミング的なデバッグについてはこちらのノートをご覧ください。
クリエイティブコーディング(Creative coding)において「正しく動く」とはどういうことか?
クリエイティブコーディング、ジェネラティブアートの場合、いくらプログラムとして正常に動作するコードだとしても、その出力がつまらないものだとしたら「正しく動作した」とは言えないかもしれませんね。
クリエイティブコーディングとは、ロジックを組み立て論理的な計算をして「感性に訴えるもの」を出力するものだと考えています。
前半の論理的な部分においてはプログラミング的にデバッグすることができますが、後半の感性に訴えるものについてはデバッガでどうこうという話ではないですよね。
感性に訴えるもの、面白いもの、スゴイ!と感じられるものを作るのが目的なんだとしたら、それが出来なかった場合「目的を果たしていないプログラム」ということになります。
ソフトウェア開発的に言うと、それはバグではなく「要件を満たしていないシステム」ということになりそうです。
これではいくら正常に動作しても意味が無いですよね。
夜中にハイな状態でコーディングしていたときは「おおっ!スゴイの出来た!私って天才!」と感じてたものが、翌朝見ると「なにこれ…?」ということもよくあることで、この場合は昨晩と今朝とで『市場環境の急激な変化により顧客のニーズが変化した』ってとこでしょうか?
イメージ通りのものを作るには?
自分のイメージ(要件)をどうコードで実現させるか(設計)を考えてコーディングし、そのコードが論理的に正常に動作するようにデバッグし、出来上がった絵が自分のイメージと合っているかを確認(テスト・レビュー)する。
イメージと合っていなければ、コードをどう変えればよいかを考えてまたコーディングし、デバッグし…の繰り返し。
だいぶ泥臭い作業です。(でもこれが楽しい!)
こうやっていけばイメージ通りのものが作れるはずなんですが、スタートの「要件」のところからしてなかなか難しい。
まずは自分がどういうものを作りたいかをしっかりイメージすることが大事だと思います。ですが、そのイメージを「要件」としてまとめるって難しいですよね。
さらに、要件がまとまったとしても、それを実現するコードを書くのがこれまた難しい。
イメージしたものをそのままスラスラと書けるようなら苦労しません。
試行錯誤の指針を得る
普通図形を一個描画して終わりってことはないですよね?
例えば、色の違う塗りつぶしの円を複数使って背景を描画し、その上に半透明の線を使って前景を描画するとか、時には線や円を何万個も描画して一つの絵を完成させるわけじゃないですか。
そのように複数の要素を組み合わせた複雑な絵を作り始めると、
・どこがどう自分のイメージと合わないのかよくわからない。
・コードのどこをどう変えればよいのか見当がつかない。
なんてことになり、手探りでコードをいじり始めることになります。
これはこれで楽しくて、最初のイメージとは違った予想外のものが出来たりと嬉しいこともあるのですが、反面だんだん最初のイメージから遠ざかった挙げ句、気づいたらとてつもなくつまらないものが描かれるようになってしまうということも…
そんなとき、私は println() で動作途中の変数の値を見るように、saveFrame() を使って描画途中の画像を保存して確認することにしています。
例えば先の「塗りつぶしの円を使って背景を描画して、その上に半透明の線を使って図を描画する」ような場合、背景を描画した段階で saveFrame() して背景のイメージを確認
これにより背景がイメージと違う気がしたら、背景描画途中で saveFrame() して、塗りつぶしの円の大きさ、色、明るさなどを確認して、コードのどこをどう変えたらいいかのヒントを掴むようにしています。
複数回 saveFrame() する場合は、saveFrame() する毎にファイル名を変えるとか、邪魔にならなければ絵の中に text() で文字を入れるなどして、コード中のどこの saveFrame() か判別できるようにしましょう。
デバッガを使って一時停止させながら描画の様子を観察するのもよいですが、 saveFrame() した静止画を 5fps ぐらいの動画にして眺めてみると、どういう手順で図が描き進められているかをはっきりとイメージできて多要素の複雑な図の作品づくりがとても捗ります。
ぜひお試しあれ!
それでは、Happy Debugging!
作例 : No Words.
私、この作品気に入ってるんですけど、Twitter 上では全然人気無いんですよね~。
人気? それはジェネレーティブアートにとって大切なことかな? ポロロン♪
この記事が面白かったらサポートしていただけませんか? ぜんざい好きな私に、ぜんざいをお腹いっぱい食べさせてほしい。あなたのことを想いながら食べるから、ぜんざいサポートお願いね 💕