action-coding
Link: action-coding - Google Code.
APIにProcessing、言語にRubyを採用し、以下のソフトウェアを参考にそれぞれの利点のいいとこ取りを目指します。(中略)たとえあなたがライブコーディングでVJするつもりがなくても、実行時にプログラムを再定義でき、視覚的なフィードバックを即座に得られるため、試行錯誤のサイクルが短縮されるでしょう。
追記:スクリーンキャストも公開されました
一昨日くらいから、Funnelにも共同開発者として参加していただいた増田さんのプロジェクトである「action-coding」で遊んでいます。いや〜、これは素晴らしいです。まだ公開は始まったばかりですが、導入方法などに関してわかりやすいチュートリアルが用意されています。TextMateのバンドルも追加で公開され、TextMateからaction-codingを直接起動してどんどんコードを書いて行くこともできるようになりました。
Processingはプログラムのことを「スケッチ」と呼び、トライアル&エラーでスケッチを描くようにアイデアを練り上げて行く、というのを重視しているプログラミング環境です。
しかし、ベースにしている言語がJavaであるため、RubyやPythonのように柔らかい感じがなく、ある程度ちゃんと書こうとするとその硬さが目立ってくるというのがFunnel開発時にも気になっていました。
しかし、このようにRubyでProcessingのAPIを利用しつつコードを書き、しかもエディタで保存した瞬間にプログラムが実行時書き換えされるため、思考を中断しないで継続して書いて行くことができる、というのはかなり快適です。
試しに外部ライブラリであるFunnelを使うサンプルを書いてみましたが、問題なく動作します。
include_package 'processing.funnel'
def setup
@gio = Gainer.new(self, Gainer::MODE1)
@gio.autoUpdate = true
end
def draw
background @gio.button.value * 255
end
実は、JRubyをちゃんと試したのは今回が初めてなのですが、これはいいですね。JRubyの主なターゲットはRuby on Railsなどの利用なのだと思いますが、こうした用途にもかなり威力を発揮すると思います。FunnelのRuby版ライブラリもJRubyでの利用を意識して行こうと思います。
(追記)
これ以外にRuby版のFunnelライブラリを使うほうも試してみました。こんな感じで書けば問題なくこちらも動作します。
require 'funnel'
include Funnel
def setup
size 300, 300
@gio = Gainer.new(Gainer::MODE1)
end
def draw
background @gio.button.value * 255
end
Processing版のライブラリを使うソースと比較すると違いがあるのは最初のライブラリ読み込み部分と、インスタンス生成時の引数が少ないことくらいですので、ぱっと見た感じはほぼ同じに見えるかもしれませんね。現在のバージョンでちょっと気になるとすると、CPU負荷がいずれも20数%と結構高い(少しだけRuby版が高い)ことです。が、brightness.rbのような基本的なサンプルでの負荷と比較すると+約10%ですので、そんなに悪い数字ではないと思います。とはいえ、負荷は低ければ低いほうがいいのは間違いありませんので、継続してJRubyでのパフォーマンスのチューニングは考えていきたいと思います。

コメント