タグ

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

  • Catalyst が Plack に依存した - tokuhirom's blog

    Catalyst 5.90001 がでまして、こちらのバージョンは Plack に依存しております。これは非常に PSGI プロジェクトにおいてはひとつの節目となるリリースといえましょう。HTTP::Engine が最初にリリースされてから3年、みんなよくがんばった!感動した!(3年前(たぶん)のジョーク(10年前のテキストサイト風)) そういうわけですが、私としてはぜんぜん Catalyst の使用はおすすめしませんで、Amon2 つかうのがオススメですね!

    kokogiko
    kokogiko 2011/08/16
  • Amon2::DBI からはじめるデータベースアプリケーション 〜 軽量フレームワークAmon2入門 (5) 〜 - tokuhirom's blog

    はい! というわけで3連休あけですね。 Ruby 会議にいったり、Android なんとかにいったり、リア充生活をおくったりと、各自たのしい3連休をすごされたことかとおもいます。 さて、連休あけの今日は、かるく Amon2::DBI について解説をしてきましょう。 Amon2::DBI は、DBI の薄いラッパーで「素の DBI だとちょっと不便だな」というところにピリリときいてくる山椒のような存在です(ちかくのチンマーハンは山椒がきいてなさすぎるので、もうちょいきいてるといいなとおもいます)。非常にうすいラッパーだし、コードベース自体も非常に簡潔なので、ひととおりよんでからつかうといいかとおもいます。 DBI には子クラスを設定できる機能があって、Amon2ではそれをつかって拡張しています。詳細については DBI の Subclassing the DBI の項目をよんでください。 Am

    kokogiko
    kokogiko 2011/07/19
  • TinyURLをつくってみよう 〜 軽量フレームワークAmon2入門 (4) 〜 - tokuhirom's blog

    インストール今回は Amon2 の最新版が必要なので、すでにインストールしている場合でもあらためてインストールしてください。 環境は OSX, linux を想定していますが、Windowsでもそれほどかわらないかと思います。Windows でやっていてわからなかったら mattn さんにきいてください。 さて、Amon2 のインストールは非常に容易です。Amon2はCPANにリリースされていますから、通常のCPANモジュールと同様にcpanmコマンドでインストールできます。 % curl -L http://cpanmin.us | perl - Amon2 Amon2::DBIで、インストールが完了します。テストに失敗する場合には、コメント欄などできいてください。 TinyURLを作るぐだぐだとかたっていても何もつたわらないと思うので、チュートリアルに入りましょう。 とりあえず、簡単で

    kokogiko
    kokogiko 2011/07/15
  • PSGIとPlackと 〜 軽量フレームワークAmon2入門 (3) 〜 - tokuhirom's blog

    さて、今回は裏をかいて、いったん題のAmon2の話からはずれて、PSGI/Plackのはなしをしましょうかね。 PSGI/Plackは基的にはアプリを書く人は知る必要はあまりないのですが、概念ぐらいは知っておくにこしたことはない、というところです。 さて、数年前のYAPCでわたくしが口を酸っぱくして申し上げたことを皆さんはおぼえているでしょうか。そう、一番大事なのは「PSGIは仕様。Plackは実装」ということなのでした。ここだけ把握していれば十分なので、PSGI/Plack の詳細に興味がない人はブラウザの Back ボタンを連打してください。 PSGIってなんだ?PSGIとは「ウェブアプリケーションとアプリケーションサーバーの間のプロトコルのこと」です。Perlの基的なデータ型であるArrayRef, HashRef やCodeRefを使ってHTTPリクエストとレスポンスを表現し

    kokogiko
    kokogiko 2011/07/14
  • tokuhirom blog

    Amon2のアーキテクチャまずはこちらの図をごらんください。 Amon2 の構造は非常に単純であることをご理解いただけたかとおもいます。基的な構造はこれがすべてなのです。なにしろ、できるだけおぼえることがすくなくなるように意図して設計されておりますから、こういうシンプルな構造になるのもあたりまえといえましょう。 ここで特徴的なところが二点あります。Web Context Object が Context Object を継承しているところ、レスポンスオブジェクトが has-a 関係ではないところです。 Web Context Object が Context Object を継承しているのは、CLI でもなんとなくつかえるようにするためです。この工夫により CLI での開発が異常に楽になっています。このあたりについてはおって解説したいとおもっています。 レスポンスオブジェクトが has-

    tokuhirom blog
    kokogiko
    kokogiko 2011/07/13
  • tokuhirom blog

    Amon2の利点 〜 軽量フレームワークAmon2入門 (1) 〜 というわけで、私が中心となり開発を進めているウェブアプリケーションフレームワークであるところのAmon2に関する連載企画です。続くかどうかはわかりませんけど! 対象読者はウェブアプリケーションの開発の基礎知識はあり、Perlプログラミングを一通り理解していることを前提としています。 Amon2とはAmon2は、ウェブアプリケーションフレームワークです。ウェブアプリケーションフレームワークというのは、ウェブアプリケーションを書くために楽をするためのライブラリと、それに関するツール一式のこととここでは定義しましょう。 そう、Amon2を使えば非常に楽に、高速に、ウェブアプリケーションを開発できてしまうのです。 なぜAmon2なのかしかしウェブアプリケーションフレームワークとひとくちにいっても、Perlだけでも、数え切れないほど

    tokuhirom blog
    kokogiko
    kokogiko 2011/07/12
  • Perl5 works on browser! - tokuhirom's blog

    I hacked jslinux, so I injected Perl5 binary to jslinux!! You can run Perl5 on browser!!!!!!!!!!!!!!!!!!!!!11111 Modify root.bin with CocProxyThis is a note for hacking jslinux. Very easy. https://gist.github.com/978211 use microperl;Perl5 provides micro version of perl. I used it. You should modify the Makefile.micro file for static linking, change the following line. -LIBS = -lm +LIBS = -lm -sta

    kokogiko
    kokogiko 2011/05/19
    すごい。
  • Plack::App::ConditionalGET の Last-Modified の実装について - tokuhirom's blog

    諸事情により自前で HTTP client cache の実装をつくってるんですが、コンテントをファイルにそのまま保存したら、If-Modified-Since つけてんのに 304 にならなくてなんでかなーとおもったら、Plack::App::ConditionalGET は $res->header('Last-Modified') eq $req->header('If-Modified-Since') なときにだけ 304 になるように実装されていたのでした。 この挙動は RFC 的には認められている挙動なのですが、うっかりするとはまりがちなのでメモ。 thanks to id:kazuhooku

    kokogiko
    kokogiko 2011/05/02
  • dotcloud で Amon2 をつかう! - tokuhirom's blog

    Perl5 の PSGI アプリケーションが死ぬほど簡単につかえる dotcloud の beta 版がリリースされ、一部の Perl monger に invitation がばらまかれているとともに、id:miyagawa さんがdotcloud に join したというニュースもあり、ゴールデンウィークまっただなかの日Perl Mongers のあいだでは空前のコンフィブームとなっています。 というわけで、DotCloud で hello world をやる方法。 sudo easy_install dotcloud dotcloud create tokuhirom dotcloud deploy --type perl tokuhirom.hello mkdir hello cd hello echo "sub {[ 200, [ 'Content-Type' => 'te

    kokogiko
    kokogiko 2011/05/01
  • Perl5 用の Rake っぽいのできたよー - tokuhirom's blog

    http://frepan.org/~tokuhirom/Daiku-0.01/ Rake みたいなの、Perl にも欲しいね、って5年ぐらい前からおもってたけどいいのができたって噂をきかないので自分でかいた。 #! perl use Daiku; use autodie ':all'; task 'all' => 'foo'; file 'foo' => 'foo.o' => sub { system "gcc -c foo foo.o"; }; rule '.o' => '.c' => sub { system "gcc -c foo.o foo.c"; }; build shift @ARGV || 'all'; こういうかんじでつかえる。簡単でしょ。 以下設計のメモ。 基的には Rake とインターフェイスをあわせめでつくってる。巨人の肩に云々。 DSL を DSL としてゴリゴ

    kokogiko
    kokogiko 2011/04/24
  • 都道府県別環境放射能水準調査結果をscrapingするの法 または PDF をスクレイピングするの法 - tokuhirom's blog

    http://www.mext.go.jp/a_menu/saigaijohou/syousai/1303723.htm このあたりからデータを取得できるわけだが、なぜか PDF なので、うんざりする。 こんなもんどうみても excel かなにかでつくってるんだから生データを提供しろといいたい。 まあ文句をいっていてもしょうがないので、こういう PDFスクレイピングする方法について解説する。 pdftotext などのコマンドをつかうのがオススメ。今だと、poppler というライブラリが日語もあつかえてすばらしすぎるので、これをつかうとよい。これは Perl/Python/Ruby のバインディングがあるので、それをつかってもよいがこういう場合、ライブラリなどでがんばって PDF を解析するのはわりと時間の無駄となる場合がおおい。 poppler は homebrew で一発インス

    kokogiko
    kokogiko 2011/03/18
  • softbank の絵文字情報ページから sjis 版の絵文字コードの情報が消失 - tokuhirom's blog

    softbankの絵文字はエスケープシーケンスをふくんでいて、あつかいづらいことこの上なかったのですが、ついにページから情報がきえさりました。さようならさようなら。

    kokogiko
    kokogiko 2011/03/10
  • Testing JavaScript with node.js - tokuhirom's blog

    http://d.hatena.ne.jp/gfx/20110206/1296979666 JavaScript のライブラリやアプリケーションなどを JE でテストしたりするのは、筋が悪いとかんじます。創りかけのものを創りかけのものでテストするのは、時間の無駄になりやすいからです。 最近では v8(の一ラッパーとしての node.js)やSpiderMonkey などが用意に手にはいるので、これを利用すればよろしい。CommonJS などというものもでてきており、最近ではサーバーサイドでのテストもかんたんになりつつあるだろうし ということで、mustache.js をテストするスクリプトを以下にあげる。これは node.js でテストする場合です。JavaScript で簡易的な TAP Producer を実装してみたけども、これよりちゃんとしたものを誰か node-test-simp

    kokogiko
    kokogiko 2011/02/08
  • Perl のモジュールローダー選定委員会 - tokuhirom's blog

    UNIVERSAL::require$module->require() or die $@ ってかけるのが cool という話ではあるのだが、UNIVERSAL をつかうのに抵抗があるかもしれない。 そして、Module::Load にたいする優位性はとくにないので、最近はあまりつかってない。 Class::Load上記2つにくらべると、機能がおおい。これは Moose から派生したパッケージで、Moose の is_class_loaded 相当の機能もそなえている。 Moose 由来ということで、%INC の中にはいっていなくても、package がすでにつかわれていれば、ファイルをよみにいかないという点がすぐれている。具体的には package Foo; sub bar { } package main; use Class::Load qw/load_class/; load_c

    kokogiko
    kokogiko 2011/02/02
  • Active Record パターンで single table inheritance できないというのは誤り - tokuhirom's blog

    http://blog.eorzea.asia/2010/12/post_94.html Active Record パターンでは Single Table Inheritance パターンがつかえないというのは誤りです。件の記事にかいてある Active Record だからー、ってかいてあるのは単に DBIC の問題か DBIC のつかいかたの問題じゃないかとおもいます。 実際に僕は DBIC で Single Table Inheritance つかってましたし。なので、それを紹介しようとおもったものの、すっかりわすれてしまっている上に DBIC のつかいかたもおもいだせないので、Skinny で example code をおこしました。 以下のコードではつかって若干トリッキーなことをやってる風にみえますが、質的にはごく普通のことをしています。 #!/usr/bin/perl u

    kokogiko
    kokogiko 2010/12/10
  • Perl で拡張可能なモジュールをかくときに s/^\+// ? $_ : __PACKAGE__ . '::Plugin::$_' とした方がいい理由 - tokuhirom's blog

    Data::Validator のコードの中にこんなのがあった。 sub with { my($self, @roles) = @_; foreach my $role(@roles) { next if ref $role; $role = Mouse::Util::load_first_existing_class( __PACKAGE__ . '::Role::' . $role, $role, ); } Mouse::Util::apply_all_roles($self, @roles); return $self; } この場合、やはり s/^\+// ? $_ : __PACKAGE__ . '::Plugin::$_' のイディオムをつかった方が問題がすくないようにおもう。たとえば、Data::Validator::Role::JSON っていう拡張があったとしよう(実際に

    kokogiko
    kokogiko 2010/12/10
  • Minimalistic Approach for O/R Mappers - tokuhirom's blog

    kokogiko
    kokogiko 2010/12/08
  • DBD::Sponge - tokuhirom's blog

    my $sponge = DBI−>connect("dbi:Sponge:","","",{ RaiseError => 1 }); my $sth = $sponge−>prepare($statement, { rows => $data, NAME => $names, %attr } );DBD::Sponge は、Perl のデータ構造から $sth をつくるクラスで、これは DBI に標準添付されている。 たまに無駄にラッパーかいてる人いるけど、つかえるケースではこれをつかえばいいとおもう。

    kokogiko
    kokogiko 2010/12/07
  • How do you get the return value of "if" statement in Perl5? - tokuhirom's blog

    http://d.hatena.ne.jp/rightgo09/20101114/p1 just fucking do { } it. use 5.10.1; my $year = 2010; my $month = 11; my $nendo = do { if ( $month >= 4 ) { $year; } elsif ( $month <= 3 ) { $year - 1; } else { die; } }; say $nendo;

    kokogiko
    kokogiko 2010/11/15
  • 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);

    kokogiko
    kokogiko 2010/11/15