タグ

ブックマーク / blog.64p.org (292)

  • DeNA テクノロジーセミナーきいてたら簡単なディスパッチャができた - tokuhirom's blog

    Perl5.10 以後のみ対応だけど、5.10 以後ならこんな簡単なのでいいのかも。 package MojaMoja; use strict; use warnings; use parent 'Exporter'; use 5.01000; our $VERSION = '0.01'; use Plack::Request; use Plack::Response; our @EXPORT = qw/get put post Delete zigorou res/; my @ROUTE; BEGIN { no strict 'refs'; for my $meth (qw/get put post Delete/) { my $method = uc $meth; *{$meth} = sub ($$) { my $pattern = $_[0]; push @ROUTE, { reg

  • TOEICで125点しかとれないような人でもできる英文バグレポートの方法。 - tokuhirom's blog

    または、Pros と Cons をまちがえて書いてしまうような人でもできる英文バグレポートの方法。 まあ小手先のノウハウだけど、俺はこうやってるよ、という話。 ともかく再現可能なテストケースをかく再現可能なテストケースを書けば、コミュニケーションコストを大幅に削減することが可能。これは日人同士の場合でもそうだし、プログラマにとっては必須の技能の一つであるから、是非身につけて実践するべき。 マルチスレッドに起因するものなど、再現可能なテストコードがかきづらいものはともかく、それ以外であれば、再現テストコードを書くべき。 再現テストコードを書けない場合、そもそも自分がバグの原因を把握できていない場合がおおいので、そんな状況でなれていない言語によるコミュニケーションをとるのは困難。

    hisaichi5518
    hisaichi5518 2010/03/15
    Syntax Error笑った。
  • Pod パーザいろいろ - tokuhirom's blog

    Pod::POMおれがふだんつかってるやつ。POM っていうなまえだけど、単に 2html な機能しかつかってない。2html な部分のカスタマイズが容易だったのでそのままつかってる。

  • cronolog と plackup の連携 - tokuhirom's blog

    multilog に access logerror log をまぜてだすと、エラーでてんのかどうかよくわからなくなっちゃうので、まあわけた方がよろしい。 multilog でパターンマッチで適当に分割するという手もあるけれど、アクセスログは集計などにもつかうので、日ごとにファイルがわかれていた方が便利でしょう。 というわけで、こんな風にしてみた。 use Plack::Builder; builder { open my $fh, "| /usr/bin/cronolog /var/log/plackup/%Y/%m/myapp-%Y%m%d.l og" or die "cannot load log file: $!"; select $fh; $|++; select STDOUT; enable 'Plack::Middleware::AccessLog', logger =

  • リアルタイムWebのためのPubSubHubbub の Subscriber を構築する方法 - tokuhirom's blog

    PubSubHubbub(以下PuSH)は、フィードの更新をリアルタイムに通知するためのプロトコルである。 ウェブ上にころがっている"PuSH"の情報は、"Pub" の部分を実装する方法か、「PubSubHubbub の家GAE実装を手元でうごかしてみたよ」という記事しかなくて、"Sub"を実装する方法について解説しているブログなどはみあたらなかったので、ここに記す(英語だといくつかあった)。 基的に、ほとんどの人が興味あるのは "Pub" の部分である。自分のブログの更新情報等をリアルタイムにおくりつけたいと考えるからである。実際、ほとんどのブログソフトウェアではすでに PuSH 対応がすんでいる。see MT-PuSH, etc. しかし、私は今まさに Subscriber をつくりたいとおもったのである。なぜならば、"friendfeed.com/cpan" の更新情報を PuS

  • CPAN 関連の API などのメタデータについての雑感 - tokuhirom's blog

    CPAN のメタデータは以下の3つにより配布されている。 authors/01mailrc.txt.gzmodules/02packages.details.txt.gzmodules/03modlist.data.gzいずれも gzip した状態で 200KB を越えるようなわりと大きなテキストファイルなので、これを web site や、CLI 等から直接利用すると、速度が遅くなる。 そこで、以下のような解決策がかんがえられているみたいです。 CPAN::SQLitehttp://search.cpan.org/~rkobes/CPAN-SQLite-0.199/ 上記ファイルから SQLite にデータをつっこむスクリプトを提供。検索用のメソッドも提供してくれる。 なお、一部の検索系のメソッドに SQL Injection 脆弱性があるので注意。ユーザーからの入力を直接いれさせると大

  • App::MyPort を書いた話 - tokuhirom's blog

    諸事情により、頻繁にいろんなソフトウェアをいれているわけですが、入れるたびに「どこからイレるんだっけ」とおもって、さがすのがめんどくさいので、オレオレportsモドキをつくってつかっている。 shell script でがんばってかいたものをここ数ヶ月つかっていたのだが いろいろやれることふやしすぎてスパゲッティ方向性がさだまらない感じで拡張しすぎたシェルスクリプトでがんばるのがめんどいといったことにより、どうにもならなくなったので、perl で全部かきなおした。 なお、ディレクトリ構造とか、管理の方法は下記のページをまるぱくっている。 http://d.hatena.ne.jp/hirose31/20091217/1260981836 インストーラというか、そういうのはこのへんにおいてある。 http://github.com/tokuhirom/myport インストールするための設定

  • Module::Build と EU::MM と M::I と dzil にかんする雑感(miscellaneous thoughts) - tokuhirom's blog

    Module::Build の目標は make の排除だとおもうのだが、現実的には、EU::MM に依存している場合には make が必要だし、ある人のモジュールだけが make なしではいるようになってもとくにうれしくはない。 つまり、移行するメリットが薄い。よって、流行らなかったのだとおもう。 おぼえることがふえるのやだし。 EU::MM はもはや積極的に開発はされないようだが、普通に使う分にはもんだいないし、メンテナンスはされてる。 単純な pure perl のモジュールなら、これをそのままつかっても問題はない。 ただし、ちょっとこった実行時の処理などをやろうとすると、よみづらい Makefile.PL ができあがる傾向があるようにおもう。 クールなインターフェースを提供してくれる。プラガブルで拡張可能だ。 日では、Plagger で M::I が採用されたことを契機に、一気にひ

  • 「Yet another CPAN recent changes」つくったよーって話 in Japanese - tokuhirom's blog

    http://cpanrecent.64p.org/ typester さんの CPAN Recent Changes が落ちっぱなしなので、こまったなーとおもってたら、tomi-ru さんが Y! Pipes でつくってくれて、便利だなーとおもってたんだけど、これはちょっと情報量がおおすぎるのと、なんか更新がおそいなーとおもったので、新しくつくってみた(あの Y!Pipes をイジる根性は僕にはなかった)。 typo さんの実装よりも適当だけど、それなりにうごいてるっぽい。仕組みは英語でかいたので、それよんでください。まあ diff の精度はそこそこでてればいいかなあ、といった程度。連続してうpすると変になるだろうけど、まあいいか、といったかんじ。 だれかなおしてくれたらうれしい。 コードも github にあるし、なんか問題あったらすぐなおせるし、だれでもすぐにホスティングできるとおも

  • 無圧縮zipを扱うライブラリをつくってみた - tokuhirom's blog

    http://github.com/tokuhirom/p5-archive-zip-uncompressed pure perl で無圧縮zipの展開/パッキングをするためのライブラリをかいた。 pure perl なのと、メモリ使用量がすくないのが利点かなとおもう。 zip のフォーマットは、まあ綺麗じゃないね。とおもった。 まあ、普通に Archive::Zip つかったらいいとおもうよ。

  • cpan-outdatedを使うとメモリ制限のきついレンタルサーバーでもCPANモジュールが楽に更新できる - tokuhirom's blog

    http://search.cpan.org/dist/App-cpanoutdated/ 個人サイトで借りてる貸しサーバーはシェルが使えるんだけどroot権限が無く各種メモリの制限も強い。で、CPANコマンドを使うとlimit制限にひっかかってmoduleindexを伸張するところでOut of memoryエラーが出て落っこちちゃうという状態なんだけど。 今までは仕方がないからtar.gzでモジュールソースをもってきてperl Makefile.PL && make && make installと古典的な手段で入れていた。 しかし cpan-outdated を使うことでcpan使わずに楽に更新できるようになった。 cpan-outdated | xargs cpanmで古いモジュールがすべて一発更新される。 依存モジュールなどすべて排除し、perl5.8.0 or later でう

  • given-when を dispatcher としてつかう場合の注意事項 - tokuhirom's blog

    せっかく given-when 構文をつかえるのだから、以下のように Dispatcher を書けばいいのではないか、という話があったので実際つかってみていたのだが、このような書き方は非常に低速であることがわかった(too slow)。 use 5.010; sub dispatch { my ($class, $c) = @_; given ([$c->request->method, $c->request->path_info]) { when (['GET', '/']) { return call("Root", 'index'); } ... } } 以下のようなベンチマークスクリプトをうごかすと 25倍遅い。 use strict; use warnings; use Benchmark qw/:all/; use 5.010; my $method = "GET"; my

  • こんな標準モジュールあったんですねシリーズ - SelectSaver - tokuhirom's blog

    RAIIパターンを利用し、select $fh したものをスコープぬける時点でもどすというためだけのモジュール。select(2) するためのモジュールではないことに注意。 use Scope::Guard; { my $guard = Scope::Guard->new(sub { select STDOUT }); select $fh; # ... } とおなじことが use SelectSaver; { my $guard = SelectSaver->new($fh); # ... }と書けるというわけ。 今時つかう必要があるケースはないかとおもいます。

  • LL脳な人でもこれぐらいは覚えておくとうれしいgdbのつかいかた。または猫でもわかるgdb講座 - tokuhirom's blog

    LLつかってても「ばすえらーになるー」っていう状況ってたまにあるわけですが、LL しか普段つかわないゆとりは、ここでお手あげになってしまったりすることがままあります。 で、「ばすえらーになるんですが」ってときの最低限これだけはやってみたらどうか、という話。「えー、わたし gdb とかわかんないしー」とかいってる人でもこれぐらいならできるんじゃないかなーっと。 perl t/00_load.tというコマンドで segv するという場合、gdb をつかって % gdb --args perl t/00_load.tとうつ。 すると、以下のようにプロンプトがでるので、"run" とうつ。これでスクリプトがはしりはじめる。 % gdb --args perl t/00_load.t GNU gdb (GDB) 7.0-ubuntu Copyright (C) 2009 Free Software

  • Faster.pm の中身の話 - tokuhirom's blog

    mlehmann の Faster.pm という Perl 用 JIT があるのだが、これの仕組み。 op_entersub をフックするop_entersub にはいるタイミングで発動! op tree を C のコードに変換するcc するdynaloader でよみこむといった具合。基的には Shibuya.pm で発表済のだれでもしっているようなテクニックをつかっている。 これはだいたい 20% ぐらいはやくなるらしい。まあ妥当なかんじか。とはいえテストとおらないしまともにうごかないので、当かどうかはわからない。 結局 run_ops まわりの部分がインラインで最適化されるという点におけるメリットぐらいで、各 opcode の操作はそれぞれの中でやっているわけだから、納得できる数字かとおもう。ただ、実際にそのテストにつかったコードってのがないんで、なんともいえないけど。 実用とい

  • OSS とテスティングと CPAN Testers の話 - tokuhirom's blog

    http://blogs.itmedia.co.jp/hozawa/2010/01/post-b5e0.html URL とあんま関係ないかんじのチラ裏ですけど。 実際、オープンソースのプロダクトって、作者の環境とちがう環境だとうまくうごかないみたいなことはあって、memcached は Solaris だと変な挙動をしてたし、Q4M は i386 固有の問題があったとか、まあそういうのは色々ありますわな。 で、どうするかというと、みんながつかってる構成をつかえばいいじゃーん、という。memcached を linux 2.6.x でつかってるユーザはたくさんいるので、その環境におけるバグはすくないはずだから、linux 2.6 でつかうのが一番安全だろう。とかそういうこと。 OSS はつかうユーザがおおいほど、バグにあたる可能性は低くなるはず。 Solaris でうごかないのは残念だとお

  • Plack::Request と Hash::MultiValue の話 - tokuhirom's blog

    HEAD の Plack::Request では Hash::MultiValues が導入されてる。Hash::MultiValue は多値をストアできるハッシュ風オブジェクト。 use Plack::Request; use Test::More; my $r = Plack::Request->new({ QUERY_STRING => 'bar=aaa&bar=bbb', REQUEST_METHOD => 'GET', }); is_deeply $r->parameters->{bar}, [qw/aaa bbb/]; みたいなコードが昔はとおってたけど、HEAD だととおらない。 なんでかというと、Plack::Request->parameters->{...} が str or arrayref をかえすのがよくないからなおしたというはなし(see http://bulk

  • オススメCPANモジュールその1。 AnyEvent - TokuLog 改めB日記

    というわけで、俺の独断と偏見によるオススメモジュールのコーナーです。 AnyEvent は poll/select/kqueue/epoll(4) などのイベントループを抽象化するライブラリです。似たような目的のものとして Danga::Socket, POE などがありますが、ライブラリ全体のインターフェースの完成度や速度などの点から AnyEvent を僕は一番押しています。 Pure Perl で利用できますし、インターフェースも安定しています。まだバリバリ開発されてますが、backward incompat な変更はされないようです。 作者が mlehmann 氏ということで、ドキュメントは丁寧ですが攻撃的な文章が目立ちますし、バグレポートすると異常な長文がかえってきたりするのでうっとーしかったりしますが、コードの品質はたかいので、気にする必要はないかとおもいます。コードの品質の前

  • それでも私が Perl5 を使いつづける理由または、Why I still use Perl5? 的な。 - tokuhirom's blog

    Fast Enoughもっとはやいといいな、とおもうときはあるけど、他の LL とくらべても速い部類。 Reference Counter であるXS かくときとかにはめんどくさいけど、RAII っぽく書けるとか、開放のタイミングがわかりやすいとか、利点もおおい。 スコープぬけたときに開放されることが保証されてるので、メモリ使用量とかが読みやすいのもいいなーと。

  • Perl Monger は Test::More の subtest が便利すぎるので頭にいれておくべきだと主張したい俺がいる件 - tokuhirom's blog

    Test::More の 0.94以後(2009-09-02)では subtest という機能が導入されており、これが非常に便利なのだが意外と利用されていないようなので、ちょっと宣伝させてもらいますね。 以下は Data::Recursive::Encode のテストケースなのだが、似たようなケースが頻出するわりに、抽象化するのが面倒だし、わけわからなくなること必至であり、かつまた、こんなものを複数のファイルにわけていてはメンテナンスが面倒なことは考えるまでもない。 チミチミと似たような数行のテストをかいたファイルを複数つくるぐらいならば、このように subtest の利用を考えるべきだとおもう。 ただし、これも他のツール同様、なんにでも適用すればいいというものではなく、使い方をまちがえれば、関係ないものがゴッチャリはいった .t ができあがるので注意するべきだろう。 use strict