素歩人徒然 タイマー 時間の精度と種類
素歩人徒然
(36)

タイマー


── 時間の精度と種類

●自動消滅プログラム
 昔「スパイ大作戦」という名の人気テレビ番組があった。原題は「Mission Impossible」といい、フェルプス隊長率いるMission Impossible Force(M.I.Force)のメンバー達が、最新のテクノロジーを駆使し非合法すれすれの活動を行いながら見事に悪をくじく物語である。M.I.Forceへの活動指令は、テープレコーダーの録音を通じて行われる。フェルプス隊長が、人気のない場所に密かに隠されたテープレコーダーを捜し出し、その再生ボタンを押す。すると「おはよう、フェルプス君‥‥」と当局からの連絡指示が聞こえてくるという寸法である(随分と大らかなものだ)。そして指示の最後に次のように付け加える。「例によって君もしくは君のメンバーが捕らえられ、あるいは殺されても当局は一切関知しないからその積もりで。なお、このテープは自動的に消滅する」(*1)。そして、テープレコーダーから突然に煙が吹き出し録音テープは焼失してしまうのであった。
【注】(*1)正確には覚えていないが、まあ大体こんな風なセリフであったと思う(‥‥随分と詳しいじゃないですか。いやなに、ここのところだけはどういう訳かよく見ていたんですよ、はい

 私はある日突然に、この「自動的に消滅する」プログラムを作ってみようと思い立った。それは、この古いテレビ番組のことを思い出したからではなく、それなりの必要性に迫られたからである。
 大学でコンピュータのプログラミングを教えていると、学生にはいろいろなプログラムを実際に動作させて体験させることが必要となる。配布資料にソースプログラムのリストを載せておいて、それを各自のコンピュータに入力させるのは、最初の数時間は必要なこととしてやらせているが、そのうちに彼らの“のろまなキー操作”に合わせてはいられなくなってくる。第一それでは授業が予定通りに進まなくなるからである。

 そこで、あらかじめソースプログラム集をファイルの形で用意し、そこから任意に抜き出してきて利用できるようにした。これで授業は順調に進むようになったのだが、次の年のことを考えるとこのやり方には問題があることが分かってきた。授業中に、不完全なプログラムをいろいろと修正させながら最終的に完全なプログラムに仕上げていく。本来その過程が重要なのである。しかしそうすると、授業が終ったときその最終結果がコンピュータ上に残される。そして次の年になると、また別の学生がそのコンピュータを利用するので、2年目からの授業では最初から最終結果がコンピュータ上にできあがってしまっていることになる。こういう状況は何としても避けたい。それには授業が終わったとき、ファイルをきれいさっぱり削除してしまえばよいようなものだが、学生の立場も考慮すると、それはなかなかできない相談なのである。

 そこで私は、用済みになったファイルを自動的に消滅させてしまうことを考えた。しかし動作中のプロセスが自からを消去してしまうのは容易だが、そのプロセスの起動の元となったプログラムファイル自体を削除するのは、これは容易なことではない。仮にそれができたとしても、ディスク上のファイルを所有者に断りなくいきなり削除してしまうのは、余りにも乱暴な所業といわねばなるまい。そこで私は、削除する代わりに動作できなくしてしまうことにした。そのプログラムを単なるゴミと化してしまえばよいのである。

 逆の言い方をすれば、授業時間中しか動作しないプログラムを作ればよいのである。私にとって、そんなプログラムを作るのは朝飯前の仕事であった。ソースプログラムを暗号化してプログラムの中に埋め込み、特定の時間帯にあるときだけ、所定のキー番号を与えると対応するソースプログラムのイメージが復元されファイル化されるようにする。その他の時間帯にあるとき、あるいはキー番号が異なるときは一切何もしない。これである。これさえ用意できれば、もはや「なお、このプログラムは自動的に消滅する」などと言わなくてもよい訳である。

 そのための仕組みについて、ここでコードの詳細を紹介しても仕方がないから省略するが、要するにコンピュータのタイマー機能を利用すればよいのである。ところが実際にやってみると、コンピュータのタイマーほど時間的な精度の悪いものはないことに気がつく。コンピュータというものは、少し使わないでいるとすぐ時間がずれてしまう。場合によっては月日がずれてしまうこともしばしば起る。けっこういい加減なのである。

 その結果、この自動消滅プログラムもあまり時間設定を厳しくすると、コンピュータによっては動作しない場合も出てくる可能性がある。しかも、これは学生が所有するコンピュータのタイマーが正確かどうかの問題なので、いくら私がタイマーの精度に気を配っても、それはまるで意味を持たないことなのである。そこで、授業の当日だけ動作するよう日付設定だけを厳密にし、時間設定の方は大まかにして今後の様子を見ることにした。これで今までのところ大過なく運用されているようである。

 日本のように何事によらず時間を守ることに厳格な社会の中で、コンピュータのタイマー機能だけはどうしてあのようにいい加減なままで通用しているのか、私には不思議でならないのである。もっと精度の高いもの、あるいは精度の粗いものという具合に、使用目的によって使い分けられるとよい。そして時刻合わせの必要がない優れたタイマーが複数個(*2)あってもよいと思うのである。
【注】(*2)このような要請に対しては、C/C++プログラマならいくらでも対応可能である。たとえば、カウントダウン方式のタイマーとか、ストップウオッチ形式のタイマーなど自由に作ることができる。しかしここで言っているのは、C/C++言語を知らない人でも容易にできるようにしたい、という意味である。

 ここで「タイマー」に言及したついでに、日頃から思っていた時間の精度と時間の種類について、若干の考察を試みてみたい。

●時間の精度と時刻合わせ
 そもそも時間の単位は、地球が太陽のまわりを一周するのに要する時間から定められた。これを「天文時」という。一周するのに要する時間は、365日5時間48分45.264秒である。この値は、1年の日数365日より若干長いため誤差が生じてくる。そこで、ほぼ4年に1回の割合で1日を付加する調整が必要となった。これがうるう年である。

 16世紀以前に使われていた「ユリウス暦」では、4年に1回の割合でうるう年にしていたが、それでは暦が実際の太陽の運行とずれてきてしまう。そこで、現在の「グレゴリオ暦」では400年に3回の例外を設けることにした。西暦が4で割り切れる年はうるう年とするが、100でも割り切れる年はうるう年としない。そのうち400で割り切れる年はうるう年とする、というものである。

 この天文時に代って、最近では「原子時」が使われている。原子時を採用した場合には、その精度に見合うよう「うるう秒」を挿入することが必要となる。原子時は、セシウム原子が、ある二つの基底状態の間で振動している性質を利用するもので、91億9263万1770回振動する時間を1秒と定義している。そして、現在はその秒の長さに基づく「協定世界時」が使われている。

 地球の自転はしだいに遅くなっているので、天文時と協定世界時との間にはしだいにずれが生じてくる。このずれが0.9秒以内になるよう日本では1月1日か7月1日に「うるう秒」が挿入されることがある。この挿入は不定期に行われるので「国際地球回転観測事業」によって通知されるまで、我々はその事実を知ることができない。

 このようにして定められた日本標準時は、福島県にある標準電波送信所から常時発信されているので、この電波を受信してコンピュータ上のタイマーを自動的に時刻合わせすることが可能になっている(しかし私はそうまでして正確な時刻に合わせようとは思わないが)。

 ところで、この日本標準時を作っている原子時計は「一次標準器」と呼ばれている。これには「光励起セシウム」が使われていて、レーザー光でセシウム原子を励起し、一つの基底状態から別の基底状態へ移る間に吸収されるマイクロ波の周波数によって、1秒を正確に求める。その精度は100兆分の1で、計算上は100万年経っても1秒の狂いも生じないという。

 面白いのは、時間は各国ごとに管理されている点である。各国の原子時計の時刻や秒の長さはパリの国際度量衡局に集められ、そこで安定度によって重み付けをしてから平均化されて「国際原子時」を決めるのだそうである。国の間には普通時差が存在するが、それを別にしても国ごとに異なる「時間」を使っていることになる。そうなのか〜、知らなかった知らなかった。個々のコンピュータがそれぞれ異なる時間を使っていたとしても、そのくらいのことは大目に見ないといけないのかもしれない。

●時間の種類
 天文学の分野では、天体の位置計算などに「ユリウス日」と呼ばれるものが用いられている。これは紀元前4713年1月1日の正午を原点とし、その日からの通算日数で表すものである。たとえば2001年1月1日は、2451910.5ユリウス日となる。これを用いると有史以来の事件や天文学上の各種現象をすべて順序立てて整理できて都合がよいのだそうである。

 よく知られているように、物理学ではこの宇宙の誕生以来、時間は物質と離れて客観的に存在し、途切れることなく同じ速さで過去から未来へと一直線に流れていると考える。「時間の矢」の思想である。どこでも同じように流れていて、すべての人に共通する「物理時間」が絶対的に存在しているというものである。

 一方、我々地球上の生物は、それぞれの持つ「生物時間」によって時を刻みつつ生きている。個々の生物が持つ一生という時間は生物の種ごとに異なっているが、その積分量は常に同じであるらしい(*3)。インドゾウは70年も生きるが、ハツカネズミは2〜3年の命しかない。しかし一生の間に打つ心臓の脈拍数はともに15億回程度であり、その間に使う体重あたりのエネルギー量はともに15億ジュールなのだそうである。ゾウもネズミも一生の間では同じだけの生を全うしていると考える。ネズミの生物時間は凝縮されているが、ゾウのそれは引き伸ばされているだけなのである。
【注】(*3)「ゾウの時間ネズミの時間」参照

 そう言えば我々人間も、せわしなく動き回っていた子供の頃の一日は本人にとってはとても長く感じられた。しかし大人になった今では、一日が慌ただしく過ぎ去ってしまう。どうやら人間の場合は、一日の物理時間の長さは同じであっても、生物時間としての一日の密度は年齢と共に変わっていくように思われるのである。

 我々は、同じ人間なら誰でも同じ時間を生きていると錯覚し勝ちである。しかし、その人の人生の送り方によって、つまり人生の充実度によって生物時間としての密度も変わってくるのではないか。我々はますます多忙になり、物事をじっくりと考える余裕を失ってしまっている。一方的に流れる物理時間の中で、個々の生物時間の長さと密度(充実度と言ってもよい)を考えるのを忘れてしまっている。寿命という一定の物理時間の中で、より速い移動、より迅速な情報交換、などの効率アップの名のもとに、我々は時間の歩みの速さをいたずらに進めようとしているのではないか。そしてその結果として我々は生物時間の密度を濃くするのではなく、逆に薄める結果になってしまっているように思うのである。

 コンピュータの数だけ異なる時間が存在しているように、現実の世界では生きている人間の数だけ複数の異なる時間が流れていると言ってもよいであろう。したがって、我々は自分に合ったタイマーを見つけ、そこに自分なりの精度(密度)で時間設定をすることが大切なのではあるまいか。自分の年齢や価値観に合致した固有のタイマーを持ち、そのタイマーに自らの生物時間の歩みに合った精度の時間をセットする。そして物理時間に流されず、自分固有のタイマーに合わせて日々生活するようにしたいものである。

 このように、固有のタイマーが必要なのは何もコンピュータに限った話ではないと私は思うのである。■