|
|
インストール
JRubyをインストールし、パスを通して下さい。
http://jruby.codehaus.org/Home
Processingをインスールして下さい。
http://processing.org/download/index.html
本ソフトウェアをチェックアウトして下さい。
$ svn checkout http://action-coding.googlecode.com/svn/trunk/ action-coding-read-only
svn/trunk/config.yamlをテキストエディタで開き、Processingのパスを指定して下さい。
p5home: /Applications/Processing 0135
簡単な使い方
svn/trunk/run.commandを実行します。
ファイルダイアログが表示されますので、以下のファイルを選択します。アプレットが起動されるはずです。
svn/trunk/examples/basics/arrays/array_objects.rb
別の起動方法として以下のものがあります。
$ jruby aco.rb examples/basics/arrays/array_objects.rb
テキストエディタで以下のファイルを開きます。
svn/trunk/examples/basics/array/array_objects.rb
47行目を以下のように書き換えてファイルを保存します。
p.stroke 4 * p.second, 0, 0
ストロークの色が赤に変わりましたか? ファイルを保存することで、Modクラスの定義が実行時に置き換わりました。 続いて、4行目を以下のように書き換えてファイルを保存して下さい。
size 300, 300
Processingをご存知の方なら、ウィンドウサイズが変わると予想したことでしょう。 しかし、setup()はアプレットの起動時に一度だけ呼び出されるだけですので、関数の定義が変わっただけでは反映されません。
プログラムを始めから実行したいときは、アプレットが表示されているウィンドウにフォーカスがある状態で、
⌘R (または Ctrl R)
と入力します。setup()関数が再び評価され、ウィンドウが大きくなります。基本的な使い方は以上になります。
なお、コーディング中にエラーが起きた場合も、スタックトレースを参考にコードを修正し、アプレットにフォーカスを合わせて⌘Rで再起動して下さい。
コマンドラインオプション
$ jruby aco.rb <オプション> ファイル名
とすることで、コマンドラインからアプレットを起動できます。 オプションは以下の通りです。
- -i, --interval=VAL ファイルの更新を監視する頻度を秒単位で指定します。デフォルトは0.1です。
- -n, --no-file-observe ファイルの更新を監視しません。単に作品を見せたいときに使います。
- -r, --reload-always ファイル保存時に、常にアプレットを再起動させます。
- -f, --fullscreen アプレットをフルスクーンで起動します。
- -d, --display=VAL 何番目のディスプレイでフルスクーン表示するか指定します。デフォルトは0です。
- -b, --bgcolor=VAL ウィンドウの背景色を指定します。デフォルトは0x000000です。
-fオプションを使用したサンプルは以下にあります。
svn/trunk/examples/3d_and_opengl/opengl/full_screen_app
PFontを使う
PFontを利用するには、事前にビットマップフォントを準備する必要があります。
- Processingを起動する
- メニューからTools => Create Font...を選ぶ
- 使用する書体と級数を入力し、OKをクリック
- メニューからSketch => Show Sketch Folderを選ぶ
- dataフォルダの中に.vlwという拡張子を持つファイルが作られているので、ソースコードと同じ階層にコピー
以上の準備ができたら、例えば以下のように書きます。
def setup
size 400, 400
background 0
fill 255
fontA = loadFont "CourierNew36.vlw" #書体のファイル名は書き換えて下さい
textFont fontA, 36
textAlign CENTER
text 'Hello PFont', 200, 200
endProcessingでは、リソースを格納するdataフォルダが作られ、ファイル名を指定する際のベースパスとなっていました。action-codingではソースコードと同階層がベースパスとなることを覚えておいて下さい。
Processing用ライブラリを使う
Processingのlibraries以下にあるライブラリをロードするには、ソースコードの先頭で
include_class 'クラス名'
と指定します。パッケージ単位でロードする場合は
include_package 'パッケージ名'
と指定します。以下に例を挙げます。
include_package 'processing.pdf'
def setup
size 594, 842
@pdf = beginRecord PDF, "RandomBook.pdf"
beginRecord @pdf
end
def draw
background 255
100.times do |i|
if random(1.0) < 0.2
stroke 255
else
stroke 0
end
sw = pow random(1.0), 12
strokeWeight sw * 260
x1 = random -200, -100
x2 = random width+100, width+200
y1 = random -100, height+100
y2 = random -100, height+100
line x1, y1, x2, y2
end
if frameCount == 768
endRecord
exit
else
@pdf.nextPage
end
endパラメーターの調整を手軽に行う
NodeBoxにはプログラム中にマジックナンバーを書く代わりに、スライダー等のGUIによってユーザーが調整できるパラメーターを作成する機能があります。
http://nodebox.net/code/index.php/Variables (のページの一番下)
同様の機能をControlというモジュールが提供しています。 これを利用するにはソースコードの先頭で、Controlモジュールをインクルードします。
require 'control.rb' include Control
続いて、setup()関数の中で以下のメソッドを呼び出します。
- slider(変数名のシンボル, デフォルト値, 最小値, 最大値)
- text_field(変数名のシンボル, デフォルト値)
- check_box(変数名のシンボル, デフォルト値)
- button(関数名のシンボル)
このようにすることで、GUIの値を自由に参照できるようになります。 例を以下に挙げます。
require 'control.rb' include Control def setup size 200, 200 smooth noStroke fill 0 slider :radius, 100, 0, 200 text_field :msg, 'hello' button :click check_box :visible, true end def draw background 255 ellipse 100, 100, radius, radius if visible end def click puts msg end
mousePressed及び、keyPressedについて
JRubyでは、イベントハンドラとしてのmousePressed()と、フィールドとしてのmousePressedの区別がつきません。keyPressedも同様です。action-codingでは、フィールドのほうに別な名前をつけて解消しています。以下の表を参照して下さい。
| Processingでのフィールド名 | action-codingでのフィールド名 | Ruby的な同義語 |
| mousePressed | isMousePressed | mouse_pressed? |
| keyPressed | isKeyPressed | key_pressed? |
RubyでProcessing用ライブラリを書く
ProcessingのAPIのほとんどを提供するPAppletクラスでは、ライブラリ作成者のためのイベントハンドラとして、以下を用意しています。
- dispose() アプレットの終了時に呼ばれる
- pre() drawが呼ばれる前に呼ばれる
- draw() フレームレートに従い、定期的に呼ばれる
- mouseEvent(MouseEvent e) マウス関連のイベントが発生すると呼ばれる
- keyEvent(KeyEvent e) キー関連のイベントが発生すると呼ばれる
- post() drawが呼ばれた後に呼ばれる
- size(int width, int height) アプレットのサイズが設定されたら呼ばれる
リスナーの登録はPAppletの以下のメソッドから行います。
- registerDispose(Object o)
- registerPre(Object o)
- registerDraw(Object o)
- registerMouseEvent(Object o)
- registerKeyEvent(Object o)
- registerPost(Object o)
- registerSize(Object o)
しかし、RubyのオブジェクトをregisterDispose等の引数に渡してもリフレクション関連のエラーが発生してしまいうまくいきません。このエラーを回避するために、IPAppletAdapterというJavaインターフェースを提供しています。このインタフェースをincludeすることで、あなたのRubyクラスをPAppletと協調させることができます。
非常にシンプルな例を以下に挙げます。
require 'java'
require 'rplib.jar'
include_class 'processing.core.PApplet'
include_class 'IPAppletAdapter'
class BoringLibrary
include IPAppletAdapter
def initialize(applet)
super()
@applet = applet
applet.registerDispose(self)
end
def dispose
#anything in here will be called automatically when
#the parent applet shuts down. for instance, this might
#shut down a thread used by this library.
end
end TextMateから使う
TextMateを使っている方は、以下の手順を踏むことで、エディタ内からアプレットを直接実行できるようになります。デバッグ情報やエラーもTextMateのコンソールに表示されるため便利です。
以下のバンドルをそれぞれダブルクリックしてインストールします。
svn/trunk/textmate/Run (action-coding).tmCommand
svn/trunk/textmate/Reload (action-coding).tmCommand
svn/trunk/textmate/Eval Line / Selection (action-coding).tmCommand
⌘, でPreferencesを開き、AdvancedのShell Variablesで以下の変数を追加します。
| Variable | Value |
| TM_JRUBY | jrubyのパス |
| TM_ACTIONCODING | svn/trunk/aco.rbのパス |
参考までに、私の環境では以下のようになっています。
| Variable | Value |
| TM_JRUBY | /jruby-1.1/bin/jruby |
| TM_ACTIONCODING | /works/action-coding/aco.rb |
以上で、セットアップは完了です。基本的な使い方は以下のようになります。
- 新規テキストを作成
- 言語をRubyに切り替え
- ⌥⌘R でaction-codingを起動
- コードを書く
- ⌘S で反映
- 必要に応じて4に戻る。
その他の機能も含めると、以下のようになっています。
| コマンド名 | ショートカット | 説明 |
| Run (action-coding) | ⌥⌘R | 編集中のファイルを対象としてaction-codingを起動 |
| Reload (action-coding) | ⌘4 | アプレットを再起動 (プログラムを始めから確認) |
| Eval Line / Selection (action-coding) | ⌘E | 選択テキストまたはカーソルのある行を評価 |
スコープについて
あなたが書いたコードは、以下のように変換されてから実行されると思って下さい。TextMateからEval Line / Selectionしたコードも同様です。
class MyApplet < PApplet <あなたのソースコード> end
そのため、スコープには十分気をつけて下さい。 例えば、ソースコードのトップレベルで以下のようなことはできません。
background 0
また、以下のようなコードも意図通り動かないと思います。
def hoge p "hoge" end hoge()
一方、以下はうまくいきます。
def self.hoge p "hoge" end hoge()
Sign in to add a comment

MacBook? + Mac OS X 10.5.2 + JRuby 1.1.1で動作確認してみましたが、run.shをダブルクリックしたらTextMate?で開かれてしまった以外は問題なく動作しました。これはすごいですね!
ありがとうございます。確かにダブルクリックじゃまずい場合がほとんどですね。敷居の低い起動方法はないものか・・
TextMate?を使う方法を試してみましたが、これは快適ですね。しばらく使い続けてみて、何か問題があればまたレポートします。
MacBook?? + Mac OS X 10.5.2 + JRuby 1.1.1で私も使えました。やーこれはいいですね。TextMate?と組み合わせてつかってます。
一応ご報告で既知であるかもしれませんが、はじめMacPort?でJRubyをインストールしたため、1.0.3とバージョンが古く、そちらでは上手く動きませんでした。
ご報告ありがとうございます。お恥ずかしいことに、JRubyのバージョンがいくつ以降であれば動くかを把握できておりませんので、参考になります。
Mac OSX 10.5.2 + jruby-1.0.3で触ってみました。サンプルムービーの通り挙動しました。これは驚きです!
いまさらながらダブルクリックの件ですが、拡張子を.shではなく.commandにすれば普通にコマンドとして認識されるようになるようです。
さらに、Platypusを使えばアイコンなども設定できていいのでは…と思って試したのですが、なぜかPlatypusでアプリ化した時のrun.shからはjrubyがcommand not foundになってしまいます。~/.profileでの$PATHを反映してくれないようです。
http://www.sveinbjorn.org/platypus
とはいえ、TextMate?から便利に利用できる今となっては大きな意味はないのかもしれませんが…。
情報ありがとうございます。取り急ぎ.shを.commandにリネームしておきました。
http://un-q.netのll_koba_llです
Mac OSX 10.4.11 + JRuby1.1.1で試してみました。 ほぼ動いたのですが、TextMate?のCommand+Sで更新が反映されませんでした。 Command+Eとかは動いてます。
もう少しいろいろ試してみます。
jruby aco.rb -r examples/basics/arrays/array_objects.rb で実行してみたら、ファイルを更新するごとに更新が反映されました。
こちらで色々試してみます。
ご報告ありがとうございます。
>ほぼ動いたのですが、TextMate?のCommand+Sで更新が反映されませんでした。
おっと、そうでしたか。。その際、何かエラーログなどが出ているようでしたら教えていただけると助かります。
ちなみに、setup()の定義を書き変えた場合は、⌘4でリロードしないとメソッド自体が呼ばれないので反映されていないように見えるのですが、その可能性はないでしょうか・・?
>ちなみに、setup()の定義を書き変えた場合は、⌘4でリロードしないとメソッド自体が呼ばれないので反映されていないように見えるのですが、その可能性はないでしょうか・・?
そのとおりでした。 ありがとうございまーす
>そのとおりでした。 ありがとうございまーす
それはよかったです。この点、説明が分かりにくくてすみません。
フォント利用の件ですが、事前に
とだけ書いたスケッチを実行するなどして使用できるフォントを確認した後、次のようにcreateFontを使うことでProcessingを起動せずに利用するということも可能です。
def setup size 400, 400 background 0 fill 255 fontA = createFont "CourierNew36.vlw", 36 textFont fontA textAlign CENTER text 'Hello PFont', 200, 200 end※この場合にはテンポラリにフォントが生成されるようです。起動時にフォント生成の時間が必要になるという問題はありますが、デモなどではお手軽かと思います。
釈迦に説法だと思うのですが、こういう方法もあるということで。;)
おお、動的にフォントを作成できるメソッドがあったとは、恥ずかしながら知りませんでした。ありがとうございます。
日本語書体のようなグリフ数が多いものであれば遅くて使いものにならないと思いきや、以下のようなコードでもあっという間に表示されますね。
def setup size 400, 400 background 0 fill 255 textFont(createFont("KozGoPro-Bold", 36)) textAlign CENTER text '日本語', 200, 200 endメニューからAll Charactersチェック付きでCreateFont?するより遥かに高速な気がしますが、これはどういうことでしょうか・・w
action-codingにとても興味があり、設定をして、動かしたいのですが、うまくいきません。 Mac OSX 10.5.2 + jruby-1.1.1、TEXTMATEを使用する方法で、挑戦しています。
ScriptMate?は起動するのですが、Processing 0135が動きません。
ScriptMate?の文章
ScriptMate? r8136 running ruby 1.8.6 (2008-04-22 rev 6555) [i386-jruby1.1.1] (/Applications/jruby-1.1.1/bin/jruby) >>> aco.rb
Program exited.
以上の用に表示されています。
svn/trunk/config.yamlのパスも、以下の用に変更しています。展開したフォルダもアプリケーションフォルダに入れてあります。
p5home: /Applications/Processing 0135
>JRubyをインストールし、パスを通して下さい。
とういうのも、検索エンジンなど調べた内容を試してみましたが、ちょっとよく内容がわかならなっかたのですが、参考になる様なサイトがあれば教えていただきたいです。
jrubyは以下に展開しています。
/Applications/jruby-1.1.1
乱文申し訳ありませんが、よろしくお願いします。
>ScriptMate??は起動するのですが、Processing 0135が動きません。
Processing 0135はライブラリとして使うだけですので、Processing 0135が起動しないこと自体は正常です。
>ScriptMate?? r8136 running ruby 1.8.6 (2008-04-22 rev 6555) [i386-jruby1.1.1] (/Applications/jruby-1.1.1/bin/jruby) >>> aco.rb
このログを見る限り、aco.rbをTextMate?で開いた上で⌘ + Enterしているように思われるのですが、もしそうだとしたら、aco.rbではなく新しいテキストファイルを作成した上で、⌘ + Enterしてみて下さい。すると、ファイル保存のダイアログが開くと思いますので、適当な名前で保存します。すると、今しがた指定したファイル名と同じ名前のウインドウが立ち上がると思うのですが・・
>>JRubyをインストールし、パスを通して下さい。
>とういうのも、検索エンジンなど調べた内容を試してみましたが、ちょっとよく内容がわかならなっかたのですが、参考になる様なサイトがあれば教えていただきたいです。
こちら、説明不足ですみません。TextMate?から使う限りは、PreferencesでTM_JRUBYという変数さえ正しく設定されていれば、jrubyにパスを通す必要はありません。
とはいえ、一応ご説明させていただくと・・
ホームディレクトリの.bash_profieというファイルをテキストエディタで開きます。なければ同じ名前で作成してください。続いて、以下の1行を追記してファイルを保存します。
ターミナルを起動し、以下のように入力します。
例えば、以下のようなバージョン情報が印字されれば正くパスが通っています。
.bash_profieは隠しファイルになっているため、Finderから見つけたい場合は以下を参考にして下さい。
http://netafull.net/macosx/014755.html
OSXでのパスの通し方は以下が参考になります。
http://homepage.mac.com/akihide/iblog/C1557102128/E1968370044/index.html
返信ありがとございます。感謝します。
現状をお伝えします。 http://www.metaphor.co.jp/file/action-coding-demo00.movのでもービー内では、画面左上に、動作確認用のウインドウが開いているのですが、それが動作しないのです。
>このログを見る限り、aco.rbをTextMate??で開いた上で⌘ + Enterしているように思われるのですが、もしそうだとしたら、aco.rbではなく新しいテキストファイルを作成した上で、⌘ + Enterしてみて下さい。すると、ファイル保存のダイアログが開くと思いますので、適当な名前で保存します。すると、今しがた指定したファイル名と同じ名前のウインドウが立ち上がると思うのですが・・
上記の作業ですとScriptMate?が、保存した名前で立ち上がりましたが、動作確認画面が立ち上がりません。
TEXTMATEは設定
TM_JRUBY = /Applications/jruby-1.1.1/bin/jruby TM_ACTIONCODING = /Applications/action-coding/aco.rb
以上のように環境設定を行っています。
現在気になってる点は、ScriptMate?の最下部にProgram exited.と表示されているのがおかしいと思っています。
お返事ありがとうございます。うーむ。そうですか・・ ちょっとどこでコケているか分かりかねるので、大変お手数ですが、以下の点をご確認後お知らせいただけると幸いです。
ほんとうにご迷惑おかけします。
・Processing 0135.appを起動して、examplesのフォルダのなか○○.pdeというファイルを数種類ドロップし、⌘Rを実行、小さい画面が立ち上がり、表示したり動いたりしておりました。
・簡単な使い方で、run.commandをダブルクリックすると、ターミナルで以下のようになって動かないようです。
Last login: Tue May 20 10:55:37 on console /Applications/action-coding/run.command ; exit; sakana-Macbook:~ fish_story812$ /Applications/action-coding/run.command ; exit; logout
・エラーメッセージについては、
ScriptMate? r8136 running ruby 1.8.6 (2008-04-22 rev 6555) [i386-jruby1.1.1] (/Applications/jruby-1.1.1/bin/jruby) >>> test.rb
Program exited.
です。右上に、copy outputというの出ています。
お手数ですが、よろしくお願いします。
>・簡単な使い方で、run.commandをダブルクリックすると、ターミナルで以下のようになって動かないようです。
そうでしたか・・。何のエラーもなくexit;となっているので、おそらくjrubyのパスも通っている状態ですよね。この段階でこけるとなるとTextMate?からでもやはり使えないと思います。
時間を割いていただいたにも関わらず申し訳ないのですが、現状で思い当たる点がなくなってしまいました。引き続き、この件で分かったことがあればお知らせしたいと思いますが・・