Oct 28, 2005

A Patch for SpamLookup 2.0 bundled with MT 3.2

Of course I'm addicted to using SpamLookup 2.0, but its Keyword Filter doesn't recognize regular expressions with multi-bytes strings and Unicode properties/blocks/scripts which are supported by Perl 5.8. Therefore it's not easy to train SpamLookup for rejecting comment/trackback spams in foreign languages, especially in asian languages.

The following is a patch for enabling Unicode support in SpamLookup 2.0.

SpamLookup2.0-encode.patch

If you are using a Linux box, it is easy to apply. Just download or copy it into your MT directory and type as follows:

patch -p0 < SpamLookup2.0-encode.patch

Once you applied this patch, you could write regular expressions enpowered by Unicode support, as Keyword Filter rules.

For example, to reject comments/trackbacks with Hiragana strings, just as follows:

/\p{Hiragana}+/

Or to accept only Latin-1 comments/trackbacks, you can do as follows:

/^[^\x00-\xff]+$/

Oct 27, 2005

MT SpamLookup Best Practicesに追加

MT SpamLookup Best Practices: blog.bulknews.net

ちと思ったことがあります。SpamLookupのKeyword Filterの「未公開キーワード」ないし「迷惑キーワード」に以下のように追加しさえすれば、MT BanASCIIはイラネエンジャアアルメエカ、と。

/^[\x00-\xFF]+$/

そう思って実際試してみると、有効に機能しない模様。なるほど、BanASCIIではEncode::decodeしてから/^[\x00-\xFF]+$/と比較しています。decodeしていない(EUC_JP/UTF-8の)文字列との比較なら/^[\x00-\x7F]+$/と比較する必要がありますが、それだとLatin-1の後半にマッチしないという道理なわけですね。

しかし、Latin-1の後半を検出したり、特定の文字集合を検査したりするのにいちいちプラグインを用意するのでは手間もかかるし、効率も悪くなります。もっと手軽に、より多くのユーザーがPerl 5.8の持っている真っ当なマルチバイト文字サポートの恩恵に浴することができてしかるべきだと私は考えます。

というわけで、MT 3.2に付属のSpamLookup 2.0に対するパッチを用意してみました。

SpamLookup2.0-encode.patch

このパッチを当てると、Keyword Filterの「未公開キーワード」ないし「迷惑キーワード」に、マルチバイト文字やUNICODEプロパティ・スクリプト・ブロックを使った正規表現が書けるようになります。

以下はExampleです。

Latin-1文字だけからなるコメント・トラックバックをはじく(BanASCII相当)

Keyword Filterの「未公開キーワード」ないし「迷惑キーワード」に以下のように追加します。

/^[\x00-\xFF]+$/

あるいは\p{Latin}などを使って可読性の良い方法でも書けるでしょう。

ひらがなを含まないコメント・トラックバックをはじく

Keyword Filterの「未公開キーワード」ないし「迷惑キーワード」に以下のように追加します。

/^[^あ-ん]+$/

ないし

/^\P{Hiragana}+$/

このバリエーションで句読点を必須にしたり、ひらがなの他にカタカナを必須にするルールも同様に書けるでしょう。

Entry Category Entries Plugin

現在のエントリーのプライマリカテゴリーに属するエントリーをリストアップするMovable Typeプラグインを公開します。

EntryCategoryEntries_Plugin - ogawa - Google Code

このプラグインは、現在のエントリーのプライマリカテゴリーをカテゴリーに設定しているエントリーをリストアップするMTEntryCategoryEntriesコンテナタグを追加するものです。このコンテナタグは、エントリーコンテキスト、すなわちMTEntriesコンテナの内部、もしくは個別エントリーアーカイブで利用できます。

Delicious Tags Plugin

del.icio.usに登録している自分のタグを読み込んで表示するだけのMovable Typeプラグインを公開します。

DeliciousTags_Plugin - ogawa - Google Code

このプラグインは、del.icio.usのタグをdel.icio.us API経由で読み込んで表示するプラグインです。ちょっと工夫すると、del.icio.usで表示されているようなtag cloudsを自分のブログにも貼り付けたりするのに使えます。どうやるのか…「それはあなたが考えて。」(by 緒川たまき)

Oct 25, 2005

Google Mapsが世界測地系になってるっぽい件について

ここギコ!: Google Mapsが世界測地系に?

うへぇ、やられたー。

Ogawa::Buzz: Pin It!: Googleマップで任意の場所にピンを立てるBookmarklet

を使って作ったURLが軒並みずれてしまいますね。今から作った分に関しては問題ないですけれど。URLに含まれる日本測地系(Tokyo)の座標情報をWGS 84測地系に変換してくれる隠しオプションを激しく希望したいところですね。え? ダメ?

Ogawa::Buzz: Pin It On The Earth!: Googleマップで閲覧中の地点を Google Earth にマップするBookmarklet

に関しては対策をしました。「与えられた緯度が30~50度かつ経度が115~152度のとき、日本測地系(Tokyo)のデータとみなしてWGS 84測地系に変換」というロジックを省いただけです。

ここギコさんところのご友人の言「GetCenterLatLonで取れる値は日本測地のようで、APIは前のままのよう」に関しては、単に今のところGoogle Maps APIワールドは日本測地系とWGSのハイブリッド座標系のままであるということのようです。ですから、Google Maps APIワールドで閉じたアプリケーションを作っている限りは問題ないし、APIで取得した座標からhttp://maps.google.com/maps?ll=...みたいなURLを生成している(つまりはAPIワールドから外に出る)場合には一定の対策が必要になります。

では、「APIワールドの座標系はこのままなの?」という当然の疑問が湧いてくるわけですが、そのことに関しては某氏にさっきメッセンジャーでインタビューしたところです。…しかし、明確な答えは得られませんでした。ま、その、ほら、NDAを結んだりしないと言いようがないわけですよ。

ちなみに最近はGoogle MapsのURLに&output=kmlを使えるようになったので、Ogawa::Buzz: Pin It On The Earth!: Googleマップで閲覧中の地点を Google Earth にマップするBookmarkletの代わりに以下のような単純なBookmarkletでも事足りてしまいますね。これができるのも今回Google Mapsの測地系がWGS 84に変更された恩恵です。

Pin It On The Earth!

…と思ったのだが、そう単純ではなかったみたい。ちょっと練り直す必要あり。

Oct 22, 2005

VMware Player

VMware Player

VMware Player is free software that enables PC users to easily run any virtual machine on a Windows or Linux PC. VMware Player runs virtual machines created by VMware Workstation, GSX Server or ESX Server and also supports Microsoft virtual machines and Symantec LiveState Recovery disk formats.

仮想マシンを新規作成したり、構成を編集できなかったりいくつか制約はあるものの、事実上のVMwareのソフトウェアライセンスのダンピングと言える。例えば、VMware Workstationを一ライセンスだけ購入して(そうしなくてもQEMUなどを使って)環境を構築しておけば、それをクラスタなどに無限にコピーして使用できる。無論ゲストOSが規定する使用許諾に従う限りにおいてだが。

Computer Laboratory - Xen virtual machine monitorなどに対する抜本的な対抗策がようやく採られたということなのだろうが、やや遅きに失したきらいがなくもない。一定の割合のリサーチコミュニティのプロジェクトやホスティング屋さんなどはXenベースに舵を切ったりしてるからね。

Oct 18, 2005

千葉ロッテのリーグ優勝。

別段ロッテやソフトバンクのファンというわけでもないが、この二日間はテレビ東京のパリーグ・プレーオフ放送に見入ってしまった。

1974年以来の優勝とのこと。1974年と言えば、中日ドラゴンズが与那嶺監督で優勝を決めたわけだが、その日に長嶋が引退を表明してしまい、(スポーツ誌の見出しがアレなことになり)ドラゴンズファンの不興を買ったまさにその年以来、ということになる。ともあれ遠慮深いロッテ球団と初芝と、ジャンプ癖のあるファンにはおめでとうと言いたい。

けれども、私がテレ東の放送に見入ってしまったのは別の理由がある。それは解説の川崎憲次郎である。2000年にFA権を行使して中日に移籍、その後3年間は故障で一軍登録すらなく、2003年にはオールスターのファン投票でいわゆる「川崎祭り」が起き、2004年には落合が開幕投手に指名して話題を呼んだものの、同年引退(中日ファンとしては、故障は残念だが、星野の引きの弱さも一因だと…)。そして今はテレ東の解説者をしている、その川崎である。

テレビ東京の中継の二日間、川崎は試合のメイン解説をしていた。彼がすごいのは投手を褒める、ちょっとしたことでも褒めるということである。おいおい褒め過ぎだろってくらい褒めている、実際。現役で苦労したせいなのかもしれないけれど、このキャラクターはとても面白い。小松辰夫あたりがいまだにラジオ・テレビの解説で昔の自分の投球を吹聴してみせていたりしていて、もう聴いてらんないって感じなのに比べると(江川も10年くらいまではそうだった)、雲泥の差だ。なんなんだろう、この人間の出来の違いは。高年俸と怪我が彼に「ツツシミブカサ」というものを教えたということなのだろうか。

川崎は来年は楽天に行ってしまうのかもしれない。それは残念でならないが、楽天の投手陣がちょっとでもマシになったとすれば、それは彼のおかげなのだろう。物陰から生暖かく応援していきたい。

Oct 14, 2005

MT 3.2日本語版 Unofficial Patch

BerkeleyDB周りの対策がなされたRelease-2が提供されたわけですが(Six Apart - MovableType News: Movable Type 3.2日本語版 Release-2 の提供を開始)、いくつか気になっている点も残っているので、以下のページで非公式パッチを公開することにします。

MT_3_2_ja2_UO_Patch - ogawa - Google Code

上記ページで公開するパッチは、私が見つけたものだけでなく、さまざまなユーザ/開発者によって発見され、公開されている情報をaggregateしたものです。ユーザ/開発者コミュニティの努力の成果をより多くのユーザに簡便に享受してもらうこと、さらにはSix Apartがこうした成果を次期バージョンに反映することを容易にすること、が目的です。順次更新していく予定ですので、パッチや不具合の情報があれば遠慮なく、コメントやトラックバックしていただければと思います。

Oct 4, 2005

Duplicated TBPing Lookup Plugin

同一ソースURLから同一エントリーへの重複トラックバックを防止する、MT 3.2用のJunkFilter Pluginを公開します。

DuplicatedTBPingLookup_Plugin - ogawa - Google Code

このプラグインのアイディアは、小粋空間: 重複トラックバック防止プラグインがオリジナルです。

Duplicated TBPing Lookup Pluginは他のSpamLookupプラグインなどと連携してトラックバックのスコアリングを行うJunkFilter Pluginのひとつです。このプラグインは同一ソースURLから同一エントリーへの重複するトラックバックを受信したときに、そのトラックバックを迷惑トラックバックとみなし、スコアをScore Weight分だけ減じます。このスコアの平均値がユーザーが指定した基準値を下回るトラックバックは、自動的に「迷惑トラックバック」と分類されてブログ上には表示されなくなります。

インストールは、DuplicatedTBPingLookup.plをpluginsディレクトリにコピーするだけです。Score Weightはデフォルトでは1となっていますが、各ブログの「プラグインの設定」画面から変更することもできます。

また、この「プラグインの設定」画面からは、重複トラックバックを「迷惑トラックバック」としてジャンクフォルダに入れるか、ジャンクフォルダには入れずに「未公開(下書き)」状態で保存するか、を選択できるようになっています。

Oct 2, 2005

MT 3.2でrecently_commented_onとBerkeleyDBに嵌っている人が多い件について

MT 3.2日本語版がリリースされてすでにインストールしている人も多いかと思いますが、嵌っている人も多いようです。代表的には以下の二種類の嵌り方をしている人が多いみたいです。

  1. 小粋空間: 3.2-ja 再構築時のパフォーマンス
  2. ちはろぐ: 「Movable Type 3.2 日本語版の提供を開始」らしいけど......(2005年09月29日)

このエントリーはこの2つの問題に対して解答を与えるためのものです。

念のため、BerkeleyDBをObjectDriverに使うくらいなら最初からSQLiteを使った方がずっと幸せになれる(というかまだBerkeleyDBを使ってたのか、捨てちまえ)とご忠告申し上げます。

recently_commented_onに関わる問題

あまり言及されていませんが、MT 3.1以前と3.2ではrecently_commented_onの仕様が異なっています(ソースコードが「公開された仕様」であると信じるならば)。

注: さらにMT 3.2-ja-2では、BerkeleyDB, SQLite, MySQLでは従来とおり、Postgresではここに書いたとおりの振る舞いをするように変更されています。訳が分かりませんが、前者の3つのDBエンジンを使用している場合には、recently_commented_onをlastn, daysオプションを一緒に指定すると無視されるので気をつけましょう。

3.1以前では、recently_commented_onはlastnやdaysオプションと一緒に指定することはできませんでしたが、3.2ではできます。つまり、以前はすべてのエントリーを対象に最近コメントされたエントリーをリストアップする機能でしたが、3.2では指定された範囲のエントリーを対象に最近コメントされたエントリーをリストアップする機能となりました。

多少機能が強化されたわけですが、メモリの消費量と速度に影響があります。具体的には指定された範囲のMT::Entryオブジェクトをすべてメモリ上に読み込んだ後、それら個々のエントリーに付けられた最終コメント時刻の降順にソートし、recently_commented_onオプションで指定した数だけ先頭から取り出すということを行います。lastnなどで範囲指定することなく使用すると、上記の操作がすべてのエントリーを対象に行われることになります。したがって、なるべくlastn, daysと併用するようにすることです。

また、これとは別にMT::Entry->comment_latestでやたらメモリを消費するという、BerkeleyDB特有の問題もあります。いかにも循環参照とか起きていそうで嫌な感じです。後で述べるパッチではこの問題を「回避」するコード修正を含みます。この修正によって(recently_commented_onに関しては)ほぼ許容可能なメモリ消費と速度で動作するはずです。

BerkeleyDBを使っていてMTEntryNextなどが正常に動作しない問題

日本語版β2でなされた変更で、「同日時のエントリーが複数あった場合に、エントリーの編集画面で『前のエントリー/次のエントリー』が正しく動作しない」という問題への修正がありました。これはつまり、同一日時のエントリーの順番をエントリーのIDを使って決める、という修正がなされたわけです。このこと自体はリーズナブルですね。

さて、同一日時のエントリーが4つあり、そのIDが1, 5, 9, 10だったとします。ID=5のエントリーの「次のエントリー」を決定するには、ID=5と同一時刻に作成された1, 9, 10のうち、5より大きい最小のものを選択することになります。逆に「前のエントリー」を決定するには5より小さい最大のものを選択することになります。このためには一般にエントリー群をIDに関してソートできなくてはなりません。

ところでMTのBerkeleyDB用のObjectDriverには古くからマイナーながら知られたバグがあって、対象オブジェクトをIDに関してソートして指定個数取り出すことができません(他のフィールドに関してソートすることはできる)。が、lib/MT/Entry.pmのsub _nextprevにはそのようなコードが記述されています。これではMTEntryPrevious/Nextや(同じロジックを用いる)エントリーの編集画面の『前のエントリー/次のエントリー』が正しく動作するはずがありません。

要するに、このバグを真っ当に修正するか何らかのwork aroundを用意する必要があります。実は同じ問題がlib/MT/Comment.pmとlib/MT/TBPing.pmにもあります。下で述べるパッチはwork aroundコードを挿入するものです。その後真っ当に修正する方法を思いついたのでパッチはそのように変更されています。

パッチ

説明はともかく以下のパッチを参照のこと。

dbm_flaw-comment_latest.patch

どうもパッチのあて方が分からないという人が多いみたいなので説明しておきます。
  1. Linux/FreeBSDなどではpatchコマンドがありますが、Windowsなどには標準では入っていません。Cygwinをインストールするなり、Programmers' toolboxからWindows版GNU Patchをゲットしておく必要があります。
  2. パッチファイルをMT 3.2日本語を展開したディレクトリに置きます。
  3. コマンドラインで「patch -p0 < パッチファイル名」と実行します。

2005-10-02 15:47追記: 以前のパッチにミスがありました。すでに適用した方は再度やり直してください。

2005-10-02 19:20追記: さらにrecently_commented_onを使用してもメモリ使用量が増大しないように対処しました。多分完璧です。

2005-10-03 16:06追記: たびたび申し訳ない。Entry.pm, Comment.pm, TBPing.pmに回避コードを入れるのは止めにして、DBM.pmを修正しました。この方が修正が圧倒的に少なくて済みます。

2005-10-04 00:35追記: さらに申し訳ない。MT 3.2ではDBからロードしたオブジェクトをキャッシュしておくようになっていて、それためメモリの使用量が3.1以前より大きくなっています。ところで、MySQLなどの場合にはこのキャッシュを一定個数以上作らないようにad hocなGarbage Collectionが行われるのに対し、BerkeleyDBの場合には作りっぱなしになっています。新しいパッチではMySQLなどと同様Garbage Collectionを行うように修正を加えています。

2005-10-05 11:40追記: 若干修正。Six Apartから何らかの正式な対策が用意される予定です(Six Apart - MovableType News: Berkeley DBの環境下でMovable Type 3.2日本語版をご利用のお客様へのお知らせ)。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com