2004-08-13

訂正: ステップ10で、確認するレジストリエントリのキーが間違っていましたので、訂正しました。(ネタ元では正しく、僕が写し間違えていました)。[2004-08-19]

新しいウィンドウで開くIEのステータスバーが非表示になる(のを直す)

IEを使っていると、Ctrl+Nで新規ウィンドウを開いたり、リンクを [新しいウィンドウで開く] で開いたとき、(それまで表示する設定になっていた)ステータスバーが非表示になって起動することがあります。この状態にはまると元に戻すのはなかなか難しいのですが、そのわりには修正する方法がググってみてもほとんど見当たりません。一箇所、「ステータスバーが表示されない」というのを見つけましたが、ここで紹介されているやり方は、[フォルダオプション] で [各フォルダの表示設定を保存する] のチェックをオフにして、かつマイコンピュータのエクスプローラビュー(左側のフォルダツリー)を常に表示する設定にするという、不自由を強いられるものでした。

みんなこのトラブルには遭遇していないのかな、とも思ったのですが、英語のサイトで同様の報告と解決法が載っていたのでここにメモしておきます(「Annoyances.org – Status Bar in IE disappears (Windows XP Discussion Forum)」にあったもの)。

  1. IEを(ひとつだけ)開き、(消えている)[表示]-[ステータスバー]にチェックを入れる。
  2. IEのツールバー上で右クリックして [ツールバーを固定する]のチェックをはずす。
  3. Ctrlキーを押しながらウィンドウ右上の [閉じる] ボタンを押してウィンドウを閉じる。
  4. マイコンピュータから任意のフォルダウィンドウを(ひとつだけ)開き、[表示]-[ステータスバー]にチェックを入れる。
  5. 開いたフォルダウィンドウのツールバー上で右クリックして [ツールバーを固定する]にチェックを入れる。
  6. フォルダウィンドウの [ツール] メニューから [フォルダオプション] をクリックし、[表示] タブを出す。
  7. [すべてのフォルダに適用] ボタンを押す。
  8. ([フォルダオプション] ダイアログを閉じて、)Ctrlキーを押しながらウィンドウ右上の [閉じる] ボタンを押してウィンドウを閉じる。
  9. IEを起動して任意のリンクから [新しいウィンドウで開く] をやってみる。
  10. レジストリに以下のエントリがあるのを確認する。
    [HKEY_CURRENT_USER¥SOFTWARE¥Microsoft¥Internet Explorer¥Main]
    "Show_StatusBar"="yes"
    "Show_URLinStatusBar"="yes"
    

9で確認できれば、10でレジストリを見るまでもないような気もしますが、元記事に書いてあったので念のため。僕はこれで直りました。ただ単に最後のレジストリキーをインポートしただけでは直らないようで、おまじないのようなこの手順をやる必要があるそうです。まあそれで直るんだから別にいいですが……。

2004-08-11

試作品、pyedit.txc

※ ceditsよりも下に登録してください(IDM_INSERTRETURNが回ってこないので……)。

2004-08-09

ごめんなさい、だらだら書いてみたかっただけで、主張があるわけでも話にオチがあるわけでもありません。

迷惑メール

ウイルスやワームなのか、あるいはメールアドレスを収集するロボットのようなものかはわかりませんが、かつてここで公開していたInfoWebのメールアドレスをFromに騙って、僕の知らない人に空のメールを送りつけるやつがあるようです(こちらがウイルス/ワームにやられているというのはないと思う、たぶん)。逆に、こちらにそのようなメールが送られてくることも結構あります。

こうしたメールではFromは詐称されているので、そもそも差出人に問いただしてみてもあまり意味がないというのは、ウイルスやジャンクメールに慣れた人にとっては常識ですが、パソコンでメールをあまり使わず、掲示板やチャットスペースにちょっと書き込んでみたときにメールアドレスをWebに残していっただけというような人などは、やはり知らない人からメールが来るというのはなかなかショッキングなんじゃないでしょうか(と、ここまで書いて思ったけど、イマドキの人はケータイメールがそんなだったりして意外と慣れてたりするのかな)。

「このアドレス(かつてここで公開していたInfoWebのメールアドレス)から件名も本文も空のメールが来ましたが、どちら様ですか?」というメールが先日届いていましたが、これもそんな人がびっくりして送ってきたのだと思われます。

ところで、POPFileはこのメッセージをspamと判定していて、そのメールに気づいたのは受信してからだいぶたってからのことでした。しかし、このメールをsapmでないとPOPFileに学習させるかどうかでちょっと迷ってしまいました。結局は、こういったメールに対しては「何もしない」というのが最善なので、結果としてはPOPFileの判定はまんざら間違いでもないような気もするわけです(こういうメールに気を煩わしたくないという、POPFileを使う動機からすると)。

POPFileの判定精度は、これはもう素晴らしすぎるといってもよいくらいで(分類精度はいまや99.41%)、素人目には「よくこれがspamだと(あるいはspamでないと)わかるなあ」と感心してしまうほどですが、もし、こういう微妙な文面を騙った日本語spamが一般的になったら(やっぱりspamはいまだに英語が9割以上なので)、はたしてどこまで通用するのかというのはちょっと気になるところです(POPFileは、日本語メールはKakasiで解析している)。もっとも、日本語spamで「これをよく判定できたなあ」というケースはすでにいくつも見てるので、あんまり心配はしていませんが(むしろ楽しみに近いというか)。

それよりも、本当にspamを減らしたいのだったらメールアドレスを変えるべきかな。spamまみれ(約8割がspam)になるのはそのアドレスひとつだけなので。ところがそれはプロバイダ(@nifty)のメインのメールアカウントで、廃止するにはプロバイダを解約しなければならず、そうなるとプロバイダのその他のメールアカウント(プライベートで使っているのでこっちのほうが大事)も使えなくなるという。

考えどころだ。

2004-08-08

今日(もう昨日だけど)は、急いでいるのに電車が遅れたり、それを埋め合わせるためにタクシーに乗ろうとしたら後ろにいたおっさんにからまれたり、夕飯を食べ損ねたりと、散々な一日。

しかし、修理に出していたThinkPadが戻ってきた。木曜に電話、土曜に回収、そして翌週土曜の帰還であった。明日(もう今日だけど)セットアップしよう。

2004-08-07

「チュートリアル」にリンクをお願いしてみたけど、3週間たっても返事がないや。あはは。

英数・日本語間スペース調整

いわゆる半角英数字と全角日本語文字との間に、スペースを入れたいと思うこともあるわけです。普段は面倒だからしないけど、たとえば「マクロ入門」のページではそのようになっています。標準の機能として、[英数字と全角文字との間に空白を開ける] というのがあるのですが([編集]-[変換])、これはちょっと挙動が単純すぎるのであまり使えません。そこで以下のようなマクロを使っています。

//## 英数・日本語間スペース調整
static void spacingonMain(TX *text)
{
    // 英数・日本語間にスペースを開ける(メイン処理ルーチン)
    txJumpFileTop(text);
    TXCHAR ccur, cprev;
    // これら文字の前にスペースは入れない(¥x1f, ¥x1eはTMLタグ)
    mchar szIgnoreEnd[] = "¥x1f¥x1e¥x0d ¥t¥"'‾/)]}<>|,.:;+-*@?!¥¥()「」『』【】[]〔〕《》@$!?・、。,.<> …◇◆□■●○◎☆★※§〜―−‐";
    // これら文字の後にスペースは入れない(¥x1f, ¥x1eはTMLタグ)
    mchar szIgnoreTop[] = "¥x1f¥x1e¥x0d ¥t¥"'‾/([{<>|:;+-*@¥¥()「」『』【】[]〔〕《》@$!?・、。,.<> …◇◆□■●○◎☆★※§〜―−‐";
    while (txRight(text)) {   // ファイル先頭にはスペースを入ることはないからこれでよい
        if (!txIsCurParaTop(text) && !txIsCurReturn(text)) {
            ccur = txGetChar(text);
            cprev = txGetPrevChar(text);
            if ((txchIsKanji(cprev) && !txchIsKanji(ccur)) || (!txchIsKanji(cprev) && txchIsKanji(ccur))) {
                if (!strichr(szIgnoreEnd, ccur) && !strichr(szIgnoreTop, cprev)) {
                    // 無視する文字に一致するものがない
                    txInsert(text, " ");
                }
            }
        }
    }
}

void spacingon(TX *text)
{
    txSetBusy(text);
    txSetUndispEx(text);
    if (text->fClip) {
        TX *text2 = textnew();
        if (text2) {
            txInsertTextSelect(text2, text);
            spacingonMain(text2);
            txSelectDelete(text);
            txInsertText(text, text2);
            textclose(text2);
        }
    } else {
        spacingonMain(text);
    }
    txSetDispEx(text);
    txSetUnbusy(text);
}

void spacing(TX *text)
{
    HDIALOG hd = dialog("英数・日本語間スペース調整");
    dialogCaption(hd, "英数・日本語間にスペースを挿入します。");
    if (dialogOpen(hd)) {
        spacingon(text);
        information("変換が終了しました。");
    }
}

spacing関数を実行して使います。

もう何年も前に書いたやつなので、よく見ると幼稚なところもあるかもしれませんが、とりあえず動いているのでそのまま使い続けています。