DBIx::Class::Schema
Schema ベースにすると重くない?
なんかアプリの起動に10秒くらいかかるよ。。
Catalyst::Plugin::DebugScreen
とか作った。自分用。
$c->debug が偽のときでも DebugScreen を出したかったのだけど、今の cat の実装だと無理っぽかったので。
Catalyst::Plugin::StackTrace と Catalyst::Engine からのコピペに、おまけで Template で自分で DebugScreen を定義できるようにしただけのやつ。
配列を何個かごとに分割したい
以下のような Flickr API の レスポンスをパースしようとしていて
<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
<photos page="1" pages="4" perpage="100" total="333">
<photo id="126831864" owner="29838003@N00" secret="b12ca76f6a" server="54" title="達人" ispublic="1" isfriend="0" isfamily="0" />
<photo id="126831781" owner="29838003@N00" secret="5a9b9f4075" server="44" title="party room" ispublic="1" isfriend="0" isfamily="0" />
<photo id="124231350" owner="29838003@N00" secret="d7a463ebb6" server="41" title="P3290041.JPG" ispublic="1" isfriend="0" isfamily="0" />
:
こんなコード書いたの、
text
:O
@matches
をかっこよく分割したい。
気合icalデータ
社内スケジューラを WWW::Mechanize
って無理やり iCal 形式のファイルを作るのを書いた。超強引だけど満足度かなり高い。
いまはスケジューラ->iCalだけだけどその逆も実装したいところ。
あと、それで気づいたのだけど、30boxes に読み込ませるためには X-WR-CALNAME
が定義されてる必要があるよう。
30boxes で ics ファイル読み込ませたいけどなんかエラーるよという人は X-WR-CALNAME
追加して見るといいかもしれない。
overload 期
が来た。
さっきかいたの
PACKAGE->inflate_column( query => { inflate => sub { my $u = URI->new; $u->query(shift);
my $ret = {};
for my $k ( $u->query_param ) {
my @v = $u->query_param($k);
$ret->{$k} = @v > 1 ? [@v] : $v[0];
}
$ret;
},
deflate => sub {
my $utf8off = sub {
my $str = shift;
utf8::encode($str) if utf8::is_utf8($str);
};
my $hash = shift;
for ( keys %$hash ) {
if ( ref $hash->{$_} eq 'ARRAY' ) {
$utf8off->($_) for @{ $hash->{$_} };
}
else {
$utf8off->( $hash->{$_} );
}
}
my $u = URI->new;
$u->query_param(%$hash);
$u->query;
},
}
);
foo=bar&baz=blah
みたいなクエリを保存するカラムに、ハッシュで保存してハッシュで取り出すというやつ。
短くかけるかと思って書き始めたら、URIの query_form
や query_param
にutf8フラグったの渡すとこけたり、foo=bar&foo=baz
のように配列になるべきものがうまくハッシュにできなかったりとかしてこんなに長く。
Catalyst::Plugin::Flavour 0.03pre
あぷ。新機能のドキュメント、テスト書いてないので Developer release にしておいてみる(ぉ
いままでは flavour とはいうものの Blosxom とは違い最初のパスを flavour としていたのを、Blosxom 互換な拡張子による方法に対応。
設定で、flavour, flavours_except が定義されていない場合この互換モードになるようにしておいた。
あと最初のパスを flavour にするモードの場合に、いままでは
flavours => [ 'html', 'rss', 'js', ]
などとして定義したものだけを flavour として扱うということをしていたけど、
flavours_except => [ 'about', 'login', ]
などと、特定のパス以外はすべて flavour として扱うオプションも追加。これではてなっぽいアプリが簡単に作れるかね。
あと、date_flavour 機能もつけた。
これは /2005/04/08 などのような日付っぽいURLにアクセスされた場合、$c->flavour->(year|month|day)
に日付を格納し、その日付部分をパスから除く。
この機能はデフォルトONで date_flavour => 0 とすればOFFにできる。
一気に機能追加しすぎてドキュメント書くのがあれすぎる。
しかも日本語の説明でも上記みたいに意味不明になっちゃうのに英語だとどうなっちゃうんだ、という。
JavaScript や CSS の query に自動で最終更新時間をつける Catalyst Plugin
川o・-・)<2nd life - JavaScript や CSS の query に自動で最終更新時間をつける Rails Plugin
インスパイア。
package Catalyst::Plugin::URI::MtimeQuery;
sub uri_for {
my $c = shift;
my $res = $c->NEXT::uri_for(@_);
if ( $res =~ /\.(css|js|swf)$/ ) {
my $base = $c->req->base;
my ($path) = $res =~ m!^$base/(.*)!;
my $file = $c->path_to( 'root', split '/', $path );
if ( $file->stat && -f _ && -r _ ) {
$res .= '?' . $file->stat->mtime;
}
}
$res;
}
1;
Catalyst では CSS や Javascript の読み込みは [% c.uri_for('/js/prototype.js') %]
などのように記述することが多いのですが、上記プラグインをロードしておくと、css|js|swf の場合は自動で更新時間が付くようになります。試してないけど。
上のは設定きめうちなんだけどその理由は config の設定キー名思いつかなかったからという。。
あと、swf は普通にクエリを渡して使うことが多いのでこのままだとあまり使えない。