[Processing][仕様]外部ライブラリ(*.jar)の設置方法

Written by uechoco 3月 22

 Processingで高度なことをやろうとすると、Processingに標準搭載されていないProcessing用ライブラリや、Java用のライブラリを使うことがあるかもしれません。今回は、そういった外部ライブラリはどこに置けば良いのかを調べてみました。

1. codeフォルダに置く (一番簡単、その場限り、古くからの方法)

 一番簡単な方法としては、該当スケッチのフォルダに、codeフォルダを作成して、その中に外部ライブラリのjarファイルを置きます。フォルダ構造だと、以下のようになります。

  • SampleSketch
    • code
      • SomeExternalLibrary01.jar
      • AnotherExternalLibrary01.jar
      • ***.jar
    • SampleSketch.pde

 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

となります。

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
    • pdf
    • serial
    • sample
      • library
        • sample.jar
    • video
    • xml

 設置したら、Processingを再起動(全てのProcessingエディタを閉じた後に再びProcessingエディタを起動)してみてください。以下のようにメニューアイテムが追加されます。

processing_pde_add_library_to_libraries.jpg

 もう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
    • 2D (私の作業フォルダ)
      • Work (私の作業フォルダ)
    • 3D (私の作業フォルダ)
      • Work (私の作業フォルダ)

 設置したら、Processingを再起動(全てのProcessingエディタを閉じた後に再びProcessingエディタを起動)してみてください。以下のようにメニューアイテムが追加されます。

processing_pde_add_library_to_sketchbook.jpg

 外部ライブラリを使えば、Processingの可能性はとても広がります。是非ともチャレンジしてみてください。

?

[php]18分で学ぶEclipse+PDT

Written by uechoco 3月 21

 Eclipse+PDTの使い方を学んでいるのですが、PDTの機能を簡潔にわかりやすくまとめているムービーをYouTubeで見つけました。

YouTube – PHP Tutorial: Using Eclipse+PDT as a PHP IDE (Part 1 of 2)
YouTube – PHP Tutorial: Using Eclipse+PDT as a PHP IDE (Part 2 of 2)

 PDTのダウンロードから一通りのIDEの機能までを、画面操作を見ながら覚えることができます。ナレーションが英語なのですが、そんなに苦ではありませんでした。9分x2で、計18分あればPDTのエディタ機能が使えるようになります。

 ムービーの構成はこんな感じです。

Part 1

  • PDTのダウンロード
  • Eclipseの起動
  • PHPパースペクティブへの切り替えと、お勧めの小窓配置
  • プロジェクトの作成とファイルの作成
  • アウトライン
  • 入力候補
  • [Ctrl]+マウスオーバーで、リンク機能

Part 2

  • コードフォーマット
  • 関数一覧とマニュアル閲覧
  • タブをダブルクリックすると、エディタエリアの最大化←→元に戻す
  • TODO・FIXME([タスク]の追加)
  • 構文エラー、エラー一覧、エラー表示
  • PHPDocコメント
  • テンプレート機能(スニペットのようなもの)

 上のリストを見てもらえばわかりますが、18分のムービーの中にエッセンスがしっかり詰まっているので、そこらへんの解説サイトを見るよりも役に立つと思います。

[Processing][仕様].pdeはインナークラス、.javaは別クラス

Written by uechoco 3月 20

 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 Classes

It 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).

Environment (IDE) \ Processing 1.0 (BETA)

 一応、PDEのソースコードレベルでも調べてあります。Sketch.javaのbuild()メソッド内の、

Java:
  1. // check to see if multiple files that include a .java file
  2.       externalRuntime = false;
  3.       for (int i = 0; i <codeCount; i++) {
  4.         if (code[i].flavor == JAVA) {
  5.           externalRuntime = true;
  6.           break;
  7.         }
  8.       }

Java:
  1. // 1. concatenate all .pde files to the 'main' pde
  2.     //    store line number for starting point of each code bit
  3.  
  4.     StringBuffer bigCode = new StringBuffer(code[0].program);
  5.     int bigCount = countLines(code[0].program);
  6.  
  7.     for (int i = 1; i <codeCount; i++) {
  8.       if (code[i].flavor == PDE) {
  9.         code[i].preprocOffset = ++bigCount;
  10.         bigCode.append('\n');
  11.         bigCode.append(code[i].program);
  12.         bigCount += countLines(code[i].program);
  13.         code[i].preprocName = null;  // don't compile me
  14.       }
  15.     }

ら辺をみれば、外部ファイルとして扱ったり、pdeファイル同士を結合したりしているような雰囲気がわかると思います。

[雑記]人力CAPTCHA検索

Written by uechoco 3月 19

秋元@サイボウズラボ・プログラマー・ブログ: ロシアの人力CAPTCHA破りは日給3ドル?
http://labs.cybozu.co.jp/blog/akky/archives/2008/03/captcha-turk-3dollars.html

 ふと、ばかなことを思ったのですが、有名サイトのCAPTCHA画像を大量に集めておいて、ブログとかのコメント認証時に集めておいたCAPTCHAを表示して、コメントを書きたい人に入力させることで、高精度のCAPTCHA解析用のデーターが集まったり。

 あとは、CAPTCHAゲーム・ウィジェットとか作って、1時間に1回くらいポップアップでCAPTCHA画像が出てきて、パッと答えるだけで5ポイントくらいもらえて、溜まったポイントをあとで換金できるサービスとか。

 いろいろと問題はありそうだけど、こんなの誰だって思いつくか。

[php]PHPEclipse?PDT?RSE? Eclipseわかんなさすぎ。

Written by uechoco 3月 18

以前のバイト先での開発環境の名残で、未だにDreamweaverで開発していた私ですが、Eclipseを仕事で使う機会に恵まれて(?)、EclipseでPHP開発をすることにしましたLet's noteのメモリも1.5GBに増えたことですし。試してみて感じだのは、メモリを増やす前よりは断然軽快です。VMのFedora7(256MB設定、メモリ300MB消費)とEclipse(PDT、日本語化、メモリ300MB消費)とFirefox(メモリ160MB消費)を同時に起動しても全然問題ないです。

とりあえず、(まだ仕事を始めたわけではないですが、)セットアップを済ませようと思って、Eclipse 3.3.2 + PHPEclipse 1.2.0の組み合わせのものと、Eclipse 3.3.2 + PDTの組み合わせのものと、2つのEclipse環境を用意しました。両方ともPleiadesによって日本語済みです。(後者はPleiades All in one PHPで一発インストール)。

両方とも、[ウィンドウ(W)]-[設定(P)...]を見てみて、自分のわかる範囲(想像できる範囲)で設定をしてみました。PDTの本を前に買ったので、それを見ながらやったら簡単に設定できました。PHPEclipseのほうは勘でやりましたが、設定項目が似てたのでなんとかなったかな。エンコードもUTF-8をデフォルトにして、タブをスペースx4に置き換えるような設定もしました。

とりあえず、何かしようと思って、適当なオープンソースとしてOpenPNEのアーカイブを読み込ませてみました。

・・・・??

たくさんエラーと警告を吐きまくります。PDTのほうは、テンプレートファイルのSmartyタグとか、細切れのテンプレートのタグの開閉関係のミスマッチとかでエラーを吐いているようでした。PHPEclipseのほうは、意味のわからないエラーばかり吐いています。require_onceのファイルがないとかは許せるのですが、関数の中括弧が閉じてないとかそういうエラーが意味不明でした。もしかしたらPHPEclipseのパーサーは性能良くないのかな?

エラーは無視して、サーバーにファイルをアップロードしようと思ったのですが、アップロードの仕方がわかりません。PDTとかPHPEclipseにはアップロード機能とかないのかな?少なくともPDTのほうはhttp://localhostとかいう設定はしたんだけどなぁ。。。PHPEclipseも勝手にXAMPPのパスを読み込んだりはしているのに。。。うーん・・・PHPEclipse環境のほうは、プラグインとか全く入れてないので、ここら辺でストップして、PDTのほうに集中します。

いろいろいじってたら、RSE(Remote System Explorer)なるプラグインが入っていることを発見しました。名前的にいけそうな気がしますね。さすがPleiades All in One!!。

んーーーー(♪

んーーーー(汗

なんかこう・・・まずは設定パターンによって接続方法が違うのがピンとこなかった。VMでFedora7を動かしてるので「Linux」構成で接続プロファイルを作ればいいのかなって思ったんですが、SSHは繋がるのに、SFTPができなかったり、ファイル一覧が読み込まなくてショックでした。どうやら「Linux」構成だと、dstoreっていうRSE独自の接続プロトコルで繋ごうとするらしいです。しょうがないから別のプロファイルで「SSHのみ」構成を作ってみたら、こっちはSSHとSFTPが出現しました。

キタッ!!。これかっ!

って思ったんだけど・・・なんか違う・・・ファイルツリーが1つしかないから(2つ以上出せるのかわからないから)、ものすごく使いにくいFTPソフトだよ・・・プロジェクトのこのフォルダを、リモートのこのフォルダにアップロードってのが欲しいのにやり方がわからない。できそうな気がするのになぁ・・・

Eclipse使っている人って、ファイルのアップロードはどうやってるんですか??できれば教えていただきたいのですが・・・

関連:
[雑記]Let's note CF-W4のメモリを増設したよ
[php][書籍]『 Eclipse 3ではじめる PHP 5プログラミング入門 Eclipse PDT対応』