Archive for the 'processing' Category
[Processing]0138リリース
2008年5月31日に、Procrssing 0138がリリースされました。ProcessingのDownloadページからダウンロードできます。
0137から0138には、以下のような変更点があります。(適当和訳)
- 0136以降で、最初に表示したスケッチウィンドウ以外がでコードが実行できていなかった退行バグを修正。
- ライブラリを読み込んだ時の「expecting EOF, found …” 」というバグを修正。
- Exportボタンが押されたときのデバッグ出力を削除。
- Mac OS XでのProcessing.appのエンジンをJava 1.5に切り替え。
- その他バグフィックス。
0136、0137、0138と1日おきにリリースが行われていることから、0136系はまだ安定しなさそうですね。退行バグも発生していることからも、開発版として見守っていたほうがよさそうです。
No comments[Processing]0137リリース
2008年5月30日に、Procrssing 0137がリリースされました。半年振りのリリースですね。ProcessingのDownloadページからダウンロードできます。
0135から0137には、以下のような変更点があります。(適当和訳)
- 新しいProcessing実行プログラム
- stopボタンが適切に動作する。
- スケッチのシャットダウンが正しくできる。
- エラーハンドリングの向上した。
- そのうちデバッガもサポート。
- スケッチの起動がほんの少しだけ遅くなった。
- 正しく動くように移行しようとするときに少し混乱するかも(たとえば変なエラーが出るとか)。
- Java 1.5のエンジンに対応。ただし1.5で追加されたジェネリクスや拡張for文、enumなどは対応していない。
- XMLライブラリをNanoXML-LiteからNanoXMLに。少し容量が増えるが、それだけに機能も豊富。
- ライブラリの読み込み方法のバグを解消。ライブラリによっては動かなくなるかも。
- curveTangent()メソッドの実装。
- Candy SVG ライブラリが二次方程式的なカーブをサポート。
- PDE上で、[Ctrl]+[/]キーでコメント・アンコメントが可能に。
- EeePCに対応するためにウィンドウサイズの初期値を変更。
- リファレンスの更新。
- saveStream()メソッドのstaticバージョンを追加。Fileオブジェクトに使える。
- openStream()メソッドをcreateInput()メソッドに改名。
- createOutput()メソッドを追加。OutputStreamを生成する。
- その他バグフィックス。
[Processing]Processing用のGeSHiハイライトファイルを作ってみた
Processing用のGeSHiハイライトファイルを作成しました。MovableTypeからWordPressへの移行作業の副産物なんですが、とりあえず動いているし、ハイライトや関数リンクも大体問題ないので公開します。
GeSHiを使用しているシンタックス・ハイライト系であれば、きっと動くと思います。ざっと例を挙げましょう。
- WordPress
- PukiWiki
- NucleusCMS
ダウンロードは以下のリンクです。
私はWordPressのiG:Syntax Hiliterプラグインを使っているので、プラグイン ディレクトリのsyntax_hilite.phpのdoHilite()関数のswitch-case文に以下を追加しています。
-
// Processing Highlight
-
case "p5code":
-
$mType = "processing";
-
$mTypeShow = "Processing";
-
break;
こうすることで、p5codeというタグでハイライトができるようになります。
No comments[Processing][仕様]外部ライブラリ(*.jar)の設置方法
Processingで高度なことをやろうとすると、Processingに標準搭載されていないProcessing用ライブラリや、Java用のライブラリを使うことがあるかもしれません。今回は、そういった外部ライブラリはどこに置けば良いのかを調べてみました。
1. codeフォルダに置く (一番簡単、その場限り、古くからの方法)
一番簡単な方法としては、該当スケッチのフォルダに、codeフォルダを作成して、その中に外部ライブラリのjarファイルを置きます。フォルダ構造だと、以下のようになります。
- SampleSketch
- code
- SomeExternalLibrary01.jar
- AnotherExternalLibrary01.jar
- ***.jar
- SampleSketch.pde
- code
codeフォルダの中に置いた外部ライブラリのjarファイルは、自動的にProcessing側が判断して読み込まれます。ただし、関係のない*.jarファイルを置いていても読み込まれてしまうので注意が必要です。Java Appletにエクスポートするときに関係のないライブラリまで一緒にパックされるので、アプレットのファイルサイズがその分だけ増えてしまいます。
codeフォルダの中に置く方法は、Processingの古いバージョンから使われている方法です。この方法では、スケッチの数だけ外部ライブラリのjarファイルが増殖してしまうという欠点がありました。その欠点を補うべく、今のProcessingでは新しいライブラリシステムが提供されていて、そちらの利用が推奨されています。
2. ライブラリシステムを利用する (少し複雑)
いつからサポートされたのかはわかりませんが、前述のとおり、今のProcessingでは外部ライブラリを効率よく呼び出すための仕組みが提供されています。少し構造がわかりにくいかもしれませんが、いくつかフォルダ構造例がでてくるので、悟ってもらえると助かります。
このライブラリシステムでは、jarファイル名、フォルダ構造、設置場所の3つの決まりがあります。
2-1. jarファイル名
jarファイル名は、A~Z、a~z、0~9、_(アンダーバー)の63文字の組み合わせでなければなりません。また1文字目が数字であってもいけません。もちろん拡張子の「.jar」は例外です。もし、この規則に当てはまらないjarファイル名であった場合は、自己責任でファイル名を変更しなければなりません。いくつか例を示します。
- OK internationalization.jar
- OK Sample007Example.jar
- OK traer_animation.jar (アンダーバーはOK)
- NG 007Sample.jar (数字で始まっている)
- NG traer_animation-1.6.jar (ハイフンとドットが含まれている)
2-2. フォルダ構造
フォルダ構造は、jarファイル名と同名のフォルダを作り、その下にlibraryという名前のフォルダを作り、さらにその下にjarファイルを置きます。たとえばsample.jarという名前のライブラリがある場合、フォルダ構造は
- sample
- library
- sample.jar
- library
となります。
2-3. 設置場所
設置場所の候補は2箇所あります。
1箇所目はProcessingのプログラム(processing.exe)が置いてあるフォルダの中のlibrariesフォルダの中です。このlibrariesフォルダは、video・net・opengl・pdfなどのProcessingに標準搭載されている追加ライブラリのためのフォルダですが、ここに追加しても問題ありません。ためしにsampleライブラリを追加してみると以下のようなフォルダ構造になります。
- C:\Program Files\Processing\libraries (私の環境)
- candy
- dxf
- javascript
- net
- opengl
- serial
- sample
- library
- sample.jar
- library
- video
- xml
設置したら、Processingを再起動(全てのProcessingエディタを閉じた後に再びProcessingエディタを起動)してみてください。以下のようにメニューアイテムが追加されます。

もう1箇所の設置場所がユーザーのスケッチブックフォルダ以下です。スケッチブックフォルダの場所は、Processingエディタメニューの[File]-[Preferences]で表示される設定ダイアログの[Sketchbook location:]に指定されているフォルダです。デフォルトのスケッチブックフォルダは、Windowsであれば「自分のアカウント\My Documents\Processing\」です。Mac OS Xであれば「自分のアカウント/Documents/Processing」です。このスケッチブックフォルダ以下にライブラリフォルダを追加します。ライブラリ用に「_libraries」というフォルダを作って、そこに入れるのがお勧めです。ためしにsampleライブラリを追加してみると以下のようなフォルダ構造になります。
- C:\Documents and Settings\自分のアカウント\My Documents\Processing (私の環境)
- _libraries
- sample
- library
- sample.jar
- library
- sample
- 2D (私の作業フォルダ)
- Work (私の作業フォルダ)
- 3D (私の作業フォルダ)
- Work (私の作業フォルダ)
- _libraries
設置したら、Processingを再起動(全てのProcessingエディタを閉じた後に再びProcessingエディタを起動)してみてください。以下のようにメニューアイテムが追加されます。

外部ライブラリを使えば、Processingの可能性はとても広がります。是非ともチャレンジしてみてください。
No comments
[Processing][仕様].pdeはインナークラス、.javaは別クラス
PDE(Processingの開発環境)を使っている人の中には、1つのスケッチ内で複数のタブを使っている人もいるかもしれません。複数のタブを使う理由としては、スケッチ本体クラスの他に別のクラスをつくるとき、ファイル(タブ)が分かれていた方が開発しやすいからだと思います。ちなみに、別のタブを開いた場合、ファイル内容は「タブ名.pde」という名前でスケッチのディレクトリに保存されます。
もしかしたら勘違いをしている人がいるかもしれませんが、PDEの標準の仕様では、複数のタブを開いてクラスを書いても、1つのタブの中にクラスを書いても、コンパイル結果は同じになります。どういうことかというと、複数のタブを開いて別のクラスを作っても、そのクラスはスケッチ本体クラスのインナークラスとして結合されるのです。別の言い方をすると、スケッチのディレクトリ直下にある「*.pde」ファイルは、全部結合された後、コンパイルされるということです。
Processing使い(ってなんて言うのかな?Processor?Processing Coder?)にとっては、基本的にはインナークラスになってくれる仕様のほうがありがたいと思います。別途クラスに分けていても、JavaとしてはPApplet派生クラス内のインナークラスなので、Processingの命令がそのまま使えます。インナークラス内で何事もなく描画命令が使えるのが一番の利点でしょう。
ではインナークラスにされると困る場合はどうすればいいでしょうか?(そんなことあるのかよ!って突っ込みはナシでお願いしますw実際にさっき困ったのでこの記事を書いているわけなのでw)PDEとは違うエディタで開発する?そんな必要はありません。PDEのタブの特別な仕様として、[New Tab]でタブを作るとき、タブ名の後ろに「.java」をつけると、pdeファイルではなくjavaファイルを作ることができます。タブ名に「.(ドット)」を使うことはできないので、普通は「_(アンダー)」に置換されてしまうのですが、末尾の「.java」だけは例外で、javaファイルを作るときの印だそうです。
[New Tab]からjavaファイルを作った場合、タブ名が「XXXX.java」という名前になっているので、一目でpdeファイルではないことがわかります。ファイル内容は、タブ名と同名でスケッチのディレクトリに保存されます。もし、途中からjavaファイルに変えたい場合は、Processing上で[Rename]するか、スケッチのディレクトリを開いて自分で拡張子を変えるかすれば、javaファイルにすることができます。もちろん、その逆でpdeファイルに戻すこともできます。
下の英文は、ProcessingのPDEについての解説ページ内のタブについての説明文です。勝手に太字にしてしまいましたが、今回の「.java」ファイルの仕様についても触れられています。
Tabs, Multiple Files, and ClassesIt can be inconvenient to write a long program within a single file.
When programs grow to hundreds or thousands of lines, breaking them
into modular units helps manage the different parts. Processing manages
files with the Sketchbook and each sketch can have multiple files that
are managed with tabs. The arrow button in the upper-right corner of
the Processing Development Environment is used to manage these files.
Click this button to reveal options to create a new tab, rename the
current tab, and delete the current tab. If a project has more than one
tab, they can also be hidden and revealed. Hiding a tab temporarily
removes that code from the sketch (it will not be compiled with the
program when you press Run).Tabs are intended for more advanced users, and for this reason, the
menu that controls the tabs is intentionally made less prominent.For programmers familiar with Java. When a program with
multiple tabs is run, the code is grouped together and the classes in
other tabs become inner classes. Because they're inner classes, they
cannot have static variables. Simply place the "static" variable
outside the class itself to do the same thing (it need not be
explicitly named "static" once you list it in this manner). If you
don't want code to be an inner class, you can also create a tab with a
.java suffix, which means it will be interpreted as straight java code.
It is also not possible to use static classes in separate tabs.
If you do this, however, you'll need to pass the PApplet object to that
object in that tab in order to get PApplet functions like line(),
loadStrings() or saveFrame() to work.Currently, the tabs get truncated when there are too many (Bug 54).
一応、PDEのソースコードレベルでも調べてあります。Sketch.javaのbuild()メソッド内の、
-
// check to see if multiple files that include a .java file
-
externalRuntime = false;
-
for (int i = 0; i <codeCount; i++) {
-
if (code[i].flavor == JAVA) {
-
externalRuntime = true;
-
break;
-
}
-
}
と
-
// 1. concatenate all .pde files to the 'main' pde
-
// store line number for starting point of each code bit
-
-
int bigCount = countLines(code[0].program);
-
-
for (int i = 1; i <codeCount; i++) {
-
if (code[i].flavor == PDE) {
-
code[i].preprocOffset = ++bigCount;
-
bigCode.append('\n');
-
bigCode.append(code[i].program);
-
bigCount += countLines(code[i].program);
-
code[i].preprocName = null; // don't compile me
-
}
-
}
ら辺をみれば、外部ファイルとして扱ったり、pdeファイル同士を結合したりしているような雰囲気がわかると思います。
No comments