5月26日 商品が語りかけてくる~ソフトウェアの怪談?(#368)
松下幸之助さんは、商品が語りかけてくるということを何度も体験されたそうです。
あるとき新製品の乾電池の調子が悪いので、家に持って帰って、あれこれと調べたり、じっと見つめていたりを繰り返していたら、「温めてくれないか」という声が聞こえたとのこと。お湯を沸かして温めたら、正常に動作するようになった。それで原因が分かったのだそうです。
なぜだか分からないけれど、真剣にやっているとそういうことがあるのではないかと解説しています。
私にもありました。
1990年。まだ私がアセンブラのプログラムを作っていた頃のことです。
異常終了の原因が分かりません。どこで異常終了するのかもよく分からない。
こういうときには、レジスタやメモリの状態をトレースするためのマクロ命令(一連の命令の集まり)をソースコードに書き込むのが常套手段。マクロ命令をいろいろな箇所に書き込んで、範囲を絞り込み、障害の原因になっている箇所を特定するのです。
どうやらここで異常終了しているということが分かったのですが、ここが本命と思われる個所にマクロ命令を書き込むと、異常終了しなくなる。
まったくわけが分かりません。試行錯誤しているうちに、草木も眠る丑三つ時(夜中の2時ごろ)になってしまいました。
事務所にいるのは私一人。照明はもったいないので、私の机の周りだけ点けていました。
なんだか、ぞっとするような気配が・・・。私はちょっと怖くなりました。
そのときに耳元でささやく声が!・・・
「ずれてる、ずれてる」
恐怖で失神しそうになった私は、それでも勇気を振り絞って、事務所の照明をすべて点けました。すると、怪しい気配もすっとなくなりました。
ホッとした私は、今聞いた言葉を反芻しました。「ずれてる、ずれてる」。
あっ!本当だ!ずれてる。
アセンブラでプラグラムをするときに気をつけないといけないのが境界ずれというものです。これは高級言語ではありえないことなのですが、アセンブラでは、好きなところに変数の領域を取れるので、この境界ずれということが起こることがあります(もちろんバグなのですが)。
では、なぜマクロ命令を埋め込むと異常終了しなくなったのか?
マクロ命令の先頭と最後に、念のため境界を無理やり合わせる命令が書かれていたからです(これは、アセンブラのマクロ命令を作成するときの作法なのです)。
本命の個所の直前にマクロ命令を埋め込むと、境界ずれが強制的に解除され、異常終了しなくなったということだったのです。
原因が分かり、修正もできました。
しかし、あの声はいったいなんだったんでしょうか?
今日の一言)真剣に取り組んでいると、問題解決のヒントが声となって聞こえてくる。
本年の一日一言は、『松下幸之助 成功の金言365』を毎日1ページずつ読んで、自問自答するという趣向です。
--