2003-11-27

アナウンスだけはしておかねば。(←コピペ)

更新情報

まだペースト時に落ちることがあるようだったので、気になるところに手を入れてみた(弱気)「[最近使った文字列]拡張 2(strhist2)」1.02を公開しました。

2003-11-24

アナウンスだけはしておかねば。

更新情報

プレビューOFF時に文字列が正しく挿入されないのを修正した、「[最近使った文字列]拡張 2(strhist2)」1.01を公開しました。

2003-11-23

中村友次郎氏のお父様は小説を書かれていらしたのですね。

更新情報

コマンドラインの実行(cmdlinex)」2.16と、「[最近使った文字列拡張]拡張(strhist)」の後継、「[最近使った文字列拡張]拡張 2(strhist2)」1.00を公開しました。

cmdlinex 2.16は外観を大幅に変えてみました。次で内部的なところ(コマンドの実行部分)をごそっといじろうと思っているので、その前に変えられるところは変えておこうということで。

strhist2は旧作のソースのスパゲッティぶりに嫌気がさして書き直したものです。まあ、やってることが同じな以上、結果的には似たようなコードになってしまいましたが。

Microsoft Encarta 総合大百科 2004

お買い物日記 – 更新履歴(2003年11月) – Final β Laboratory
http://www.finalbeta.jp/update_log/2003_11.html#log20031121_1

びんごっ! 日本語はUTF-8でURIエンコードか。ふむふむ。これならSearchDDw+から簡単に制御できそうです。こんなに楽なのはエンカルタ99以来じゃなかろうか。

ああ、これ(コマンドライン引数で検索できる)だけでも今使っている「エンカルタ 総合大百科 2002」からバージョンアップする意味があるなあ。

ところで、付属のBookshelf 3.0というのは2002に付いていたものと同じものということなんでしょうか。もしそうなら……。

Microsoft Bookshelf Version 3.0 でWZから単語検索

……もしそうなら、こんなマクロを今ごろ書いても意味あるかしら……。

// bs3 - Microsoft Bookshelf Version 3.0 で単語検索
void main(TX *text)
{
    txstr szfind;
    txGetWordWhole(text, szfind);
    txstr szfilename;
    pathFullConfig(szfilename, "¥m.vbs");
    TX *textScript = textopen(szfilename);
    txDeleteText(textScript);
    txInsert(textScript, "Set BSDef = WScript.CreateObject(¥"BsDefine.BsDefine.2¥")¥n");
    txInsert(textScript, "BSDef.InvokeDefine(¥"" + szfind + "¥")¥n");
    txSave(textScript);
    textclose(textScript);
    shellExecute(szfilename, "open");
}

もっともBookshelf 3.0はホットキーでアプリを選ばず単語検索できるわけですが。まあ制御方法がわかったぞと、それが言いたかっただけです(笑)。

2003-11-20

宗教論争に火を点けろ(笑)!

べつにWZマクロに限らずC言語系の言語一般にあてはまるのではないかと思うのですが。

以下の例では、fooというFOOオブジェクト(typedefされた構造体)を作成して、そこからなにやら文字列を取得していると考えてください(シチュエーションは適当にでっち上げたので必然性に乏しいですがご勘弁を)。

void sample1(TX *text)
{
    FOO *foo = fooNew();
    if (foo) {
        DWORD sizeBuff = fooGetStringLength(foo) + 1;
        mchar *pszBuff = malloc(sizeBuff);
        if (pszBuff) {
            fooGetString(foo, pszBuff, sizeBuff);
            printf("%s", pszBuff);
            free(pszBuff);
        }
        fooDelete(foo);
    }
}

これは以下のようにも書けますよね。

void sample2(TX *text)
{
    FOO *foo = fooNew();
    if (!foo) return;
    DWORD sizeBuff = fooGetStringLength(foo) + 1;
    mchar *pszBuff = malloc(sizeBuff);
    if (!pszBuff) {
        fooDelete(foo);
        return;
    }
    fooGetString(foo, pszBuff, sizeBuff);
    printf("%s", pszBuff);
    free(pszBuff);
    fooDelete(foo);
}

さて、どっちがいいのでしょう。とくに、後者でfooDelete(foo);が二つ出てくることになるのはどうなんでしょう?

2003-11-14

WZ5でマクロがいろいろおかしいとのご報告をいただいております。すみません、もう少しお待ちを……。

本当にやばい時は「やばい」とか言うことすらままならず

ここ数日、ThinkPadのハードディスクへのアクセスが頻繁に止まるようになってしまって、フルリカバリを余儀なくされたり、その過程でデータがいくつか破損してたり(IMEの登録単語が吹っ飛んだ(泣))、仕方がないので急遽先代のPCに乗り換えて仕事してたりと、まあ大変だったのですが、それをおもしろおかしく書く暇もなく……。

Windowsのイベントログには「遅延書き込みエラー」みたいに記録されてたんですけど、これってハードウェア的に問題が出はじめたせいなんでしょうか? それともファイルシステムの整合性が失われて起きたソフトウェア的な問題? じっくり調べて見極めるような余裕はなかったので、さっさとデータを退避させて新しいHDDと交換しちゃいましたけど……。

しかしパソコンってめんどくさいっすね……はぁ(嘆息)。