FORM+CODE -デザイン/アート/建築における、かたちとコード

これの日本語訳。サイトにcode exampleや本の中身が少し出てるのでどういう内容かはわかると思う。

ProductName FORM+CODE -デザイン/アート/建築における、かたちとコード

ビー・エヌ・エヌ新社 / 2520円 ( 2011-04-25 )


というわけで、予約した。

またprocessingいじり熱も再発するんだろうなぁ。

Visualizing Data chapter 7 (TreeMap)

processingを使ってデータの視覚化をするための基礎的な本。なのでprocessingでアート的なことをやる本とはちょっと違うかも。

ProductName Visualizing Data
Ben Fry
Oreilly & Associates Inc / ¥ 3,852 ()
在庫あり。

スキャッタープロットとかネットワークを題材に「より効率的にデータを表現する」ということを考えていく。僕は、データとヒトの目という中途半端なデバイスをうまくつなげるミドルウェアのようなものはどういうものが良いのかということを考えていくための教科書的なものと位置づけて読んでる。

7章はズームして掘っていけるようなTreeMapを実装する。TreeMapならMatplotlibでももちろんできるけど、インタラクテイブ性をもたすならProcessingがいいかも。 あとこの本はコードの断片の説明というかたちが多いので別途サンプルコードをダウンロードしながら読む必要がある。 僕はjavaとprocessingがまだ拙いので、単に写経していくだけでは動かず、悩むことが多かったため、なかなか読み進められていないが、良書の予感はする(びしびしと)。

pyprocessing

pythonでprocessingっぽいことをやろうというプロジェクトが立ち上がってた。

pyprocessing

楽しみ。

bruceとかでかっこいいプレゼンが出来るようになると嬉しい。

A Face for Richie Hawtin

ruby-processingのところのGalleryにあったA Face for Richie Hawtinはマイクの音に反応する。

ffrh

椎名林檎の時は暴走するを流して適当にスクリーンショットを撮ってみた。

あとでコードをちゃんと見てみる。

jythonでprocessing

Built with Processing [改訂版]が到着したので、これを手本にjythonで書いていく。

ProductName Built with Processing [改訂版]
前川 峻志,田中 孝太郎
ビー・エヌ・エヌ新社 / ¥ 3,570 ()


を参考にして、step 04-aを。

step 04-a

ソース。jythonだとswing呼んだりしないといけない。

from javax.swing import JFrame
from processing.core import PApplet

class Sketch(PApplet):
    def __init__(self):
        pass

    def setup(self):
        self.size(200, 200)

    def getField(self, name):
        return self.class.superclass.getDeclaredField(name).get(self)

    def draw(self):
        self.rectMode(PApplet.CENTER)
        self.colorMode(PApplet.HSB, 100)
        self.background(99)
        self.noStroke()
        self.smooth()

        self.fill(45, 60, 99)
        self.rect(100, 100, 100, 100)

        self.fill(45, 40, 99)
        self.rect(100, 100, 60, 60)

        self.fill(45, 20, 99)
        self.rect(100, 100, 20, 20)

        self.noFill()
        self.strokeWeight(60)

        self.stroke(80, 99, 99, 30)
        self.ellipse(50, 50, 200, 200)
        self.ellipse(150, 50, 200, 200)
        self.ellipse(50, 150, 200, 200)
        self.ellipse(150, 150, 200, 200)

def run(applet):
    frame = JFrame(title="Processing",
                   resizable = 0,
                   defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
    frame.contentPane.add(applet)
    applet.init()
    frame.pack()
    frame.visible = 1

if __name__ == '__main__':
    run(Sketch())

video入力いじりたいからUSBカメラ買わなきゃ。

jythonでprocessing 080331

processingは繰り返しがfor(i=0;i<10;i++)のCっぽい書き方だけど、jythonだったらrangeが使えるのでお手軽でいいんじゃないか。

def setup(self):
    self.size(200, 200)
    self.colorMode(PApplet.HSB, 100)
    self.background(99)
    self.noStroke()

def draw(self):
    for y in range(10):
        for x in range(10):
            self.fill(x*10, 10 + y*10, 99)
            self.rect(x*20, y*20, 10, 10)

list2-6-b

jython+processingでpdfを生成

processingはpdfに出力できるらしい。同じことはjythonでも可能でしょう。

と思いつつ、三日くらいはまった。classpathにpdf.jarだけでなくitext.jarも設定しておかないといけなかったのがわからなかった。itextってのはフリーのpdfライブラリらしい。それにしても、classpathがどんどん長くなっていくのが気持ち悪いなぁ。もうちょっとスマートに記述する方法もあるんだろうな。

noise.line

from javax.swing import JFrame
from processing.core import PApplet
from random import randint
import processing.pdf


class Sketch(PApplet):
    def __init__(self):
        pass

    def setup(self):
        self.size(200, 200, PApplet.PDF,"noiseline.pdf")
        self.colorMode(PApplet.HSB, 100)
        self.noFill()
        self.fluc_color = 50

    def getField(self, name):
        return  self.class.superclass.getDeclaredField(name).get(self)

    def draw(self):
        self.background(0)
        for i in range(0, 200 ,5):
            self.fluc_color += randint(-10,10)
            self.stroke(self.fluc_color, 60, 90, 30)

            fluc_y = 0
            self.beginShape()

            for j in range(0, 200, 5):
                fluc_y += randint(-2, 2)
                self.vertex(j, i + fluc_y)

            self.endShape()
        self.exit()

def run(applet):
    frame = JFrame(title="Processing",
                   resizable = 1,
                   defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
    frame.contentPane.add(applet)
    applet.init()
    frame.pack()
    frame.visible = 1

if __name__ == '__main__':
    run(Sketch())

実際に生成されるpdfはこれです。

processing + jythonでGainerを制御する

processing使ってGainerにアクセスするjythonスクリプト。gainer.jarだけではなく、serialフォルダのRXTXcomm.jarにもclasspathを通しておく。

ボタンを押すと白黒するサンプルを書いてみた。

コード

from javax.swing import JFrame
from processing.core import PApplet
from processing.gainer import *

class Sketch(PApplet):
    def __init__(self):
        pass

    def setup(self):
        self.size(200, 200)
        self.gainer = Gainer(self,'COM8')

    def getField(self, name):
        return self.class.superclass.getDeclaredField(name).get(self)

    def draw(self):
        self.background(0)
        if(self.gainer.buttonPressed):
            self.background(255)

def run(applet):
    frame = JFrame(title="Processing",
                   resizable = 1,
                   defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
    frame.contentPane.add(applet)
    applet.init()
    frame.pack()
    frame.visible = 1

if __name__ == '__main__':
    run(Sketch())

jython+processingでwebカメラで取り込むサンプル

usbカメラを買ったので早速遊んでいる。ちなみに奥に見える黄色いのはjython本じゃなくて独習C++とかいう本。

webcam

drawメソッドでピクセルをいじくると色々とエフェクトがかけられるわけです。

from javax.swing import JFrame
from processing.core import PApplet
from processing.video import *

class Sketch(PApplet):
    def __init__(self):
        pass

    def getField(self, name):
        return self.class.superclass.getDeclaredField(name).get(self)

    def setup(self):
        self.size(320, 240)
        self.camera = Capture(self, 320, 240, 12)

    def draw(self):
        self.camera.read()        
        self.image(self.camera, 0,0)

def run(applet):
    frame = JFrame(title="Processing camera",
                   resizable = 1,
                   defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
    frame.contentPane.add(applet)
    applet.init()
    frame.pack()
    frame.visible = 1

if __name__ == '__main__':
    run(Sketch())

jython本が待ち遠しい。

ProductName Jythonプログラミング
西尾 泰和
毎日コミュニケーションズ / ¥ 3,150 ()
在庫あり。

Chuckで遊んでみた

朝からChucKで遊ぶ。

編集した結果をリアル気味に反映させたくなったのでperlで書いた(loop.pl)。

use Path::Class;

my $file = $ARGV[0] || die "filename not found";

my $t = file($file)->stat->mtime;

system "chuck", "+", $file;

while(1){
  sleep 1;
  unless ($t == file($file)->stat->mtime) {
    system "chuck", "=", "1", $file;
    $t = file($file)->stat->mtime;
  }
}

あとはChuckのサンプル(test.pl)

SinOsc s => JCRev r => dac;

.5 => s.gain;
.2 => r.mix;

[ 1, 3, 5, 7 ] @=> int note[];

while( true )
{
    Std.mtof(Std.rand2(1,3)*12 + 48 + note[Std.rand2(0,note.cap()-1)] ) => s.freq;
    140::ms => now;
}

これで、chuckのほうをサバクラにするために

chuck --loop

で動かしておいて、別の端末から

perl loop.pl test.ck

これで、test.ckをエディタで編集して保存すると反映される。

Arduinoとかで制御すればもっと面白くなりそう。CdSセンサとかで変化するようなのをつくってみてもいいし、ChucKをネットワーク越しに制御できるので音サーバーというのも面白いかもしれませんな。

ProductName Making Things Talk -Arduinoで作る「会話」するモノたち
Tom Igoe
オライリージャパン / ¥ 3,990 ()
在庫あり。