Category:Home/tutorial/strategy (Total 3 items)

Categories - tutorial/strategy

Libraries

fromhttp://www.nodebox.net/code/index.php/Libraries

NodeBoxは豊富な機能(例えば、Googleクエリーや画像の操作)を外部ライブラリをimportすることで拡張できる。
これらの全てのツールは単純な理由からNodeBoxから分離している。NodeBoxが全てを含んでいると、扱いづらく、複雑になるからである。

Libraries from the NodeBox site

NodeBoxのサイトには沢山の面白いライブラリがある。例えば、WordNethttp://www.nodebox.net/code/index.php/WordNet
フォトショップのようなコマンドを提供するCore Image http://www.nodebox.net/code/index.php/Core_Image
ライブラリのリストはこちら
http://www.nodebox.net/code/index.php/Library

これらのライブラリを使うには、まず、コンピュータにダウンロードする。
そして、NodeBoxが探すことができる場所でファイルを置く必要がある。:
その場所は、NodeBoxのスクリプトと同じフォルダか、Application Supportフォルダ内(~/Library/Application Support/NodeBox/)である。

そして、ximport()コマンドを使ってライブラリをインポートする。

注意点として、 wordnet.py libraryとpywordnetフォルダ(どちらもWordNetのダウンロードから)はdictionary.pyスクリプト(我々が丁度作成した)と同じフォルダに入れることである。

Python libraries

NodeBoxで書いたスクリプトは実のところPythonスクリプトである。
MacにはデフォルトでPythonがインストールしてあり、NodeBoxのプロジェクトに全てのPythonライブラリにアクセスしたりインポートしたりできる。

Pythonのライブラリのリストはここhttp://docs.python.org/modindex.html

次のステートメントでスクリプトへライブラリコマンドをインポートできる。

variable = ximport("library")

例えば、Pythonライブラリのリストからrandomライブラリを見る時、randomライブラリがリストをランダムに再要求するshuffle()コマンドを持つことが見える。
このコマンドをNodeBoxプロジェクトで使うには:

list = [1, 2, 3, 4, 5]
rnd = ximport("random")
rnd.shuffle(list) 
print list  
>>> [3, 4, 1, 5, 2]

何のファイルもインストールする必要は無い。NodeBoxはPythonライブラリが何処にあるか知っている。

For techies: why the ximport() command?

我々はimportステートメントよりもximport()をより好む。
何故なら、何故全てのコマンドが(importではなく)括弧を持つかを説明するステップを持ち去るからである。
さらに、ximport()は描画するコンテクストを参照したライブラリへ、パスし、ライブラリがスクリーンにものを描画出来る。

しかし、標準のPythonライブラリの為に、まだ、import と from a import b も好みで使用できる。

  • Comments (Close): 0
  • TrackBack (Close): 0

Commands

fromhttp://nodebox.net/code/index.php/Commands

NodeBoxリファレンスhttp://nodebox.net/code/index.php/Referenceの定義済みのコマンドとは別に、あなた自身でカスタムコマンドを定義できる。
コマンドを作成することは、スクリプトのある動作や断片を再利用するデザイン戦略である。

画像省略

例えば上の例では、花を描くための全ての動作(線と接続した10個のレッドーピンクの円)は、手軽なflower()コマンドにグループ化されている。
このコマンドは一回でも100回でも1000回でも呼び出せる。
花を描く方法を変更したければ、コードの1つの箇所を変更するだけである。

コマンドを定義することは、何度も使うことが出来る道具のセットを使って、道具箱を構成するのと同じである。

Command definition

シンプルな例として、独自に定義した header()コマンドを下記に記す。

def header(txt, x, y):
  fill(1, 0, 0)
  font("Dolly-Bold", 18)
  text(txt, x, y)

コマンドの定義はdefで始める。続いてコマンドの名前(関連性のある名前を付けよ)、次いでパラメータのリストが来る。
行の最後に:コロンを付けるのを忘れないように。これは、続くインデントされたステートメントがそのコマンドであるということをNodeboxに伝えるためである。

Naming conventions:

  • コマンドが何をするのかの記述となるような、シンプルで関連性のある名前を使え。
  • 小文字とアンダースコアを使えlower_case_with_underscores。(imagesizeのような不可欠なコマンドは除く)
  • コマンドがTrueかFalseを返すものなら頭にisを付けろ。: is_white, is_alive, is_big, ...
  • 値を変化させて返すコマンドには頭に動詞を付けろ。: adjust_contrast, strip_tags, ...

Parameters

コマンド定義はそれ自身では実行されない。:
あなたが代りにNodeBoxに何かを教えている。 (例えば、headerが何か?)
コマンド定義はスクリプトのどこかで呼び出される必要がある。
これが、パラメータを入れさせる所である。:
header()の定義がどうtxt,x,yを使用するかに注意せよ。

これらは変数の定義のように使用される。
一度コマンドが呼び出され、txt,x,yに実際の値を与える。

header("Templating", 20, 40)

これでNodeboxは、header()で定義された全てのコードに、textへ"Templating",xへ20、yへ40が実行される。

Return value

NodeBox内のコマンドが返す値を持っており、変数を保持できることに注意。
例えば、textheight(txt, w) は表示されたtxtのパラグラフの高さを、幅と共に返す。

def paragraph(txt, x, y, w):
  fill(0.2)
  font("Dolly-Roman", 14)
  text(txt, x, y, w)
  return textheight(txt, w)

定義でのreturnステートメントは値を返す。
これは数値、文字列、リストなんででもできる。
returnステートメントは定義の最後にいつもくる。

Example

下の例では、2つのスクリプトとも同じ動作をする。
片方は上から下へプレーンに使用していて、片方はテンプレートを使用している。
実際には最初のコードの方が短い、しかし、2つでなく20個のパラグラフを書くことを想像せよ。
…フォントを定義して、カラーもまた定義して…結局ロボットに何か説明する別のロボットが欲しくなるだろう。

そのうえ、ヘッダのカラーや、水平マージンを変更するには2番目のスクリプトがはるかに簡単である。
なぜなら、header()の定義を変えるか、変数xの値を変えるかのただ一回で済むから。

1st:plain top-to-bottom scripting.

fill(1, 0, 0.25)
font("Dolly-Bold", 14)
txt = "Without templating"
text(txt, 20, 30, 200)

fill(0.2)
font("Dolly-Roman", 14)
txt = "Without templating, ..."
text(txt, 20, 50, 200)

fill(1, 0, 0.25)
font("Dolly-Bold", 14)
txt = "Messy"
text(txt, 20, 120, 200)

fill(0.2)
font("Dolly-Roman", 14)
txt = "This makes your script...."
text(txt, 20, 140, 200)

2nd:The same script with templates.

def header(txt, x, y):
    fill(1, 0, 0.25)
    font("Dolly-Bold", 14)
    text(txt, x, y, outline=True)
    return textheight(txt)

def paragraph(txt, x, y, w):
    fill(0.2)
    font("Dolly-Roman", 14)
    text(txt, x, y, w, outline=True)
    return textheight(txt, w)

x = 20
y = 30
w = 200

y += header("With templating", x, y)
txt = "With templating, ..."
y += paragraph(txt, x, y, w) + 10

y += header("Clean", x, y)
txt = "This keeps your script..."
paragraph(txt, x, y, w)
  • Comments (Close): 0
  • TrackBack (Close): 0

Repetition

fromhttp://nodebox.net/code/index.php/Repetition

繰り返し処理(Repetition)はコンピュータが本当に良いということです。
決して退屈させないし、何重にも同じ処理を頼むことが出来るし、貴方が繰り返し処理を嫌いになる事はないであろう。
そしてまた、計算が速いです。

The for-loop

プログラミング中に、複数回同じ事を繰り返す時、一般的にfor-loop(for文によるループ)を呼び出す。
for-loopは指折りで数える手をセットするのに似ている。
しかし、手の数は無限であり、数える指も無限である。

ステートメントは以下である。:

for variable in list: do stuff

最後に:コロンを付けるのを忘れないこと!

The variable part

変数は好きなようにどんな名前も付けられる(Variablesの項で記述済み)。
変数は現在どの指を数えているか保持する。
一般的な名前はiである。
これは、基本的な数学でカウンタがiと命名されることの名残である。

これは短い文字で、長い歴史を持つ良いしきたりである。

The list part

Listパートは数字、もしくは属性のリストである。
各エレメントが連続してVariableパートへ割り当てられる。
for-loopは唯、指を数えない。それはどのようにでも望むようにカウントできるし、numbers, strings, colorsと、どんなものでもListに入れることが出来る。

for i in ["apple", "pear", "banana"]:
  print i
>>> apple
>>> pear
>>> banana

一般的にリストとしてrange(n)コマンドを入れる。
これは0からnまでの数字のリストを返す。

for i in range(3):
    print i
>>> 0
>>> 1
>>> 2

The do stuff part

do stuffパートは繰り返し実行される必要がある、NodeBoxコマンドである。
それらはfor-ステートメント文から空白かタブでインデントする。
スクリプトはここでループを「捕獲」し、連続的に変数に割り当てられたリストを使って、それぞれのエレメントがあるまで、実行され続ける。

もちろんそれぞれのループに変数を使用できることは素晴しい所です。
上の例のように、小さなループを持った時、全てのフルーツを通過し、それぞれのフルーツをプリントする。
print i は抽象的なコマンドで、NodeBoxはiをそれぞれのリスト内のエレメントに置き換えてループする。

ステートメント文の最後に:を付けるのを忘れないように!

For-loops and random()

for-loopとrandom()はうまく一緒に動作する。
例えば100個の輪を作って、ランダムな位置に配置できる。
この方法は、スクリプトを実行させる度に、異なった構成の輪になる。

この方法での簡単なプログラミング「スタイル」である。

for i in range(100):
    x = random(HEIGHT)
    y = random(WIDTH)
    r = random(50, 100)
    oval(x, y, r, r)
  • Comments (Close): 0
  • TrackBack (Close): 0

Category:Home/tutorial/strategy (Total 3 items)

Entries in this Category
Tutorial
Library
Syndicate this site

RSS 1.0 Feed

Return to page top