2007年04月15日 07:30 [Edit]

perl - 勝手に添削断念 - NNIPF

camel

はてなブックマーク - タグ perl」で以下を発見して、SPAMとの戦いに日々うんざりしている私は期待に胸を踊らせたのですが、代わりに心臓が踊ってしまいました。

http://vrl.sys.wakayama-u.ac.jp/~twada/NNIPF.html
NNIPFでは,我々が長年蓄積した100万通以上の大量のSPAMデータを詳細に解析した結果,最も有効であると思われる「送信者の情報」を特徴として利用しております.

下記の二つを,指定されたURLからダウンロードして,下記の指定された名前でNNIPFのディレクトリに保存してください.
-rw-r--r-- jcode.pl-2.13 http://www.srekcah.org/jcode/jcode.pl-2.13
-rwxr--r-- mimer.pl      http://www.cc.rim.or.jp/~ikuta/mime_pls/mimer.pl

これを見た途端に悪寒がしたのですが、その悪寒は以下を見て確信へと変わりました。

NNIPF/PERL/analyze.pl
sub main'IpDictMatch{
 ($query,$Dict, $Flg) = @_;
 @qaddr=split(/\./,$query);
 $dir=$Dict;
 for ($i=0, $match=0, $flag=1; $i<4; $i++){
        if (-e ($filename=sprintf("%s/%s",$dir,$qaddr[$i])) ){
      $fc=0;
      if ($Flg){
        if (-e ($counter=sprintf("%s/Count",$filename))){
           open(INc, $counter);
           while(<INc>) {$count=$_;}
           close(INc);
           unlink($counter);
           $count+=1;
        }else{$count=1;}
        open(OUTc, ">$counter");
        print(OUTc $count);
        close(OUTc);
      }
    }elsif ($flag) {
         $flag=0;
         opendir DH, $dir or die "$dir:$!";
         $fc=256;
         while (local $file = readdir DH) {  
               next if $file =~ /^\.{1,2}$/;
        if (abs($file-$qaddr[$i]) < $fc) {
            $fc=abs($file-$qaddr[$i]);
            }
         }
        }else{$fc=256;}
    $match=$match*256+$fc;
    $dir=$filename;
        }
 return $match;
}

....すごい。これはPerl 4のソースです。Perl 5として添削するのは私の手に余ります。

これが1997年に書かれたプログラムなら得心もするのですが、れっきとした2007年産のプログラムです。Pkgname::identifierではなくPkgname'identifierという記法もものすごい久しぶりに見ました。

Perl 4で書かれている(それでもPerl 5で動く--であろう--怖くて動かせない)ことを除いても、このプログラムには直しどころがあまりに多くあります。例えば、このプログラムではIPアドレス1.2.3.4がスパム発信源だとして、それに関する統計情報を、BIP/1/2/3/4/Countという名前のファイルに記録しています。これでは最近の大容量ディスクでもi-nodeが足りなくなりそうです。ちなみに私のmail serverのi-nodeの総数は4800万弱。IPアドレスの数は理論上で42億、実際に使われているものも1億以上あります。

和田俊和先生のご経歴を見ると、なかなか立派なご研究をされているようでいらっしゃいます。また、その研究を単なる研究に留めず、今回のNNIPFのように一般に利用できる形で公開して下さることに頭が下がる思いが致しますし、そしてそのための道具としてプログラミング言語Perlを選択して下さった事は、1 Perl Porterとして感激ぜずにはいられません。

それだけに、先生のPerl体験が、Perl 4で留まってしまっていることを大変残念に思います。2007年のPerlは、先生がもっと楽に、そしてもっと多彩にプログラムするための環境を整えています。jcode.plとmimerの機能はEncodeという形でPerlに標準装備されていますし、データの保存方法も通常のファイルのみならず、DBMからSQLからWeb APIに至るまで各種揃っています。そして何といってもCPANがあります。これらを知らずにPerlを使うのは、貴重な時間を無為に失うことになってしまいます。

改めてお願いします。Perl 5を学び直していただきたい、と。先生のことですから21世紀のPerlにあっというまに追いつくでしょう。ここではあえて「リャマ本」こと「初めてのPerl」ではなく、この本の次に読むべき本とされる「アルパカ本」こと「続・初めてのPerl 改訂版」をお薦めします。パッケージ、リファレンス、ハッシュ、配列、サブルーチン、モジュールといった、NNIPFのようなソフトウェア開発に役立つPerl 5ならではのPerlの機能を手っ取り早く学ぶのに最適な一冊です。もちろんPerlのバイブルであるProgramming Perlも手に入れておくべきですが、先生の場合はアルパカ本がショーテストカットだと思われます。

小飼 弾 拝

Dan the Perl X Monger (Where X > 5.0)


この記事へのトラックバックURL

この記事へのトラックバック
404 Blog Not Found:perl - 勝手に添削断念 - NNIPF
404 Blog Not Found:perl - 勝手に添削断念 - NNIPF【】at 2012年01月23日 08:58
NNIPFの話題も出たので、SPFについても書く事にします。
SMTP - SPF導入のすすめ【404 Blog Not Found】at 2007年04月15日 12:25
この記事へのコメント
和田先生のNNIPFが進化していました。

http://vrl.sys.wakayama-u.ac.jp/~twada/TODO.html
Posted by 和田先生のぺーじ at 2007年06月15日 20:06
研究者にとってプログラムなんてぶっちゃけおまけですからねえ・・。大学の先生方のなかにはFORTRANで止まっていらっしゃる方もたくさんおられますし。
Posted by bayside at 2007年05月23日 18:22
そう、Danさんが共同研究者になればいいんだ!
Posted by apt at 2007年04月16日 00:41
これはもうみなさんで和田先生を盛り上げる鹿!
Posted by i at 2007年04月15日 23:58
急いでちょっと直し,jcodeとmimerは不要にした0.03betaに変えました.
NNIPFでやっているのは,IPアドレス間に特殊な距離尺度を導入し,距離の最も近いデータを見つける最近傍探索です.ですので,一般的にはExact MatchをベースとしたDBMとの相性がいいかどうかは不明です.
但し,現在の距離尺度は,オクテット毎のExact Matchに分解できるように作っていますから,DBMとの組み合わせもやればできると思います.それでも,最大256個に対するExactマッチを最大4回やるだけの小規模な問題なので,今回の手抜きインプリにしました.逆に,1)メモリに大量のIPアドレスをロードしないので起動が速い,2)実行中こけてもデータベース全体が壊れない,3)直接手でデータを触りやすい,などのメリットもあります.
上の話のReiserFSのようにi-nodeの動的確保ができるFSが登場していることからも,このずぼらな方法を認めてくれるとありがたいんですが.
Posted by 和田俊和 at 2007年04月15日 23:44
GNU/Linuxで read/write できるReiserFSだと、
inodeの枯渇を心配しなくていいっすよ。
Hans Reiser はタイーホされましたね...
Posted by quux at 2007年04月15日 22:36
日本の大学の先生がこういう研究をやってるというのはある意味意外でした。
というのは、こういうものは結局利害関係のある大手プロバイダやネットサービス提供会社(および団体)がかなり先端的な部分で(もちろんデータも桁違いに多く)やっていて、あまり学術的な所から成果が出てくる印象が無かったものですので。
そういう意味でも、がんばっていただきたいとは思いますが、ツールの使い方一つでも成果はかなり違うわけで・・・。日本でも大学からスーパーハカーが出るまたは集まる(もしくは協力する)環境が出来ればそれに越したことはないのですが。
# 大体院生ですよね。技術があるのは・・・そして大学では“現業”に残らない(就職するか、“崇高な研究”にいってしまうか・・・)。
Posted by hoge at 2007年04月15日 20:13
和田先生の理性にちょっと感動した。
Posted by tam at 2007年04月15日 11:46
コメントありがとうございます.

このプログラムは,外部からメイルを受ける信頼できるMTAが生成した
ReceivedフィールドからIPアドレスを拾い,これを識別することでSPAM
をはじくというアイデアがどの程度機能するのか確かめるためのいわば
コンセプトコードです.その意味で未だbeta版です.beta版を公開する
なと言われたらそれまでなのですが,私一人の力ではこれを完成させる
ことは難しいので,同好の士を集めるという意味で公開してしまいまし
た.:P
今回ご指摘を受けたことで,私のコードの書き方に問題があるというこ
とがわかりましたので,Perl5の勉強をちゃんとして,いずれ書き直し
たいと思います.ですが,あまり日ごろの時間がないので,どのくらい
かかるかわかりません
もし,書き直してくださる方がおられれば,大変ありがたく,これが私にとっては最高のperlの教材になります.
Posted by 和田俊和 at 2007年04月15日 11:11
そうですね。こういう先生にこそ、言語の新しい方法論をどんどん研究して欲しいです。(たとえツールとして使っているだけにしても。)
さらに加えて、Ruby・Pythonなどのメジャースクリプト言語も習得・研究していただけば、この先生の下に付く学生はますます幸せになれると思います。
Posted by peco at 2007年04月15日 08:05