タグ

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

  • Perl5 で半角カタカナにマッチする正規表現を簡単にかく方法について - tokuhirom's blog

    にしても、こちらのサイトでも言われていますが、なぜ半角カナ専用のUnicodeブロックがないのかと小一時間(ry http://blog.livedoor.jp/sasata299/archives/51194035.html http://d.hatena.ne.jp/pasela/20081003/ll_unicode ということで、 sub InHankakuKatakana { "FF65\tFF9F" }という一行をはっつけると、つかえるようになりますね。 #!/usr/bin/perl use strict; use warnings; use utf8; use Test::More; sub InHankakuKatakana { "FF65\tFF9F" } ok("\x{FF65}" =~ qr/\p{InHankakuKatakana}/); ok("abc" !~

    kokogiko
    kokogiko 2010/11/11
  • DBIx::Skinny's trigger strategy - tokuhirom's blog

    kokogiko
    kokogiko 2010/11/05
  • HTTP/1.1 における Keep-Alive と HEAD の関係性について - tokuhirom's blog

    HTTP/1.1 においては、HEAD リクエストの場合には Message Body を送信してはならないということにはなっているのですが、現実的には、Message Body をおくりかえしてくるアホなサーバーがおおい。たとえば Plack では Plack::Middleware::Head を明示的に使用していない場合、普通にやると HEAD でも message body をかえしてしまうだろう。 というわけで、HEAD で Message Body をかえしてくれるサーバーがおおいのだが、Message Body をかえされてしまうと、Keep-Alive しているときにこまる。次のリクエストとまじる。 この問題にたいするよい解決策はないので、HEAD リクエストを送信した後には connection を close してしまうのが、現実的な解決策だとおもった。 現実的には、現

    kokogiko
    kokogiko 2010/10/26
  • PHP::Interperter - tokuhirom's blog

    PHP5をPerl5からよべるということでためそうとしたが、うまくうごかなかった。 とりあえず aptitude install php5-cli php5-dev したのだが、コンパイルがとおらない。 /php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -g -O2 -DVERSION=\"1.0.2\" -DXS_VERSION=\"1.0.2\" -fPIC "-I/usr/local/app/perl-5.12.1/lib/5.12.1/x86_64-linux/CORE" PHP.c In file included from /usr/include/php5/main/php.h:34, from phpinterp.h:11, from PH

    kokogiko
    kokogiko 2010/09/30
  • 2010年にXMLRPCをPerl5でつかう方法について考えた(XMLRPC on Plack) - tokuhirom's blog

    以下のように RPC::XML をつかうとよい。 Following code is XMLRPC server snippet on Plack. This code uses RPC::XML. use strict; use warnings; use Plack::Request; use Plack::Builder; use RPC::XML; use RPC::XML::ParserFactory 'XML::LibXML'; sub res { RPC::XML::response->new(@_) } my %dispatch_table = ( 'sum' => sub { my $args = shift->value; return res(0 + $args->{a} + $args->{b}); }, 'echo' => sub { my $args = shi

    kokogiko
    kokogiko 2010/09/28
  • HTML::Tree 4.0 での互換性のない変更だとおもったらバグだたのでパッチをおくったメモ - tokuhirom's blog

    【追記 2010-09-27】 HTML::Tree にバグをみつけたので、パッチをおくりました、それがリリースされるまでの間は HTML::Tree 4.0 はつかわない方がいいです。 全然まとまった内容ではないのですが、現状を記す。 4.0 Mon Sep 20 2010 [THINGS THAT MAY BREAK YOUR CODE OR TESTS] * Changes to entity encoding from ord values to XML entities may break tests expecting � style encoding. * Attribute names are now validated in as_XML and invalid names will cause an error. http://cpansearch.perl.o

    HTML::Tree 4.0 での互換性のない変更だとおもったらバグだたのでパッチをおくったメモ - tokuhirom's blog
    kokogiko
    kokogiko 2010/09/27
  • アバターのレンダリングとかにつかうライブラリについてなど - TokuLog 改メ tokuhirom’s blog

    http://github.com/tokuhirom/avatar-benchmark Perl5 において有名な画像処理ライブラリといえば GraphicsMaick, ImageMagick, Imager, Imlib2, GD あたりだとおもうのだが、はたしてアバターのレンダリングなどにつかう場合にはどれが適しているのかについてしらべてみた。 コードはこんなかんじでしょう。 package AB; use strict; use warnings; use autodie; use Imager; use GD; use Image::Imlib2; use Graphics::Magick; sub render_imager { my $img = Imager->new(); my $base = $img->read(file => 'img/base.gif') or

    kokogiko
    kokogiko 2010/09/13
  • Perl5のキモいコードと一般的な Perl Mongers の関わり方について - tokuhirom's blog

    書いた人がやりすぎ+あんまりうまくない、が正解なんじやないかなあ RT @toritori0318: 並べて見るとやっぱperlキモイ / メソッドのフック どう書く?org http://htn.to/aGv4tN http://twitter.com/lestrrat/status/22074833828というのをみたが、たとえば Data::Util をつかえば、こういうかんじで書ける。Data::Util はエンドユーザーがつかわない低レベルライブラリなのでちょっとつかいづらいが、元のコードよりはだいぶマシといえるだろう。 use 5.10.1; use strict; use Data::Util; sub add_hook { my ($class, $method, $type, $code) = @_; no strict 'refs'; *{"${class}::${me

    kokogiko
    kokogiko 2010/08/26
  • HTTP クライアントのテストを Plack でやる方法について - tokuhirom's blog

    勝手に添削なかんじで。 http://d.hatena.ne.jp/Craftworks/20100819/1282237375 をみていておもったのですが、変にがんばるよりも、Test::TCP を直接つかってかいちゃった方が楽なのでは。 use strict; use warnings; use Test::More; use Test::TCP; use Plack::Loader; use LWP::Simple qw/get/; my $app = sub { my $env = shift; my $content = 'something'; # something return [ 200, [ 'Content-Type' => 'text/plain' ], [ $content ] ]; }; my $client = sub { my $base = shift;

    kokogiko
    kokogiko 2010/08/23
  • 乱数と Perl5 にかんする蘊蓄の話 - tokuhirom's blog

    Perlの乱数についてIRCで盛り上がったのでまとめておく。 結論からいうと、srand()はPerl5組み込みのものでよい。乱数の生成はMath::Random::MTがよいとおもう。 Perlのrand()の実装はConfigure時に選べるようだが*1、ふつうはdrand48()がつかわれる。これは下位ビットがまったくランダムでないことで知られるrand(3)よりはましだが、しょせん線形合同法なのでセッションIDなどを作るのには安全ではない。安全な乱数を作るためにtime()やSHA1を混ぜ込んだりするほうほうもよくつかわれるが、そのくらいならはじめからM::R::MTを使ったほうがいいとおもう。 なお、srand()はあれば/dev/urandomを読むので、自前でsrand(time)などとするのはよくない。また、最初にrand()を呼ぶときに自動的に呼ばれるので、ふつうは明示的

    kokogiko
    kokogiko 2010/08/19
  • perl5i について - tokuhirom's blog

    最近、ことあるごとに perl5i がヨイヨーといっている。 perl5i は、perl5 + i ということなのであって、perl6 にたいする洒落なのであって、かつこの i とはいうまでもなく sqrt(-1) のことである。 perl5 は、CPAN にあがっているモジュール郡を利用することにより非常に協力な言語となっているが、一方で初心者はモジュールの選定などがまずもってむずかしいという難点があり、「電池はいってます」という正直意味がわかりづらくて日語の標語としてはいかがなものかとおもうような標語をかかげる言語にくらべて初心者がとっつきづらいという問題がある。 そこで、perl5i では、perl5i のメンテナがえらんだモジュールが自動的にロードされるような仕組みを提供しているため、非常にとっつきやすくなっている。 use perl5i::2; とかくだけで、かなりいろいろなモ

    kokogiko
    kokogiko 2010/08/16
  • 適当なscriptでは use autodie; する - tokuhirom's blog

    chdirのときもエラー処理は必須ですな〜自分で使うスクリプトだからええ加減な書き方してた〜反省 #ubuntu #perl http://twitter.com/mukumaru/status/20694618336 perl5.10.1 以後では autodie.pm が標準添付されているので、それを利用するとよい。 % perl -E 'use autodie; chdir "/foo"' Can't chdir('/foo'): No such file or directory at -e line 1こんなかんじ。use strict; use warnings; につづけて use autodie; と書くだけ。 使い捨てスクリプトでは use autodie; しておくと、いちいち組み込み関数のエラー処理かかなくていいので便利。

    kokogiko
    kokogiko 2010/08/10
  • 119行でPlack対応のWeb Application Framework を書いてみる - tokuhirom's blog

    拡張性等を考慮しなければ、以下のように簡単にかくことができる。 View を XSlate きめうち。ルータは given-when で、設定ファイルは .pl という構成。だいたいのウェブアプリケーションは、これぐらいの機能の WAF で十分。ルーター部分は Router::Simple とかにさしかえた方がよいかもだけど。 5年前に Python で似たような記事をみたのだが、今はみんなのがんばりによって Perl でもおなじことができるようになった。 use strict; use warnings; use 5.10.1; package MyWAF; use parent qw/Class::Data::Inheritable/; use Path::Class; use Text::Xslate qw/mark_raw/; use Encode; use Time::Piece

    kokogiko
    kokogiko 2010/06/28
  • Perl 5.13.2 がもたらした package NAMESPACE BLOCK 構文があたえるもの - tokuhirom's blog

    開発版の Perl 5.13.2 がリリースされたが、5.13.2 の目玉はなんといっても package NAMESPACE BLOCK 構文だろう。 use 5.13.2; use warnings; package Point { use Moose; has 'x' => (is => 'rw', isa => 'Int'); has 'y' => (is => 'rw', isa => 'Int'); __PACKAGE__->meta->make_immutable; no Moose; }; のように、パッケージを宣言することができるようになった。 この構文は非常に大きい変化をもたらす。 1 ファイルに複数のクラスを書くことが苦でなくなる。package NAME BOCK 構文を利用する場合、BLOCK の中はインデントすることになるため、複数パッケージを1つのファイルにか

    kokogiko
    kokogiko 2010/06/24
  • Re: LLごとの標準的なHTTPクライアントで100リクエスト投げた時のベンチマーク - tokuhirom's blog

    http://subtech.g.hatena.ne.jp/mala/20100531/1275322139 mala のベンチマークにおいて、気になる点がある。それは、「HTTP プロトコルにたいするベタなライブラリ」と「HTTP プロトコルをつかうための高レベルなライブラリ」のベンチマークがまじっているという点。 前者は ruby/Net::HTTPpython/httplibperl/Net::HTTPにあたるものであり 後者は ruby/open-uripython/urllib(urllib2)perl/LWP::Simpleにあたるものである。 で、ruby/Net::HTTP と perl/LWP::Simple をならべて、LWP が遅いといわれてもなんだろうから、かけている部分のベンチマークスクリプトをおいておく。 しかし、それにしても curl はやいね。 Python

    kokogiko
    kokogiko 2010/06/01
  • Why I use DBIx::Skinny instead of DBIx::Class. - tokuhirom's blog

    重くなさそうなメソッドが実は重い"->pager" が count 文を勝手に発行しているというのが一番有名な例。 relation はってる場合とかは得にそうなんだけど、内部の実装を意識しないと、つかいものにならないというのはしんどい。 DBICのイテレータをTTにわたしたりとかしたいわけだけど、そういうことすると、デザイナーが勝手に relation の先をよんでたりして、SQL の発行回数がひどいことになったりとかする。 (DBIC のイテレータとかわたすなよ、という話はあるけど) 個人的には、「SQLを発行するメソッドは、SQLを発行しそうな名前であるべき」だとおもう。

    kokogiko
    kokogiko 2010/03/17
  • 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

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

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

    kokogiko
    kokogiko 2010/01/18
  • Amon と Helper と Catalyst と Model の話 - tokuhirom's blog

    Akismet の perl モジュールをさがしてる途中で、Catayst::Model::Akismet ってのをみつけた。昔の Cat はこんなものをいちいち CPAN にあげてたのかー、とおもうとちょっとおもしろい。 このために Catalyst::Helper::Akismet とかわざわざ用意するとか、ありえん。そんなに頻繁につかうわけでもなし、SYNOPSIS をコピペすりゃー、いいレベルだ。 Helper つかってがんばる云々はほぼ毎度つかう ORM/Template Engine ぐらいで十分で、それ以外のものは、ときどきしかつかわないんだから、helper で自動生成するメリットが薄い。メリットがうすいから、まともにメンテされない。まともにメンテされないぐらいなら最初からない方がいいし、そもそもこんなもの真面目にメンテするのは時間の無駄というものだ。 というわけで、最近の

    kokogiko
    kokogiko 2010/01/14
  • HTML::Shakan::Model::DBIxSkinny かいた - tokuhirom's blog

    チャチャっとウェブアプリケーション書くには DBIx::Skinny が便利だなとおもって、プライベートでは最近は DBIx::Skinny をメインでつかってる。DBIC とおなじ感覚で書けて、DBIC とちがってコードが可読であって、DBIC とちがっておしつけがましくないのが利点かとおもいます。 個人的には、DBIC の一番嫌な点はテーブル名に me というエイリアスをつけるところで、「イヤミか!」といいたくなります。 閑話休題。 HTML::Shakan という、form validation/form generator があるのですが、これに DBIx::Skinny との連携機能をいれました。これにより、Class::DBI::FromForm のようなかんじで、フォームバリデーションがすんだパラメータから DB に INSERT/UPDATE 文をぶっこめます。 便利です。

    kokogiko
    kokogiko 2010/01/13