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
ってな感じです。
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のみです。
あとは興味がありましたらサンプルやらコードをご覧下さい。
サンプルコードを動かしたらこんな感じ。

対応するかどうかは別にして、動かない、とかこうして欲しいってのがありましたら、
私が聞いて、そういう使い方があるんだーとほくそ笑むのでお知らせ頂ければと思います。
Python関西お泊り会で、IPythonを勧められ、下記の本に紹介があったので、個人的に気に
なったところのメモ。
TAB補間
通常のpython shellと違って、readlineとかほげほげしなくてもデフォルトで補間できる
magic functin
Unix Shellのようなものが使える。
magic functionといって、%xxxとして定義されている。%<TAB>で一覧が見れる。
cdやらaliasといった、一部のfunctionは%なしで呼べるようだ。また、%automagicがON
だと、magic functionの%は省略できる。.ipython/ipythonrcにてdefaultはONに設定さ
れている。
%automagicは呼ぶたびにON/OFFがtoggleする。
あと、magic functionにない、Unixコマンドは、「!xxxx」とすると使える。
便利そうなmagic function。
dhist : directory history
- もしくは、「cd -<TAB>」でも見れる
- 「cd -2」とかで移動できる
bookmark <short_name> <directory_path>
- bookmark -l : 一覧表示
- bookmark -d <short_name> : 削除
- cd -b <short_name> : ディレクトリ移動
psearch : python objectを名前で検索する。
- 例: psearch a*
- 代わりに、a*?でもok. *
who : interactiveに追加されたobjectを表示する。「who str」とかするとstr type
のobjectだけ表示するとかのフィルタリングができる。
hist : command履歴が見れる。
プロンプトに行番号を出してないと駄目らしい。
macro <name> line_num:
In[2] for x in range(10):
print x
みたいのを、「macro hoge 2」とかして登録して、以降hogeで呼び出せる。
ipython -cl ってするとpromptを従来のpythonと同じく">>>"にできる
便利そうなのでしばらく使ってみることにします。
携帯の画像をバックアップのためにコピーしてたら、同じ画像が複数コピーされちゃって
るので、同一画像を検出したいな、と思ってた。
で、画像の比較だからいくらか処理を省略するにしても、画素ごとに比較しないといけな
いと思いこんでた。でも類似画像の検出じゃなくて同一画像の検出だったら画素を比べる
必要ないんだね。個人的には目から鱗だった。
そう、単にハッシュを取って比較したらいいんだって。普通のファイルの比較と一緒だね。
簡単にスクリプト書いて試してみた。
import hashlib
import os
files = os.listdir("
.")
outlist = {}
for i
in files:
m = hashlib.md5()
m.update(file(i).read())
h = m.digest()
if h
in outlist:
outlist[h].append(i)
else:
outlist[h]=[i]
for i
in outlist:
if len(outlist[i]) > 1:
for j
in outlist[i]:
print j
print "
-----"
結果。
DVC00289.JPG
DVC00526.JPG
-----
DVC00211.JPG
DVC00220.JPG
DVC00262.JPG
-----
<略>
-----
DVC00212.JPG
DVC00221.JPG
うん、同一ファイルが検出された。本当は検出された画像を表示するとさらにいいね。
いまさらだけど、
すごい!一体どういうアルゴリズムなんだろうか。気になるわー。カナダの会社みたいだ
けど、Python使ってるみたい。
ns9logさんの所 の hgutils.vim を公開されているMercurialのページが格好いい。
単にMercurialを1.0.1にupdateしたらいいのかと思ったらどうやらそうではないらしい。
helpやらを探していたらみつけた。hgweb.configには下記設定を、
[web]
style = gitweb
各公開ディレクトリの.hg/hgrcファイルに下記のように記述するといいらしい。
[web]
style = gitweb
allow_archive = gz, zip
allow_archiveにて、最新バージョンを固めたものがダウンロードできるようになる。
素晴しい。早速自分のも対応させてみました。
