2008-03-13 23:44:39

NodeBox(3)

テーマ:Python
どうも動画が変換に失敗してしまって貼れないけど、跳ねてます。

NodeBoxを動かせる人はコピペして試してみてください。

こんどは、線をゴムみたいにしてみた。

ゴムジャンプ

ベジェ曲線の制御にだいぶ手間取ったけど、Wikipediaで定義を調べて風呂の中で考えたら、
制御点をボールの深さの4/3のところに置けばいいと分かってなんとかなった。


speed(15)
size(160,160)

def setup():
global height,hv
height = 0.0
hv = 0.0

def draw():
global height,hv
# Move the canvas a bit.
oval(65,height,30,30)
if height >= 70:
depth = height-70
hv -= depth/10
biyon(depth)
else:
hv += 1.5
nomal()
height += hv

def nomal():
stroke(0.2)
strokewidth(2)
line(0, 100, 160, 100)

def biyon(h):
y = 100+h/0.75
x = 80
nofill()
stroke(0.2)
strokewidth(2)
autoclosepath(False)
beginpath(0,100)
curveto(x, y, 160-x, y, 160, 100)
endpath()


あと、高さの更新タイミングと線の引くタイミングを間違って
なかなか位置取りが合わなかったのはご愛嬌。





AD
いいね!した人  |  コメント(7)  |  リブログ(0)
2008-03-13 01:34:40

NodeBox(2)

テーマ:Python
別にネタらしいネタもないので、しばらくNodeBox遊びが続くと思います。

前回の黒丸を跳ねさせます。

コードは以下

speed(15)
size(160,120)

def setup():
global height,hv
height = 0.0
hv = 0.0

def draw():
global height,hv
# Move the canvas a bit.
oval(60,height,30,30)
hv += 1.5
height += hv
if height >= 70:
hv = -hv
height = 70
stroke(0.2)
strokewidth(2)
line(0, 100, 160, 100)



黒丸跳ねた

QuickTime形式で書き出せたんですが、アメブロに貼る方法がわかりません。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2008-03-13 01:14:49

NodeBox(1)

テーマ:Python
NodeBoxというのを見つけた。
詳しくは、正確には2chのPythonのお勉強スレでのpydevcampで紹介されていたんだけど。

pydevcampの動画

Pythonでお絵描きするソフト、と私は捉えていますが、ほんとのところはどうなんでしょう?
なつかしのNxx-BASICで絵を描くプログラムを書いていた頃を思い出したんですが。
もちろん、Pythonなんで癒し度も抜群です。

とりあえず、丸を描いてみました。

黒丸
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2008-03-02 02:36:44

関数の再定義をエディタで行う関数

テーマ:Python
IPythonはPythonのインタラクティブモードとシェルを合わせたような便利な機能。
WindowsでもLinuxでもPythonを使ってテキスト処理が容易く出来る。
しかし所詮シェルなので、この上で関数定義などして間違って記述したときに訂正して再定義するのが面倒なんだよね。

↑キーでキー入力のヒストリーが表示されるけど、defから始まって最終行までを一つ一つ再入力しなければならない。かといって、エディタでファイルを開いてモジュールを定義するのも面倒だし、使い捨て関数の場合そのファイルを消すのを忘れないようにしないといけない。

というわけで、Historyに残った関数定義を一時ファイルに吐き出し、エディタで編集させた後、インタラクティブに戻ったときに関数を再定義するという関数を考えた。
インタラクティブモードから直接使うことしか考えていないので、別の関数から呼び出したら誤動作すると思う。

以下のように使う。

In [1]: def abc(s):
...: print s+'abc'
...:
In [2]: abc(0)
---------------------------------------------------------------------------
TypeError: unsupported operand type(s) for +: 'int' and 'str'
In [3]: import ptools
In [4]: ptools.editfunc(In[1])
In [5]: abc(0)
0abc



ソースコード。

import os,re,sys,tempfile

def editfunc(funcstr):
m = re.match(r'^def +([a-zA-Z_]\w*) *\(.*\) *:',funcstr)
if not m:
raise ValueError(funcstr)
funcname = m.group(1)
fd,fname = tempfile.mkstemp(suffix='.py')
os.write(fd,funcstr)
os.close(fd)
os.system('vim %s' % fname)
execfile(fname, sys._getframe().f_back.f_globals)
os.remove(fname)


ここではvimをエディタに使うことにしているけど、お好みに応じてどうぞ。
いいね!した人  |  コメント(0)  |  リブログ(0)
2008-03-02 01:17:12

癒し系言語

テーマ:Python
Pythonは自分にとって癒しだったりする。
グダグダになって仕事がどうでもよくなったりしたとき、Pythonでコードを書いていると「癒される~」って感じる。
これは、Pythonでの書き方が↓みたいになるからだと思う。

1.まず動くものを書く→とくにIPythonとかで書きなぐる
2.繰り返し使うために関数化したりする
3.ファイルに落としてモジュール化する
4.ベタベタな書き方(重複コードとか)のところを、関数分割したりイテレータ化したりする

これを進めていくうちに、どんどんコードが改善されていっているのがわかって満足感が湧くからだと思う。C言語とかJavaとかって改善進めようとしても途中で(難しさで)手が止まってしまって結局不満になってしまうことが多い気がするが、Pythonではあまり無い。
もちろん、改善できなくてそのまま捨てるコードもいっぱいあるんだけど。

よく、IPython上で関数を定義して、それを編集するのに苦労したので、IPythonの履歴をvimで開いて編集後、その関数を再定義する関数を書いたけど、会社で書いたのでここに貼るのはまた今度・・・。



いいね!した人  |  コメント(0)  |  リブログ(0)
2008-03-02 01:04:26

祝1年放置

テーマ:雑記
っていうか15ヶ月放置か。

前回、ブログのタイトルを変更したときも、1年放置したんだなと考えると、自分の執筆意欲の周期性が垣間見えてくるね。

この間、vimからPythonのコードを直接実行する方法をググってたら、自分の記事が引っかかって役立った。

昔の自分に感謝。


いいね!した人  |  コメント(0)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。