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のみです。

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

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

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


Sat, 07 Feb 2009

IPython

Python関西お泊り会で、IPythonを勧められ、下記の本に紹介があったので、個人的に気に なったところのメモ。

Python for Unix and Linux System Administration

ASIN: 0596515820


  • 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だけ表示するとかのフィルタリングができる。

      • who_ls, whosとかも類似コマンドである
    • hist : command履歴が見れる。

      プロンプトに行番号を出してないと駄目らしい。

    • macro <name> line_num:

      In[2] for x in range(10):
              print x
      

      みたいのを、「macro hoge 2」とかして登録して、以降hogeで呼び出せる。

  • ipython -cl ってするとpromptを従来のpythonと同じく">>>"にできる

便利そうなのでしばらく使ってみることにします。


Fri, 19 Dec 2008

画像の比較

携帯の画像をバックアップのためにコピーしてたら、同じ画像が複数コピーされちゃって るので、同一画像を検出したいな、と思ってた。

で、画像の比較だからいくらか処理を省略するにしても、画素ごとに比較しないといけな いと思いこんでた。でも類似画像の検出じゃなくて同一画像の検出だったら画素を比べる 必要ないんだね。個人的には目から鱗だった。

そう、単にハッシュを取って比較したらいいんだって。普通のファイルの比較と一緒だね。 簡単にスクリプト書いて試してみた。


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使ってるみたい。



Thu, 05 Jun 2008

MercurialのUpdate

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にて、最新バージョンを固めたものがダウンロードできるようになる。 素晴しい。早速自分のも対応させてみました。

  • 適用前
mercurial old style
  • 適用後
mercurial gitweb style