言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

本についての考えにくさ

CBook の次の展開について考え出すと作業が完全に停止してしまった。次の展開とは、「本」というメタファを単なるプレゼンツールやアニメーションに留まらせず、あらゆる物事のある側面を表現する為に使えないかという事。

例えば、CBook は既に、アニメーション、ウィンドウ、プレゼンテーションという三つのモードを持っているが、これら三つのモード自体が、本のページの一つ一つと言える。また、HyperCardFlashPhotoshop のようなレイヤを持ったシステムを考える。それらレイヤもまた一つ一つがページと言える。

  • アニメーションを本とみなす。一つ一つのフレームがページである。
  • アニメーションの操作ツールを本とみなす。ページの入れ替えモード、描画モードなどはページである。
  • 好きにページの概念を拡張できる。画像のレイヤ(重なり方向)はページである。

これは、アニメーションを本の中に入れて、「本が入った本」という入れ子以上の複雑さだ。端的に言って、データ構造が違う。本が中に入った本というのは、ただ本の中に章立てがあって階層構造があるだけなので実は親しみやすいし、中身もただのツリー構造で済む。だけど、ある一枚を本のページとみたり、バック画像と見たりする為には、多次元の表のような構造が必要だ。表というのは二次元以上になるととたんに表現が難しくなる。

  • ページをツリーの枝と見た場合: あるページにたどり着く経路は一通りしかない。本 -> 章 -> ページ
  • ページを多次元な視点の一つと見た場合、あるページにたどり着く経路は複数。本 -> レイヤ -> ページ

ここで、未踏で Skeleton が不発に終わった一つの原因を思い出す。僕は何でも表で表現しようと思ったが、表で表現できるのは二次元までである。そして、二次元の2という数字は、なにかまともな事を表現するには足り無すぎる。

  • ツリーの階層構造には限界が無いが、表に比べて自由度が少ない。
  • 多次元の視点を真面目に表現しようとすると多次元の表が必要だが、それを分かりやすく表現出来ない。

Flash では、オブジェクトのある状態を表現するのに、レイヤとタイムラインという二つの次元を使う。シンボルを選択すると、シンボル編集のタブが開くがこれも別の次元と見る事が出来る。どう頑張っても三次元が限界か。ここではある種の割り切りが必要なのだが、割り切りの線引きが難しい。

ここで、本を「操作(プロトコル)」で考えてみる。操作で考えると頭が楽になる。本とは、順列のついた情報の集まりと見る。ページをめくると次の情報が現れる。この操作では、レベルの違う(例えば他の本のページ)に到達する事が出来ない。また、別の階層にも行けない。例えば百科事典の「索引」の巻を読んでいる時はどこまで行っても索引だけで、内容に到達する事は出来ない。別の階層に行くためにはメタ操作が必要だが、これを上手く記述出来れば良い。

階層も本であると容易に想像する事が出来る。例えば、部-章-頁 と分けられていたら、三ページの本だ。でも、さらに、本の閲覧モードやなんかもページにしたい時は?今の「ページ」が表示上ページだったり、章立の事だったり、表示モードの事だったりするさらなるメタページが要るのか?理屈は兎も角、やってられないなあ。

頭を冷やして抽象的に考えるとこういう事だ。ある n 次元空間を移動する事を考える。当然 n 個の変数をズルズル動かせばいいのだが、それは大変だ。典型的に移動する方向が決まっている場合、向きと移動量に着目すれば良い。典型的な方向の移動量をページ p と呼ぶ。n 個あるうち着目すべき変数を指定するためにメタページ q を定義する。すると p と q を使って、q1 番目の変数を p1 動かして、それから q2 番目の変数を p2 動かして。。。と言う風に操作的に移動できる。

座標軸に平行に移動する場合が多ければ、変数全てを毎回指定するよりも情報が少なく出来る(人間にとって優しい)。問題は、p は兎も角、q の理解が難しいだろうし、多分現実のニーズはこんなに単純では無い。が、とりあえずページとメタページだけで、どんな複雑な「本」のページも指定する事が出来る(これが役に立つアイデアかどうかは置いといて)。