アーカイブ

2008年 3月 14日 のアーカイブ

真魚は昔から設定を、本体と同じ場所にINIファイルに保存している。
もし、本体を置いている場所が保存不可、アクセス権限なし等の場合、設定の保存が出来ない。
だから、ソフトの設定はレジストリにすべきだし、それが出来ないなら、
本体と一緒ではなく、ユーザーフォルダーに作るというのが望ましい。
ところが、インストーラーのないソフトがレジストリに書くと、それを消すときに面倒な問題があるし、
ユーザーフォルダーはどこにあるのかさえ認知されていない。
だから、ソフト本体と同じ場所にINIファイルを置き、消す時はまとめて消せるように作るのは宿命なのだ。

かつて、まだWindowsが不安定だった95/98/Meの頃の名残なのだが、
設定をソフト終了時に保存するやつはすごく腹が立った。
アプリが落ちるだけでなく、落ちる直前に読み込んだファイルの履歴も消えていたからな。
そうならないよう、真魚は、アプリ終了時ではなく、何か設定項目がある度に逐一書き込みしてきた。
今となっては、アプリは落ちるものじゃなくなったので、終了時だけ書き込みで事足りる。
でも仕様変更が面倒くさくて、昔ながらのしょっちゅう書き込むスタイルを続けている。

ということは、INIファイルが書き込み禁止の時は、内部では何度もアクセスを試みて失敗している。
目に見えない所で余計な作業を繰り返し、しかも失敗しているってあまり気分がよくない。
また、たとえ書き込み可能でも、フロッピーに入れてたらしょっちゅうガリガリうざい事になるし、
書き込み回数で寿命が減るような、外部ストレージで使うわけには行かない。

そんなこんなで、固定HDD以外から真魚を起動する場合は、INI書き込みをしないように制限していた。
もちろん、読み込みはするので、好きな設定でINIファイルを置いておけばどうにかなったのだが。

で、もうフロッピーの時代でもないし、昔はUSBメモリに寿命が書いてあったけど今は書いてなくて、
しょっちゅうINIの書き込みをしてもよいほど寿命が延びたのかなと思っている。
何か最近、ASUSから出た小さいPCは、フラッシュメモリにOSなんか入れてるくらいで、
OSが書き込むデータ量や頻度に比べたらごくわずかな、たかがアプリ一つのINIはどしどし書いて良さそうだ。

あとは書き込み禁止の所に何度もアクセスしたら気分が悪い問題もあるが、
これも、一度失敗したらアプリ終了まで、失敗したことを覚えておかせれば回避出来そう。

つーことで、INI書き込み制限は削除するが、まだフロッピーから起動する人がいるとすれば、
フロッピーに入れたINIファイルを書き込み禁止にしておけば、何度もアクセスしなくなる。
ということで解決としよう。

不動産屋は三月が一番忙しいのだが、なぜか三月が一番プログラミングもしたくなる。
現在の真魚のエディタエンジンを作り始めたのも三月だったな。
案の定、今年もちょっと真魚をいじり始めた。

12月に予告した二つの部分をいじり終わった。
一つは、Yahoo!辞書への文字列の転送方法だ。
Yahoo!はなんか昔からEUCにこだわっていて、サイトのエンコードもEUCだったので、
わざわざEUCにエンコードしてから開いていたが、いつしかUTF-8がデフォになったようで、
これでようやく、辞書検索もユニコード対応できるなと思って、さっさと真魚で対応したかった。
別にエンコードがUTF-8だからって、他言語辞書になってるわけではないから意味がないが、
これは気になったからやっておいたに過ぎない。

もう一つはGrepの速度の問題で、一つ納得したことがあって対策を打った。
真魚のGrepはこれ以上どうしようもないほど速いのだが、それでも掲示板には遅いと報告され、
いったいどんな使い方をすれば遅くなるのか、何を探してるのか見てみたかったのだが、
その遅いって言ってる人が、今度はバイナリの読み込みについて書いていて、ひとつ合点がいった。
でかいバイナリファイルとかがある場所に検索をかけた時はメチャ遅い。
しかも、せっかくでかいファイルを読み込んでも、バイナリであるという理由で検索対象外になる。
テキストファイルしかない場所か、もしくは、画像くらいのサイズのファイルなら混じってもいいが、
CDとかDVDをまるごと抽出したものや、それを圧縮したものとかがあるフォルダで検索されたら、
そのでかいファイルをいちいちメモリーに読み込んでいるから超遅い。
だって読み込まなきゃ、それがテキストファイルかどうかもわからないんだから仕方がない。
割れ物とシリアル集を同一フォルダに置いてGrepしてる人の場合は、フリーズしたかと思うほど遅くなる。

一切読み込まなきゃテキストファイルかどうかわからないが、ちょっと読み込めばだいたいわかる。
Admenuとかでやってるように、自動判定を最初にやってから読み込むように変更した。
その、自動判定を全ファイルに対して毎回やることで遅くなるかと思って、
自動判定をするかどうかのオプションもいったん用意したのだが、結局なくした。
自動判定有りでも十分速いし、そのオプションをわかりやすく名づけることも出来なかったため。

自動判定と言っても、完璧に判定するには全部読み込まなきゃいけないわけだから、
最初の方をちょっとだけ読んでの自動判定は不完全だ。
バイナリはじきの手法をとっているので、バイナリをテキストだと判定することはあっても、
テキストをバイナリだと判定することはない。
検索したいのにひっかからないファイルがあって困るということは起らないはず。
でも、たまにはじくことが出来なかったバイナリファイルを読み込んでしまうことはあるだろう。
例えば捏造ファイルなんかは、中身が完全にランダムだったりするから、バイナリはじきが通用しない。
それは仕方ない。

ということで再開。
またすぐやめてしばらくやらないこともありえるが。
一応、ついでにどこまでやるか検討するかな。