arc の日記

はてなダイアリーから引っ越してきました。さらに新しい記事は https://junkato.jp/ja/blog/ で書いています。

シンポジウム(インタラクション2010, 一ツ橋記念講堂)

3月2日に神保町と竹橋の間あたりにある一ツ橋記念講堂で開かれたシンポジウムでデモ発表してきました。Pressingというタイトルで、ロボットとは全く関係なく、「プログラミングを再定義する!」というようなコンセプトで作っていた、半ばアート半ば研究という微妙な位置づけの作品です。初出は去年の国際学会のコンテストで、その強化版を出しました。

ふつうのプログラミングは、正しい文法で正しい語彙で正しい記述をすると、正しい結果が得られます。それが、プログラミングのいいところです。一方で、それゆえに、絵を描くとか詩を書くとか曲を作るといった、そのときの作り手の状態を直接直感的に反映した作品はできない。表現の手段としてのプログラミングということを考えたとき、精確さはある種の制約になってしまっている…のではないか?

そんなことを考えて(いや、実は直感で作っちゃったものに後付けした理屈なんですけど)プログラムのソースコード=テキストが持つ精確な情報を保ったまま、それに打鍵力という暗黙のパラメタを加えることによって「そのときしか書けないプログラム」というのを実現したのがPressingです。

分かりづらいですね。

例えば、

new Ball();

と書くと新しいボールが生まれる仮想的な世界があったとしましょう。プログラミングをやったことのある人にはお馴染みの、コンストラクタというやつです。Ballという名前の「もの」をコンストラクト(構築)する命令です。

どういうボールを作るかというオプションは何も記述されてないので、ふつうは単なる(デフォルトの)ボールが生まれます。一方Pressingの世界では、Ballと打ち込むときキーボードにどれくらい力を加えたかを見ています。具体的には、例えば0-255の範囲で100の強さで打ち込んだとしたら、テキストとしては上のように表示されていても、実際は次のように暗黙の打鍵力パラメタ100の加わったコンストラクタが呼ばれます。

new Ball(100);

デモしたPressingでは、100の大きさのボールができるようになっていました。(もしかしたら100の重さのボールでもいいかもしれません。そのあたりは、仮想的な世界をどう作るかによります。どうしたら面白いかな。)

この他にも、デモの実装では、色を混ぜたり*1リストのようなデータ構造に要素を突っ込んだり逆に取り出すときのアニメーション効果*2などに打鍵力が反映されるようになっていました。…いや、なっていたはずでした。見た目を綺麗にしたり、色々と凝ろうとしているうち、Pressingの実装が正しく動かなくなってしまって、前の日記で書いたように研究としての位置付けに悩んでいた件が重くのしかかっていたこともあって(というのも言い訳にしかなりませんが)時間切れのままデモに突入してしまいました。

デモに来ていただいた方とはほとんど言葉だけの議論になってしまって、何のための「インタラクティブ発表」かと…反省しきり。それこそ言葉(テキスト)だけでは伝わらないソフトウェアなので、後日せめて動画を作ろうと思います。

なお、表現手法としてのプログラム、という意味では産総研の久保田氏による絵画的プログラミング(Picturesque Programming/PDFファイル)と深い関連があります。こちらは実装として、http://crowkee.jp/というWebサービスがあります。

Pressingは作っている間じゅう、周りの人にさんざ「玄人好み」と言われて、最初はそんなことねーよと思ってたんですが、やっぱりけっこう変態的かもしれないです。デモで説明するたび、頭の上にハテナが浮かぶ人と琴線に触れたようで話が盛り上がる人とに二分されて、それはそれで面白かったです。

ほぼ確実に「どんな応用があるんでしょうか」と聞かれたんですが、すいません、分かりません。最初は教育用途にいいかと思ってそう説明してたんですけど「逆に混乱するでしょそれは」と指摘されて納得してしまいました。

*1:color = mix(red, green)と書いたとき、redを強く打つと赤寄りの、greenを強く打てば緑寄りの色がcolorに代入されます

*2:list.pop()と強く打つと可視化されたリストから勢いよく要素が飛び出してきます