fc2ブログ

construct_url

リクエストされたurlをhttp://から始まる形で取得するの術。
use Apache2::RequestRec;
use Apache2::URI;
sub handler : method {
    my ($class, $r) = @_;
    my $url = $r->construct_url($r->unparsed_uri));
      :
      :
unparsed_uri はuriをパースしない形、例えば%20とかをスペースに変換しないでそのまま返してくれる。mp1にはパース後を返すバージョンしかなくて困ったことがある。 construct_urlを使うにはApach2::URIをuseしなければならない、ってのはこんなことすると調べられる。
% perl -Mmod_perl2 -MModPerl::MethodLookup -e print_method construct_url
To use method 'construct_url' add:
        use Apache2::URI ();

APR::UUID

Data::UUIDを愛用していたのだが、コンパイルできないマシンとかあるのがイマイチ。mod_perl2にはAPR::UUIDというのが付いてきた。これはべつにmod_perlの中じゃなくても使えて、

% perl -MAPR::UUID -e 'print APR::UUID->new->format,"\n"'
505fb0b7-5c0a-0410-aa9d-924b2a725eab
というわけで、これからはこっちで。 こんなことしてる人もいる。 UUID用のモジュールってこんなにあったのか。

Apache2::Reload

mod_perlで開発してるとき、変更されたモジュールを自動的に再ロードしてくれるApache::Reloadってのがある。これはmp1用で、mp2用はApache2::Reloadになっている。 新しい方には指定したディレクトリ以下だけをチェックしてくれる機能があって、 開発中のディレクトリをこれでチェックするようにしておくと、えらく楽チンな感じ。 設定はhttpd.confにこんなので。

PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload
PerlSetVar ReloadDirectories "/Users/hogehoge/mp2"
PerlSetVar ReloadDebug On
これで/Users/hogehoge/mp2以下に置いてあるモジュールの更新をチェックしてくれる。 最後の ReloadDebug On はerror_logにリロード関係のメッセージを出すための設定。Onにしておくと、こんなのが書かれる。
Apache2::Reload: Checking mtime of Hello.pm
Apache2::Reload: Checking mtime of Hello.pm
Subroutine handler redefined at /Users/hogehoge/mp2/Hello.pm line 10.
Apache2::Reload: process 3101 reloading Hello from Hello.pm

やっとmp2

というわけで予想どおり家にいる。naoyaさんによる脳にやさしい解説もでたことだし、いままで放置してきたmod_perl2お試しでもやってみっか、ってことでまずはインストールを試みる。 perl.apache.orgを見に行くとapacheは2.0系列を使えと書いてあるのだが2.2については何も書かれていない。せっかくだからapacheは最新の2.2でやってやれ、でも何も書いてないからダメかも。2.0と2.2ではapacheモジュールの互換性ないみたいだし。まあいいや、ビルド開始... ダメだ。テストコケました。んじゃapacheは2.0ってことで。

はいできた。Sandbox::Hello... おぉ!ちゃんと動くじゃん。あたりまえか。 次Apache2::Request。ビルドもテストもするする通って make install。apache起動... 立ち上がらない...。なんだかlibexpatのダイナミックライブラリのバージョンが混沌としているので困った、と宣うておる。あーこの手のやつはメンドイんだよなぁ。 otool -L modules/mod_apreq2.so すると、バージョン違いのlibexpatを2種類要求している。こいつか。 昔subversion用にfinkでもってきたやつが混入してるのね。なんだかオレのマシンaprが3種類も入っちゃってるじゃん。しょーがねーなー。リンクするライブラリのパスをごにょごにょして、ビルドしなおし。あーやっとできた。やれやれ。

カミさんたち旅行

カミさんと子供たちは今日から爺婆と一緒に旅行。月曜まで帰ってこない。明日は塔へでも行こうかと思っていたが、天気悪そうな上に気温も高そうなので止め。しかし、このままいくと週末ずーっとMacいじり続けるような悪寒。

Effect.Highlightの時間をのばす

とある人に「もうちょっとゆっくりYellow Fadeしたいんだけどなぁ」とか言われた。これはdurationというオプションで指定できる。デフォルトは1秒だが、2秒かけてfadeしたいならこんな感じで。
new Effect.Highlight(target, {duration: 2.0})
ついでにeffectをキャンセル、というかスッパリ終了させるには、new Effect.Heilight(...)が返したオブジェクトに対して、render(1.0); cancel(); というメソッドを順番に呼んでやるとよいみたい。今のところこれで、なんとなく上手くいっている。