バグと機能拡張

2007/03/18

主筆」第18版の機能拡張に着手する。とりあえず、変更が加わった行に印を付けて明示する機能を実装する。この機能には、拡張情報領域の機能を用いておいた。すなわち、更新されたら、所定のカラムの拡張情報領域にフラグを設定する。これにより、その行が更新されたのかを知ることができるようになる。

だが、その過程で幾多のバグがあることに気が付いた。まず一つは、行が追加・削除された時の、拡張情報領域の値の処理だ。今までは拡張情報領域に設定された値が、行の追加・削除に合わせて移動しなかった。例えば、10行目にフラグが設定されていたときに、5行目の行が削除されたとしたら、拡張情報領域のフラグが9行目に移動することが無く、そのまま10行目に残り続けていた。

始末の悪いことに、これは行の追加・削除が発生することにより、拡張情報領域の値として不正なメモリを参照していたことにより発生するバグだった。考えただけでも身の毛がよだつ。

プラグインの管理周辺でも、似たようなバグがあった。だが、これはまだ顕在化していなかった。しかし、おそらくおかしくなるのは時間の問題だっただろう。そのどちらも、対処しておいた。だが、似たような問題が他にもないとは、まだ言い切れない。確実に潰しておかなければならないだろう。

今ひとつのバグは、ファイルの排他制御に関するものだった。無名のファイル、すなわち新しいファイルを開いている「主筆」が複数ある状態で、二番目に起動された方で何らかのファイルを開こうとすると、初めに起動された方の「主筆」がアクティブになるだけで、目的のファイルを開くことができない。

これは、指定されたファイルがすでに開かれているか否かを判断する処理で、どちらかのファイル名が空白だった時には偽を返さなければならないところで、真を返していた事によるバグだった。

極めて単純なミスである。だが、なぜ今までこれで良いものだと思っていたのだろうか。思ったほど、ここのロジックが実行されることはなかったのだろうか。あるいは、正常に動作していないことに、気が付かないでいただけなのだろうか。それとも、存在して欲しくないものの存在を、無意識的に無視していただけなのだろうか。

このように考えていくと、プログラムを作ること難しさが、今更ながらに身にしみる。

アクセス数の近況

2007/03/07

このところWebサイトを更新していない。仕事が忙しくてそれどころではない。肝心要の「主筆」の開発が遅々として進んでいないのだ。Webページを追加したりしている余裕はない。

しかし、そのせいだろうか。アクセス数自体は、依然とさして変化していはないのだが、クリック数は極端に減少した。2月に至っては、クリック率は0.02%であった。

ここまで少ないと、ほとんど広告は存在している理由がないものと思われる。どっちにしろ糞忌々しいgoogleの商品なんだから、とっとと使うのをやめてしまうのも良いかも知れない。逆にその方が、Webページのアクセス数増加に貢献する可能性もある。

とは言っても、やっぱり地道にページを更新し続けるのが一番有効な方策なんだろうが。しかし、いくら何でも時間がなさ過ぎる。

今年は、5月の連休は無くなりそうだしな。

用紙サイズの指定

2007/03/06

諸般の障害を乗り越えて、ようやく「主筆」の印刷機能の実装を進められるようになったかと思いきや、今度はここのblogのアカウントを更新しろとぬかしやがる。

新機能が増えただの増えないなどの抜かしていたが、実際に更新処理をやってみると、いくつかの糞機能が追加されてますます重くなっていた。糞度充実。

日付と日付の表示形式のバグはようやくある程度対処されたようだが、それでもデフォルトの設定ではバグッたままのようだ。明示的に設定してやらなければまともに表示されない。結局、アメリカの連中は自分たちが世界だと思っているのだ。世界isアメリカ、アメリカis世界である。本当にクソクラエだ。

それはどうでもいいのだが、問題は印刷機能である。

PostScriptの仕様をちゃんと調べたわけではないのだが、どうもPostScriptでは用紙のサイズを直接的に指定する機能は無いような気がする。クリッピングの領域を指定することはできても、それと用紙サイズが一致するとは限らない。

だから、用紙を横向きにして出力する場合、用紙の向きやサイズを指定するのではなく、文字を横向きにして出力するのが手っ取り早い。だが、文字を横向きで出すとしたら、その為のPostScriptのコードを生成してやらなくてはならなくなる。

テキストを入力してPostScriptを生成するコマンドを実装するとき、用紙のサイズを指定するだけでは、上記の機能を実装する事はできない。すなわち、指定されたサイズの用紙をどう使うかという指定が抜けているからだ。

不足するのならその指定を追加してやれば良いだけの事ではあるが、それは何か冗長なような気がしてならない。だが、かといって、指定された用紙のサイズから向きを勝手に推定するのはありえないし、用紙のサイズを直接指定するのではなく、「A4」や「B5」といったサイズと向きを指定するのも考えにくい。なぜかというと、用紙のサイズは実は各国で微妙に異なるらしいからだ。特に、Bという大きさは日本独自らしい。そういうことで、用紙サイズは直接的な数値による指定から免れることはできない。

PostScriptに用紙の向きやサイズを指定する機能は、本当にないのだろうか? PostScriptの哲学を考えるとなさそうだが。

日本語入力の問題

2007/03/05

Solarisを入れ直して、パッチを当てて、「主筆」の第17版をインストールして、「主筆」第18版の印刷機能の実装に取りかかったときだった。

「主筆」で日本語が入力できないことに気が付いた。

原因は、入力された文字列を受け取るときに指定する、バッファの長さが1バイト足りないためであった。バッファが不足しているために、ステータスとしてバッファ不足を知らせる値が返ってくるだけで、肝心の文字列が取得できていなかったのだ。

だが、今までは正常に入力できていた。それは間違いないはずだ。何せ、今まで「主筆」の開発には「主筆」を利用してきたわけだし、そのソースコードには立派に日本語のコメントが記載されている。間違いなく、今までは入力できていたのだ。

ではなぜ入力できなくなったのか。

おそらく、パッチを当てたためだろう。Solaris8は、もうほとんど枯れたようなOSである。公開されるパッチも、大分数が少ない。そのため、このところパッチを当てる作業をさぼってきた。そんなときに再インストールして、全部のパッチをまとめて適用したのだ。おそらくそのときに、バッファ長を確実にチェックするように修正されたのだろう。

つまり、今までは指定したバッファの末尾1バイト分だけ、バッファ領域から溢れた部分にも書き込みが行われていたと言うことだ。通常この事が、それ程の悪影響をおよぼすというものでもないのだが、しかし、万々一ということもあるのだから、バッファ溢れは発生させてはいけないのだ。

バグが対処されたことはいいのだが、しかしそれでアプリケーションが動かなくなるのは辛い。とは言っても、既存のバグに依存したコードを書く方が悪いのだから、こればかりは文句を言うわけにはいかないのだが。

正直言って、第17版はバグが多い。もしかしたら、未だかつて無い粗悪な代物なのかも知れない。第18版であ、十分に注意するようにしたい。

Solarisの再インストール

2007/03/04

パッチを当てたらXが起動しなくなった。それ以外の部分は特に問題ない様なのだが、どうにもXが上がらなくて使いようがなくなってしまった。だから仕方がないから、Solarisを再インストールしておいた。

だが、再インストールしてパッチを当てたら、また同じ現象が発生した。これはどう考えても俺のせいではなく、パッチが悪いようだ。Solarisのパッチは時々環境を破壊してくれるから困る。

結局、XVR-100のドライバをアンインストールして、入れ直しておいたら元に戻ったからよかったものの、それでも直らなかったらどうしてくれるつもりだったのだろうか?

おかげで、このところの本業の忙しさと相まって、「主筆」の開発が大幅に遅れてしまった。正直言って、1月から開発は全く進んでいない。それもこれも仕事が忙しいからだ。生きるのに必要な時間すらも削って仕事をしているのだ。それ以外事に費やす時間などありはしない。

しかし、この調子でいくと、例の通信制の大学とかいう奴もやってられなくなるのではないだろうか? これは非常にまずい状況である。いつか会社を辞めるときのための保険なのに、会社の横暴のせいで保険料を払えなくなってしまうのだ。この状況は何とかしなくてはならない。

世の中一般では、仕事は程々に手を抜いて、忙しい振りをするという事が行われているらしい。俺も積極的にこの作戦を展開して、自分の心と体の健康と将来を守るための防衛戦に望まねばなるまい。

いずれにせよ、俺は命を張ってまでして仕事をするつもりはない。