タグ

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

  • first impression of Moo.pm - tokuhirom's blog

    construct from reusable modules. THIS IS GOOD.no built-in TypeConstraintsno Role compositionuse warnings ':Fatal'; ...no MOP;といったところ。 Mouse にくらべてどうか、という点については mst が指摘しているとおり less XSmaintainablebuilt on CPAN modules.といった点ではメリットがあるかな、とおもう。 一方で Mouse についていえば more compatibility with moosefastmore features.といった点においてはメリットがある。 さて、はて。

  • apply some operation to complex data structure in perl - tokuhirom's blog

    use Data::Rmap! use Data::Rmap ':all'; use HTML::Entities qw/encode_entities_numeric/; my $foo = { text => '<div></div>', }; rmap_to { $_ = encode_entities_numeric($_) } VALUE, $foo; use Data::Dumper; print Dumper($foo);

    kits
    kits 2010/11/18
    http://d.hatena.ne.jp/punitan/20101114/1289727620 と同等なことはData::Rmapで可能。
  • 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 &#00; style encoding. * Attribute names are now validated in as_XML and invalid names will cause an error. http://cpansearch.perl.o

    kits
    kits 2010/09/28
    XMLでないHTMLとして見た場合、タグ内の / がBoolean属性(option要素のselectedのような)として扱われる(/="/"という属性になる)のは妥当のように思う。HTML::TreeがXHTMLをサポートするのかどうか。
  • アバターのレンダリングとかにつかうライブラリについてなど - 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

    kits
    kits 2010/09/13
    Image::Imlib2
  • Text::Xslate がオススメなワケ - tokuhirom's blog

    速いエラーメッセージがとても親切型ベースの自動エスケープ複数シンタックス対応TTerse という TT2 like なシンタックスをサポートしているので TT からの移行がわりと容易Text::Xslate->new(module => ['File::Spec::Function']) のように書くだけで簡単にモジュールの関数をとりこむことができるText::Xslate::Bridge::TT2Like をつかうことで TT の VMethods や Filters をつかえるPure Perl でもうごくというような特徴があるので、よほどの理由がないかぎり今後は Xslate をつかうのが正解なのではないかとおもっている。 実装の小ささや、こまわりのきく点などで Text::MicroTemplate は生き残っていくとおもうが、基的には Perl5 のテンプレートエンジンは Xs

    kits
    kits 2010/08/23
  • Plack-0.9945 で任意の CGI スクリプトを実行可能になっていた件 - tokuhirom's blog

    http://search.cpan.org/~miyagawa/Plack-0.9945/ これまで Plack には Plack::App::CGIBin というモジュールが付属していたが、これは Perl script の実行しかサポートしていなかった。 しかし、Plack 0.9945 をつかと、任意の CGI script を実行可能となっている。 plackup -MPlack::App::CGIBin -e 'Plack::App::CGIBin->new(root => "./")->to_app' -p 9099 などとすると、 #!/usr/bin/python # -*- coding: utf-8 -*- print "Content-Type: text/plain" print print "hello world." のような、普通の cgi スクリプトを実行

  • 乱数と 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()を呼ぶときに自動的に呼ばれるので、ふつうは明示的

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

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

    kits
    kits 2010/08/16
    却って初心者がとっつきづらいような気もする。
  • perl5 における strftime の速度にかんするベンチ - tokuhirom's blog

    use strict; use warnings; use Benchmark qw/cmpthese/; use POSIX (); use Time::Piece; cmpthese( -1 => { 'tp' => sub { Time::Piece->new->strftime('[%Y-%m-%d %T]') }, 'posix' => sub { POSIX::strftime('[%Y-%m-%d %T]', localtime()); }, } ); Rate tp posix tp 29805/s -- -15% posix 35223/s 18% --結論:どっちでもあんまかわらん。

    kits
    kits 2010/08/14
    $tp = Time::Piece->new を使い回すと速くなる。(コメントより)
  • MobaSiF::Template と Text::Xslate の比較 - tokuhirom's blog

    40 :デフォルトの名無しさん:2010/08/01(日) 21:43:47 xslateというテンプレートエンジンが速いそうですが、mobasifと比べてどっちが速いでしょうか。 ベンチマーク探したけど、両者を比較しているのは見つかりませんでした。 というか xslate のほうは後発なんだから、高速だと主張するならTTなんかじゃなくて mobasifと比べてほしいよね。 http://pc12.2ch.net/test/read.cgi/tech/1280541200/40 http://xslate.org/ にはわざと MobaSiF::Template との比較はのせていません。日でしかしられておらず、しかも日でも一社以外ではほとんどつかわれていないとおもわれるテンプレートエンジンとの比較を掲載しても海外の人がひいてしまうからです(xslate.org は海外へのプロモーショ

    kits
    kits 2010/08/12
  • 適当な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; しておくと、いちいち組み込み関数のエラー処理かかなくていいので便利。

    kits
    kits 2010/08/10
    組み込み関数のエラー処理を省略できる。
  • Perl5 のバージョンごとの使い分け - tokuhirom's blog

    5.6以前現状、CPAN モジュールにおいて5.6系に対するサポートは、toolchain 系をのぞいてほとんどおこなわれていません。 そもそも 5.6 系は誰もメンテしていないので、5.6 をコンパイルするのがまずむずかしいですw で、レガシーシステムにおいてはまだのこるとおもいますが、新規にえらぶ必要はありませんね。あたりまえながら。 5.8系5.8系は非常に安定しておりまして、一番安定しているのはたしかです。バグなどが含まれている可能性がいちばん低いかとおもいます。 5.8系を新規のシステムで利用する場合には 5.8.9 をつかうのがよろしいでしょう。 5.10系5.10.0 にはわりと致命的なメモリリークやSEGVをひきおこすバグがありますので、つかわない方がいいです。 5.10系をつかう場合にはかならず 5.10.1 以後をご利用ください。 5.10系以後を現在新規に採用するメリ

    kits
    kits 2010/07/21
  • Perl5 における HTTP Client library の選び方 - tokuhirom's blog

    HTTP::Lite依存すくないのがうり。速度重視じゃないし、機能もすくない。インターフェイスも、LWP にくらべるとナマナマしいかんじ。 CPAN module をいれたくなくてしょうがない場合にのみつかうべき。LWP の存在が保証されていないような環境に配布したい場合に bundle して配布するとかが主用途。 (実際に HTTP::Lite は cpanminus に bundle されている) LWPデファクトスタンダード。連鯖でもたいがいはインストール済だし、とりあえず LWP つかっておくべき。 どれつかうか迷ってる人はとりあえず LWP つかっておけばよい。 WWW::Curl速度がクリティカルな場合には WWW::Curl つかうとよいんだけど、相当数のリクエストをなげるよほど大規模なクローラでもないかぎりは、LWP で十分。 どうしてもどうにもならないときにだけつかうよう

    kits
    kits 2010/07/21
  • Perl5 によるメール送信 - 実践的な Email::Sender の利用方法 - tokuhirom's blog

    Perl5 では、E-mail の送信をするためのモジュールが多数 CPAN にアップロードされているが、現在もっともまじめにメンテされていて質がよいのは Email::Sender らしい。 Email::Sender は登場当初はドキュメントもなさすぎるしつかいものにならなかったが、現在ではだいぶマシになっている。Moose 依存が気にならないケースでは、実用としてつかっても問題ないとおもう。 iso-2022-jp の日語のメールを送るには、以下のようにすればよい。 use 5.12.1; use utf8; use Email::Sender::Simple qw(sendmail); use Email::Simple; use Email::Simple::Creator; use Data::Recursive::Encode; use Encode; # e-mail o

    kits
    kits 2010/07/20
  • モダンな Perl の開発環境の構築方法 - tokuhirom's blog

    一般的な OSX 環境および Linux 環境における、モダンな Perl 開発環境の構築方法についてまとめてみたよ。 perlbrew のインストールperlbrew をつかうことにより、簡単に最新版の Perl5 を利用することができるようになる。 perlbrew をいれる。% curl -L http://xrl.us/perlbrew | perl - install % ~/perl5/perlbrew/bin/perlbrew init ~/.bashrc (または ~/.zshrc)に source ~/perl5/perlbrew/etc/bashrc を追記。あたらしいシェルをたちあげる。最新版の perl をインストールする。% perlbrew install perl-5.12.1 % perlbrew switch perl-5.12.1 ここまできたら、she

    kits
    kits 2010/07/16
    「あたらしいシェルをたちあげる」「shell いったんぬけてはいりなおす」は source ~/.bashrc では駄目なのかな。/ id:tokuhirom 了解です。情報有難うございます。>$PATHのキャッシュ対策
  • Plack::App::WrapCGI にちゃんとした CGI 実行機能をつける話 - tokuhirom's blog

    P::App::WrapCGI は、perl でかいた CGI しか実行できないので、ちゃんと exec してうごく一般的な CGI がうごくようにしてみる施策。 環境変数をセットアップして、双方向パイプで IPC しているだけです。 diff --git a/lib/Plack/App/WrapCGI.pm b/lib/Plack/App/WrapCGI.pm index 7f0a7a7..0ce15d6 100644 --- a/lib/Plack/App/WrapCGI.pm +++ b/lib/Plack/App/WrapCGI.pm @@ -2,7 +2,7 @@ package Plack::App::WrapCGI; use strict; use warnings; use parent qw(Plack::Component); -use Plack::Util::Acc

    kits
    kits 2010/07/01
    Perlに限らないCGI実行ファイルへの対応。
  • 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つのファイルにか

  • 絵文字を [emoji:1] みたいにかいとくとそれなりに変換してくれるライブラリ - tokuhirom's blog

    http://github.com/tokuhirom/p5-html-pictogram-mobilejp みたいな形式で絵文字を記述しておくと、それを各キャリヤにあわせた表記に変更してくれるライブラリ。 数字部分は docomo の絵文字番号です。 拡張絵文字を利用したい場合は、拡張絵文字番号 + 1000 で記述してください。たとえば拡1は [emoji:1001] と記述してください。 サポート対象は 3G の3キャリです。 絵文字の変換マップは Text_Pictogram_Mobile のものを拝借してます。 なぜこうなったか仕事で必要になったのでつくったので、つくったやつ。「こういう仕様で!」っていう決めうち部分がおおい。 これがいい仕様だとはとくにおもってないけど、絵文字うめる人がこれになれているという話だったので、こういう仕様にした。 CPAN にアップする予定はとくにな

    kits
    kits 2010/06/07
    HTML::Pictogram::MobileJp
  • HTML::TreeBuilder のメソッドを覚えるには人生はみじかすぎる件について - tokuhirom's blog

    HTML::TreeBuilder の ->lookup だの ->find だのを覚えるのは、学習の効率がよくない。つぶしがきかないので、もっと一般的な CSS Selector や XPath などを覚えて、それをつかった方がお得であるといえる。 HTML::TreeBuilder で XPath を利用するには、HTML::TreeBuilder::XPath をインストールすればよく、これは pure perl なので容易に利用できる。 my $tree = HTML::TreeBuilder::XPath->new; $tree->parse($content); my @items = $tree->findnodes(q{//*[@id='topicsfb']//li}); print $_->as_text."\n" for @items; とすればよい。 XPath はむ

    kits
    kits 2010/06/07
    HTML::TreeBuilder::XPath はpure perlでXPathを利用可。
  • Template-Toolkit のよくない点について - tokuhirom's blog

    TT はすばらしいテンプレートエンジンだが、いくつかの点ですぐれていない点がある。その中でもっとも気にくわない2つは以下のもの。 Speedtoo many plugins on cpanとくに速度の遅さは致命的で、キャッシュや、一部の XS 化などによる高速化がはかられてはいるものの、「ボトルネック」になりうるほど遅い。 プラグイン機構は便利だが、一方で、CPAN モジュールへのラッパーモジュールが大量に生成されている。 この2つの欠点は、Text-Xslate の TTerse syntax で解消されているので、こういった点が気にくわない人は、ためしてみるといいのではないかとおもう。 【追記】 なぜ、TT でプラグインが異常に発達するのかというと、関数を export するのがめんどくさいから。で、その欠点は Xslate では Text::Xslate->new(module =>

    kits
    kits 2010/06/07
    Text::Xslate の紹介