Home日記コラム書評HintsLinks自己紹介
 

フィンローダのあっぱれご意見番 第93回「y2k」

← 前のをみる | 「フィンローダのあっぱれご意見番」一覧 | 次のをみる →

昨年末、y2k問題ということで世間は異様なフィーバー状態だったようだが、 皆さんのところでは何か危機的状況に陥ったりしましたか?

 

※ 2000年問題。2000=2k。

プログラマーズフォーラムにもy2k問題の会議室がある。というか、相当前からあった。 しかし、殆ど盛り上がりがない。 私自身、y2k問題に対する世間の騒ぎはヘンだと思っていて、 銀行の預金データが消えるとか、飛行機が落ちるとか、そういう妄想は異常だと思っていたわけで、 食料を備蓄するに至っては、y2k教でも始まったのだろうか、という感じがした。

冷静に考えてみれば分かると思うのだが、 大雑把にいって、99年の次が00年になる、というのがy2k問題の本質である。 たったそれだけの原因で、 なぜ水道が止まるかもしれないとか、 飛行機が落ちるかもしれない、という結論になるのか? 00年になった所で、 内部の数値がおかしくなるだけではなく、 副作用としてコンピュータそのものが停止するかもしれないからだ。

  

と言われていたのである。 しかし、そんな問題は、コンピュータの日付を試しに2000年にしてみれば、 本当にどうなるか分かる。 つまり、 理屈の上では、1日もあれば症状を確認することができる。 もちろん、大型コンピュータを1日の間停止してテストするというのは大変な話だから、 簡単に実現できるかどうかは分からない。 また、万一「本当に動きません」となった場合には、問題解決するのは大変になりそうである。

 

※ 確認だけなら1日かからないかもしれない。

元日には、 原発のデータを記録するためのプログラムにトラブルが発生したという報道があった。 このトラブルで最も許せないのは、 電力会社が昨年中に全て対応済みという安全宣言を発表したことだ。 え、信用する方がおかしいですか? そう言われればそうか、これは失礼しました。 とにかく、報道では、机上の確認だけで済ませたため見落としが発生した、 というようなことだった。 これがありがちなミスであることは、 プログラマーならよく分かるはずである。 もしかすると、 頭の中だけでテストした個所というのはy2kに関連したプログラムだけじゃなくて…、 とか考え始めたら怖くて日本に住んでいられなくなるのもいまいちなので、 考えないことにしておこう。

 

※ プログラムを書くという同業者であるから言っておくが、 机上テストだけした、というのは常識としてはテストしたとは言わない。 普通は見ただけという。 テストというのは、何らかのプログラムを実際に動かすことを意味する。 まあこの場合「対応した」というだけで、確かにテストしたとは言ってなかったわけだが…。

いずれにしても、原発にしろ、銀行や証券会社にしろ、 報道されたy2k問題で注目していただきたいことは、現時点で一つだけある。 現に発生したy2k問題が、 早くて当日中、長くても数日程度で解決しているという事実である。 y2k問題自体は何年も前から対策が必要で、 莫大なコストがかかると言われてきたし、実際、かかったはずだ。 「その結果些細なトラブルだけで済んだ」という解釈も可能だが、 「必要以上にコストをかけたのではないか」という疑惑もないわけではない。 もしかすると、今もまだ極秘修復中の大トラブルがあるのかもしれない。

§

いきなり「話が違う」ということになるのだが、実際には、 y2k問題によるトラブルはかなりの数だと思われる。 特に、個人で使っているpcの場合、結構あるのではないか。 あまり騒がれていないのは、 それが些細なことであるとか、 y2kとは無関係のトラブルの方がよほどヒドいとか、そういうことだと思うのだ。 資金を注ぎ込んで対策したシステムでさえ、 預金残高が狂うことはないかもしれないが、プリントしたら平成88年になっていたとか、 そのようなレベルの問題があることは報道されている通りである。 いわんや個人レベルをや。 つまり、Windowsに何々というソフトをインストールしたらアレが動かなくなった、 というような程度の話でよければ、y2k問題も結構あるわけだ。

逆に考えれば、y2k問題を心配する暇があるのなら、 OSに修正パッチを当てて最新版にした方がよほど現実的、という結論になる。 もっとも、最新のバージョンにしておけば、 y2k問題のいくつかは解決しているはずだから、一石二鳥、と言いたいところだ。 もちろん、ここを読んでいる皆さんなら、 OSを最新版にしたら動かないアプリケーションがあるとかいう摩訶不思議な現実もご存知なはず。 ということは、安易にパッチを当てるのも考え物かもしれないが。

私が一番困ったのは、WZ Editor 4.0のファイラーのトラブルだ。 普段どんな使い方をしているかというと、 作業用のディレクトリに原稿ファイルをいくつも入れておいて、 ちょっと変更したりして、完成したものから外に出す、というような感じである。 今みたら396 filesと表示されていた。 この程度の数のファイルがあっても、殆どの作業は 最近編集したファイルの続きを書くということに集中する。 では、最近編集したファイルをどうやって選べばよいか。 ファイラーで「新しい順」にソートすればよい。 新しいものから一覧を出してくれるので、 先頭のいくつかを見るだけで目的のファイルを発見するとができる。

1999年まではそうだった。 ところが、2000年になって驚いた。 作成したファイルがファイラーの一覧に出てこないのだ。 すわy2k問題か…と思ったら、実はマジでそうだった。 ただし、ファイルが消滅するとかいうのではない。 fig.1のように、 ファイラーの一番最後に、目的のファイルがあったのである。 つまり、2000年のファイルであるにもかかわらず、 1900年に作成したファイルであるとみなしてソートしているのである。 これはいくら何でもバグとしか言いようがないと思うのだが、 だとしたら、なぜ2000年になって発覚するまで修正されていなかったのか、そこが不思議なのだ。

WZ Filer

ちなみに、この機能は「新しい順」という名前が付いていた。 「日付順」にしておけば、00年は99年より小さい、 と強引に解釈することもできたかもしれない。 惜しかった。 もう一つ余談だが、最初、この図をPrtScで取りこむのに無茶苦茶苦労した。 Altを押した途端に画面が先頭に戻ってしまうのである。

§

  

昨年末に、FPROGPROとFPLの合同イベントとして、 最悪のプログラムコンテストというのを開催した。 以前にもここで紹介した記憶があるが、 実際やってみたら採点をどうしてよいやらさっぱり分からなくなることが判明して頓挫したのである。 今回は、参加者に採点してもらうという方法で責任転嫁することにしたのだが、 やはり採点が難しいようだ。

 

※ それはもう伝説に残りそうなスゴイのが集まったのだが、 フォーラムが消えてしまって…。

最悪のプログラムを作れと言われても、実際は結構難しい。 何かのプログラムをさらに悪化させることが意外と簡単なのだ。 つまり、それは最悪ではなかったことを意味する。

この種の課題を出すと、 典型的なパターンがいくつかある。 まず、見栄えを工夫して読みにくくするケース。説明は不用だと思うので省略する。 次に、処理のどこかに乱数を使うケース。 確率的な処理が混ざるため、 いくら時間をかけても終わるかどうか分からない。 確かに最悪なのだが、 乱数の調子が悪い(良い?)場合は、 理論上100年かからないと解けないはずの暗号が偶然2秒で解けるかもしれないという欠点がある。 もう一つ、今回目だったような気がするのが、 人間をシステムに組み込んで解かせるというものである。基本はList 1のようなものになる。

---- List 1 ----

#include <stdio.h>

int main()
    printf("NIFTY SERVEを@niftyに置き換えたテキストを入力してください。\n");
    while ((c = getchar()) != EOF) {
        putchar(c);
    }

    return 0;
}

---- List 1 end ----

実際、これはかなりくだらない解決方法だし、実際には解決しそうもないのだが、 プログラムの内部だけで処理しないという発想は捨て難い。 C言語の場合、 標準的な機能はライブラリとして用意された標準関数によって実現している。 printfという関数を何気なく使っているが、 トポロジーとしてはユーザーが作成した関数と同じ位置にある単なる関数に過ぎない。 言いかえれば、 あるテキストファイルの中に含まれている 「NIFTY SERVE」という文字列を全て 「@nifty」に置きかえる関数serve_to_atがもしあれば、 それを呼び出すだけで問題は解決してしまう。 この場合、printfとの違いは、それが標準関数として用意されているかという点のみである。

とはいっても、非標準関数をプログラムで使うためには、 必要なライブラリをダウンロードしてきてコンパイルし直したり、 というような手間が結構かかるわけで、これは 組み込み方によってはどうにかならない訳でもない。 例えば、インターネット経由で関数を呼び出すような仕組みがあれば、 何か問題を解く処理はどこか知らない所にあるコンピュータに任せるという手も生まれる。 そこまで任せるのは危険だというのなら、 関数だけをダウンロードしてきて実行するような仕組みにしておけばよい。 もちろん、それも危険なことには違いないのであるが。

  

pcをインターネットに接続しておけば、Windowsのy2k対策は、時間はかかるが簡単だった。 申し込めばgetできるCD-ROMの出来がいまいちなのはご愛嬌というか、 やはり時代はインターネット、ということか。 言語レベルで インターネットを経由して、プログラムをダウンロードして実行するような標準関数が、 言語レベルで実装されていると便利そうな気もするが、 それこそ大事件が発生するかもしれないから一長一短といったところか。

 

※ ないわけではないが、セキュリティの問題をどうするか、ということだ。

(C MAGAZINE 2000年3月号掲載)
内容は雑誌に掲載されたものと異なることがあります。

修正情報:
2006-03-14 裏ページに転載。

(C) Phinloda 2000-2006, All rights reserved.