日々のつぶやき(98/7/16〜)

98/07/31

わ〜い。M女史になんだか誉められちゃったみたい。(*^_^*)根が単純だから、誉められるとすぐに喜ぶ。が、何を誉められているのか良く分かんない。(^_^;世間一般での知識とか、ましてや知恵などというものとは全然縁がないから、そこからなにか得るものがあるというのも不思議。あ、「人のふり見て我がふり直せ」の実践バージョンということか。確かにつらつらと自分の行動を振り返ってみるとバカなことをやっているし、書いているものなぁ。(^_^;

お仕事はといえば、今日もdebug。プログラムをトレース実行してみたり、中間結果をチェックプログラムにかけてみて、おかしな動きをしていないか調べてみる。実行結果自身には特に問題がなかったのだが、Eindianの関係で「これ、Macに移植したらまずいことが起こるよね」という部分を見つけたので、修正。プログラムの動作自身には、異常なところは見つけられなかった。

で、一応debugが終了し、出力結果もプログラムを組んだ本人以外が検算していないという意味では完璧とはいえないが、とりあえずプログラムを組んだ本人としては精一杯検算した積もりなので、やることがなくなってしまう。(^_^;本当はやることがないわけじゃなくて、コーディング途中で止めているところが一ヶ所あるのだが、その部分に関しては多忙を極めるNさんの下請け関数の仕様作成作業待ち状態で、しかもその下請け関数のI/Fがどんなものか分からない段階で「多分こんな風な情報が来るだろうな」と予想した分のコードの追加作業まで終ってしまっていたので、もう一歩も動けないのであった。(^_^;

後はもうちょっとアルゴリズムをいじって高速化を狙おうかなぁ、とか思った。しかし、もうそんなに早くなるような気もしない。、良いアイデアが浮かぶまでだらだらと時間を過ごす。結局、あまり良いアルゴリズムは思い浮かばなかった。600個程度の点を距離によって200個程度のクラスタに分割するって、1分くらいで出来ればまあまあ上出来なんじゃないかと思うし、これ以上複雑にすると、かえって遅くなりそうだし。という訳で、さっさと退社する。

退社したあと、コンピューターショップに立ち寄る。昨日動くことがある程度確認できたJunkマシンの追加部品を買うためだ。CRTケーブルとNetworkケーブルを買ったが、暇だったので、ぶらぶらお店の中を歩き回る。で、歩き回っていた途中で、そのJunkマシンには、マザーボードとマウスを繋ぐコネクタ+ケーブルがないのに気がつく。そのJunkマシンの壊れたマザーボードは、マウスコネクタがマザーボードに直付けされているタイプだったので、そんなものは必要がなかったのだ。

で、それに気がついてから、それっぽいのをいくつかのお店を回って探してみたが…ない。LPTとかRS232Cとかは見つかったが、目的のマウスのケーブルがどうしても見つからない。こんなの秋葉原にでも行けば、1000円出しておつりがくる程度で買えるのだろうけど、田舎だからそれが手に入らない。まあ、ケースを買うことになるんだろうけど、どうせケースなんてのは一番電源ユニットにお金がかかっているはずなんだから、それをわざわざ買いなおすのもかなりしゃく。なんかうまい方法はないかなぁ。

98/07/30

今日は会社の引っ越し。とはいっても、実際は席替え。たしか今度の月曜日と言う話だったような気がするのだが、月曜日でも今日でも移ること自体は変わらないので、さっさと移動を開始する。4月に移動したばっかりなのに、既に私のパーティションはエントロビーが相当上がっていたので、整理しながらモノを移動していったら、時間がかかってしょうがない。(^_^;仕方がないのでとりあえずモノを全部運んで、それから整理するように方針を転換。で、とりあえずモノは運びおえたのだが、エントロビーが最大になった引っ越し先の自分のパーティションを見て、これをどうすればいいのか、途方に暮れる。(^_^;

で、なんとかパーティションを片づけた。で、今回の席替えは会社全体で行われているので、もはや古くて使い物にならなくなったマシン、特にCPUに486 SXあたりを使っているマシンが大量に廃棄されることになっている。で、その「マシンの墓場」を覗いてみたら、486クラスのDOS/Vマシンが何台か捨てられていた。で、そのマシンを見てみると、SCSIカードとかNetworkカードとかが刺さったままになっている。これ、捨てちゃうんだったらもらってもいいよなぁという訳で、さっそくマシンをばらす。Sさんが「マシンを捨てるんだったらパーツを下さい」などという貼り紙をしていたが、そんなものは当然無視。(^_^;

マシンをばらしたお陰で、FDD1つ、Sound Blaster Pro PnP、AdapticのSCSIボード、3comのネットワークボード、500MbyteのSCSI HDDを回収。一緒に作業をしたIさんもネットワークボードなどをget。で、これじゃあSさんに悪いだろうなぁという訳で、Sさんを呼んで、パーツの分配を決定。もっとも決定といっても、美味しいところは私とIさんで取っちゃっているんだけど。(^_^;そんな貼り紙をしたくらいで、唾を付けたつもりになっているなんて、うちの会社に務めている人間を良く分かっていないな。(大笑)

マシンを分解している最中に、Nさんがやってきて一言。「お前らまるでハイエナみたいだぞ。」確かにその通りだよなぁ。でも、そのハイエナみたいな奴が引っこ抜いたSCSIカードを掠め取っていったNさんは一体何?(^_^;ああ、ゾンビなのか。(爆)

帰宅してから、Mさんから買い取ってきた壊れたマシンをばらして、故障原因を探る。今までやった範囲ではマザーボードか、オンボードのDisplay Chipが壊れているようだったので、マザーボードを変えてみたら、あっさり動きだした。で、ネットワークカードもSCSIカード、SCSI HDDもJunkマシンから入手できたので、これでほとんど部品が揃った。まあ、CPUがPentium 100Mhzなので、できれば早いうちにAMD K-6とかの高速なCPUを揃えたいとは思うのだが、本当に早いうちに入手しないと200Mhz以下のSocket7のCPUが確保できないんだよね。(^_^;

マシンを組み立てたりしているうちに、なぜか知らないが、右手の親指がつりそうになってあせる。で、右手がつるのを防いだと思ったら、左足の中指がつりはじめる。(^_^;家の廊下でつりそうになる左足を押さえながら10分以上じっとしている姿は、相当間抜け。(^_^;一体なんでこんなにつるんだろう?

98/07/29

今日は某海外ベンダーを招いての会議の日。議題がマーケッティングとかの話が主で、私なんかが出て何の意味があるのかがよく分からなかった。OEMの開発スケジュールに関しても、今度はこっちがOEMを受ける立場のせいで一旦こちらからスケジュールの提案を出して、そのスケジュールに関して説明し、相手の反応を見るという感じだったので、ますます自分の会議での役割が分かんなくなってくる。

会議の前にある程度、こちら側の方針はこうだという説明を受けていたし、その手の説明は営業のほうでやってくれたので、じゃあ、本番の会議で私は何をやればいいかというと実は何もやることがない。(^_^;なんだかなぁ。

98/07/28

会社に行こうとしたら、結構強い雨が降っていた。これはいかんというわけで、いつもはスクーターで通っているのだが、今日は父親に送ってもらう。ところが、会社につく頃には雨がすっかり上がってしまった。帰りは電車になるのだが、私の住んでいるところは電車の便が非常に悪いので、こんなことならスクーターで会社に行くんだったと後悔。

お仕事は昨日コーディングしたところの続きで、大体コーディングが終っていたのでdebugを開始したのだが、メソッドの名前とか、どのメソッドがどのオブジェクトに属しているとか、そもそもクラスの名前を結構いい加減に決めてしまったことに堪え切れなくなって、その辺の修正を入れる。思ったより時間がかかってしまった。

で、その作業をし終わってから、本格的にdebug開始。といっても、もともとちゃんと動いていたプログラムのユーザーI/Fだけ変えたようなところに関しては、かなりさくさく動く。一応念の為にステップづつでトレースしてみたが特に問題は発見できなかった。

月曜日に新規コーディングをしたところについては、ほとんど最上位のルーチンでオブジェクトへのアクセス方法に致命的な勘違いがあったので、ほとんど書き直しになった。もっとも書き直しといっても、下位のルーチンに関してはかなり抽象化しておいたので、量的には、3つほどの関数、合計40行ほどを書き直すだけですんだので、一安心。そのうち2つの関数はかなり似通っていることをやっていたので、書いている途中で「なんとかまとめられないかな?」と思っていたのだが、それもきれいに1つの関数にまとめることができて、大満足。v(^_^)

勢いで、debugまでやっちゃおうかな?と思ったが、今日は電車の時間もあるし、このプログラムの締め切りは一番短くて金曜日。おまけに社内使用を前提としたツールなので、それほど締め切りが厳しいわけじゃない。課の他の人たちが厳しいスケジュールの中、ひ〜ひ〜言っているのを尻目にさっさと帰宅。明日は一日中会議でつぶれることが分かっているから、完成は早くて木曜日になるのだが、そんなに複雑なプログラムでもないから、充分debugの時間を取れるだろう。

各種のメールソフトで致命的なBuffer Overrunエラーが発生するというMIMEがらみのセキュリティーホールが発覚したらしい。なんでもメールを受け取って読もうとしただけで、Buffer Overrunが発生して任意のプログラムを実行可能にしてしまえるらしい。ウソだろ〜と最初思ったが、Microsoftのサイトにアクセスしてみたら、ちゃんとOutlook 98用のパッチが公開されていた。どうやら本物らしい。

セキュリティーホールが確認されているのは、Outlook 98、Outlook Express、Netscape Messengerらしいのだが、Outlook98はパッチが出ているのだが、Outlook 97は大丈夫なんだろうか?ちょっと調べてみた範囲ではOutlook 97に関しては大丈夫だとも、駄目だともいっていないのだが、MIME関連ということであればOutlook 98が駄目ならOutlook 97も駄目なような気がするのだ。(後日注 その後Outlook 97は大丈夫とMicrosoftが発表した)で、私の会社では私を含め、LANと親会社の社員とのメールのやり取りには、Exchange Serverを使っている関係上、Outlook 97を使っている人は多いんだよね。

もっとも私に関するかぎり、外部からのメールはOutlook 97では受けずに、Becky!で受けるようにしているので、そんなに問題は起こらないはず。まあその点では気が楽だけど、しかし、よりにもよってとんでもなくどでかい穴があいていたものだなぁ。(^_^;

会社の同期入社のTさんのシェアウェアが窓の杜に掲載されていた。Vectorにも掲載されているようで、Vectorだけでも毎週100件のダウンロード実績があるらしい。やっぱりお客さんを呼ぶにはその手のソフトを開発したほうが手っ取り早いのかな。(^_^;

驚いたのは、そのシェアウェアにお金を払った人が異常に少ないこと。毎週100人もダウンロードしていれば、結構いい稼ぎになったんじゃないかと聞いてみたら、反響は結構あるのに、実際に送金登録した人が数人しかいないらしい。なかなか報われないなぁ。(^_^;

風仙さんがめでたく誕生日を向かえたそうな。風仙さんは、ここぞとばかりに私が何か言ってくるだろうと予想していたのだが、とんでもないことである。私にとっては、会社の大先輩で、年だってず〜と離れている、憧れのプログラマー風仙さんを茶化すことなんか、恐れ多くてできません。(^_^;

98/07/27

耳に詰まった水がどうしても取れないという夢を見る。なんだか耳に違和感がありまくり状態なので、詰まった水を出そうとして四苦八苦するがどうしても取れない。うんうんうなっているうちに目が覚めて気がついた。そうか、耳栓をしていたせいでこんな夢を見たんだな。(^_^;まあ、耳栓のせいで一時間程度は余計に熟睡できたと思う。

月曜日の恒例の課内のミーティング。通勤時間15分の私としては、5分間というたっぷりした余裕をもって会社に出かけたつもりだったのだが、道が混んでいて、結局会社についたのがぎりぎり会議開始直前。知ってか知らずか、後で「会議に遅れたんだって?」とSさんにからかわれる。(^_^;いやいや、会議室に入ってきたのは私よりもOさんの方が遅かったっていっても意味がないか。(^_^;週の初めのMeetingなのだが、日曜日に出社したせいか、なんだか今日が火曜日のような錯覚を憶える。

ミーティングでの議題の1つにお盆休みの休暇の予定があった。私自身としてはゴールデンウィークと年末にフレックス休暇を取っているし、自分の意図とは別に、自分を含む家族の誰かが(私は親と同居している)体調を崩して休むということが大体1回/month位あるので、会社のカレンダー通りに休めればラッキーと思っていた。ところが、どうやらお盆の前後でカレンダー通りに休むなどというヤツは課内で私しかいないらしい。(^_^;

幸い、上司のNさんが気を利かせてくれたせいで、お盆休みに続けて2日、有給休暇を消化できることになった。これ、スペシャルラッキーじゃん。v(^_^そういえば予定を決めてフレックス休暇以外の有給休暇を消化するなんて入社以来なかったような気がする。(^_^;まあ、会社にいても自宅にいてもコンピュータをいじっていることに変わりはないんだろうが。(^_^;

で、午後からコーディング。仕様を小出し小出しに追加していった影響が出て、内部設計的には結構汚くなってきて、Objectが外部からどのように見えるか関して、統一性が取れなくなりつつあると感じたので、そのあたりを中心に修正。「後で関数I/F仕様を渡すから…」という部分があったのだが、「多分、こんなI/Fになるだろう」という予想をもとにして、そこの部分まで含めてコーディングしてしまった。(^_^;で、明日からはそのプログラムのdebug。まあ、変更点が多かったから、結構debugには手間取るかもしれないなと感じてはいる。

でも、できればクラス設計からやり直したいなぁ、と感じることしきり。Dialog ObjectからアプリケーションのOption変数に値を渡す辺りなんか、もうちょっと気の効いた書き方が出来ないかなぁと我ながら思う。今は変数1つ1つDialog Objectから読み出した結果をApplication ObjectのOption変数へ1つ1つ代入しているだけなんだものなぁ。

98/07/26

午前中はひたすら惰眠を貪る。私の部屋にはクーラーなどという文明の利器は導入されていないので、窓を開けないとかなり暑くなる。ところが窓を開けると外から雑音が入ってきて、うるさいので、これはこれであまり良く眠れない。仕方がないので、今日の夜からは耳栓をして寝ることにする。(^_^;

午後からは会社に出て、本当だったら金曜日にしあげるはずだった(^_^;プログラムの検査作業を行う。本体関係では特に変なところは見つけられなかったが、インストーラー関係は「あれれ?」という所を何ヶ所か見つけた。しかし、ここまで来るとbugを直さなかったことによって発生するリスクと、修正して新たなbugを背負込んじゃうかもしれないリスクとの両天秤になってくる。結局、発見した「変なところ」はすべて修正しないことに決定。まあ見つけたのは全部かなり特殊な条件じゃないと発生しない奴で、回避手段もすぐに見つかる奴とか、全体の動作には影響がないようなミスだったので、この結論は妥当だと思う。

まあ、ユーザーからみれば分かっている不具合を何で直さないってことになるんだろうけど、やっぱり直したらちゃんと直っているか調べないといけないし、そうするといつまで経っても製品なんかリリースできないってことになっちゃうんだよね。ここら辺はバランスの問題なんだけど、実際そんな時のために、パッケージソフトウェアには、メーカ側の免責事項がライセンス契約書にちゃんと書いてあるんです。:-)ソフトウェアベンダーの誠意を信じる人には悪いかもしれないけど、現実はそんなものだというのは、知っておいて損は無いです。

会社に来たからすぐに気がついたのだが、gatewayサーバーが死んでいて、TCP/IP経由での外部とのIPパケット転送が全然出来なくなっていた。まあ、土曜日にサーバーマシンの引っ越しをしたばかりだから、そんなトラブルが起きるのも仕方が無いなと思いつつ、こっそりサーバーマシンルームに忍び寄って(^_^;、サーバーの稼働状態を確認してみると、死んでいるのは私の部署の使っているairplaneと呼ばれるgatewayマシンだけだったようだ。メールサーバーとかファイルサーバーとかは生きているので、外部に迷惑をかけることはないと分かってほっと一安心。

しかし、あのairplaneをファイルサーバーにしている部署もあったはずだから、明日はその部署はパニックになるだろうなぁ(^_^;と思いつつ、一応システム管理者にメール。管理者のIさんは朝が早いから、マシンをリブートするなりちゃんと対処できるだろう。まあ、1つ真っ赤なランプがつきっぱなしになっていて、これはHard Diskが死んでいるんじゃないのかな?と思わせる。で、何人かの人は明日「ギャ〜」となるに違いないと思うのだが、とりあえずバックアップは取ってあるはずだから何とかなるだろう。(^_^;

3時頃、一息つきに社内の自動販売機にお茶を買いに行ったらサーバー管理者のIさんに出会う。「仕事をしに来たんじゃないんだけどなぁ」とか言っていたが、じゃあ一体何で会社にいるんだ?というツッコミはヤボというもの。(^_^;残念ながらマシンをリブートしただけで何とかなるという状態じゃないみたいで、かなり本格的にぶっ壊れてしまったらしい。

そういえば、Iさんに会う直前にairplaneを見てみたら、LEDが全部橙色か赤になっていたものなぁ。状態としてかなりまずい状況だとは本能的に分かったのだが、何をしていいのか分からないので、手が出せないでいた。ひょっとするとファイル全滅かぁ?でも、いきなり何の知識もなくresetも出来ないし、大体reset switchがどこにあるのかも知らないし(^_^;LEDがほとんど赤になっている状況だから、HDの中身にかなりダメージがあるんじゃないか?という感想を話したら、Iさんの顔がみるみる青ざめた。まあ、管理者にとってはこんな状況は確かに悪夢だよな。

この分ではairplaneをファイルサーバーとして利用していた人達は明日は「ギャ〜」という状態になることが目に見えている。合掌。

98/07/25まで

Mさんからもらったメモリを自宅のメインマシンに突き刺したら、いきなりマシンの調子がおかしくなる。あわててメモリを外してみたが、Windows95がばしばし落ちまくるので、とてもじゃないけど日記が書けなかった。

Windows95の再インストールをやってみたが、再インストール作業中にも落ちちゃうので、これはBIOSレベルで変になっているなと思って、BIOSパラメータを少しいじっていたら、今度は電源投入直後にキーボードがロックするわ、FORMATから再インストールしている途中でハングアップするわで、全然うまくいかない。ブートの途中で「Windows保護エラーです」なんて出てくるので、これはマシンがぶっ壊れたかな?と思いっきりダークな気持ちになる。

それでもあきらめきれずに、掃除機を使ってマシンの中の埃を全て吸い出し、BIOSのパラメータのキャッシュ周りとかを全部Disableにしたら、何とか動くようになった。で、今週は一日中そのトラブルを解決するのと、良く使っているアプリケーションをインストールしなおす作業に忙殺される。

マシンが動かなくなった原因?う〜ん。やっぱりマシンの中のゴミが原因だったのだろうか?(^_^;まあとりあえず、これで、月曜日からまた日記を始められる。やれやれ。

ある人のページを読んで。「バートランド・ラッセルが質量保存の第2法則から宇宙に始まりがあることを証明した」というのは、間違いじゃないのか?質量保存の第2法則ってのは、「エントロピーは常に増大する」という熱力学の第2法則の間違いだとしても、そこから導き出される結論は「宇宙には熱力学的な終末がある。」というだけで、始まりがあるという結論は出てこないと思う。

エントロピーが常に増大しているから、有限時間でエントロピーが最小になることがあると結論するのは間違いで、y = exp(t)のグラフを考えてみればすぐに反例が見つかる。このグラフの場合、いくらでも時間を遡ることができ、エントロビーの値は有限時間では決して0になることはない。もっとも宇宙に始まるがある可能性があることまでは否定できないけど、それって証明なの?(^_^;

ちなみに、この「宇宙の熱力学的な死」を予測をしたのは、手元の資料によれば、ラッセルじゃなくてドイツの物理学者ヘルマン・フォン・ヘルムホルツだと思うのだけれど、間違っているのかなぁ。

今週は結構色々なことがあって、書きたいことは目白押しなんだけど、マシントラブルのせいで全然日記を更新できなかったし、今更書くのも馬鹿馬鹿しいのですっとばします。(^_^;

1998/07/17(Fri)

昨日家に帰ってから、アルゴリズムの間違いが気になってずっと家でアルゴリズムの修正・改良をしていたので、出社時には家で作った擬似コーディングをちゃんとC++で焼き直すだけの作業になっていた。で、出社してからさっそくそのコーディングに取り掛かる。もっとも家での検討で7/16に書いた部分は全面的に破棄しなくちゃいけない事が分かってがっかりしたのだが、幸い7/15までに書いたプログラムがかなり効率的に再利用できる事が分かっていたので、その意味では不幸中の幸い。また、昨日行った作業のうち、アルゴリズムの変更によって計算不要になった部分を#ifdef 0でcutするという部分はそのまま生きたので、昨日やった作業は全く無駄ではなかった事になるな、と思ってちょっと一安心。

結局それら、今までやった作業があったお陰(?)で、今日の最終的なコード追加、修正は20行ほどで済んだ。で、午前中にコードを修正してあらかた動く事を試した所で、ある程度大規模なデータを食わせてみて、チャンと動くか実験。予想では30分以内には全部の計算が終るはずなのだが、やっぱり10分とか20分くらい全然音沙汰がないと、心配になってくる。この間、何度暴走しているに違いないと思って、プログラムを止めようと思った事か。(^_^;結局29分経ってからすべての計算が終了して、めでたし、めでたし、ということになった。まだ最適化できないことはないけど、あれ以上最適化すると今度は読めなくなっちゃうしなぁ。(^_^;もう、メモリのアクセスパターンの最適化くらいしか、今のアルゴリズムでは対処できそうもないし。まあ、CArrayを使っている所を単なる配列に改良すれば、かなり速度城の向上は見込めると思うけど、今でも最適化を施したお陰でかなり読みにくいコードになっているから、これ以上読みにくくしちゃっても…というのがある。後でちゃんとドキュメントを書いておかないと…。はっきりいって、あれをドキュメントなしでよめというのは、つらすぎると思う。(^_^;1つ1つの関数は20行程度なんだけど(実行回数の多い関数はinline化しているので、それは除外)全体のアルゴリズムが見えないと、あれを読むのはつらいだろうなぁ。

後で気がついたのだが、この30分という時間は「すこし保守的なコード」を実行した場合だった。シンボル定義一発で、もうちょっと過激な処理速度向上を狙える事が分かっていたので、過激な処理速度向上バージョンで、一応のFixとする。過激といっても、その正当性はちゃんと水曜日までに確かめてある。距離計算のアルゴリズム変更に伴って、さらに最適化が出来るだろうとは思ったが、1日考えても良いアイデアが浮かばなかった。で、ちゃんと最適化してみたら、そこそこ実行速度が上がったので(それでも20分以上かかるんだ(^_^;)、まあこんな程度かな?と思う。まあ、最初の「何にも最適化を考えないバージョン」よりは5倍近くは早くなっているから、ここらへんが限界かな?と思う。

でも実は、もう数%なら何とかなりそうかな?という部分もあるんだけど、コーディングの複雑さと照らし合わせてみると、とても割に合うとは思えない。と言う訳で、今回はとりあえず見送り。まあ、昔(CPUも遅くて仮想メモリも充分になかった時代)はその辞書を作るのに3〜4日かかっていたというから、それに比べれば30分で辞書が出来るんだったら、そこそこ納得のいくレベルだろう。

で、プログラムは完成したし、ある程度最適化も出来たという事なのでこれで一旦Fixしようと思う。

で、後は忙しがっている同僚を尻目に、そのプログラムをテストしながら、遊んでいた。テストって言っても、プログラムの計算結果が妥当か調べるルーチンを組み込んだプログラムを動かして、本来の計算結果とチェックルーチンの結果が正しいか調べるだけ(組んだプログラムとチェックプログラムとで結果が違った場合にだけ、何かのメッセージが出るようにプログラムをしておくというだけ)なので、とにかくエラーが出るか、実行結果が出るのを待つしかない。

組み込んだエラーチェックプログラムは、「遅くてもいいから、ちゃんとしたロジック」「なにかロジック的におかしな事が起こったらすぐに知らせる」「本来あるべきテーブルデータを、いちいち計算して、テーブルに書いてある内容と、書かれているべき内容とが一致している事を確かめる」という方針で書いたので、やたらと遅い。(^_^;で、そのエラーチェック入りのプログラムを起動している間はやる事がない。まあ、たまにはいいか。(^_^;

1998/07/16(Thu)

やっぱり昨日の続きのお仕事。3つのほとんど同値のアルゴリズムを適用してなぜ出力結果が全然違うのかを計算途中のデータを出力させてみて比較してみる。すると、予想がほぼ裏づけられたので一安心。良かった、bugじゃなかったんだ。(^_^;

結論からいえば、アルゴリズムは全て同じ。ただし、違うのは2点間の距離が同じというパターンが出てきた時に、どのように対処するかという違いだけだった。まあ、こんなの大した違いじゃないから大勢に影響が無いと思っていたのだが、計算経過ログを分析してみると、最初はほとんど影響が無いのだが、徐々にその影響が広まって行って最終的にはかなり広範囲にわたって影響が出る事が分かった。簡単に言えば、正三角形ABCの各点を距離によって2つのグループに分けろ、と言われたら{{A,B},C}、{A,{B,C}}、{B,{A,C}}の3種類ある訳で、速度を向上させようと思ったら、その度に、{{A,B},C}、{A,{B,C}}、{B,{A,C}}の選択が変わって行って、その効果が蓄積されていったので、最終的には3つのどれもが違う計算結果を出力するということになった訳だ。まあ、間違っていないんだろうけど、これってどうやって検算すればいいんだろう?(^_^;

で、とりあえずそこそこ動くバージョンが出来たので、確認のため一応もう一回基礎からアルゴリズムを見直してbugの無い事を確かめようとして、それまで使っていたコードをIさんに無理を言って探して貰って読み始める。ところがこいつが使い方すらドキュメント化されていないし、入力がどんなデータ構造に基づいているのか、さっぱりわからなかったので、これはパズルを解くというより暗号を解読するという作業に近い。プログラムの行数は300行程度なので、暗号部分はもっぱら入力データ部分にあるのだが…、入力部分がblack boxじゃぁ手の打ちようがないな、と完全理解はさっさとあきらめる。

で、そのプログラムの冒頭部分の抜粋。



typedef struct{

	unsigned short	number[ 2 ];	/* 各教師ベクトルを2バイトで管理 */

} RESULT;

このプログラムって、教職員のためのプログラムじゃないはずなんだけど…、教師ベクトルって一体何?(^_^;コンピューターサイエンスとかの最前線では良く使われる言葉なんだろうか?知っている人がいたら、教えて下さい。<(_ _)>

話を元に戻す。そのプログラムを読む限り、距離の再計算はしていないようだったので、どうもそのindex作成プログラムは、グループ間の距離を平均座標から求めているのではなく、グループに属する点の最短距離から求めているのは読み取れた。がちょ〜ん。グループ間の距離なんてアルゴリズムのもっとも根本的な所で違っていたら、今週書いたプログラムは全部組みなおしじゃぁ。(T_T)もっとも、そっちのほうが最初のイメージからすれば組みやすいのだが…。

というわけで、今日の残りは、プログラムの組みなおし。(^_^;まあ、色々悩んだが、最初に頭に思い浮かんだ方法を選んだ。計算に時間が掛かるのは目に見えていたので、ある程度debugした後、大規模なデータを処理させ始めて帰宅。どうせ、そんな局面ではやることは待っているだけなんだし。(^_^;

ところが、帰宅してからもなんだか落ち着かない。というかなにか間違っているような気がしてならない。心配になって家で検証してみると、案の定、重大な計算アルゴリズムの穴があって、合理的な計算結果が得られないし、無駄な計算が全体の90%以上を占める事を発見する。ということは、今日1日って全然無駄な1日だったということになるよな…。(-_-;;)最初からそんな欠陥を気がつかないなんてなんて間抜けなんだろう。(ま、それも人生か…)

サポートのSさんはこのページを読んでいないと思うのだが、知らない方が幸せな事をわざわざ知らせてくれる広告塔のような人がいるらしい。きっとKさんに違いない。(^_^;そのSさんから個人e-mail addr.宛にメールが届いた。

私のフルネームは×× ××です。おみしりおきを。
いや、いままでたっぷりおみしりおきはしているんだけど、フツ〜、full nameまで憶えないじゃん。(^_^;でもこんなメールを送ってくるという事は…。次に会った時になんて言われるのか、すごくコワイ…。(^_^;まあ、怒ってきたら、それを日記のネタにしてしまおうと考えていたりするって俺も意外としたたかかな?(^_^;

1998/8 前半のぶつぶつ

1998/7 前半のぶつぶつ

日々のつぶやき 目次

作者(vyama_at_janis_dot_or_dot_jp)への感想・意見など。
spamよけのため、_at_や_dot_は適宜@や.に入れ替えてください。

目次ページ