2007-01-01から1年間の記事一覧

Erlangでたらい回し 遅延評価版

closure を使えば遅延評価できるとな。 λ萌え - たらいを後回し 実は、closureをサポートしている言語であれば、遅延評価は可能だったりする。明示的にやらなければならないものの、それを明示するのは実に簡単だ。 まず、遅延評価したい値は、ただclosureで…

Erlangでたらい回し

まずは普通に。 -module(tak). -compile(export_all). tak( X, Y, Z ) -> if X =< Y -> Y; true -> tak( tak( X-1, Y, Z ), tak( Y-1, Z, X ), tak( Z-1, X, Y ) ) end. bench( X, Y, Z ) -> { Time, Ans } = timer:tc(?MODULE, tak, [X, Y, Z]), io:format(…

erlang で書かれた Wiki

Erlangで書かれたWiki - スコトプリゴニエフスク通信 から http://www.sics.se/~joe/tutorials/wiki/wiki.html を見て、とりあえず動かしてみんだけど、 $ ab -c 10 -n 10000 "http://localhost:4992/wiki/showPage?node=home" Requests per second: 1650.08…

erlang で並列 HTTP request

まだ erlang の基礎もロクに勉強してないというのに、単に面白そうだから、という理由で並列プログラミングに手を出してみた。 HTTP get を複数の URL に対して並列で発行する。全体の構造は以下のようなもので。 main manager プロセスを作成 引数で受けた …

FizzBuzz

erlang 初めて書いた。 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 http://www.aoky.net/articles/jeff_at…

Unicode::RecursiveUpgrade

ネストしたリファレンス内の文字列 (utf8, not flagged) を一括で utf8 flagged にしたかった。 Unicode::RecursiveDowngrade を使えば出来るのだけど、upgrade するのに名前が downgrade ってなんか嫌だったのでついカッとなって作った。 package Unicode::…

Perl + DBD::Pg で COPY を使う

以前、ベンチマーク取ったことがあるので書いておこう。 PostgreSQLに大量のデータを登録する際はINSERTを使って一件づつ処理するより、COPYを使って一気に登録した方が実行速度が(かなり)速いです。 http://www.1x1.jp/blog/2007/03/php_pgsql_copy.html …

text/plainでも外部からの入力をそのまま出すのは危ない

IE には Content-Type が text/plain でも HTML っぽかったら HTML として扱うという、有名なお節介機能があるので…… 最低でもContent-Type:ヘッダーだけでもSTDOUTに出力しておかないと、たとえプログラムが正常終了したとしてもStatus 500として扱われます…

DoCoMo の使用 IP アドレス帯域

以前とページが変わってた。 旧 (not found) http://www.nttdocomo.co.jp/service/imode/make/content/ip/about/ 新 http://www.nttdocomo.co.jp/service/imode/make/content/ip/ ページ内容も変わったみたいで、 Net::CIDR::MobileJP の Scraper::Plugin::D…

WebService::FC2::SpamAPI released

http://search.cpan.org/~fujiwara/WebService-FC2-SpamAPI-0.01/先週末にリリースされた、FC2 の spam blacklist API を使う Perl module. まだ誰も作ってなさそうだったので、作ってみました。 FC2ソーシャルスパム対策とは、日々送信されるスパムメール(…

Sledge のセッションを Pg から File に

諸般の事情により、Sledge::Session::Pg から Sledge::Session::File に変更したい。 移行スクリプトを書いた。 #!/usr/bin/perl use strict; use DBI; use MIME::Base64; my $dbname = shift || die; my $dir = shift || die; my $dbh = DBI->connect("dbi:…

ClamAV-0.90

0.88.7 から update したら、clamd の再起動時にこんなエラーが。 ERROR: Parse error at line 34: Option LogTime requires boolean argument. ERROR: Can't open/parse the config file /etc/clamd.confREADME には、0.90 での変更点として以下が書いてあ…

Hobbitで独自監視スクリプト

サーバ監視には Hobbit を使ってます (Nagios は設定ファイルを書くのが面倒で挫折)。独自の監視スクリプト (クライアントサイド) を作る必要があったので、「Hobbit監視 - 自作の監視スクリプトはどうやって作りますか?」を参考に書いてみた。上記の例は s…

PoCo::HTTP による Comet チャットサーバのスケーラビリティ

せっかくのイベントドリブンフレームワークな POE ですから Comet でチャットをやってみようかと。 http://d.hatena.ne.jp/dayflower/20061116/1163663677 こちらの POE::Component::HTTP による Comet チャットサーバですが、どのぐらいの接続まで耐えられ…

Spread Toolkit で Comet チャットサーバをクラスタリング

PoCo::HTTP で Comet チャットサーバを作る - daily dayflower を試してみた。面白い。 ついでに spread を使って、Comet チャットサーバをクラスタリングする実験をしてみる。POE::Kernel->run(); の前に、PoCo::SpreadClient もセットアップ。 use POE::Co…

Vista VS Samba

Ultimate 32bit 版を買ってきて、Sambaとの接続実験。ネットワークの構成は、Samba のみで構成された NTドメイン。 PDC, BDC ( CentOS-4 / Samba-3.0.10 ) Domain Member ( CentOS-4 / Samba-3.0.10 | fedora core 5 / Samba-3.0.23c ) まず Vista のドメイ…

Spread Toolkit でセッションレプリケーション

ログ以外に、何か面白い使い方はないかなあと思って。複数のアプリケーションサーバ間でセッションデータを共有したい場合、まあ普通は DB に入れるか Memcached に入れるかするわけですが、これを Spread を使って出来ないか。要は、Tomcat やらのセッショ…

Spread Toolkit で分散ログ (5) syslog とのパフォーマンス比較

実際のところ syslogd でログを取るのと比べてどうなのか比較してみた。ログ採取マシンは以下のようなスペック。 OS : fedora core 6 CPU : Athlon 64 3200+ (2.0GHz) RAM : 1GB HDD : 3w-9500-4LP (SATA RAID-5, 320GB * 4) Bonnie でベンチマークを取って…

Spread Toolkit で分散ログ (4) Spread::Session

Spread Toolkit で分散ログ (3) インストールと設定 mod_log_spread / spreadlogd - 酒日記 はてな支店 Spread Toolkit で分散ログ (2) インストールと設定 - 酒日記 はてな支店 Spread Toolkit で分散ログ (1) - 酒日記 はてな支店 ああ長かった。上記設定…

Spread Toolkit で分散ログ (3) インストールと設定 mod_log_spread / spreadlogd

mod_log_spread Apache は 1.3.37 を使用。Apache2 には対応していないので、Apache2 ではパイプ経由で外部プログラムを起動します(後述)。mod_log_spread.tar.gz をダウンロード、展開して apxs でコンパイルとインストール。 $ tar zxvf mod_log_spread.ta…

Spread Toolkit で分散ログ (2) インストールと設定

OS は fedora core 5 / 6 で、以下のような構成で。 www (192.168.0.10) Apache, spread loghost (192.168.0.11) spread, spreadlogd spread-src-3.17.4.tar.gz をダウンロードし、展開。 $ ./configure $ make # make install/usr/local/lib にライブラリが…

Spread Toolkit で分散ログ (1)

以前 LVS + Ultra Monkey で負荷分散 (設定編) - 酒日記 はてな支店 で書いたように、Apache を LVS で負荷分散したのですが、この際にアクセスログを一つに (時系列を保って) まとめるにはどうすればいいか、ちょっと悩みました。結局 Apache からパイプ経…