Perlを中心とした技術系の話などをつらつら

2005年07月28日

SpamAssassinいいですね

今までスパムメールについては、Thunderbirdのスパムフィルター頼りでほかには特に対策を施してなかったのですが、最近中国語人とかさちことかさゆりとかロレックス売りとかから届くメールなど、Thnderbirdがスパムと判定してくれないことが多くなってきて、スパムかなりうざーな状態でした。

そこでSpamAssassinを試してみることにしました。

このSpamAssassin、いろいろな方法でスパムメールかどうかを判定し、スパムらしさ度を点数にし、その合計がある閾値を超えるとスパムと判定。メールのヘッダにその情報(X-Spam-Flagなど)を書き込むというようなことをしてくれます。

スパムっぽかったら問答無用で削除というようなことはしないでヘッダ(スパムメールだと本文にその点数の詳細もつきます)に情報を付加するだけなので、正当なメールがなくなるなんて事はありません。

あとはヘッダの情報からメールを振り分けるなり、ゴミ箱にうつすなりすればいいわけです。

昨日から試してますが、かなりの精度でスパムを判定してくれています。

実際の導入方法は今月号のSoftwareDesignに詳しく載っています。実はこれを読んで導入しようというきになりましたw

特集記事「オープンソース+αでキメる完全無欠のメールサーバ」の中で紹介されています。この特集記事、SpamAssassinのほかにも有益な情報が載っていてお勧めです。特にsendmail、postfix、qmailの比較は非常に参考になりました。今までなんとなくpostfixを使ってましたが、今回の記事を読んでこれからもpostfixで行こうと思えました。

Posted by horiuchi at 10:29 | Permalink | Comments (3) | TrackBack (0)

2005年07月25日

LLDNのイベント情報が更新されてます

LLDN - イベント情報が更新されました

LLDNのイベント情報が更新されてました。

「フレームワーク対決」おもしろそうですね。

Posted by horiuchi at 11:20 | Permalink | Comments (0) | TrackBack (0)

黒武骨味玉チャーシュー麺@上野 麺屋武蔵武骨

麺屋武蔵の姉妹店武骨に行ってきました。注文したのは「黒武骨味玉チャーシュー麺」。黒い色はイカスミの油らしいです。このイカスミの油結構効いていて、後味に磯の香りが残ります。磯の香りが苦手な人は白の方がいいかも。

麺は極太麺で食べ応えがあります。

チャーシューは角煮に近く、一つがかなりでかいです。長時間煮込んでいるのか、チャーシューはちょっと味が濃かったです。チャーシューはもっと薄味でもいい気がしました。

次回は白にチャレンジ。

お店: 麺屋武蔵 武骨

住所: 台東区上野6-7-3

電話: 03-3834-6528

Posted by horiuchi at 09:39 | Permalink | Comments (0) | TrackBack (2)

2005年07月21日

紙2001がはやるらしい

紙2001 が流行る 予感・・・: Epic->yoshimax

紙2001。誰かもいいっていってたような。。ためしてみよーっと。

Posted by horiuchi at 09:47 | Permalink | Comments (0) | TrackBack (0)

2005年07月20日

潤@蒲田

蒲田のラーメン屋「潤」に行ってきました。

うどんのように太い麺で魚介系スープで煮干しが効いてます。

鬼あぶらと注文すると背脂たっぷり。こってり好きは鬼あぶらにすべし。

家系のラーメンが好きな僕にとってはそれでもかなりさっぱりでした。

お店: 潤

住所: 大田区蒲田5-20-7

電話: 03-5714-7255

Posted by horiuchi at 10:22 | Permalink | Comments (0) | TrackBack (0)

マッシュルームバーガー@7025 Franklin Avenue


Mushroom Burger


Originally uploaded by horiyasu.

先週日曜、五反田にあるハンバーガー屋さん「7025 フランクリン・アベニュー」に行ってきました。

注文したのはマッシュルームバーガーチーズのせの一番大きいサイズ。

お店に入るのに30も並んでいたので、おなかが減りすぎて一番大きいサイズを注文してしまいました。

肉はミディアムレアで中は赤い感じ。味は薄味なので肉の味を味わえました。

ちょっと値段は張りますが、また食べに行きたいと思えるくらいおいしかったです。

もう一つ気になったのが、シェイク。カウンター席に座ったので、目の前で、調理しているところを

見ることができたんですが、シェイクのおいしそうなこと。次に行ったときは注文します。


そうそう、このお店で偶然にもnaoyaさんに遭遇。

まさかこんなところで出会うとは。かなりびっくりしました。


7025 フランクリン・アベニュー

7025 Franklin Avenue

住所: 東京都品川区東五反田3-15-18

TEL: 03-3441-5028


Posted by horiuchi at 10:17 | Permalink | Comments (0) | TrackBack (0)

livedoorBlogのAtomAPIが仕様変更

livedoor Blog 開発日誌:リニューアルに伴うランキングの変更、使用できる機能について - livedoor Blog(ブログ)

livedoorBlogのリニューアルに伴い、AtomAPIの仕様も変更されるようです。

Atom APIのURLがリニューアルに伴い変更となります。 http://cms.blog.livedoor.com/atom Atom APIを利用したペットなどのアプリケーションをご利用の場合は上記のURLに変更いただけますようお願いいたします。なお、このAPIのサービスにつきましてはlivedoor Blogとして正式にサポートしておりませんのでお問い合わせ等につきましてはご遠慮いただけますようお願いいたします。

エンドポイントが変わるだけなのかなー。

Posted by horiuchi at 09:26 | Permalink | Comments (0) | TrackBack (2)

2005年07月08日

Class::DBI::Plugin::Factory

昨日書いたselectトリガを使ったClass::DBIのFactoryパターンLost-SeasonのkatoさんがClass::DBIのプラグインにしてらっしゃいます。仕事はやっ!

ちなみに、Class::DBIのFactoryの実装方法について、インスタンス生成専門のFactoryクラスを別に作るという方法も考えたんですが、この実装方法だと、retrieve_allやsearchなどのリスト取得系の検索メソッドでインスタンスのリストを取得する際にサブクラスのインスタンスを生成ってところまでは感知できないので、やめにしました。

Posted by horiuchi at 09:15 | Permalink | Comments (0) | TrackBack (0)

2005年07月07日

selectトリガを使ったClass::DBIのFactoryパターン

以前からClass::DBIでFactoryパターンを使えたらなーと思ってました。

たとえば、有料、無料、VIPのように複数の会員タイプがあるような会員サイトを作る場合、Class::DBIを継承したMyService::MemberがFactoryとなり、会員のタイプによって、MyService::Member::Basic, MyService::Member::Free, MyService::Member::VIPというようなサブクラスのインスタンスを作成するというようなイメージです。

さらにFactoryクラスでMyService::Member->retrieve_allとかすると、適切なサブクラスのインスタンスのリストがとれると最高です。

そんなことができないかなーとClass::DBIのドキュメントやソースを眺めていたんですが、Class::DBIに組み込まれているselectトリガを使えば実現できそうだったので、試してみました。

selectトリガはインスタンス生成時に必ず呼ばれているので、ここで会員のタイプを判別し、サブクラスにreblessしてやります。ソースコードはこんな感じです。このコードそのままではないですが、実際に同じようなコードを書いて試してみたところ、うまく動いているようです。

*MyService::Member - Factory
package MyService::Member
use base qw(Class::DBI);
require MyService::Member::Basic
require MyService::Member::Free
require MyService::Member::VIP
__PACKAGE__->set_db('Main', @datasource);
__PACKAGE__->table('member');
__PACKAGE__->columns(Primary => qw(member_id));
__PACKAGE__->columns(Essential => qw(member_type name age));
# select トリガにrebless用のメソッドをセット
__PACKAGE__->add_trigger( select => \&_rebless );
# サブクラスにrebless
sub _rebless {
    my $self = shift;
    #会員タイプ(member_type)でreblesするサブクラスを選択
    my $class = 'MyService::Member::Basic';
    if ($self->member_type eq 'Free'){
        $class = 'MyService::Member::Free';
    } elsif($self->member_type eq 'VIP'){
        $class = 'MyService::Member::VIP';
    }
    bless $self, $class;
}
# abstract method
sub is_free {}
sub monthly_cost {}
* MyService::Member::Basic - 一般会員
package MyService::Member::Basic;
use strict;
use base qw(MyService::Member);
sub is_free { 0 } # 無料ではない
sub monthly_cost { 500 } # 月額500円
* MyService::Member::Free - 無料会員
package MyService::Member::Free;
use strict;
use base qw(MyService::Member);
sub is_free { 1 } # 無料
sub monthly_cost { 0 } # 月額0円
* MyService::Member::VIP - VIP会員
package MyService::Member::VIP;
use strict;
use base qw(MyService::Member);
sub is_free { 0 } # 無料ではない
sub monthly_cost { 250 } # VIPは月額250円

Posted by horiuchi at 09:27 | Permalink | Comments (0) | TrackBack (1)

2005年07月06日

はてなブックマークにおすすめタグ

はてなブックマーク のブックマーク登録画面におすすめタグと登録済みのタグが表示されるようになりました。これでタグ付けがかなりスムースにできそうです。

Posted by horiuchi at 12:24 | Permalink | Comments (0) | TrackBack (0)

2005年07月04日

ヴィレッジを見ました

ヴィレッジ
ヴィレッジ
posted with amazlet at 05.07.04
ポニーキャニオン (2005/04/22)
売り上げランキング: 2,543

kawachi君お薦めのヴィレッジを見ました。

こういう謎めいた映画好きです。GoogleMapsで世界中くまなく探したらこんな村があったりして。。

Posted by horiuchi at 12:02 | Permalink | Comments (4) | TrackBack (0)

2005年07月01日

Web2.0な世界ではPerlがいい

antipop2.0 - Perler な Blog を列挙祭りのエントリでhori-uchi.comを取り上げてくださっていただいたのに最近Perlの話題あんまり書いてない!ということでちょっと思うところを書いてみたいと思います。

世の中にはいろいろなプログラミング言語が存在しますが、Web2.0な世界ではPerlがいいんじゃない?って話です。

Web2.0というと幅が広いですが、ここで言うWeb2.0はアプリケーション同士がAPIを通して相互に接続される世界とします。

このWeb2.0な世界でなぜPerlがいいのか、僕が考える理由は以下の3つです。

  • 型のない言語
  • 強力な正規表現
  • CPANの存在

APIの実装はRESTやXML-RPC、SOAPなどを使った、XMLをデータのフォーマットとしてやりとりするというものが一般的です。ですので、各アプリケーションはXMLを解析し、処理すると必要がでてきます。XMLをプログラム内で扱う際にはXMLデータをXMLの階層構造を表現したハッシュであるとか、構造体のような形式にする必要がありますが、型を指定しなければいけない言語だと、いかようにもできるXMLをそういうデータ形式にするのは大変だろうなーと思います。その点PerlはXML::Simpleなんかをつかうと、

my $xml_href = XML::Simple->XMLin($xmlfile);

という一行でXMLのデータ構造をそのまま表したハッシュに変換してくれます。

また、XMLを解析してデータ形式に変換というような作業は結構時間のかかるものですが、Perlには高速で強力な正規表現があるので、これを使って、高速に特定のデータを抜き出すなんてことも簡単にできます。

最後にCPANの存在を忘れてはいけません。今後はAPIを提供するようなサービスが次々に出てくると思います。CPANには人気があるサービスだとそれらのAPIを簡単に使えるようにしてくれるモジュールがたいてい存在しています。Net::AmazonNet::GoogleWebService::BloglinesWebService::Hatena::Fotolifeなど数え上げればきりがありません。

これらを使えば旬なサービスを簡単に使うことができます。

こんな訳で、APIでサービス同士がつながるWeb2.0な世界では、Perlがまた脚光をあびるんじゃないかなと思いました。

Posted by horiuchi at 10:18 | Permalink | Comments (0) | TrackBack (0)