航天機構
履歴
what's new
水城
self introduction
読書
bookreview
宇宙
space development
化猫
"GEOBREEDERS"
雑記
text
他薦
link
Send mail to: mizuki@msd.biglobe.ne.jp

1bitから始めるコンピュータ再教育キャンプ

Camp Computing

0000:

ここはツンドラどまんなかの、再教育キャンプ。

パソコンをエロサイトアクセスとエロゲーにしか使わないような、反体制的人物を収容し、(A:コンピュータについて根本的かつ包括的な理解を得る)もしくは(B:眼鏡っこのすばらしさに目覚める)まで、あんなことやこんなことを強制する収容所である。


さて、ここに収容者が二人。白く広いトイレに二人。小用便器に向かうと、目の前は格子窓。泥土の広場の遠く向こうに、白い平屋の建物がひとつ。

その建屋の窓から、誰かが手を振ったような。

「きょうは693か。ははっ、ツイてるぞ」

「なんだよその693って」

「25時から『バトルアスリーテス大運動会(TV版)』の再放送があるのさ」

「どうしてそんな事、確かなのかよ」

「ああ、向こうには地下連絡網からTV放映予定が流れているんだ」

「向こうって…あの建屋の。でも、どうやって」

たしか、一回手が出て、そして引っ込んだだけに見えた。指は奇妙に折られていて、知っている人は少なくなったと思うが、”ぐわし!”に見えた。

「彼の指が教えてくれたのさ」

「なあ、なんかの…暗号なのか?なぁ、教えてくれよ」

「ちょっと考えればわかるさ」



コンピュータとは、”考える機械”です。

違う? 我々のように、人間のように考えないじゃないか、って?

確かに、我々のようには考えません。しかし、聞きますよ、じゃあ、”考える”って、一体どういう事なんでしょうか。


例えば、他人が腕を組んでうーん、と唸っている、確かに、何か考えていそうです。でも、彼は寝ているのかもしれない。彼の寝たときの癖かもしれない。起きていても、ただ唸っているだけかもしれない。

しかし、そのあと、思考の成果、何か価値のあることを言ってくれたなら、”彼は考えていた”と知ることができます。唸っていなくても、ぽーっとした奴でも、鋭いことを言うなら、考えていた事は間違いありません。

つまり、極論を言えば、考えることと、言う事は等しい訳です。もっと言うなら、考える、ということは、情報を得て、情報を出すことです。

つまり、情報処理です。

以下に、情報処理の単純な例を示します。


「…あのー、秋子さん」

「了承」


また、入力情報は、外部からのものに限られません。


これまでの恥ずかしい記憶の数々を思い出していた。

「うわーっ、駄目じゃん俺っ!」


情報を貰って、情報を返す。返す情報はなんでも良いのですが、「ぷげー」とか返されても困ります。情報の持っている意味、これが肝心です。

以下に、最低限の意味を持った情報を返す例を挙げます。


「お前等は無敵のソルジャーだ」

「はい、そうであります教官殿」


兵士に許された返事は「はい、そうであります」か「いいえ、違います」の2種類。もし、彼に許された返事がイエスだけなら、彼の返事に意味は無くなります。何故なら、返事が確実に予測できるなら、返事を聞く必要はなくなり、つまり、無意味になるからです。

2種類から一つを選ぶ、これが、情報の基本単位です。単位名はビット。

全てはここから始まります。



0001:

再教育キャンプの個室の空気は暖かかったが、床は冷たく、椅子の無い室内では、足腰から熱を奪われるように思えた。

室内にはアニメしか写らないテレビと、良く知らないアニメキャラの等身大ポスターしかなかった。アニメキャラは当然眼鏡っこだ。

作業の内容や成果によっては、個人の持ち物は増やせるようだが、来たばかりの彼には何も無かった。

「”アレ革命”からわずか数年でこのザマか…」

まともに機能することすらできなかった旧政権末期、”オタクは悪”とするあからさまな弾圧に対して、オタッキスト過激派は武力で対抗し、そしてあっさりと政権打倒を果たした。

オタクの春が来たと、誰もが思った。しかし、またたく間に党は内部分裂し、反対者を追放し始めた。今、党を牛耳っているのはメガネスキー派だ。

午後6時、テレビをつける。

「…倉田英之の脚本ってどこか大味だよなぁ…」

もういちど考える。

693番。少なくとも693種類の可能性の中からひとつが選ばれた訳だ。

でもどうやって。漫然と指を折ってみる。

どうやって伝える?

自分ならどう伝える?

とりあえず、AかBか、どっちであるか伝える方法を考えよう。親指を立てるか、降ろすか、これでいける。じゃあ、Cを加えると、人差し指が居るな。

選択肢三つに、指二本か。じゃあ、選択肢4つだと……

……指は2本しか、要らないっ!


中指を使うと、8種類の選択肢が表現できることに気がつくまで、そう長くはかからなかった。5本の指で32種類、両手の指で、1024種類の選択肢を表現できる。

「…なるほどね」



二者択一、これは、与える情報にもよりますが、機械にもやらせることはできるでしょう。ハムレットの苦悩はちと荷が重いかもしれませんが、スイッチを入れたら灯りを付ける、スイッチを切ったら灯りを消す、というのは、二者択一の情報にたいして、充分に意味のある答えを返していると言えるでしょう。

つまり、最も単純な情報処理装置は、スイッチです。

switch

コンピュータは、スイッチを、トランジスタで作っています。数百万個のスイッチの集合体、それがコンピュータなのです。


では、三つの中から正しい一つを選ぶというのは?

switch

簡単ですね。正しい選択だけを出力に結線しておけばいいのですから。

しかし、三つのうち、二つが正しい選択だとしたら、どうします?

or

はい、そうですね。では、三つのうち、二つを同時押しするのが正解だとしたら?

and

はい。そうそう。

こういう、スイッチへの配線のしかたによって、入力から望みの出力を得る方法を、論理演算といいます。

しかし、この配線を好きなだけ弄っていて、ゲームとかもできるのか、って?

出来ます。どんなポリゴンだろうと、アニメーションだろうと。めっちゃ簡単な例を挙げれば三目並べ。

三目並べでは、マス目は9コ、一つのマス目は、A:何も無い、 B:こちらが印をつけた、 C:相手が印をつけた、 の三つの状態しか持ちません。最大で3の9乗のパターン、ゲームのルール上ありえないパターンを除けばおよそ半分、回転対称、線対称なパターンを除けば更に数分の一に減らせます。

その限られたパターンひとつひとつについて、最良である出力を返すようにすれば良い訳です。ゲーム盤面のパターンを入力にして、正しい出力を9個のなかからひとつ選ぶようにします。そして、その盤面のパターンを、数百パターンほど持っていればいいんです。

ね、出来るでしょう?

しかし、後で説明する仕掛けによって、更なる単純化が可能です。



0010:

彼はばし、と音を立ててテキストを閉じた。

コンピュータの動作原理の説明が、さっきのアレだけだったのだ。

テキストは、コンピュータの箱からの取り出し方、モノが揃っているかの確認、接続、そして電源の入れ方と進み、オペレーティングシステムについての適当でありきたりな説明をしたあと、「では、使ってみましょう」でアプリケーションの使い方へと…

連中はあくまでも、彼らをメガネスキーにする気なのだ。

トントン、とノックの音。

「おい、連れションしようぜ」


トイレの前には、見なれた顔が並んでいた。

「よし、次」

トイレに入ると、例の小用便器の前に、数人がいて、急げと手招きする。

窓の向こうの建屋に収容されているのは、よっぽどの大物らしい。その建屋の窓に、握りこぶしが見えた。

「通信再開」

誰かが言う。握りこぶしは、二本の手に替わった。

「311、よし、指をこう、しろ」

言われる前に、やってみせた。

「なるほど、じゃあ、そのままにしてろ」

ここの収容者は、紙や鉛筆といった筆記用具を与えられることは無い。もともとここは、旧政府の作った”IT革命に備えた合宿研修施設”で、ペーパーレスが建前だったのだが、その建前は今でも守られている。

もっともそれは、眼鏡っこ以外の萌えキャラを自家生産されることを防ぐためだったのだが……

廊下では別の奴等が、順に並んだ連中の指を見ながら、自分の指を折りつづけている。

「なにしてんだ」

「解凍だよ。あのアホパソコンのプロテクトの破り方がわかるんだよ」



これまで、スイッチは手で操作することを暗黙の前提にしていましたが、それでは手動式コンピュータになってしまいます。

スイッチを信号で、配線で操作するようにすること。これだけで、回路はずいぶんと変わってきます。例えば、一度ボタンを押すと、あとはずっと出力が出っ放しになる回路は、こういう感じになります。

latch

解除ボタンを付けると、こうなります。

latch and reset

これで、記憶装置ができました。一度信号を入れれば、ずううっと保持してくれます。これをずらっと並べれば、そう、例えば10個並べれば、その保持されたシグナルの表すパターンを1024種類も持つことができます。

これで、10ビットの記憶装置ができたわけです。

あとは、10メガビットの記憶装置が欲しかったら、この回路を10メガ個並べれば良いんです。

スイッチ、配線、そして記憶装置。この三つが、コンピュータの基本構成要素です。

そして、コンピュータとは、配線を自由に変更可能な、論理演算装置なのです。

この変更可能な配線のことを、プログラム、と呼びます。

さて、基本的な疑問に再び戻りましょう。コンピュータは考えることができるのか。

ここで一つの、歴史的な論文を紹介しましょう。


『計算する機械と知性 』 アラン M. チューリング


現在では、この論文の中に出てきたゲームは、「チューリングテスト」と呼ばれています。

人工知能とはすなわち、チューリングテストに合格する機械です。

振りかえって、今のコンピュータの姿を眺めてみれば、カラフルでキャッチーなグラフカルインタフェイス、ポリゴンなゲームとmpegビデオ再生、そしてWebウォッチング。

これ見たら、チューリング、泣きますね。



0011:

ここへきて2週間。

毎日のつらい作業(食玩フィギュア、当然全て眼鏡っコ、の着彩)の、2週間分の報酬を、配給所で受け取ってきた。

段ボールの中身は、パソコンだ。連中の洗脳の基本手段として、パソコンはごく初期のうちに支給される。タダで配らないのは、いたずらに壊されるのを恐れてのことだ。

セットアップののち、電源を入れる。OSが起動すると、どこか他所のサーバに自動的に接続する。目の前に座る彼を無視して。

こいつは、彼のパソコンでは無いのだ。彼は特定の場所のリードアウト資格しか持たない、ゲストユーザに過ぎない。めがねっこの絵や、めがねっこムービーは飽きるまで見ることができる。メガネゲーも遊べる。しかし、それ以上のことはできないのだ。

その日も、トイレでのデータ受信があった。ここの反メガネスキー組織の組織度の高さは驚くほどだ。並んだ十数人の列を、数人が何度も往復しながら、彼の手の示す数字を、足したり”排他的論理和を取ったり”していた。

「前とやりかたが違う気がするんだけど」

「ああ、パソコンを記録に使えるようになったんで、通信の圧縮度をあげたんだ」

「使えるように、なったのか!」

「…声が大きいぞ」

「すまん」

「しかし、どうやって、ログインできたのか」

「いいや、まだできない」

「じゃあ…」

「例えばムービー再生のときに、OSは一時的にしても、ファイルを作る必要が出てくる。我々書き込み不可能なユーザーが使ったとしても、だ。

その、一時的なファイルが置かれる領域、テンポラリフォルダへのアクセスが出来るようになったんだ。まだ、そこだけだがな」

「ふぅん」

「まあ、見てなって、すぐにお前さんもログイン可能になるだろうさ」



大量のメモリを用意しても、望みの領域にアクセスできなければ使えません。

そのため、普通コンピュータのメモリは、一列に並んだ”アドレス”で識別できるようになっています。

例えば、下の例では、4ビット単位で、アドレスのパターンを、00,01,10と変化させることで、異なる三つの領域へのアクセスができます。

switch

普通、4ビットコンピュータでは、扱うデータの単位は全て4ビットですから、アドレスの単位も4ビットならば、16種類の入力が可能です。そして、4掛ける16ビットの記憶に自由にアクセスできることになります。

8ビットコンピュータなら、8掛ける256ビット、16ビットコンピュータなら、16掛ける65536ビット。しかし、大抵のコンピュータではアドレスは強化されていて、更に多いアドレスビット幅を扱えるのが普通です。


ここで、もう一つの単位を導入しましょう。バイトです。1バイトは8ビット。8ビットというのは、ちょっと特別な数です。

コンピュータの母国である英語圏では、アルファベットは、大文字小文字合わせて52種類、数字を足して62、記号を足して95、文章を記憶するにはこれだけの種類を識別する必要があります。

これを収めるには、7ビット必要です。余った部分に制御信号を足して128種類、これがアスキーと呼ばれる符号規格です。これをデータ通信するときに、1ビットの制御信号を足して8ビット単位で通信は行なわれていました。

この通信形式は、コンピュータの登場以前から、テレタイプと呼ばれて普及していました。だから、コンピュータはこの規格をサポートする必要があったのです。

また、8ビットというのも、2の3乗ぴったりで、コンピュータ的にきれいに割れる数字でした。英語圏では、1バイトひと文字で、記憶容量を見積もれます。

日本では、漢字をサポートするために、ひと文字に2バイト使っています。また、1バイト単位と2バイト単位の文字が、平気で混ぜられています。あなたが読んでいるこの文章は、なにをかくそう、その混合形式で出来ています。

アドレスを16ビットに拡張した8ビットコンピュータの記憶容量は65536バイトになります。また、10ビット桁上がりするごとに、単位にキロ、メガ、ギガという言葉が付きます。1キロは1024、だから65536バイトは、64キロバイトです。

昔のIBM PC-ATはアドレス幅が20ビットありました。1メガバイト扱えることになります。



0100:

食堂へ行く道すがら、いつもの奴から声をかけられた。

「お前のパソコン、具合はどうだ」

「俺のパソコンじゃない」

「そうだな、そりゃそうだ」

「…なぁ、排他的論理和を取る、ってなんのことだ」

「論理演算さ。アンドとかオアとか、聞いたこと無いか」

「いや」

「アンドってのはつまり、二つの入力をみて、同じだったら、その入力を出力してやる、という演算だ」

「…複雑そうだな」

「いんや。俺アンドお前、ボニーアンドクライド、同じなら良しってだけだ。で、オアはな、俺かお前か、生か死か、どっちでもオッケーって演算だ」

寒い渡り廊下を足早に渡りきる。

「で、肝心の排他的論理和は…」

そこで言葉が途切れたのは、緑色の厚手の制服を着た生活監督監の姿を認めたからだ。何かあったに違いない。

全員が食事を受け取り、席に付くと、生活監督監が食堂奥へと歩み出た。いつもは騒がしい食堂も、今は静まり返っている。

奴はおもむろに、奥の白い壁に、何かの紙を張り出していた。CGのプリントアウトだ。

「セリオ、か…」

「ああ、セリオだが…ひどい」

誰かの手書きのCG、多分この中の誰かが描いたのだろう。しかし、今はその絵のキャラクターの顔には、後から強引に描き足された眼鏡があった。

「実に、悲しむべきことが起こった」

生活監督監の足音が、コツコツと食堂に響く。

「二重に悲しむべきことだ。馬鹿が、我々に隠れて、勝手に、規則を破って、こんな絵を描いていた! 規則破り! 団体生活も満足にできないのか!

更に、メガネを描き忘れた! ロボ子を描いておいて、描き忘れたのだ!

全く、鳥山明画伯の時代から、ロボ子には眼鏡ときまっとろおがぁあああ!!」

奴の絶叫が響く。

絵を描いた奴は、相当の労力を注ぎ込んだ筈だ。はっきりとドットが見える。色は8色、直線が多く、塗りはアニメ、ベタ塗りだ。しかし、一体どんなツールで描いたのか。ツールなんて…

「ははっ、喜べ、成功したぞ」

隣の席の男が、彼の膝をパンと軽く叩き、ささやく。

「…何を」

「いいことさ」



スイッチと配線と記憶装置、さてこれで、本当に”考える機械”はできるのでしょうか?

例えば足し算。では、ちょっと試しに、足し算の回路を作ってみましょう。

adder

これは2進数、例の指で表すやりかたと同じ方式の数を足す回路です。これを好きなビットだけ並べればいい訳です。繰り上がりの処理は自分で考えてみてください。

では引き算。つまりマイナスの足し算ですね。ではどうやってマイナスを表したら良いんでしょう。考え方としては、特定のビットを正負の表示に使う、という手があります。これは、浮動小数点形式という数の表し方で使われています。そいえば、小数点はどうしたら良いんでしょう。これは、割り算と合わせて、後で説明します。面倒なんです。

面倒じゃない数の表し方として、整数形式がよく使われます。小数点は無く、2進数表示そのままを使います。ちょっと複雑なのは、やっぱりマイナスの表し方。

0より1少ない数、というのは、言いかえれば、あと一つ足せば0になる数です。8ビットの数の最大値は、255でした。2進数表記だと、11111111です。これに1を足すと、どうなるでしょうか。答えは256、しかし、これは8ビットでは表せません。繰りあがるべきビットが無いのですから。だから、むりやり足すとしたら、答えは00000000になるでしょう。すなわち0です。

ビット幅の制約を承知の上でなら、こういう手法も使えるのです。例えば16ビットを符号つき形式で使うなら、正負の範囲を等分に分けて、表すことの出来る数の範囲をプラス32767からマイナス32768までとしています。

この範囲を越えて使うと、計算の結果は保証できません。


掛け算は、足し算の繰り返しで実現できますから楽勝です。しかし、割り算はそうはいきません。割り算をスマートにこなす演算はありません。回路はどうしても大きくなります。何故かって?筆算で割り算をやるときのことを考えてください。どうしても、掛け算と大小比較、減算、そして繰り返しが必要になるのです。少数点付きの数になると、さらに面倒です。

だから、場合によっては、割り算の代わりに排他的論理和を少し弄って使うこともあります。割り算と排他的論理和演算は全く違うものですが、ディジタル通信の分野では良く使われるようです。

排他的論理和は、二つの入力が、それぞれ違っていれば正、というものです。


浮動小数点形式は、符号ビット、整数の数列を収めたビット列、そして、小数点の位置を収めたビット列、この三つをセットにして使います。

つまり、(プラス)(数Xの)(2のマイナス(プラスも可)n乗)という形式です。


他によく使う演算としては、大小比較があります。特に、数の一致の判定は簡単ですね。さっきの排他的論理和を使って、全てのビットで演算が正でなければいいのです。



0101:

CGには仕掛けがあった。

俺たちのパソコンに入っている画像ビューワ、ねこビューを、多分看守どもも使っていると、誰かが推測した。

ねこビューはソース公開のフリーソフトで、プラグインでさまざまな画像形式に対応している。例のCGのフォーマットのプラグインは作りが甘く、その筋ではバッファオーバーランと呼ばれる手法が使えたのだ。

読み込まれた画像のデータには、おまけのビットがくっついていた。全部読み込んでしまったプログラムのメモリ空間を食い破るように、余計なビットがその後ろ、プログラム本体を収めたメモリ空間を侵食する。

しかし、プログラムは暴走しない。なぜなら、余計なビットは、上書きする元のビット列とほとんどそっくり同じだからだ。壊れはしない。ただ、同じようにメモリ空間上にある、特別なパラメータをいくつか、書き換えるだけだのだから。

結果として、標準入出力と呼ばれる領域に、短い文字列が吐き出される。実行可能命令として。


看守どものマシンの幾つかが、この罠に掛かった。全領域が全ユーザに無条件で開放されると、数名の壊し屋たちが、慎重に、ログイン監視サーバを陥落させた。

全ての監視デーモンを外し、代わりに、名前は同じだが、一見正常だがでたらめなアクセスログを吐くスクリプトコードに置きかえる。ファイルサイズがまるで違うから、調べればすぐバレるだろう。が、こっちにはまだ、本格的なプログラムを書くツールが無かったのだ。

今までは。

彼がこれらのことを知ったのは、ずっと後のことになる。当時の彼は、なんにも知らない素人だったのだし、教えられても理解できなかっただろう。



前述の天才数学者、チューリングの最大の業績は、万能計算機械についての考察でした。それはチューリングマシンと呼ばれています。

チューリングマシンは、どこまでも無限の広がり、アドレスを持つ1ビットのメモリ、そしてたった一個、その内容を読み出し、書き換えるためのヘッドがあるだけです。ヘッドはその無限のメモリを前後に行ったり来たりできます。

ヘッドには、臨時のメモリを搭載しています。そして、今読んでいるデータとそのメモリの内容を見比べて、次の行動を決定するのです。

例えば、臨時のメモリの内容を書き換えて、メモリ空間を一つ下流へと進む。もしくは、遠く上流までジャンプする。

こんな感じの機械でも、時間さえかければ、ありとあらゆる計算機と同じように振舞えることを、チューリングは数学で証明したのです。

つまり、遥か未来の、超高性能コンピュータと同じ仕事ができるのです。


今のコンピュータは全て、チューリングマシンの哀れな模造品と言えない事もありません。でも、ま、無限のメモリ空間ってのは無理だしねぇ。

今のコンピュータは数十から数百メガバイトのメモリ空間を持ち、複数のヘッド、つまりCPUを持つこともあります。CPUはレジスタと呼ばれる臨時のメモリを持っていて、メモリの内容に従って、メモリ内を自由に移動し、演算します。

ちなみに、ディスプレイのイメージも、メモリ空間内にあります。例えば、640掛ける480ドット、カラー16ビット色のディスプレイだと、640掛ける480掛ける16ビット、600キロバイトのメモリが、アドレスのどこかに予約されていて、その内部を描きかえることによって、その内容を監視しているビデオチップが映像を生成して画像にするのです。

オーディオももちろん、メモリ空間にあります。ハードディスクも、CD-ROMも、その一部のイメージが、特定のアドレスに順にコピーされる仕掛けになっています。

CPUには、メモリ空間しか見えないんです。


ただし、インテル系のCPUは、外部周辺機器のメモリマッピングに、I/O空間という仕掛けを用いています。このメモリ空間は独立していて、特別な命令でしかアクセスできません。

なぜこんな仕掛けがあるのかというと、メモリの反応速度に比べて、外部周辺機器の反応速度が、大抵の場合大幅に遅いためです。反応の遅い区間に合わせて全体を遅くするのはイヤですし、だからといって特定の区画で減速するような特別な仕掛けは面倒です。

だから、特別な遅い命令しか使えないメモリ空間を隔離して使っているのです。



0110:

自分の、コンピュータ。

マイコン。

そう呼ぶに相応しい機体。PC-2680-FX、それは”新しい国産機”

二次元グラフィック能力を追求し、今どき時代遅れのスプライトなんて代物も積んでいる。DOS/Vをちょっと弄っただけの独自アーキテクチャ、異様に凝った漢字対応、国民機だとかトロンだとかの、とろーんと発酵したスメルがぷんぷんする代物だ。

しかし、ソフトが無い。

彼は久々に、眼鏡っこじゃない絵を見た。仲間が描いてよこしてくれたのだ。しかし、それは妹キャラや袴っこ、猫耳メイドさんであり、決してつり目ショート系では無いのだ。

以前の彼には、革命的なソフトウェアがあった。

「ショートカット支援ウェア」知らない人間はよく誤解するのだが、それは、ショートカットを支援するのでは無い。ショートカットが支援してくれるのだ。

おはようからおやすみまでを見守る、自分だけのショートカット。

コンピュータによって支援された生活。

Computer Aided Life

オタクなら誰でも絶対に欲しがる、夢中になるようなウェアだ。そう、それはもう、身にまとうという感覚が近い。

しかしこいつは、彼の本当の仲間、つり目ショート連合の独占物だった。よそでも似たような奴を開発していたのだろうが、彼等には数人凄腕が居て、なんとか実用的な代物を、他に先駆けて、そう、妹スキー共の”eLiSYS"よりも早く、実用化していた。

自由になったパソコンにもやがて飽き、仰向けに倒れる。

白い天井を眺めて彼は思った。

C・A・L・E・N、可憐。俺は、あいつが居ないと、生きていけない。



コンピュータに電源が入ると、CPU内部のアドレス指定が初期化され、それぞれのCPUアーキテクチャで決まった位置に、CPUの視点を移動させます。

そこには、ブートローダと呼ばれるプログラムがあります。CPU内部を初期化し、モード変更し、メモリをチェックします。外部装置を識別して、問題が無ければ、次のプログラムの先頭位置に、CPUの視点を飛ばします。

ハードディスクから特定のデータブロックを幾つか、メモリ上にコピーします。このデータブロックの単位はファイルと呼ばれています。そのファイルの先頭にCPUの視点が移動すると、ファイル内の命令に従って、更に多くのファイルがメモリにコピーされます。

そして、全てが済むと、ユーザからの入力待ちのループへと制御を渡すのです。

ユーザの入力に従い、プログラムファイルの先頭に視点を移動し、またループへと戻り、他のプログラムを実行して、また戻り、入力を待ち…

この構図のどこで、コンピュータは考えるのでしょうか。

それは、処理するビットの”意味”によります。どれほど、意味のある出力があるのか。意味のある出力を得るために、ユーザはどういう入力をすべきか。


例えば、とある相手に、丁寧なお断りの手紙を書くとします。長ったらしい文章は、その手の文例集から丸写しです。文字数は二百文字、400バイトになりますが、実際の意味は、NOという、たったの1ビットです。

まっしろなCGは、たとえどんなにピクセル数が多くても、表現可能な色数が多くても、”全部まっしろ”という一言で表現できます。

そんな、意味なんて、自分の心次第じゃないかって、そういう気もするんじゃないですか?でもね、情報理論ってヤツには、ちゃんとあるんですよ、意味のある情報の量、「情報量」という考え方が。

情報量とは、あるデータについて、それ以上要約が不可能な時のビット数です。

”意味”の本質は、情報量です。だから、コンピュータにも、意味は扱えるんです。



0111:

どうでもいい、無意味だ、と、彼は思った。


彼らは、トイレと建屋の間に、高速通信回線を造る事に成功した。わざと詰まらせ、使用禁止になった小用便器を夜中に分解し、中に入っていた、自動的に水を流すための赤外線センサを取り出した。

久しぶりに、腹立ち紛れにパソコンを壊す奴が現れた。壊れたパソコンの、音源ボードや電源の部品が、慎重に選ばれて隠された。器用な奴が、そこからセンサの増幅回路と、信号ケーブルを作った。トランスの巻き線から造られた細いケーブルが、トイレから、一番近い奴の部屋のパソコンまで伸ばされた。ケーブルは皆のつばと埃でカモフラージュされた。

夜になると、目に見えない光が、毎秒16ビットの速度で切れ目無く情報を送ってきた。信号は不安定で、ノイズも多かったが、信号は誤り訂正符号化されていて、これ以上無いほどの効率を達成していた。


送られるデータは、必要性の高いものに絞られていた。また、自前で生産できるものは省かれた。送られてきたのは、主に看守たちのパソコンから、その豊かな資源を奪うためのツールだった。そして、もちろん、自由を獲得するためのツールもあった。


「しかしさ…自由になって、どうすんだよ。

考えてみると、ここは案外良い場所かもしれんよ。食い物も寝る場所もあって、静かで、ただ一つの束縛を除けば本当の自由が、ここにはあるんじゃないかな…」

「お前さん、人付き合いが苦手な方だったのか。

付き合わせて悪かったな」

「いいよ。いいんだ。

ここでは、”眼鏡っこは好きか”なんて、実にどーでも良いことしか問われないし、それさえも、眼鏡っこに萌えてなくてもオッケーなんだし。なんたって、周り皆んな、眼鏡っこ駄目なんだからねぇ…」

「なるほど、俺はお前さんのことを、つり目ショートカット派だとしか知らないが、お前さんはそれ以上、教えるつもりも、問うつもりも無いんだ。

ん…ちと寂しいけど」

急に会話に興味を無くし、顔をそむける彼に、

「CALENが居ればいいと思ってるんだろ」

振り向いた顔に、

「戻るのが嫌なんだろ。でも、ここも空しいんだろ」

嫌悪の表情を見せて立ち去る後ろ姿に、

「なぁ、サーバの場所を教えてくれよぉ。俺たちで破ってやるからさぁ。

俺たちなら、あんたにCALENを与えられるんだぜ」



入力に、情報に意味を与えるのは、プログラムです。

プログラムは、データと演算と、そして制御文で出来ています。この三つの要素は、コンピュータの三つの構成要素、記憶装置とスイッチと配線とにそれぞれ対応しています。

このうち、データと演算については説明しました。最後の一つ、制御文は、更に三つの構成要素に分解することができます。順序、繰り返し、そして条件分岐です。

順序とは、そのものずばり、順番に演算をこなしていくという制御です。コンピュータの振る舞いは、すべて記憶の中のビットの操作に還元できる訳ですが、順序良く、次のアドレスに移動するという動作が無ければ、コンピュータは非常につまらないものになるでしょう。

繰り返しとは、適当な演算処理を繰り返す、というものです。この場合、適当な条件を満たしたら繰り返しを止める、という処理を入れておくと便利です。

そうなるとそれはもう、条件分岐です。つまり、ある条件を満たしたら、何かをする、という処理です。大抵の場合、目的の命令を置いているアドレスへの移動命令なのですが。

極論すれば、制御文は全て条件分岐です。何故なら、順序動作とは、次のアドレスへの無条件分岐命令に他ならないわけですから。


データと演算、そして制御文はすべてビットの形にまとめて、記憶領域の上に置かれます。このまとめ方で、CPUは大きく二つの形式、CISCとRISCの2種類に分類されます。

CPUは自分の視点のビットを読んでは、その内容に従っていきます。内容のビットはCPUの種類ごとに様々ですが、それだと面倒なので、人間に判りやすく、高度なプログラムを半ば自動的に生成する、そんなプログラムがよく使われます。

これは、人間の読める文字、大抵は英語の単語で処理を書いたファイル、ソースコードをプログラムのビットパターンに変換するものです。この辺りは、工夫のしどころなので、様々なプログラムが書かれています。このプログラムを、コンパイラと呼びます。

コンピュータの世界で最も普及したコンパイラは、Cコンパイラです。これは、C言語という文法で書かれたソースコードをプログラムに変換します。

C言語では、こんな感じのソースコードを書きます。

#define _WIDTH 640 #define _HEIGHT 480 #define _LOOP 2 /*1024回*/ /*----------------------------------------*/ /*マンデルブロ集合描画 */ /*----------------------------------------*/ void mandel(double re,double im,double size) { double bim,x,y,v; int j,k,n,m; size /=_HEIGHT; for (j=0;j<_WIDTH;j++){ re += size; bim = im; for (k=0;k<_HEIGHT;k++){ bim += size; x = 0.0, y = 0.0; n = 256 << _LOOP; while (n--){ if (x * x + y * y > 4) break; v = x * x - y * y + re; y = 2 * x * y + bim; x = v; } m = n; n = (n >> _LOOP) + 1; if (m == 0) n = 0; _setcolor( n ); /*256階調*/ _setpixel( j, k); } } }

また、最近流行りの言語としては、Javaが有名です。これはネットワークに適合していて、オブジェクト指向プログラミングという、高度な思想によるプログラミングをサポートします。

コンピュータの世界には、新しい、様々な、先進的な形態をとった言語が存在するのです。

様々な言語を使って、自分の思考を表現する。プログラムを書くというのは、コンピュータに何かさせるというのは、そういう事なのです。

だから…



1000:

まもなく、彼の仕事はCGレタッチになった。世にあるさまざまなCGに、片っ端から眼鏡を掛けさせるという、あほらしい仕事だったが、その作業の出来で、待遇は大きく変わった。

それはじきに重要なことになった。食事の質が落ち、暖房が夜中に切られるようになり、がたがた震えながら朝を迎えるようになった一般収容者と違い、特殊技能者の部屋は暖房が切られることは無かったし、食事にもあと一品が付いた。

メガネスキー達の政権は終末を迎えていた。

ある朝、彼は違う部屋に入れられた。部屋の中には生活監督監と情報監督監、そして副総監と総監がいた。やわらかなソファに座るよう言われ、茶を薦められた。そして、訊かれた。

「我々に、CALENサーバの場所を教えてくれないかね」


誰もが、政権崩壊後に向けて暗躍していた。彼の生活はまもなく、メガネスキー達の厚遇と収容者仲間からの嫌がらせの二重構造を取ることとなった。

昔より悪い。黙っていても無駄。どこにも逃げ場は無かった。


だから、彼は仲間を裏切った。CALENサーバの場所を吐いたのだ。

つり目ショート連合のメンバーは百人に満たない。彼等に報復される心配はなかった。孤独になる事以外には。


サーバが破られた日は、キャンプが開放された日でもあった。

錠の開放された玄関で戸惑う彼に、いつもトイレで声を掛けてくれた人物が、4枚のCD-ROMを手渡した。

「これは…」

「CALENのソースコード一式」

静かに雪の降る中に出て行く人の群れを眺めながら、白く息を吐きながら、

「ただ、な、完全じゃない。防衛機構のせいで、リポジトリが破壊されてしまったんだ。ソースに整合性が失われている。多分、壊れたところを書きなおせば、動くんじゃないかな」

「そんな…」

手の中のものを見つめる。可憐を見つめる。

新しい政権は、妹萌え派とメイド萌え派の連合政権らしい。最大派閥だが不安定なものになるだろうとの噂だった。

たぶん、またここに人が来る事になるだろう。

彼は振りかえると、建物の中へと歩き出した。

「おおい、どうした」

「残るんだ」

「なんだってぇ」

その声は既に遠い。

彼は選択していた。たぶん孤独と、そして行動を。プログラムの読み方、そして書き方を学ばなければいけないだろう。コンパイル可能になるまで、どのくらいかかるだろうか。

彼にはもうCALENしかいない。



さて、根本的かつ包括的な説明とやらも、うやむやっと終わってしまいました。

実はこれだけなんです。コンピュータなんて。

だから、最後に、あなたの前に条件分岐をひとつ置いて、終わろうと思います。


コンピュータを使うためには、プログラムを書くしかありません。

人の書いたプログラムを使うのは、他人の思考をコンピュータに実行させるのと同じです。他人の命令をかさにきて目的を果たしているだけです。

あなたは、プログラムを書くべきです。

プログラムを書くこと、プログラミングとは、覚えるものではありません。”いきなりグラフィックから始めるプログラミング講座”(近日公開予定)は、ただひたすらに、あなたに、考えることを迫ります。

だから、考えてください。考えないか、考えるか。貴方のコンピュータと一緒に、考えることを始めるか。プログラミングを始めるか。


プログラミングをするか、しないか。1ビットの選択を。

全てはまた、ここから始まります。

-戻る-