(タイトルにおもいきり誤字があったので直した)

naoyaのはてなダイアリー – 直交する技術から複数のものを学ぶ

先の結論から行くと、それができるようになると同時に、もうひとつ別のカテゴリの技術を身につけることで、飛躍することができるんだとも思います。そのもうひとつ別の技術が、いま持っている技術と近いほうがいいのか、遠い方がいいのか、需要があるものがいいのか、未開拓の分野のものがいいのか、それは組み合わせのバランスなんでしょうね。

これはメディアデザインとかインスタレーションとかメディアアートと呼ばれている分野ではその通りで、…というかこれが一番技術的には重要で、physical computingと呼ばれてセンサーやアクチュエータが埋め込まれてからはどんどん色々な技術を連結させるのが重要になった気がする。

普通にプログラミングはする。でも昔の様に全部Javaで作るのではなく、ハードウェアはマイコン、画面やカメラはFlash、パソコンの内部の処理は.netやJavaでやるといった感じに複数の処理系を使い分けた方が素早く作れる。なんで素早く作るかというと、やりたいことが伝わるのが一番重要だし、素早く作ればフィードバックが返ってきてデザインが更に洗練されるから。

毎回作り込む必要は無い。

やりたい事に適した処理系を選ぶには2つポイントがあると思う。まずその言語のライブラリを見て何が得意か調べる事と、他の処理系との連携方法を確認する事。

といっても今はそんな風に綺麗に分かれているのではなく、proce55ingやMax/MSPみたいに一つで何でもできるようなのもいる。

おおまかにまとめてみた。

■処理系の特徴

・マイコン(AVR、PIC、H8、ARM、BasicStampなど)

ボタンのON/OFF、センサーの使用、モーターなどの制御、パソコンを中に入れられない程の小さいデバイスを作る時はリアルタイムOSやTCP/IPを積んだりもする。

シリアル通信でパソコンのシリアルポートと通信する。

・Flash

ラピッドプロトタイピング的にGUIを作るなら多分これが最速。ベクターグラフィックとプログラミングを同時に書けるのは速い。昔はVBなどがこの位置にいたと思うが、コンポーネントの見た目そのものを作って配置するのが全部Flashの中でできるので強い。

カメラ入力、画面への出力ができる。Flash8でビットマップデータも扱えるようになり、画素解析もできるようになった。

fscommandでローカルの他のアプリケーションと、LocalConnectionでローカルの他のflashと、LoadVariablesでhttp、XMLConnectorでhttp上でXML通信などができる。

ファイル入出力まわり、特にディレクトリの中のファイルの一覧を取得できないので、単独ではデータの保存・読み込みに弱い。

あと長いstringの処理をすると固まる事がある。

・Director

Flashと同じくMacromediaの環境。昔は多かったらしいが今はあまり見ない。俺も使ったことが無い。

シリアルポートを直接扱えるらしい。

・.net

PCの中の事は全てできる。

ActiveXでMediaPlayerやAdobeAcrobatやFlashPlayerなどなんでも読み込んで操作できる。DirectInputでジョイスティックやマウスやカメラの入力もできる。

既にあるコンポーネントが強力なので、それを配置するだけでコードが書ける。超楽。

・Java

PCの中の事はだいたいできる。でもクラスの階層が深すぎて覚えにくいし、コード書いてると手が疲れる。

・Proce55ing

大体なんでもできる。実体はJava。ピクセルを簡単に扱えるのでカメラと画像解析ができる。

ハードウェア拡張のWireing、携帯機器向けのmobile Processingがある。

シリアルポートが使える。processing自身でwebサーバーも立てられるので大抵の処理系と連携させられる。

・webサーバー+LightWeightな言語(PHP、Perl、Rubyなど)

ローカルにapacheをインストールする。

ファイルや文字列やデータベースの処理に適している。強力な関数が揃っていて、ほとんど書かなくても大したことができる。httpやsocketやSOAPなどで他のアプリケーションと連携できる。Flashと相性が良い。

・python

これも評判の良いLightWeightな言語だが、さらにシリアルポートなどハードウェアも扱える。

・Phidgets、teleo

PCにUSB接続して、ハードウェアを扱える。モータからRFIDリーダまで何でもある。

phidgetsは.net、Java、Flashなどから扱えるライブラリがある。

・LEGO MINDSTORMS

プログラムが書けるレゴ。モーターとかも色々ついている。

SFCでは昔コレを使う授業があったらしい。

・Max/MSP、VVVVなど

音響機器などを扱うための環境だったが色々ハードウェアもソフトウェアもできる。jitterで映像も扱える。

・マウス/キーボード/ジョイスティックhack

分解して、改造してしまう。ジョイスティックのレバーやマウスのホイールをキーボード入力として取り出すソフトもある。実はこれがかなりスマートだったりする。設計も楽になる。

結局、デモは伝えたい事が伝わるのが一番重要。

でまあ、ダイナミックデザインの課題がproce55ingなんですよ。めんどい。

これからこの系統でプログラミングを勉強したいのなら、Flashがオススメ。本やサイトもたくさんあるし、簡単に派手な事ができるし、作った物をwebに公開できるから。