2006-03-15
● [プログラミング] アルバムCGI
業務連絡。
写真アルバムcgiのツッコミ部分、tDiaryほどに精緻なデータをとる必要もあるまい、と思うのでよくありがちな簡易CSV形式にすることに。エンコード部分のソースは次のような感じになりました:
# 一つのツッコミを一行にまとめる
$message = join_encode($date, $ip_addr, $name, $email, $body);
# すべてのツッコミをまとめる
# (投稿済みのツッコミ: @all_com)
$all_comments = join_encode(@all_com, $message);
# ファイル名、撮影者コメント、ツッコミをまとめる。
# ($seen: 表示された回数, $responses: ツッコミの数)
$file_info = join_encode($filename, $original_comment, $seen, $responses, $all_ comments);
:
sub join_encode
{
my @args = @_;
for (my $i=0; $i<scalar(@args); $i++) {
$args[$i] =~ s/([,\x0a\x0d\t%])/'%'.unpack('H2',$1)/eg;
}
return join(',', @args);
}
sub split_decode
{
my @args = split(',', $_[0]);
for (my $i=0; $i<scalar(@args); $i++) {
$args[$i] =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack('H2',$1)/eg;
{
return @args;
}
まぁ、考え方としては、配列の配列の配列をテキスト表現にした、といったところでしょうか。perlであんまりネストした構造を持つのは好きじゃないんですが、まぁこの程度の単純な構造ならまぁありかなと。ただ、いちいちパースするのは面倒なんで、記事の数とかはあらかじめ独立させちゃっています。
あ、そういえば rrdtool なんてものもあったなぁ…。数しか扱えない(?)のはともかく、データはどんな風に保存してるんだっけ。
rrdtoolは,ぶっちゃけていうとリングバッファで保存してるよ.<br># 何保存したいのか,よくわかんないけど...
んー、とりあえず相当に高速な掲示板エンジンが<br>ほしいので、頻繁なレコードの更新ができる(はずの)<br>rrdtoolってどうしてんのかなぁと思ったり。<br><br>でもまぁ、あれか、データベース系なのか…。<br>バッグエンドにDB使いたくないんですよね…。