読者です 読者をやめる 読者になる 読者になる

Processingで少し発展的なことをしようとしたら引っかかること

matatsuna.hatenablog.com
で書いてあるのようにProcessingを使ったプログラミングの発表会がありました。
他のチームから質問を幾つかもらったので、まとめたいと思います。

ArrayListでint型を扱いたい

ArrayList型では文字列を宣言するときは

ArrayList<String>hoge=new ArrayList<String>();

と書きますが、int型を宣言するときはintではなく少し違って、

ArrayList<Integer>hoge=new ArrayList<Integer>();

と書きます。
intはIntegerの略です。

Stringの文字列比較は.equals

よくあるのが

if (hoge==hogehoge){
}

と書いてしまうのですが、これだと正確にできません。
正しくは

if (hoge.equals(hogehoge)){
}

と書きます。
詳しくはココらへんですかね?
【Java】Stringオブジェクトの(文字列)比較方法 - TASK NOTES

processing3系のminimインポートについて

processing3系ではよく使うminimやvideoのインポートが標準ではなくなったので、
スケッチ>ライブラリをインポート>MInim/Video
でダウンロードしてインストールする必要があります。
あとは2系と同じように

import ddf.minim.*;
import processing.video.*;

でいけます。
(Windos版とMac版で若干標準ライブラリーが違う気がします)

java.awt.List/java.util.Listやtwitter.XML/processing.data.XML

まずListについて

The type List is ambiguous

というようなエラーが出た時の対処法
同じ"型"の名前を持つ2つのクラスをインポートしてしまってる可能性が高いです。
この場合だと、

import java.util.*;
import java.awt.*;

この2つをインポートしてるかもしれません。
一番早い対処は使うクラス分だけインポートすることです。

import java.hoge.*;
import java.hoge.hogehoge;

上はhogeの一つ下の階層のクラスをすべて読み込むことになります。(オンデマンドインポートと言うらしい)
下のように読み込むクラスを使う分だけ指定することをオススメします。(単一型インポート)
詳しくはここへ
Javaのpackage・import・修飾子について - Qiita

Twitter4Jをインポートした状態でprocessing標準のXML型を使おうとした場合、

The type XML is ambiguous

と出ます。
これも同じように名前の衝突を起こしてます。
対策としてはprocessing標準のXML型を以下のようにします。

  processing.data.XML hoge;

こうすることでどのXML型か指定する事ができます。
衝突問題はよく起こるそうなので気をつけましょう~

リストボックスを出したい

HSPを以前勉強していたこともあって、はっきりした名称で聞いてくれたことがすごい助かりました。実際、ボタンとかたくさんあって名前がワカラナイことも多いのではないでしょうか?
参考
Windowsフォーム・コントロールの基礎(その1) − @IT

そんな中、javaは触りたくないと言ってたので、processing用のGUI系のライブラリーであるcontrolP5のサンプルを渡しました。
はっきり言ってちょっと失敗でした。なんといっても、サンプルが少ない!!
グッグたらたくさん出てくるライブラリーを紹介するべきでした。

controlP5のイベントがクラスで動かない/ドラッグアンドドロップがクラスで動かない

イベント型の関数を自分で作ったクラスの中に入れると動かないことが多いようです。継承とかprocessingの関係かなと思うのですが、ちょっとわかりません。
素直に、すべてのクラスの外に置きましょう。(サンプルがあったら、その関数の置かれてる場所通りにする)

Twitterをリアルタイムで取得したい

勉強会を以前行っておりそこでは単なるツイートとタイムライン取得だけだったので、リアルタイムにやりたいとのことで結構聞かれました。
Tweet4JのストリームングAPIを紹介しました。
勉強会の資料とサンプル

github.com

Androidの加速度センサーをPCで取得したい

自分の研究室のチームに「Arduinoのセンサーを使うよりもAndroidでサーバークライアント使ったほうが便利かもよ」と言ったら、そうするとの事だったので協力しました。
以下のサイトのソースコードが動いてくれたので比較的簡単にできたんじゃないのでしょうか?
forum.processing.org

音楽と同期させたいとのことだったのでUDP通信を選びました。
processingでUDP通信をする場合は「UDP」ライブラリーをダウンロードしてインストールする必要があります。

import hypermedia.net.*;   

これのインポートができたらOKです。
更に、processingのAndroidモードの環境についてもインストールする必要があります。それや加速度センサーの取り方いついてはAndroid開発の部分が多く占めてくるので後日記事を書きます。
主にAndroid開発が初めてのメンバーだったのでその辺りでのヘルプが多かった気がします。通信の書き方とかはノータッチです。

いろんな質問があった

「あ~そのエラーね」って言うような躓きやすいような事から「何それ?全くわかんない」と言うようなことまでたくさんありました。
いろんな人から頼られることは嬉しい事で、時には違うとの指摘を受けることもありました。短期間にありとあらゆるprocessingやjavaの問題をぶつけられたのは初めてで、正直疲れました。でも、みんながどう言うところで詰まりやすいか、どんなふうに書いているのか見れて、いい刺激になりました。よくわからないけど動く形にまで持ってく力はついたと思います。(きついけど.....)
自分が答えられる問題ならば答えてあげたいし、わからんくても一緒にググって考えてあげることぐらいならするので、どんどん頼って欲しい。プログラムはどんなにバグが多くても動いた瞬間が一番おもしろい、楽しい、感動すると思ってるのでそれを広めたい。事実、問題解決した瞬間みんな笑顔ww
P演習本番では自分が手伝った部分がこんなところに使われてるのか~と関心することが何回もありました。毎回、同級生の発想力には驚かされます。

FMS3期生の皆さん。2015年末から2016年始にかけて本当にお疲れ様でした。