birdTALK MAN, referer spam(3), prefork の仕組み

TALK MAN

携帯機で動作する音声認識による通訳ソフト、っていうのはなかなか魅力的かもしれない1。当初は認識率も低いだろうし認識語彙も少ないだろうけど、着実に成長 (TALK MAN 2 『帰ってきたアホウドリ』、TALK MAN 3 『アホウドリの逆襲』、etc…) させていったら結構面白い存在になるような。今までそれほど PSP 欲しくなかったんですが、これのために買ってもいいかも、と思わせるソフトです。個人的期待大。

referer spam(3)

またやってきていますが、フィルタルールを下記のように変更してみました。

# antispam.  
    SetEnvIf Referer "pussy" Spammer  
    SetEnvIf Referer "sex" Spammer  
    SetEnvIf Referer "porn" Spammer  
    SetEnvIf Referer "bestiality" Spammer  
    SetEnvIf Referer "beastiality" Spammer  
  
    Order deny,allow  
    Deny from env=Spammer  

「sex」や「porn」が含まれたドメインからはリンクが張れなくなりますが、まぁ実害はないでしょう。

prefork の仕組み

apache 等の prefork daemon の基本的な仕組みって、

  • socket を listen するところまで親が行って、
  • だだだと fork して、
  • みんなで一斉に accept する。

って感じなんですね。細かいところではいろいろと気を付けなくてはいけないポイントがあるのかもしれないけど…2

動作確認に使った簡単なプログラムは下記の通り。

#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <sys/types.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
  
#define PORT_NUM 10000 /* 10000 番ポートで待ち受け */  
  
int main(int argc, char *argv[]) {  
    struct sockaddr_in me;  
    struct sockaddr from;  
    socklen_t fromlen;  
    int sd, opt, fork_count, fd;  
    int ret, i;  
    char buf[8192];  
  
    if (argc < 2) {  
        fprintf(stderr, "usage: %s FORK_COUNT\n", argv[0]);  
        exit(1);  
    }  
  
    fork_count = atoi(argv[1]);  
  
    /* socket を準備 */  
    sd = socket(AF_INET, SOCK_STREAM, 0);  
    if (sd < 0) {  
        perror("socket");  
        exit(1);  
    }  
    opt = 1; // 'true'  
    ret = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int));  
    if (ret != 0) {  
        perror("setsockopt");  
        exit(1);  
    }  
    memset(&me, 0, sizeof(me));  
    me.sin_family = AF_INET;  
    me.sin_addr.s_addr = htonl(INADDR_ANY);  
    me.sin_port = htons(PORT_NUM);  
    ret = bind(sd, (struct sockaddr *) &me, sizeof(me));  
    if (ret == -1) {  
        perror("bind");  
        exit(1);  
    }  
    ret = listen(sd, SOMAXCONN);  
    if (ret == -1) {  
        perror("listen");  
        exit(1);  
    }  
  
    /* 指定された回数だけ fork */  
    for (i = 0; i < fork_count; i++) {  
        ret = fork();  
        if (ret < 0) {  
            perror("fork");  
            exit(1);  
        } else if (ret > 0) {  
            break;  
        }  
    }  
  
    /* main loop */  
    for (;;) {  
        memset(&from, 0, sizeof(from));  
        memset(&fromlen, 0, sizeof(fromlen));  
        fd = accept(sd, &from, &fromlen);  
        if (fd < 0) {  
            perror("accept");  
            exit(1);  
        }  
        for (i = 0; i < 3; i++) { /* 3回だけ recv */  
            memset(buf, 0, sizeof(buf));  
            ret = recv(fd, buf, sizeof(buf), 0);  
            if (ret < 0) {  
                perror("recv");  
                exit(1);  
            }  
            printf("pid=%d, msg=%s\n", getpid(), buf);  
        }  
        close(fd);  
    }  
  
    return 0;  
}  

調査&コーディングで1時間くらい。しかしこの程度のちょっと調べれば分かる知識をありがたがって囲い込んでると、本当に価値のあるモノが見えなくなっちゃうぞ>誰となく。

bird次世代 PS は年度内発表、来年の E3 で実機公開, 先週のデカレンジャー, PSX アップデート延期

次世代 PS は年度内発表、来年の E3 で実機公開

だそうな。PS2 の時と同じようなスケジュールですね。来年の年末商戦に間に合うか、また春に延びるか。

先週のデカレンジャー

は、なんだかいつもよりも特撮のクオリティが高かったような。監督の違いでしょうか。それにしても、ジャスミンの回はどうも切ない展開になりがちですね。今回もジャスミンファンは必見!な内容だった…。ヘヴィメタしょって登場する悪役、ってのも素晴らしい。
そういや仮面ライダー剣 (ブレイド) も、睦月と上級アンデッドのみゆきさんが現れてからちょっと面白い感じ。みゆきさんはもうすぐ死んじゃう (封印されちゃう) 予感がぷんぷんしますが、個人的にはもっと活躍して欲しいなぁ。

PSX アップデート延期

7/15 から 8/3 へ3週間の延期。がっくし。

birdインフォ・マイカ続報

インフォ・マイカ続報

うーん、NTT 本気だ。しかし NTT 自身がデバイスまで作るわけじゃないだろうし、どこが製造を担当するんだろう。ここは絶対味方にしておいた方がいいと思うんだけど>Sony 他製造メーカー各社。Blu-ray vs HD-DVD とかやってる場合じゃないですよ。「光ディスク」という概念自体が古くなっちゃうかもしれないんだから…。

bird「ブラッド・ミュージック」

「ブラッド・ミュージック」

ブラッド・ミュージック 珍しく再読。最初に読んだのはエヴァンゲリオンの13話「使徒、侵入」の元ネタはコレかもね、なんて話を fj (!) で読んだのがきっかけでしたから、1996 年頃でしょうか。ストーリーの大まかな流れは覚えていたんですが1、その他の細かい部分はほとんど忘れていたので結構楽しめてしまった。こんなパニック小説だったっけなぁ。今読むとこないだ読んだ「ダーウィンの使者」はまさにコレの焼き直しであることがよく分かる (とはいえ僕は「ダーウィン」の方が好きだな)。シモンズベアさん的には「ダブル・クラウンの夢よ再び」的な面もあったんだろうか…(←やな奴)。

情報力学とか、宇宙の法則のくだりなんかはちょっとイーガンとの類似を見たりしました。しかしまー最近の物理学の動向を聞きかじってると2、宇宙に対する絶対的なイメージは持ちにくくなってきてますよね…。

2006/1/14 追記。この本の作者はグレッグ・ベアさんであってダン・シモンズさんではないではないぞ>過去の俺。これを書いたときの俺は目ぇ開けて寝ぼけてたのか。

birdUDP Reflector 改め DP Reflector

UDP Reflector 改め DP Reflector

結局、再送処理等に関していろいろ考えているのが面倒になってきたので1、UDP/TCP を混在させて利用可能な形にすることにしました。クライアントはアプリケーション側の要求やいろいろな制約を鑑みてどちらのプロトコルでも好きなように利用できます。DP Reflector の DP は Dual Protocol の DP なのだ(笑。
つまり、完全性や順序性が欲しいアプリケーション (または個々の通信要求) は TCP を使えばいいし、そういったものはいらないのでもっと性能が欲しい場合は UDP を使えば良いと。DP Reflector 側では UDP 時には完全性や順序性を一切保証しませんので、もし UDP を使いつつそういったものが (多少なりとも) 欲しい場合はアプリケーションレイヤーで作りこむ必要があります。
TCP でのやりとりのために追加になったコードと、再送処理が必要なくなったために削除したコードの分量はほとんど同じくらいか、多少前者の方が多いかな、という程度。UDP 版、TCP 版のテストクライアントも含めてありますが、かなりシンプルになったように思うのですがどうでしょうか?
再送処理がなくなった関係で、パケットフォーマットが少し変更されています (シーケンス番号フィールドがなくなった)。また、TCP ストリーム上へのパケットの乗せ方の仕様も追加になりました。さらにチャネルに参加しているクライアントのリストを得る LIST コマンドも追加になっています。
今回も www.digitune.org の 15315 番ポート (TCP/UDP とも) で動かしておきますので、テストにでも使ってくれい>かぴのすけ。
ナチュラルに inner-inner-class を使ってしまった…。うひょー。

birdreferer spam(2)

referer spam(2)

referer bomb じゃなくて referer spam というのですね。apache のアクセス制御を使って弾く努力をしてみることにしました。<Directory /> の設定に下記を追加しました。

# antispam.  
    SetEnvIf User-Agent "Netscape/Mozilla compatible" Spammer  
  
    Order deny,allow  
    Deny from 63.81.44.2  
    Deny from env=Spammer  

いちおう User-Agent と IP アドレス双方で。また別のアドレスから来たら追加していこう。いたちごっこだけど、地道に対処するしかないよね。

birdプロトコル解説, referer bomb

プロトコル解説

昨日の UDP Reflector のプロトコル解説をざっと書いてみました。かぴのすけへの返事でも書きましたが、このページにあるアーカイブには .class、.java 両方とも含まれていますので、実際のソースコードを読んで動きを確認したい方はそちらをご参照ください。

下記プログラム1を実行して www.digitune.org の 15315 番ポート宛に UDP パケットを送信してくれる人募集(笑2。出来ればそのときの送受信パケットダンプもあると助かるんですが…。

#include <sys/types.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <sys/uio.h>  
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <unistd.h>  
#include <netdb.h>  
#include <arpa/inet.h>  
#include <sys/errno.h>  
  
extern int h_errno;  
  
int main(int argc, char *argv[])
{  
	int sd;  
	char buf[256];  
	int messagelength;  
	struct sockaddr_in server;  
	struct hostent *he;  
  
	/* 引数のエラー処理 */  
	if(argc != 4){  
		fprintf(stderr, "usage: %s SERVER_NAME SERVER_PORT MESSAGE\n", argv[0]);  
		exit(1);  
	}  
  
	/* socketの生成。SOCK_DGRAMがudp用 */  
	sd = socket(AF_INET, SOCK_DGRAM, 0) ;  
	if(sd < 0){  
		perror("socket: ");  
		exit(1);  
	}  
  
	memset((char *)&server, 0, sizeof(server));  
	server.sin_family = AF_INET;  
	server.sin_port  = htons(atoi(argv[2]));  
  
	/* gethostbyname による名前引き */  
	he = gethostbyname(argv[1]);  
	if(he == NULL){  
		fprintf(stderr, "gethostbyname() failed: %s\n", hstrerror(h_errno));  
		exit(1);  
	}  
	memcpy((void *) &(server.sin_addr), (void *) he->h_addr, he->h_length);  
  
	/* バッファの初期化 */  
	memset(buf,0,sizeof(buf));  
	strncpy(buf, argv[3], sizeof(buf) - 1);  
	messagelength = strlen(buf);  
  
	/* サーバーへの送信 */  
	if(sendto(sd, buf, messagelength, 0,  
			(struct sockaddr *) &server, sizeof(server)) == -1){  
		perror("sendto");  
		exit(1);  
	}  
  
	memset(buf,0,sizeof(buf));  
	buf[1] = 0x10;  
  
	/* サーバーへの送信 (2) */  
	if(sendto(sd, buf, 3, 0,  
			(struct sockaddr *) &server, sizeof(server)) == -1){  
		perror("sendto");  
		exit(1);  
	}  
  
	close(sd);  
	exit(0);  
}  

referer bomb

昨日の日記の referer がエッチサイトで山盛りになってますね(笑。なんだかなぁ。

birdUDP Reflector, 角田さんの子供達

UDP Reflector

というわけで作ってみました。かぴのすくぇの元ソースとは似ても似つかないもの (プロトコルもまったく違う) になってますが、まぁ本質的には似たようなものだということで。ほんとはプロトコルとか説明しないといかんですが、今日はもう遅いのでまた今度。
とりあえずこのサイトの 15315 番ポートで動かしておきます。NAT の設定が間違えてなければ外からも packet 投げつけられるんじゃないかと思いますが、まったく未検証なのでご注意。今週中くらいには検証&説明出来るといいなぁ。

角田さんの子供達

最近は K1 などでレフェリーをされている角田さん1のお子さん達って、「ケンシロウ」と「ユリア」って名前なんですね (本当はカタカナではなく漢字ですけど)。結構びっくり。

birdiPod を追い抜く?, そういえば Mac は, 「グループ内の 32bit 値入力を同期させるサーバ」

iPod を追い抜く?

Sony の安藤さんが HDD ウォークマンの発表会で言ったそうですが…うーむ。ぱっと見た感じでは市場に山ほどある普通の HDD プレーヤと変わらない感じだけどなぁ。もちろん世界最小・最軽量ということはありますが、iPod くらいのサイズになってしまえばそれもそれほど大きな差別化要素になるとは思えないです。その自信の根拠はどこにあるのだろう?
iPod の利点は iTunes との連携にあるそうで、特に Music Store を使い出すと他には移れない魅力があるらしいと聞きますが、安藤さんの発言は Music Store がまだ始まっていない国内に限った話なのだろうか。SME の政治力を使って、iTunes Music Store よりも早く国内で自社のソフトと連携させたダウンロード販売サービスを開始する目処がある、とか。

そういえば Mac は

あいかわらず欲しいことには変わりないんですが、どちらにしても Tiger が出てからにしようと今は思っています。Tiger なら「おうちで 64bit OS!」と悦にひたれるし(笑。

「グループ内の 32bit 値入力を同期させるサーバ」

って、どんなイメージだ?あるクライアントから来た 32bit 長のパラメータを、グループメンバにマルチキャストするような感じ?

bird「書きあぐねている人のための小説入門」, のだめ読んだ, フラットテレビ

「書きあぐねている人のための小説入門」

書きあぐねている人のための小説入門 保坂さん月間最後の本は、保坂さん自身の創作に対する種明かしとも言えるこの本でした。彼の話にはどうして「オチ」がないのか、とか、「ストーリー」というものに対する彼の考え方が分かる、保坂さんの小説を読んだことがある人にとってはなかなか興味深いお話が語られています。とはいえ別に意外なものじゃなくて、小説から感じる通りの彼のまじめさ、正直さ、天邪鬼さがそのまま語られているわけですけれども。

それにしてもこの本は思いのほか「実践的」な本です。修辞法やら暗喩やらなんやらテクニカル・タームで読者を煙に巻いて高尚なことが書いてあるかのように錯覚させる…というようなことはまったくなくて、いつもの調子で彼が一番大切だと考えていること、小説を書くための心のありようのようなものを一生懸命伝えようとしてくれています。

今回彼の本をまとめて読んでみて、その内容の予想を超えた一貫性 (意地悪く言うと同じ話があっちゃこっちゃに出てくる) にちょっと驚いたんですが、それこそつまり、彼がいつも本気で小説を、エッセイを、哲学書を、小説入門を書こうとしていることの証拠なんでしょうね。

この本読んでたら「アンナ・カレーニナ」がすごく読みたくなった…。

のだめ読んだ

妹のところからまとめて借りてきて一気に全部読みました。面白かった…。

フラットテレビ

プラズマ&液晶のフラットテレビがすっかり売れ筋商品として定着して久しい昨今ですが、アメリカではリアプロが盛り上がっているんだそうですね。3管方式から画素方式になって、光学系の改良もありプラズマや液晶などの直視型ディスプレイと遜色ない画質を達成しながら価格が安いの売りだとか。奥行きに関してもどうせ台が必要なら実際にはほとんど差がないらしく。
個人的にリアプロに感じる不安は、光源である電球の寿命とランニングコストです。あの電球は結構寿命が短い上、かなり高いんですよね。そういう意味で、もし白色 LED を使ったリアプロ、なんてのが出てきたりしたらかなり魅力的かも、なんて思ったりしました。

First | Prev | 412 | 413 | 414 | 415 | 416 | Next | Last