雑記から戻る過去雑記ログ
他の月を見る
(2002/08)
バックアップツール
●バックアップツール

 最近、格安でCD-RWを一台手に入れたこともあって、今までMOでやりとりしていたCVSのリポジトリを、CD-Rでやりとりするようにしてます。ここ1ヶ月くらいのことなんですが、使っているうちにどうも変なことが。

 CD-RやRWをフロッピーのように使えるパケットライティングソフトを使っているのですが、なんかファイルの日付がうまくコピーされないのです。1600年とかになって(結局書かれていないから0になっている)、使っているバックアップソフトがご認識して、うまく差分バックアップできないという問題が起きました。
 はじめはパケットライティングソフトの不具合だろうと、会社とやりとりして不具合を認識させました。しかし修正されるのにいつまでかかるかわからないから、別のパケットライティングソフトに変えてみました。それでも同じ現象がおきました。2種類のCD-RWドライブとW2kとXPの組み合わせで同じ現象が起こるので、環境依存ではありません。
 最初の会社とのやりとりの時に、自分でいろいろ調べた結果、Windowsに拡張子が登録されていないと、日付情報のコピーに失敗すると言うことがわかりました。再現性100%です。しかし2社のパケットライティングソフトで同じ現象が出るということは、なんか共通の深い問題があるのかもしれない。これは直らないかもしれない...

 で、一度CD-Rのパケットライトの便利さを実感してしまうと、もうこれを捨て去ってMOに帰るわけにもいかず(MOが自分のパソについていないので、結構面倒なんです)、なんとかしなければならない羽目に。

 CVSのリポジトリは、各ファイル名の後ろに「,v」(コンマ(notピリオド)v)がつきます。これが付くと、Windowsに拡張子が登録できません。というか、必要なファイルすべてに対して、,v付きの拡張子を2重に登録しなきゃなんない。そんな馬鹿なことはできない。

 で、結局、バックアップツールを自作して、CD-Rへは,v(コンマv)を.v(ピリオドv)に変換して書き込むことにしました。製作時間は3時間ほどだったんですが、結構いいものができました。今まではセーブとロードで別の設定をバックアップツールに読み込んで実行しなければならなかったのですが、自作のツールでは同期を取るというコンセプトで、タイムスタンプの新しいものを上書きするという処理にしたので、セーブもロードも気にしなくて済むようになったし、結局さらに便利になりました。やっぱり自分で作るのが一番だよなぁ... 時間さえあれば。

 公開は考えていませんが、要望があれば考えます。

2002/08/31(Sat)
アルバム作成サイト
●アルバム作成サイト

 ここ
 値段も手頃だし、なかなかいいんではないだろうか。
 子供の成長記録とか。

 ネタ元はお笑いパソコン日誌

2002/08/30(Fri)
ヒアドキュメント再び
●ヒアドキュメント再び

 毎度Rubyの話ですが、今日、あるRubyライブラリを見ていたら、
以下のようなヒアドキュメントがありました。ここに書くのは、あくまで例ですけど。

print <<"SSSS----"
....

SSSS----

(Sは半角スペースだと思ってください)

 へっ? って感じで、K2Editorは誤認識。
 どうも、""などで識別子を囲むときは、スペースなんかも含められるみたい。ついでに-(ハイフン)だって、識別子には含められないんじゃないの?

 ううむ。

 で、K2Editorのバグも発見。コメントセット文字列の先頭にスペースが含められる場合は、そのコメントセットを発見できません。
 なぜなら、TEditorのパーサーが半角スペースを読み飛ばしてしまうから。パーサーにとって半角スペースはないのと同じ。K2Editorの今回の正規表現付きコメントセット(TEditorではBracketと呼びます)は、TEditorのパーサー機構の中に組み込んだから、スペースは認識できません。

 んで、パーサーを改造して、空白はスキップしないようにしました。これで、半角空白を表示するオプションなんかも簡単に付けられるようになったんだけど、半角空白表示なんてほしい人いるのかな。昔、2人くらいに要望されたことあったと思うんだけど、今一用途不明。そろそろ、1.3系のβをはずそうと思ってるんですが、これを入れるかどうか。後、「これ以降をコメントとする文字列」の複数化と正規表現化。どうしよう...

2002/08/29(Thr)
r拡張書式
●r拡張書式

 先日の%記法ですが、Perlにもqq/..../とかあるようです。
 やはり、qq{....}ということもできるので、括弧を変換しなければなりません。
 寝て家宝を待っていたのですが、昨日は依頼先が疲れていたようで、全く考えてくれませんでした(参照:昨日の雑記)。ま、依頼するまでもなく、$1等の後方参照命令で$r1等と書くことで、括弧を変換してしまうというアイデアは簡単に思いついていたので、それで行くことにしました。

 OK。OK。これでRubyのスクリプトの色分けは、ほとんどできるところまで来たかな。

 ちょっと疲れたので、お休みします(^^;

2002/08/27(Tue)
Rubyの%記法
●Rubyの%記法

 PerlやRubyに搭載されているヒアドキュメントには、K2Editor r.1.3.4で対応したのですが、Rubyには%記法というものがあるんですねぇ。今、マニュアルを繰っていて見つけました。

 これ、困ったもんです(^^;

 たとえば、%!.....!という形で文字列を表すのですが、%(...)なんて記法もあるみたい。つまり、「(」を「)」に変換して検索しないと正確に判定できないということのようです。

 どうすんねん、これ(^^;

●寝ている自分に依頼する(^^;

 やっぱり、わたし、寝ている時になんやいろいろ考えているようです(^^; 仕様をどうしようとか、このアルゴリズムはどうするとか、そういうのを寝ているときに考えていて、起きたら心が決まっているなんてことを何度も経験しています。
 今回のヒアドキュメントのアルゴリズムも、寝ているときにかなり考えていたようで、起きたときにはだいたいのコーディングの道筋とか決まってるんですよね。まぁ、さすがに寝ている自分はイマジネーションの世界にいるわけで、抜けているところもいっぱいあって、そのままでは使えない場合も多いのですが。でも、心の働きには、複雑な問題を単純なものに分解して行くというのがあるようで、一定時間を置くと、だんだん問題がシンプルになっていくという経験をたくさんしています。

 なもんで、問題を考えるときは、寝ている自分に依頼するということを最近やってて(^^; 迷ったらとりあえず一晩置いておくことが多いです。

 今回の%書式も、一晩くらい置いておこうかなと思ってます(^^;

2002/08/26(Mon)
Rubyのヒアドキュメント
●Rubyのヒアドキュメント

 Rubyスクリプトの仕様で、ヒアドキュメントというのがあります。

 たとえば、こんな感じ。

print <<HEADER
<HEAD>
...
</HEAD>
HEADER

みたいにすれば、<<HEADERからHEADERまでの間が、改行付きの文字列として扱えるみたいな。

 これをK2Editorで認識して色分けしようとすると、コメントセット文字列で、左側の条件でマッチした文字列を右側の条件に補完してやるというのをダイナミックにやる必要があります。

 これを、今回の検索ルーチン改変の一環としてやってしまおうとトライしています。結構つらかったですが、いい線まで来ています。

 いよいよいけそうとなって、じゃぁ、Rubyのコメントセット文字列の設定をやってみようと思ったら、Rubyって、鬼。

 たとえば、

1)
p <<LABEL.upcase
the lower case string
LABEL

こんなのや、

2)
print <<FIRST, <<SECOND
これは一つめのヒアドキュメントです。
まだ一つめです。
FIRST
この行からは二つめのヒアドキュメントです。
この行で終わります。
SECOND

こんなのもOKなんだそうです。

ここまでは、どうやってもK2Editorでは無理ですわ。こういうのをきれいに正確に色分けしようと思ったら、もはや正規表現では無理で、パーサーによる文法解析もどきが必要になります。

ちょっとへこんだ。

# まぁ、エディタでヒアドキュメントに対応しているのも、ほとん
# どありませんから、ここまでできるというのもすごいとは思います。
# ところがPeggyProは、1)のパターンはOK。2)はさすがに無理だった
# けど。K2Editorでも1)のパターンの.upcaseも文字列として
# 色分けすることは可能なんだけど。PeggyProは、.upcaseは、
# 文字列じゃなくて、通常の色で表示する。脱帽。
2002/08/25(Sun)
Delphi7日本語版
●Delphi7日本語版

 発表されました。
 あれ、professional版は、68000円だと。英語版は$999だったぞ。おかしい... 英語版とラインナップも違うようだし、同じpro版でも何か違うんだろうか。

 買うか、様子見するか、考えどころだなぁ。今のところ必要ないし...

2002/08/23(Fri)
引き続き全置換
●引き続き全置換

 やはり予想通り、大文字・小文字の区別をすれば、速度が2桁改善されました。BREGEXP.DLLにコールバック関数を追加して、途中経過を本体側に伝え、また処理の途中で中断できるように変更しました。
 修正した後のDLLは、名前を変更してK2Regexp.dllとしています。問題の大文字・小文字の区別をしないときの最適化は、まだやってません。ここまでの変更は汎用的にやってきたつもりですが、この変更に関しては、ともすればかなり特殊な変更になりそうなので、ちょっとよく考えてから取りかかります。
 これができれば、速度で文句が出ることはないだろう。まだ秀丸よりは遅いのだけれど。(やっぱり秀丸は速すぎです。あのソフトは、時空のないところに時空を生み出していると見える。強調表示にしても...)

●β版公開

 結局、大文字・小文字を区別しない場合の最適化は、正規表現のiオプション(これはBREGEXP.DLL独自仕様だったかな)を使用しないようにして、正規表現側に細工をすることで実現することにしました。まぁそこそこのパフォーマンスは出ます。

 で、β公開させていただきました。サポートはK2Soft-MLの方に変更させていただきます。あんまりMLたくさんあっても仕方ないので、統合することにしました。

 さて、どのくらい不具合が出るかな。とりあえずこれで一息つけますね。酒でもかっくらって寝るかぁ。


2002/08/20(Tue)
全置換
●全置換

 修正しました。一応実用に耐える程度には高速化しました。
 途中でキャンセルもできるようになりましたし、全体のどのくらい進んでいるかがわかるようなユーザーインターフェイスもつけました。

 ベータ版を公開したいのですが、もう1時を過ぎました。
 またの機会にします(^^;

 寝よっと。

# あ、そうそう、範囲検索機能もつきますので、お楽しみに。

# 永さん、ごめん。確か、perl互換正規表現は、当分使わないと
# 言ってたよねぇ、わたし。早々にperl互換正規表現になって
# しまいそうです。ページのメンテナンス、よろしく(^^;

●VECTOR

 一度、VECTORのダウンロードランキングで上位をねらってみたかったのだ。祝文書作成カテゴリ中一位(^^ 秀丸もTeraPadも抜いたぜ。ちょっとずっこいけど...


●再度全置換

 K2EditorとTeraPadの全置換が遅すぎるという文書は、うちの掲示板でした(^^; てっきり2CHかどこかだと思ってたのですが。

 つちやさんの全置換ツール速いですね。なぜこの速度が出るのか不思議だったので、調べました。

 うーむ。BREGEXP.DLLの置換ルーチンは、大きな文字列を食わせたとき大文字・小文字の区別をしないと遅いということが判明。
 BREGEXP.DLLの中で、検索時に食わせた文字列と同じ大きさのメモリを確保して、大文字に変換するのだが、これが検索毎に呼ばれる。なるほど。40MBで10000HITの場合は、40MBのメモリ確保と破棄が10000回呼ばれる。そりゃ遅いわ。ついでに40MBの文書をK2Editorに読み込んでいるときは、その倍くらいのメモリが別に使われているから、普通のシステムなら仮想メモリを使うことになるし、速度はどんどん落ちていく... つちやさんのは大文字・小文字は常に区別しているから、その処理が呼ばれなくて速度が落ちない。

 BREGEXP.DLLにはもう手を入れているので、いけるところまで行ってみよう。その部分をキャッシュにすればきっと速度は上がるはず。全置換ルーチン、また一から書き直しです(^^; 

●K2EditorのヘルプをTPZに移行

 そうそう、夏休みにもう一つやったのがこれ。
 K2Editorのヘルプを書いた後にTaskPrize r.2を出したので、K2EditorのヘルプはすっぴんHTMLファイルだったのです。ページを追加したり、Copyrightの年を変更するだけでも一苦労なので、TPZにインポートしたかったのだけど、なかなか機会がなくて。

 今回、検索部のヘルプを書き直すことになるので、ついでにRubyのインポートマクロを書いて、TPZにインポートしちゃいました。実はRubyForTPZを開発していたとき、一番最初にHTMLヘルプのインポートを書きかけたのだけど、挫折していたのでした。

 まずhhcファイルを解析してツリー構造通りにTaskPrizeにHTMLファイルをインポートします。ここまでは昔書いてました。次に、メッセージIDとファイル名のハッシュを作成して、そのハッシュテーブルを使ってA HREFタグをメッセージIDに変換。ここが挫折していたところ。今回うまく書けました。その後、ヘッダ・フッタ共通部をマクロに置き換えるなどの処理をして終わり。

 このスクリプト、はじめは公開できる汎用なものをと考えて書いていましたが、だめでした。あまりにも特殊な処理が多いので、公開できません。というか汎用化は挫折したということです。(つまりめんどくさかったのだ) また気が向けば考えるかもしれませんが、需要はほとんどないだろうな... どうしても欲しい人があったら、リクエストしてください。考えます。

 これでK2EditorのヘルプもTaskPrizeで書けるようになりました。よしよし。

 DOSプロンプトからRubyを直接起動してもTaskPrizeをコントロールできる機能をRubyForTPZにつけておいたのですが、今回、これは重宝しました。デバッグが楽だった。この機能をつけることに関して背中を押してくれたすのこさんと永さんに感謝。誰も欲しいと言わなかったら、面倒なので、きっとつけてなかったと思う。

 このスクリプトを書いたことで、RubyForTPZがあれば、インポート・エクスポートに関してはなんでもできるなと、またまた自信を深めたのでした。これはほとんどRubyが書きやすくて強力であるということに尽きるのですが(^^; Ruby万歳!

 うーん、しかしTaskPrizeはHTMLヘルプを作るツールとしても、かなり使えると思うんですけど、どなたかつかってらっしゃいますか? HTMLHelpプラグインはうちのサイトだけでもかなりの件数ダウンロードされているので、それなりに需要はあるんだろうとは思うんだけど。

2002/08/19(Mon)
夏休み
●夏休み

 夏休みの前半から中盤は東京の嫁さん実家に。
 娘は、みんなに遊んでもらってうれしそうでした。ところが帰ってきても、特に寂しがらないんですねぇ。あんなにじいちゃん、ばーちゃんになついていたのに。そういうもんかしらん?
 2歳になってから、「これはー? これはー?」といろんなものを指さして聞きよります。これが3歳になると、「なんでー? なんでー?」になるんだそうな(嫁さん談)。かわいくてよろし。

 夏休みは、K2EditorのBREGEXP.DLL化をやろうとしていたのですが、問題が出て、やはりBREGEXP.DLLを改造することになりました。ほぼ完了と思ったのですが、まだでかいファイルで全置換すると使い物にならないので、もうちょっとなんとかします(40MBのファイルで動作確認してますが、全置換のみ使い物になりません)。これに関してはβテストをやりますので、また通常のバグフィックスはちょっとお休みになります。検索ルーチンは全部書き直しましたので。後方参照もばっちり。置換も後方参照効くから、これはかなり強力ですね。
 え? 後方参照を知らない? 勉強しておきましょう、WEBで。perl5と正規表現なんかで検索すると濃いページがいっぱい当たりますので。

 しかし秀丸の全置換、速すぎ。どっかで、TeraPadやK2Editorの全置換が遅すぎと書いてあったのを読んだことがあるが、秀丸と比べたらあきません。ありゃ速すぎですわ。あんな速度が必要になるのは、よほど特殊用途でしょ。
「あんまりデリケートにチューンするなよ。レースをやるんじゃないんだから。」とはマルコのせりふ。

 そういう特殊な置換が必要になったら、迷わず秀丸を試用しましょう(^^; 私? 私はWin3.1の時に秀丸正規ユーザーになってますから、迷わず秀丸を使います。SEDを勉強するというのも一つの手だな。今なら昔挫折したSEDもきっと使えるだろう。


2002/08/18(Sun)
Delphi7
●Delphi7

 海の向こうでは、この話題で持ちきり。
 .NET対応とか、Kylix統合とか。びっくりするような話題が。(.NET対応は前から言われていましたからびっくりすることではないけど、Kylix統合はちょっと驚き。Linux版のバイナリもつくのだろうか)

 お値段もさらにお高くなってます(--
 Professional版が$999。おいおいという感じ。
 最初Delphi1を買ったときは2万円切ってたのに、どんどん高くなる。バージョンアップ費用がどれくらいか。Borlandには、総額で20万以上使ってるなぁ。

 でもなぁ、こないだDelphi6を買って、まだほとんど実戦投入できていないのに、もう7ですか。そういえばDelphi5の時もそうだったなぁ。Delphi4を使ったのは、ほんのちょっとだけだったし。もうちょっとゆっくりでもいいのに... Delphi6を買わなきゃよかったのだが、そううわけにもいかないし。

 つらい...

●お仕事

 どうも9月以降、本職の方がまたまた忙しくなりそうな気配。
 オンラインソフト開発の方もいろいろと夢はあるのだが、なかなか動けない状態が続きそう。
 まぁ、わたしの場合、忙しくて完全にオンラインソフトが作れなくなるような立場になったときに使いたくなるだろうツール作りを今からしているというところもあるから(笑) 動ける間にやっておきたいことのイメージはぼんやりあるんです。後、足りなさそうなのはスケジュール管理ソフトくらいかな(爆) 
 後何年こんなことやってられるかなぁ。

 なお、こないだ、RubyForTPZでがんすけとの連携マクロを書きましたが、現在これ重宝しています。開発計画を立てるのにむっちゃ便利。後は、印刷フォーマットをもう少し細かくいじれたらなぁと思うけど、それをするなら自分でガントチャートソフトを作らないと... それは工数からして無理だしなぁ。まぁ、今のところこれで満足。


2002/08/09(Fri)
サーバー
●サーバー

 おうちにファイルサーバー兼Web/Mailサーバーを立てようと、いろいろやってます。Linuxも考えたのですが、いろいろと面倒そうなので、Windows2000にて。
 うちはフレッツADSLの1.5Mなので、回線がそんなに太くないし、ファイルダウンロード等はniftyあるいはkyoto-inetに置いておくことになると思いますが、絵入りドキュメントとか、ファイルサイズは食いそうだけどそんなにアクセス数はないだろうと思われるものをおうちのサーバーに移そうかと考えています。

 ちなみに参考書は、「Windows2000で作るネットワークサーバ構築ガイド」。K2Editorが収められているので、見本誌としていただいていたものです。今回はこの本さまさまでした。なんせ、ほとんど知識がないところからはじめましたが、この本のおかげで、ネームサーバ・Webサーバ、メールサーバを立ち上げるところまで2日で来ました。最初に考えていたよりはかなり簡単でした。

 まだテスト運用なので、アドレス等は伏せておきます。そのうち公開するかもしれません。メーリングリストもこれで運営できればよいなぁと考えています。EasyMLはInfoseekに買収されてから、融通が利かなくなってしまって、わたしはがっかりしています。ユーザーには問答無用でメールマガジンを送りつけているようですし、これを解除することができないということみたいで、困った仕様ですわ。

 いじょ、報告でした。

2002/08/07(Wed)
検索の極意
●検索の極意

 つかんだかも。
 うーん、コロたまでした。(コロたまとはコロンブスの卵)。

 しかし、正規表現をまともに扱えるエディタがどれほどあるというのだ。だから、あんまり気にしなくてもよいのではないか... 
 そういうわけにはいかないのだよなぁ。技術者の良心というものがあるので。

 つかんだから、素直にBREGEXPを使う方向で考えよっと。

●PeggyPro

 最近試用してみたのだが、よくできてるわぁ。作成元は株式会社だけど、もともと一人の人がやってたように見える。いったいいくつの言語の文法解析ができるんじゃ、これ? すごいなぁ。これだけすごいのに、あんまり有名じゃないのも、今のオンラインソフト社会の問題点が見えるような気がする。いいものを評価しようと言う人が、結局少ないってことでしょ。評価できる人が少ないのか。評価する能力のない人が○の杜とか影響力のあるサイトを作っているから、変なことになる。一旦人気が出ると、一気にブレークするのは、歌謡曲と同じ。

# あ、でもPeggy(Proじゃないけど)は○の杜には載ってるのよ。最近
# は○の杜の影響力も昔ほどはなくなっているような。

 結局、大半の人にとってはエディタなんてなんでもいいのかも。そういう結論だと、なんか悲しいものがあるなぁ。

 しかし、こういうサクセスストーリーに乗りたいなぁ。わたしはいい意味でも悪い意味でもアマチュアだから、無理だろうなぁ。死ぬ気でやったら、ものになるんだろうか... そういう冒険もできないしなぁ。

2002/08/03(Sat)
後方参照とオートマトン
●後方参照とオートマトン

 正規表現検索ルーチンに、bmRegExpを使用しようかと思って、必要な機能をいろいろ搭載していましたが、ある問題に...

 どうせ検索ルーチンを変更するなら、正規表現の後方参照を搭載したいなぁと思うのですが、後方参照とかグループ化と呼ばれるものを導入しようとすると、正規表現マッチングのアルゴリズムにオートマトンが使えないということらしい。bmRegExpはオートマトンを使用しているので、最初後方参照の機能をつけるためにはどうしたらいいのかと、中田先生の「コンパイラ」とか引っ張り出してきて思考ゲームを行ってみたのだけど、「もしかして、全然だめ??」なんて結論に。
 で、Webページを検索してみたら、どうもそういうことみたい。

 うーむ。これはやっぱりBRegExpを使うか、自分で書くかしかないのか... BRegExpだと、前方検索がうまくできないので(というか、一般の正規表現検索ルーチンは前方検索なんて考慮してないよね。する必要ないし)、やたら時間がかかることになってしまう。bmRegExpは、ソース公開だから、こちらでその辺の機能の追加も完了していて、後は搭載するだけだったんだけど。

 で、BRegExpを調べていたら、実はこれはperl5のルーチンをそのまま持ってきているということみたい。ということは、それを修正すればうまくいくのではないか。BRegExpはLinux用ライブラリとしてソースが公開されているから、後はライセンスの問題だけだ。perlのARTISTIC LICENSEを読んでみたけど、ソース非公開でバイナリだけ添付するということはできるようなできないような、よく意味がわからない。BRegExpはフリーウェアとして公開されているから、こちらもフリーウェアとして公開するならOKなのか。それともソースを公開する必要があるのか? この辺がよくわかりません。

 修正するにしても、ソースの読解からはじめないといけないのだが、慣れないC言語と慣れないアルゴリズムは、やっぱりかなり険しい道です。でも、どうせなら、後方参照付きの正規表現でK2Editorを出したいよなぁ... もうちょっと試行錯誤します。

2002/08/01(Thr)