MochiKit的にPoCo::Client::HTTPをつかえるラッパーを書いてみた。

POE は結構好きなんだけど、使ってるにつれていろいろ不満が出てくる。

Client::HTTP もその一つで、レスポンスを受け取るコールバックに CodeRef を指定できないくていちいちステートを作らないといけないのが嫌なので、こんなのを作ってみました。

POE::Component::Client::HTTPDeferred

MochiKit のインタフェースを参考にしてます。

こんな感じで使う。

use POE qw/Component::Client::HTTPDeferred/;
use HTTP::Request::Common;

POE::Session->create(
    inline_states => {
        _start => sub {
            my $ua = POE::Component::Client::HTTPDeferred->new;
            my $d  = $ua->request( GET 'http://unknownplace.org/memo/' );

            $d->addBoth(sub {
                my $res = shift;

                if ($res->is_success) {
                    print $res->as_string;
                }
                else {
                    warn $res->status_line;
                }

                $ua->shutdown;
            });
        },
    },
);
POE::Kernel->run;

js やってる人にはちょっと見慣れた感じじゃない?

これの Deferred 自体は全然機能足りてないけど、素で PoCo::C::HTTP つかうのと比べるとずいぶん楽になる。DeferredListもほしいな。

by typester / at 2008-11-13T23:04:00 / perl · poe / Comment

TheSchwartzのテストが通らなくてあせった件

TheSchwartzをインストールしようとしたらテストが通らなかった。

テストが通らなくても、原因を見ると失敗していても影響ないような失敗をしていることが多いので気軽にソースをのぞいて見たところどうもそんな気楽な感じでもなくて普通にエラーっててどうしたもんかと思った。

具体的には

$ prove -bv t/unique.t
t/unique....
1..12
ok 1 - made first feed major job
ok 2 - The object isa TheSchwartz::JobHandle
ok 3 - made another feed major job
ok 4 - no handle
ok 5 - made scratch major job
not ok 6 - The object isa TheSchwartz::JobHandle

#   Failed test 'The object isa TheSchwartz::JobHandle'
#   at t/unique.t line 44.
#     The object isn't defined
ok 7 - made first feed major job
ok 8 - The object isa TheSchwartz::JobHandle
ok 9 - made another feed major job
ok 10 - no handle
ok 11 - made scratch major job
ok 12 - The object isa TheSchwartz::JobHandle
# Looks like you failed 1 test of 12.
 Dubious, test returned 1 (wstat 256, 0x100)
 Failed 1/12 subtests

Test Summary Report
-------------------
t/unique (Wstat: 256 Tests: 12 Failed: 1)
  Failed test:  6
  Non-zero exit status: 1
Files=1, Tests=12,  0 wallclock secs ( 0.02 usr  0.01 sys +  0.14 cusr  0.03 csys =  0.20 CPU)
Result: FAIL

こんな感じ。

$client->insert が正しく JobHandle オブジェクトを返していないということは job を insert できてないってことなのでこれは問題である。

しょうがないのでもう少し追うと、このテストは3回 insert をしていて2回目の insert はわざと失敗させている。TheSchwartz はこの失敗した場合にエラーコード 1062 だけを特別扱いし、それ以外の場合はそのDBが死んだと判断して mark_as_dead する。

Data::ObjectDriver::Driver::DBIlast_error とか Data::ObjectDriver::Driver::DBD::mysqlmap_error_code あたりを参照のこと。

1062 というのはこの DOD::DBD::mysql にハードコードされていて、MySQL の Duplicate entry '%s' for key %d とかいうエラー。

この辺の実装もどうかと思うが、ここで僕の環境では 1582 というエラーコードが帰ってきていたため、DBが mark_as_dead されてしまい、次のinsertも失敗するということになっていたようだ。

ちなみにエラーコードは違ったけれども Duplicate entry '1-major' for key 'funcid_2' という期待するエラーが返ってきていた。

この環境の MySQL はずいぶん前に入れた 5.1beta (5.1.18-beta) で、ほかの5.0なマシンではテストとおるので、5.1 になってエラーコード変わったのかなぁと思ってマニュアル見てみたけど変わってないので、よくわからないけどとりあえずMySQLを最新(5.1rc)にしてみたらテストとおるようになってしまった。

古い5.1は罠だということかなー。

by typester / at 2008-09-04T18:11:00 / perl · theschwartz · mysql / Comment

Yokohama.pm Tech Talk #2 の資料

yokohama.pm のあとそのままバカンスに突入したため遅くなりましたがさきほど資料を coderepos にアップしました。

Perl RTMP implementation

実装も一週間前でログが途絶えてますがgithub & codereposにアップしました。

まだAPIをつくってないので実装が内部に直書きになっていますのでまぁ参考まで。

この記事時点でのmasterブランチがwebcamからライブ動画を配信するもの、stream_mp3ブランチがmp3をオンデマンド配信する実装となってます。

by typester / at 2008-09-01T11:32:00 / perl · yokohama.pm / Comment

Data::AMFの速度

AMF と Perl について - yoshizu@S2F

XS版を作ったとしてもMooseつかっているかぎりCGIでのパフォーマンスは望めないかなぁ。逆にmod_perlとかFastCGIであれば今のでもそんなに遅くはないはず。

ただ、Remoting(RPC) 目的でAMFを使うのはそんなにメリットないんじゃないかなーとは思う。

by typester / at 2008-08-19T03:00:00 / perl / Comment

Moose版Twircつくた。

lopnorさんにwassrにいないから不便だよハゲ、などということを言われたのでwassrアカウント作った。

でwassrはIMに対応してるっぽいので、この辺でつくったTwircというtwitter用のIM-Jabberゲートウェイアプリを改造してtwitter以外のサービスでも汎用的に使えるようにした。

channels:
  - name:   '#twitter'
    target: 'twitter@twitter.com'
  - name:   '#wassr'
    target: 'wassr-bot@wassr.jp'

こんな感じでいろいろサービス増やせるようになった。まぁtwitterはいまIM死んでるから使えないけど。

ついでにMoose化。ついでにgithubにうつした。

http://github.com/typester/twirc/tree/master

by typester / at 2008-07-25T17:55:00 / perl / Comment

MooseX::POE

ほめてる人が多いけど、僕はなんか微妙だなぁ。

自分が POE になれてるからだと思うのけど、素で書いたほうがわかりやすい。

Moose はつかうけど MooseX::POE はつかわない方向。

by typester / at 2008-07-25T14:08:00 / perl / Comment

とりあえず Test::WWW::Mechanize::Catalyst は使わずに Catalyst::Test だけでがんばることにした。

by typester / at 2008-07-23T15:38:00 / perl · catalyst / Comment

Perl 5.10 + Test::WWW::Mechanize::Catalyst

うごかんわけだが、みんなどうしてんの?

5.10 の問題ではなくて、最新版の libwww-perl (5.10に付属)の問題という話だけど、5.8.x でも LWP あげたらおなじことになるのかなー。

by typester / at 2008-07-23T11:32:00 / perl · catalyst / Comment

ところで MooseX::Getopt で Pod::Usage 的なことをする方法がわからない

のだがどうすればいいんだろうか。

by typester / at 2008-06-05T14:11:00 / perl · moose / Comment

App::Flight

昨日のは App::Flight にしますかね。

FCGIネームスペースを騙るにはあまりにも僕の使い方にかたよりすぎているしな。

by typester / at 2008-06-05T14:09:00 / perl / Comment

2 3 4 5 6 7 8 9 10 11

(Page 6 of 30)