我田引水的環境自慢

どーでも良いようなところに凝って、自分だけで喜ぶ、 のがオタクの本領なのでしょうが、たまには人様に自慢したくなる事もある…。


目次

アンチエイリアスフォントを使う
    能書き
    インストール
    アプリケーションごとの設定
    課題・感想など

迷惑メールを撃退する
    能書き
    インストール
    運用
    成果
    課題

行間を空ける
    能書き
    設定


アンチエイリアスフォントを使う

8/21/05 作成
8/27/05 改訂

能書き

Kterm や XEmacs を k14 フォントでずっと使ってきましたが、 今だにこれらは最高の日本語環境だと思っています。 ただ、最近は自分の視力が衰えてきたせいか、ときどき 14 pt のフォントが見難い事があります。 しかし、だからといって 16 pt あたりにすると、 途端に k14 フォントの「完全さ」というか「エレガントさ」がなくなるし…。 で、この際、「大きくても綺麗な」アンチエイリアスフォント (以下、AA font) を使ってみようと思い立ったのでした。

最近の Gnome は xft 対応で、しかも Firefox はデフォルトで gtk2+xft 対応になっているので、言わば「期せずして AA font は経験済み」でした。 でも、私は長らくこれを採用する気になれず、Firefox より Mozilla を使い続けていたのでした。これは主に Linux (Fedora Core 3/4) のデフォルトの AA font (すなわち Kochi {Mincho|Gothic}) がかなりしょぼかったせいだと思います。 しかし、松原さんのサイトで IPA font なるものの存在を知り、これならば AA font に移行しても悪くないのでは?と思いはじめたのでした。

しかし、道はなかなか険しく、結構右往左往させられたのですが、最近やっと、 Gnome の各用途 (Desktop font, Application font, Window title font) の他、EBview, XEmacs, Mlterm, Mozilla で、IPA font や Hiragino font を、そこそこ使えるようにできました。 かなりの使い勝手になったのではないかと自画自賛しています。


インストール

MLterm はsourceforge から download します。configure 時に "--with-type-engines=xft" するだけで、後は make; make install で OK です。

IPA font は、単独では存在せず、grass というアプリケーションに附属しているものを使う他無いようです。 上記の松原さんのページにあるようにして、取得・展開・インストールします。 私は、fixed, proportional 両方をインストールし、かつ kochi への symbolic link を張らずにおきました。 (フォントの比較をやりやすいように思えたので、こうしましたが、 最終的には kochi へ link を張った方が無難そうです。後述。)

Hiragino font は、それぞれを任意の名前で /usr/X11R6/lib/X11/fonts/OTF の下に置きます。私は

hiragino_gothic_W3.otf  
hiragino_gothic_W6.otf  
hiragino_marugo_W4.otf  
hiragino_mincho_W3.otf
hiragino_mincho_W6.otf
等としました。そのディレクトリへ行って、fc-cache を実行します。(かなり時間がかかる。)

ここまでで、Gnome を含む gtk2 対応のアプリケーションで、IPA font や Hiragino font が、font を選ぶメニューに表われるようになります。 (OpenOffice はうまくいかない。)


アプリケーションごとの設定

Gnome

Desktop → Preferences → Font で設定します。私は、Application font と、Window title font を Hiragino Maru Gothic Pro W4 としました。ファイル名に日本語を使わないので Desktop font はデフォルトのまま。もちろん Font Rendering は Best shapes か Best contrast にしますが、後者は何故か Hiragino font が汚なくなる (ヒゲが出る) ようです。

EBview

Tools → Options → Appearance → Font で設定します。Hiragino Kaku Gothic には、W3 と W6 があるので、それぞれを Normal と Bold にアサインしてやると、とても素晴しい表示 になります。

Mozilla/Firefox

Firefox は Edit → Preferences → General → Fonts&Colors で、Japanese の Serif, Sans-serif font を、それぞれ IPAPMincho、IPAPGothic (もしくは対応する Hiragino Mincho, Hiragino Kakugothic) 等に設定します。ここで、size を大き目 (16 px 以上) に設定しておくと、より効果がはっきりするようです。私は、Serif に "Hiragino Mincho W3 Pro"、Sans-serif に "Hiragino Kaku Gothic W3 Pro" を指定して、デフォルトのフォントサイズを 17 px に設定して使っています。 (当初、Maru Gothic W4 Pro を使っていましたが、こちらに変更しました。)

Mozilla は、gtk2+xft のバージョンのものをインストールする必要があります。 私は Mozilla Suites ページの "Other System & Languages" から辿って "Linux (x86), GTK2 and Xft" の見出しの下のパッケージを取ってきます。 (なんでこんなに分り難いところに置いてあるんだ?) これには Installer が無いので、例えば /usr/loca/mozilla 以下へ untar。 font の設定は Firefox と同様です。

MLterm

AA font で「Kterm + k14 と同等の環境」というのは、 やってみると結構大変。 なかなか「何にでも使えて、かつ統一のとれた表示をする」 にならないのです。 (あちらを立てればこちらが立たず。)

実際、かなり右往左往しましたが、「結論は、MLterm を Proportinal なモードで使うが、ASCII 文字に関しては固定幅のフォントを採用する」という事になりました。 ちょっとちぐはぐですが… 具体的には

以上で、大体の用途でまあ満足できる表示が得られ、skkinput もちゃんと使えます。(Skkinput の mini window のフォントがしょぼいですが…。) たまたまやってみた man man の結果です。ちょっと「感動もの」だと思いますが、いかがでしょうか。

XEmacs

XEmacs-21.5.x では、AA font に対応した branch が作られているようですが、まだかなり先駆的なもののようで、 私にはそれをビルドできませんでした。 なので、上に伸べた MLterm で -nw オプション付きで XEmacs を使う事にしました。実際には Gnome の launcher から
mlterm --title=XEmacs -e xemacs -nw 
を呼ぶようにしました。 こうしておくと、Alt-Tab で window を選択する時、アイコンの下に XEmacs と表示してくれるので便利です。(このときアイコンも XEmacs になってくれればスマートなのですが、やり方がわからない…) あと、LANG や LC_ALL を C にしておかないと不具合が出るので、そういう面でもこの launcher からの invoke は便利です (当然、デフォルトで LANG=C, LC_ALL=C になっている必要がありますが。)

上記で述べた Mlterm のフォント及び -VA モードの選択は、実はこの面からの要求も加味されています。 Luxi Mono の幅は、Hiragino (の半分) より若干広いので、 英字と日本語が混在する文章では、XEmacs で fill paragraph しても各行の長さが揃いません。 最初これがとても気になりましたが、今はもう慣れてしまいました。 (メールの段落の右側をきちんと揃えて嬉しがっているのは、 どうも私だけのような気がする。)

Programming や HTML file の編集は、 context highlighting の機能が若干低いのと、色が見難い他は、indent や日本語と英数字のバランスも良く満足しています。 もう一つの主な用途である Wanderlust は、default の highliting が X でないターミナルに最適化されているせいか、どうにも見難い。 で、変更を初めたのですが、これが意外に大変で、 まだ満足なものにできていません。


課題・感想など

こう書いてくると、あちこち問題が有るのを、カットアンドトライ的な「調整」 でなんとか凌いでいる、という感じがする。 結果として自分では満足できているので、まあ良いようなものですが、 人様にお勧めする程の事ではないかも、と思えてきました。 でも、この「設定」にすると、そこそこ満足できる表示が得られるので、 是非お試しあれ。


迷惑メールを撃退する

8/8/03 作成
2/16/04 改訂
10/2/04 再改訂

能書き

Spam (迷惑メール) に辟易していました。 2003 年の春先くらいから急に増え出し、その 4 月の時点で多い時には一日 20 通以上も来るようになっていました。 普通その程度の spam くらいなら片っ端から消していけばすむ事ですが、 どこでもメールシステムだと、ちょっと悲しい事になります。というのは、折角 ML のメールを監視から外すなどして、 個人宛のメールのみチェックしようとしているのに、 spam のせいで誤警報が激増して、「Mailcheck の封筒がくるくる回るので、メールを取りに行ってみたら spam だった」 という事が多くなるから。 それが殆んど「いつも」なので、いらだたしい事この上ない。

そこで、Linux Journal (2003年 3月号) に触発されて、Spambayes というフィルタを導入してみました。(その号の Bayes 統計の解説はよく分りませんでしたが) Spambayes 自体は良くできていて、インストールも比較的簡単な上に、 しっかり働いてくれています。

2003-04-25 ころに稼働を始めてからこれまで (2004-10-02) の間に、約 34000 通の spam を弾いてくれています。その間、フィルタを擦り抜けてきた spam は、約 510 通で、spam を漏らす確率は何と 1.5 % にすぎません。 一方フィルタに弾かれた ham は、この間 1 通のみでした。

最近 (2004-09) になって、Spambayes が正式リリース (-1.0) になりました。Sourceforge によると、2004-07-08 にリリースされた事になっていますが、そんな筈はありません。 (待ち焦がれていた私は、しょっちゅう見に行ってましたから。) ひょっとすると、1.0rc2 から変更が無かったので、そのリリースの日付けになっているのかも。

ともあれ、この項の前の版は改訂でちょっと読みにくくなっていたし、 誤りもあったので、これを機に、かなりの部分を書き直す事にしました。 以下の記述は特に断わらない限り、spambayes-1.0 (と Fedora Core 1) を前提にしています。


インストール

前提として、2.2.3 かそれより新しい Python と Procmail がインストールされている必要があります。私のところでは Python-2.3.4 (source から) と procmail-3.22-11 (rpm) です。

インストールは簡単です。

  1. ソースを Sourceforge から取ってきて適当なディレクトリに展開する。

  2. そのディレクトリに移動して、
     $ ./setup.py build
     # ./setup.py install 
    とやってインストールします。

  3. 新しいデータベースを作ります。
     $ sb_filter.py -n 

    とやると、$HOME に .hammiedb というファイルができます。

  4. そのデータベースを「訓練」します。ham (spam 以外のメール)が $HOME/Mail/ham に、spam が $HOME/Mail/spam に溜っているとすると、
     $ sb_mboxtrain.py -d $HOME/.hammiedb -g $HOME/Mail/ham \
             -s $HOME/Mail/spam

  5. $HOME/.procmailrc に、
     MAILDIR=Mail/ML
     :0 fw:hamlock
     | sb_filter.py
    
     :0
     * ^X-Spambayes-Classification: spam
     spam/. 
    なる行を加えます。~/Mail/ML/spam というディレクトリに spam を放り込む場合の例です。(トレーニングにつかう spam 溜めとは別にしておきます。)

    もし、まだ procmail がインストールされていない場合は、 「めざせモバイラ ⇒ どこでもメール」を御覧下さい。

  6. crontab に
     21 2 * * * sb_mboxtrain.py -d $HOME/.hammiedb -g $HOME/Mail/ham \
        -s $HOME/Mail/spam
    というエントリを加えます(実際は一行)。 これで毎晩データベースを訓練しなおしてくれます。


運用

このままでもかなり役に立ってくれますが、 やはりデータベースを継続的に訓練した方が精度があがります。 やり方は簡単。普通にメールを読んでいて、「こりゃ spam だ」と思ったら、そのメールを $HOME/Mail/spam に移します。また、時折は spam 溜り ($HOME/Mail/ML/spam) を覗いて、もし ham が混っていたら、それを $HOME/Mail/ham に移動します。そうしておいて、上のインストールプロセスの 4. を実行します (もしくは、crontab にまかせる)。これで完了。

training に使ったメールには

 X-Spambayes-Classification: ham; 0.05
 X-Spambayes-Trained: spam 
のようなヘッダが目印としてつくので、古いのをどうしようか、 等と悩む必要はありません。どんどん放り込んでおけば、あとは spambayes が全て面倒を見てくれます。


成果

能書きの節でも触れましたが、spambayes の識別能力は大したものです。特に、数回トレーニングした後は、 殆ど spam が漏れてきません。2004-10 の時点で、一日平均 100 通近い spam が送られてきますから、もうこれ無しではやっていけない、 と言っても言い過ぎではないでしょう。

感心させられる事もあります。例えば、私は「サリューシネマ」という ML を講読しているのですが、ここから来るメールの中には、 ときどき「大半が広告」と言って良いような号があります。Spambayes は、真面目に映画の話をしている号はちゃんと通す一方、 「広告特集号」は弾いてしまいます。ちょっと感激。

さて、spam を確実に弾く能力もさることながら、もっと大事なのは「ham を誤って spam としてしまわない」事です。 この種の誤りは一件だけありました。 私信なので、ここに例として載せることができませんが、これは Shift-JIS のプレインテキストを、Base64 でエンコードしたパートをもつ、マルチパートメッセージでした。 大抵の場合、JIS 以外の文字コードを持つ日本語メッセージは、spam としてしまって問題無いのですが、この場合は、Shift-JIS の部分を独立のパートにした正当なメールの形式なので、そうもいかない。 本来は、そのパートの文字コード (この場合は Shift-JIS) を使って内容を判断する、というのが正しい動作なのでしょうが、 現在の Spambayes はそうなってないようです。 とりあえず、これをそのまま $HOME/Mail/ham に置いて、トレーニングしなおしたところ、 それ以降一年くらいの間同様の問題は起きていないようです。ただし、 そのようなメールは非常に稀にしか来ないし、 最近は spam 溜めをよくチェックしてないので、確信は持てません。


課題

スパムメールは増える一方で、最近一週間の平均は、一日 95 通! そのような絶対数の増加に加えて、日本語の spam の割合も徐々に増えてきました。 もともと日本語の単語にはあまりトレーニングが効かないようで、 その結果、すり抜けてくる数は英語のものより多い事があります。 なので、上記のマルチパートを正しく解釈してくれる事に加えて、 日本語の内容 (単語) を正しく解釈してくれたら良いなと思います。

もうひとつは、無意味つづりへの対策。オタク日記に書いたように、 トレーニングを怠っていると、すり抜けてくる spam が増えてきます。 (敵もさるもの:-) このうち、無意味なつづりを含む方は、 言わば無限のバリエーションが可能な訳で、 トレーニング (厳密にはトレーニング用 spam 溜めの更新) をまめにしていても、すり抜けを減らせこそすれ、 完全にからめ取る事は難しいようです。 最近「すり抜け率」が、約 2 % で高止まりしているのはこのせいもあるにちがいありません。 これにうまく対応するには、 アルゴリズムに何か根本的な変更か追加が必要な気がしています。 勿論私になにかうまいアイディアが有る訳ではありませんが…。


行間を空ける

能書き

あるアプリケーションを使い始めるにあたって、私がまず最初にチェックし、 ダメならば何とかしようと試みるのは、 「表示の行間に適切な空白が有るか」です。 フォントフェースでも、英語か日本語かでもなく、「行間が空いてるか?」 なんですね。(その次には、やはりフォントが来ますが:-)

まず、下の二つの表示を見比べて下さい。左(上)が Kterm をデフォルトで使った場合、右(下)が普段私が使っている設定です。

確かにわざわざ漢字が多い例を取ったというきらいもありますが、 みやすさの差は歴然としていると思います。

これは行間に、4 pixel 程空白を作った例です。 もっと空けるとさらにみやすくなりますが、 今度はアルファベットが間延びした感じになってしまうので、 これくらいが限度でしょう。


設定

どうしてこういう設定がデフォルトじゃないんだ?と思いますが、 設定しなおす事は比較的簡単です。(やり方を見付けるのは大変ですが。)

しかしまあ、どうしてこうやり方がまちまちなんだ、 という疑問を持つのは私だけでしょうか?:-) もちろん、設定可能なだけでもありがたいのですが(例えば、今だに Xterm は行間隔設定のやり方が分らない)。

蛇足ながら、お暇でしたら、Mozilla の デフォルトと、 上記の設定を見比べて下さい。 後者は、フォントを alias-gothic と alias-mincho の 14 points に変えています。 もうデフォルトの設定には帰れない、と思いませんか?:-p

最後になりましたが、以上の設定方法は、いずれも ML や NetNews で教えていただきました。 どなたに御教授頂いたのか、どうしても探し出せませんが、 ありがとうございました。


280/1,730,969
Taka Fukuda
Last modified: 2010-03-27 (Sat) 17:54:54 PDT