Kasasagi’s memorandum

JavaとかProcessingとか。最近はAtcoderとか。

Processingはいいぞという話

どうもかささぎです。九州に行きたい。

 

本学で本日行われた文化祭で、電子情報工学研究部が作品展示を行っていました。

サーバとクライアント間の通信もできるプログラムなど、なかなか完成度が高くおもしろかったです。ただ一言、アプリケーションとしてエクスポートはしておいてほしいなと思いました(上から目線でごめんなさい)。

 

今回はその展示でもよく使われていた、Processingについて語りたいと思います。

自分の通う電子情報工学科では、一年にプログラミングの導入としてProcessingを習います。そして、二年でC言語を習い、それ以降は必要に応じてJavascriptPHPなどを軽く教えてもらう、という感じになっています。三年以降は授業で特定の言語について詳しく学ぶことはなくなるため、意識の高い人はC++Java,Pythonなど(たぶん)を自分で勉強し習得します。

ここで面白いのは、そういう人たちが高確率でProcessingを馬鹿にするのです。

今回はそういう輩の言い分に対してなんとか反論したいと思います。

 

 

Q1 認知度が低いなどから、将来役立たない

A. IEEE Spectrumが決めた人気言語ランキングを見てみます。

https://spectrum.ieee.org/ns/IEEE_TPL_2017/index/2017/1/1/1/1/1/50/1/50/1/50/1/30/1/30/1/30/1/20/1/20/1/5/1/5/1/20/1/100/

これを見るとProcessingは24位にランクインしています。

f:id:yh9092:20171104200325p:plain

SQLObjective-Cなどとタメを張れています。

このランキングは数千種あるといわれているプログラミング言語から、団体が人気の言語48個をピックアップして、作成されています。つまりProcessingは人気言語です。その中で真ん中あたりということは、悪くはないんじゃないでしょうか。(個人的にはモバイルアイコンがついていないのが気に食わないのですが)

Processingは簡単に環境を整えることができ、プログラミングもできること、きれいな描画が簡単にできること等から、プログラミングの勉強、デザイン系のプログラム(プロジェクションマッピングなど)、プロトタイプの作成などの用途に使われています。 つまり、ケースバイケースで役に立つ機会もあるのではないでしょうか。

 

ここからは技術系の話です。

Q2. 動きが重い。実行が遅い。

A. Processingはウインドウが必ず立ち上がり、その描画を毎秒数十回行っているため、コマンドラインのプログラムと比べ重いのは当たり前です。Javaで画面を作成して動かしても、大差ないと思います。ProcessingはコードをJavaに変換して実行しているため、Javaと実行時間に差はないはずです。(C並のスピードしか許さない人はごめんなさい)

 

Q3. エディタがダサい。Processing触ってんだなって思われるのがやだ。

Q4. 使えるライブラリが少ない。

Q5. 大がかりなプログラムを作りづらい。チーム開発がつらい。

Q6. void setup()とvoid draw()だけクラスにできないのがなんか腹立つ。

Q7. Javaでよくね?

これらのクソリプ紛いの不満を解決するのがこちらです。

f:id:yh9092:20171104202822p:plain

こちらは公式HPの方を参考にしました。

https://processing.org/tutorials/eclipse/

Intellijで開きました。eclipseでもうまくいくはずです。

processing.coreをインポートしてPAppletを取ってきて、それを用いてJavaとProcessingを別クラスで管理しています。

プログラムの解説をします。

gistd5a3e9bc413ecc2c2b5da28d32bafb46

 こちらはメインのクラスです。このクラスはJavaで記述できます。4行目のPApplet.main(String)では、引数に呼び出すクラス名をString型にしたものを入れます。あまり見ない記法かもしれませんが、Processingではファイル選択ダイアログを開くselectInput()やselectOutput()でも使うので、自分は初見ではありませんでした。

 

次にProcessingで記述するGUIbyP5クラスです。

 

gist3325051f90f670a8277c6a1d1dc3f03a

もろProcessingですね。これを普通のJavaプログラムのようにビルドし、ランすると、Processingのキャンバスが立ち上がり実行されます。

自分の好みのIDEを使えるためエディタ問題は解決し、ライブラリもJavaのものを利用できるため問題なく、チーム開発もGitで管理しやすくなるはずです。また、デバッグなども容易になるはずです。

Javaでよくねっていうやつは適当に描画したりOpenCV触ったりしてください。画像に図形を張り付けるだけでも、キャンバスの定義とかbitmap⇔mat変換とかめんどくさいから。

 

今回はこのくらいにしておきます。実はProcessingerを目指すものとしては恥ずかしながら、このProcessingをJavaで記述する手法は最近知りました。それまではjavaのライブラリの利用などのため、Javaで書いたコードをjarファイルにして、それをProcessingに追加していたのですが、Javaでコードを編集するたび、build artifactsしてできたjarを毎回追加というのがだるくて、あまり実用的ではありませんでした。このJavaでの記述ではあまりProcessingの動作を確認出来ていないため、いろいろ試していきたいと思います。

Processingについての質問や不満、意見があればコメントしてください。自分の技術力の範疇で分かれば答えます。

それでは少し長くなりましたが、さようなら。