2009-03-12
■ EC2 カスタマイズAMI 関連コマンドまとめ
ec2-bundle-vol -d /mnt --privatekey /mnt/pk-XXXXX.pem --cert /mnt/cert-XXXXX.pem --user <アカウントナンバー>
ec2-upload-bundle --bucket <バケット名>*2 --manifest image.manifest.xml --access-key <アクセスキー> --secret-key <シークレットキー>
AMI の登録
ec2-register <バケット名>/image.manifest.xml
AMI の登録解除
ec2-deregister <AMI ID>
AMI の削除
ec2-delete-bundle --bucket <バケット名> --manifest image.manifest.xml --access-key <アクセスキー> --secret-key <シークレットキー>
2009-02-03
■ mobirc とmod_proxy を連携させる
mobirc を使うためにport 5678 を空けるのはださいので
mod_proxy と組み合わせるための備忘録。
mod_proxy と組み合わせたときの問題点として以下が挙がった。
ぐぐっても情報が出ないのだが、私の環境だけなのだろうか。
仕方ないのでApache のRequestHeader を使ってmobirc にケータイのリモートアドレスを渡し、
それを使ってIP アドレスチェックをするようにした。
httpd.conf
RequestHeader set X_FORWARDED_FOR %{Remote_Addr}e ProxyPass / http://127.0.0.1:5678/ ProxyPassReverse / http://127.0.0.1:5678/
mobirc/extlib/HTTP/Session/State/MobileAttributeID.pm
if ($self->check_ip) { # my $ip = $ENV{REMOTE_ADDR} || $req->address || die "cannot get address"; my @forwarded_for = $req->headers->header('X_FORWARDED_FOR'); my $ip = $forwarded_for[1] || $req->address || die "cannot get address"; if (!$ma->isa_cidr($ip)) { die "SECURITY: invalid ip($ip, $ma, $user_id)"; } }
mobirc/lib/App/Mobirc/Web/C/Account.pm
# if ($ma->isa_cidr(req->address)) { my @forwarded_for = req->headers->header('X_FORWARDED_FOR'); if ($ma->isa_cidr($forwarded_for[1])) { session->set('authorized', 1); return redirect('/'); } else { return redirect('/account/login?invalid_cidr=1'); }
mobirc/extlib/HTTP/Session/State/MobileAgentID.pm にも類似の箇所があったのだが
こちらは修正しなくても今のところ問題が出ていないので放置している。
これでIP アドレスのチェックをパスできるが、チャンネルに入ろうとすると
Can't locate object method "is_foma" via package "HTTP::MobileAttribute::Agent::DoCoMo" at /path/to/mobirc/lib/App/Mobirc/Pictogram.pm line 53.
と怒られる。自分しか使わないので
mobirc/lib/App/Mobirc/Pictogram.pm
if ($ma->is_docomo) { # if ($ma->is_foma) { 'I.uni' # } else { # 'I.sjis' # }
2009-02-02
■ mod_rewrite とmod_asis を使って任意のステータスコードを返す
あるディレクトリ以下に限り、存在しないファイルにリクエストされたときに
404 ではなく204 を返す必要があったので以下のような設定をした。
.htaccess の場合
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.*$ /path/to/204.asis
httpd.conf の場合
RewriteEngine On RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteRule ^/path/to/.*$ /path/to/204.asis
204.asis
Status: 204 No Content Content-type: text/html
mod_asisを使うと、ステータスコードも含めてテキストに書いたままの内容で
ブラウザにレスポンスが送信される。
204.asis の下に改行を二つ入れているのはそのため。
はじめはmod_asis の存在を知らず以下のようなCGI をでっち上げていた。
204.cgi
#!/usr/bin/perl use strict; print "Status: 204 No Content\n"; print "Content-Type: text/plain\n\n"; __END__
IRC でアドバイスをくれたhasegaw blog の中の人に感謝(2回目)。
2009-02-01
■ タイトルを入れて見出しのことを忘れてた
ぼけぼけすぎる。しょんぼり
2009-01-30
■ FastestCSV がヤクい件
Ruby の標準添付CSV パーサが遅いというのは有名な話なので
これまでは主にFasterCSV を使っていました。
FasterCSV のベンチマーク - *Trace Output* にあるとおり、標準のパーサと比較して
結果
csv を parse して行数を数えるだけのスクリプト(後述)の実行時間を GNU time で測定しました。
対象 結果 ruby 1.8.4 + 標準添付の csv 12分26秒56 ruby 1.8.4 + FasterCSV 0.1.9 2分34秒92 FasterCSV は標準添付の csv パーサの 5〜6 倍速いようです。
と、それなりに満足していたのですが、とあるPHP で書かれた「CSV を解析してほげほげする処理」を
Ruby で書き直してみたところ、10倍以上の時間が掛かるようになってしまいました。
# 4万行↑のCSV のため、数十秒以上の開きが……。
そこで、先ほどのベンチマークにコメントされていた
moonwolf 2006/06/02 14:28
flexを使ってFastestCSVという拡張ライブラリを書いてみました。
Pythonの2〜3倍くらいの実行時間にまで早くなりましたw
id:moonwolf 氏のFastestCSV を試してみることに。
ちょっと見つけにくかったですが、RAA - csvscan にありました。
CSVScan が正式名称なのでしょうか。
インストールはREADME.ja を見ればすぐに分かるので割愛。
試してみた結果は非常に満足。PHP とほぼ同じくらいの速度で解析されているようです。
使い方が標準のCSV やFasterCSV と少しだけ違うので気をつけないといけないですね。
require "csvscan" # ライブラリのロード open(ARGV.shift) {|io| CSVScan.scan(io) {|row| p row } }



