« 2006年05月 | メイン | 2006年07月 »

2006年06月30日

[warn] /test.cgi did not send an HTTP header

おそらくModPerl::Registry環境でしかでないのだけど、動的コンテンツに対して、"If-Modified-Since"を送ると、error_logに、

[warn] /test.cgi did not send an HTTP header

というのが、記録される。直接的な害はないことは確認済み。


再現させるには、

#!/usr/bin/perl
use strict;
use warnings;
print "Content-Type: text/html\n\n";
print "x" x 1000;

という簡単なCGIを書いて、

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
my $url = "http://localhost/test.cgi";
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $url);
$req->header( 'If-Modified-Since' => HTTP::Date::time2str );
my $res = $ua->request($req);
print $res->status_line,"\n";

を実行する。

最後のstatus_lineは、"304 Not Modified"になる。
これ自体、よくわからない動作なんだけど、Last-Modifiedを吐いていない動的コンテンツにIf-Modified-Sinceヘッダを送ってくる某Safariがまぁ、あれだ。

ちなみに、Registry環境でCGI.pmを使ってheader出力をしている場合は(If-Modified-Sinceヘッダは送られてくるが)問題ない。

参考URL:
mnot’s Web log: Bug Syncronicity
Bug 39287 - Incorrect If-Modified-Since validation (due to synthetic mtime?)

2006年06月22日

本日のはまりコード

以下のプログラムを動かすと激しくメモリリーク

use List::Util;

my @parent;
for ( 1..4 ) {
    push @parent, {
        key => "parent_" . $_,
        value => $_
    };
}

while (1) {
    my $child = rand(4);
    my $hit = List::Util::first { $_->{value} > $child } @parent;
    $hit ||= $parent[0];
    print "$hit->{key}\n";
}


List::Util::firstでのリファレンスが解放できないのかなぁ。。
仕方ないのでforeachで書き直した。


__追記
1.18では直っている模様

1.18 -- Fri Nov 25 09:30:29 CST 2005
Bug Fixes
  * Fix memory leak in first() and reduce()

2006年06月12日

高野健一 Yes.

Yes.
Yes.
posted with amazlet on 06.06.12
高野健一
日本クラウン (2006/06/07)


渋谷のTSUTAYAで発見したので購入。
MacBook Proに音楽を入れてないので、今聴ける音楽はこれだけという状態。

あと、会社で使う用USキーボード

Apple M9034LL/A English Version Apple Keyboard
アップルコンピュータ (2003/06/28)
売り上げランキング: 714


をApple Storeで買った。

2006年06月08日

CGI::Application::Plugin

完全な思いつき&パクリ。

package CGI::Application::Plugin;

use 5.006;
use strict;
use attributes ();

our $VERSION = 0.01;

# Code stolen from Class::DBI::Plugin 
# Code stolen from Simon Cozens (Maypole)
our %remember;
sub MODIFY_CODE_ATTRIBUTES { $remember{ $_[1] } = $_[2]; () }
sub FETCH_CODE_ATTRIBUTES { $remember{ $_[1] } }

sub import {
    my $class  = shift;
    my $caller = caller;
    no strict 'refs';
    for my $symname ( keys %{"$class\::"} ) {
        local *sym = ${"$class\::"}{$symname};
        next unless defined &sym;    # We're only in it for the subroutines
        &sym($caller), next
          if $symname eq 'init';
        *{"$caller\::$symname"} = \&sym
          if grep { defined($_) and $_ eq 'Plugged' } attributes::get( \&sym );
    }
}

1;


`Class::DBI::Plugin` =~ s/Class::DBI/CGI::Application/g;
しただけ。

SYNOPSISはこんな感じ。

  package CGI::Application::Plugin::NewPlugin;

  use strict;
  use base 'CGI::Application::Plugin';
  
  sub init {
    my $class = shift;
    $class->add_callback( 'prerun',  ... );
    $class->new_hook('newhook');
  }
  
  sub method_name : Plugged {
    my $self = shift;
    ....
  }

  sub this_method_is_not_exported {}


便利だと思ったり、でも今更間があったり。

ソース:http://svn.nomadscafe.jp/public/library/perl/CGI-Application-Plugin/

2006年06月02日

週末京都

って書くとセレブっぽくていいね。
某用事のため週末は京都なのです。

今は、池尻大橋のマンスリーマンションを借りて単身赴任をしております。
渋谷まで歩いて20分弱ぐらいなので、結構楽です。交通量の多い道なので快適まではいかないが。。
単身赴任は予定では二ヶ月間ほど。その後、奥さんもこっちに来ます。
なので、次は家探し。東京は広いし、交通機関も様々なので探すのに苦労しそうです。
良いところあったら教えてください。

前のエントリーにはたくさんのコメントを頂きありがとうございます。
これからもよろしくお願いします。

ソース読みから仕事開始中。

2006年06月01日

mixi入社しました

6月1日、株式会社mixiに入社いたしました。
どうかよろしくお願いします。

前職をやめてから、様々な方にありがたいお声をかけていただいて、
感謝しております。期待に添えますよう、mixiにてがんばっていきたいと思います。