Sun, 24 Jan 2010

pyProcessing改めDoodleCray

pyProcessingって名前のコード書いたよって久しぶりにブログ書いて、次の日にその名前 で検索してみたら、同じ名前で同じようなコンセプトで完成度の高いのがすでにあった!

pyprocessing - Project Hosting on Google Code

ちぇー先に調べたら良かったなー。残念。しかもこのpyprocessingのコードみたら、「あ っ、こいつ本気だ!」って思っちゃった。

だって、必要な関数一覧を用意して、それを片っぱしから実装していってるみたいな感じ がしたもの。

一方こっちは、自分が使ってみて、あ、こういう関数が欲しいなーと思ったら初めて実装 するといった自分本位開発です。

あちらさんはなかなか良くできてます。3D機能も使えるしね。ちゃんとした機能を使いた い人はあっちを使ったらいいと思います。pyprocessingをモジュールとして実装していて 、pyprocessingの機能をimportして利用する感じ。

ということで、こちらの存在意義がほぼなくなってしまったんですが、まぁ自分用に気が 向いたら機能追加するかも。で、同じ名前ってのもなんなのでプロジェクト名変更しました。

DoodleCray

です。クレヨンで紙にちょっとらくがきするみたいな使い方ができたらなと思うので、い たずら書きって意味のdoodleとクレヨン(crayon)の途中までを取りました。

あ、ちなみにくやしかったので、あちらさんからこっちでも使えそうなサンプルコードを 2つほどパクってみましたw

  • sample/sketch_circles.py
  • sample/sketch_widthandheight.py

ってな感じです。


Fri, 22 Jan 2010

ProcessingとnodeBoxと時々pyProcessing

Processing っていうプログラミング言語というか開発環境があって、非常に簡潔な 記述で視覚的なものが作れるってことに感動して一時期興味を持って、サンプルコードを 見たり本を買ったりしてた。

ただ実際に書きだしてみると段々C言語風の文法が面倒くらくなってきた。

またprocessing.jsという、Processingのjavascript実装があることも知った。 ただこれは文法もProcessingそのものでjavascript風にしたものではなくProcessingその ものだった。そこまで移植しきったことに感心はしたものの使いたいものとはちょっと違う。

もちろんpythonにはpygameやら pyglet と言った視覚的なものを作るライブラリが揃 ってるのは知ってるしちょっとだけ使ったこともあるけど、ちょっと使うのが面倒だな、 と感じていた。

できれば簡潔な記述、簡単な関数呼出しはそのままにPythonの文法で記述したいな、と思 いpyProcessingというスクリプトを書き始めた。

ちょっと動いたのと、忙しくなってきちゃったのでしばらく放置してたんだけど、今日 twitterで NodeBox なるものの存在を教えてもらった。

tkuro11 Python版Processing改ってかんじかな RT @shunuhs: nodeboxってなんぞ?

みてみたところ、まさしくPython文法で書けるProcessingという感じだった。なのでこの コンセプトにも需要がある んだーと いうのとNodeBoxはMac OS専用みたいなので、ちょ っと遊ぶくらいの需要はあるかも?と思ってまだまだ超初期バージョンのコードだけど晒 してみることにします。

2010/01/24 補足:プロジェクト名をDoodleCrayに変更しました!

http://bitbucket.org/shunuhs/pyprocessing/

制限やら注意点としては、

  • 要pyglet。1.1.3しか試してません。
  • Ubuntsu8.2, Python2.5, pyglet1.1.3の環境でしか試してません。
  • y軸方向はprocessingに合わせたので上から下方向です。openglの座標と逆。
  • processingではsetup()/draw()なしで記述できたけど、必須です。
  • global変数を使う場合には、read onlyであっても関数内で変数にアクセスする場合に はglobal宣言が必要です。
  • 2Dのみです。

あとは興味がありましたらサンプルやらコードをご覧下さい。

サンプルコードを動かしたらこんな感じ。

対応するかどうかは別にして、動かない、とかこうして欲しいってのがありましたら、 私が聞いて、そういう使い方があるんだーとほくそ笑むのでお知らせ頂ければと思います。


Thu, 15 Oct 2009

たこさん

先日チヂミを食べてた時に上の娘さんが、チヂミに入ってたタコをよけてたので、

私:タコ食べないの?
娘:いらない
私:タコ嫌い?
娘:たこきらーい
私:でもタコ焼き好きでしょー?タコ焼きに入ってるのこれと同じタコだよ?
娘:えっ!!

固まる。

私:知らなかった?w
娘:しらなかったー

随分な驚きようでおかしかったしかわいかった。


Tue, 06 Oct 2009

Alabica: 構文

大分空いてしまったけど自分用のメモなので忘れきる前にやったとこまで書きたいと思います。

書いてて思うけど、用語がちゃんと決まってないのでなんかふわふわしてるな。

前回、制御構文は前に出す方針だと書きましたが、具体的には下記のものを前に出しました。

  • 条件構文

    if/when/unless

  • ループ構文

    while/each/for

  • 関数、マクロ定義

    def/defmacro


  • if/when/unless
    • bool if [trueの時実行される] [falseの時実行される]
    • bool when [trueの時実行される]
    • bool unless [falseの時実行される]
>>> true if ["ok"] ["ng"] print
ok
  • while/each/for
    • bool while []
    • list each []
    • 開始 終了 間隔 for []
>>> true while ["loop" print]
loop
loop
 …

このままだと無限ループになるので条件文等で脱出する必要があります。

breakコマンドはありません。

whileは常にスタック先頭の値を評価するので、ループを終了したい時にはスタックにfalseを積みます。 >>> true while ["loop" print false] loop

とすると一回で終了です。 listは初めてでてきましたが、Pythonのリストと同じで、実はquoteと同じものです。

>>> [1 3 5] each [print]
1
3
5

eachはリストの要素を順にスタックに積んで行きます。

>>> [1 3 5] each [as $i $i 10 + print]
11
13
15

みたいに変数に受けて使うこともできます。

forは開始、終了、間隔を指定し、順にスタックに積んで行きます。

>>> 5 10 2 for [print]
5
7
9

今日はここまで。関数の話が残っちゃったけど、次回に廻しします。


Wed, 16 Sep 2009

新入社員から寝ぼけたメール来た

久しぶりにお気に入りの2chまとめページがあったのでメモ。

「新入社員から寝ぼけたメール来た」のまとめページ

件名 海の日(カモメの絵文字)

内容 >>1さんは何してました?
   わたしは海の日にちなんで海を見に行きました!(敬礼っぽい顔文字)
   何だか水が冷たくって泳げませんでした……(凹んだ顔文字)
   今度みんなで行きましょー!(楽しげな顔文字)
   そう言えば>>1さんから何件か着信あったみたいですケド、
   気が付かなくてごめんなさい(あせった絵文字)
   何かありました?


ええと、うちの会社は今日休みじゃなかったんだよね……

まさか、これで始まる物語にこんなにひきこまれるとは思わなかったな。 ぜひドラマか映画にして欲しい。

ちなみにクライマックスを電車の中で携帯で読んでたので、涙と鼻水がでてしまって困った。 マスクしてたので鼻水はなんとかなったけどw