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

pythonのジェネレータがちょっと分かった

なつたん: Python でSICP4.3 Nondeterministic Computingを読んだら、非決定計算が割りとすんなり理解できた。去年はambわかんねと思ったが、分かってみるとあー非決定計算ねと思えた。

あとジェネレータが便利じゃないかと。それにしても遅延評価みたいなもんかなと思ったら、似たようなシチュエーションでも使えるのね。

再帰とジェネレータ

が面白く読めた。

そういえば非決定計算を使った構造活性相関解析例なんかはあるのだろうか?prologなんかを使った例は見たことあるけど、実用例じゃなかったからな。pythonでかけるなら書いてみたいなぁ。

windowsにvirtual-pythonを入れようとしたら

ちょっとだけ試してみたいモジュールがある、でも運用環境には入れたくない。という状況だったので、virtual-pythonを使ってみたくなった。

C:\Documents and Settings\ohkw>python virtual-python.py
This script only works on Unix-like platforms, sorry.

これもまた、MacBookを買えという啓示だろうか?

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())

一要素のタプル

MLで流れてたのでメモ。

5. データ構造

一つの要素を持つタプルは、値の後ろにコンマを続ける (単一の値を丸括弧で囲むだけでは不十分です) ことで構築できます

pylonsはモデルだけいじりたいときにはどうすんの?

TurboGearsだとこんな感じでいけるじゃないですか?

pylonsはちょっとよく分からなくて結局

sqlite3 -separator , test.db ".import makeinu.csv test_table"

とやってしまった(なんじゃそりゃ)。

pylonsにはpaster shell

pylonsで対話的にモデルを操作したい場合にはdevelopment.iniのあるディレクトリで

paster shell

とすればよいらしい。modelっていう変数に色々入っているので

session = model.Session
mol = model.Mol
for m in session.query(mol).filter(mol.MW > 199):
    print m

などとやるべしナ感じ。

c++のキャストとか

openbabelがC++で書かれているので、今年はC++を覚えようと。

int a = (int)('0'); // 48

これはpythonでいうord

>>> ord("0")
48

で、最初よく分からなかったのでこれ。

(char)(5 + '0'); // 5

結局

int a = 5 + '0'; // 53

となっているからint + charみたいなのもよろしくやっといてくれるっちゅう理解でいいのかな。

とりあえずクックブックでも買うべきか。

ProductName C++実践プログラミング
スティーブ オウアルライン
オライリージャパン / ¥ 6,090 ()
在庫あり。

ProductName C++クックブック
D. Ryan Stephens,Christopher Diggins,Jonathan Turkanis,Jeff Cogswell
オライリー・ジャパン / ¥ 4,515 ()
在庫あり。