タグ

ブックマーク / perl-users.jp (33)

  • AnyEvent::RabbitMQ - メッセージキュー…使いこなしてますか? - Articles Advent Calendar 2011 Hacker

    前置き こんにちは。cooldaemon と申します。みなさん、意識は高まっていますか? 私は上々です。今回は拙作の AnyEvent::RabbitMQ というモジュールを紹介いたします。 AnyEvent::RabbitMQ は、AMQP ブローカーと非同期にメッセージを送受信するための AMQP クライアントです。AMQP とは、メッセージを扱うミドルウェアのオープンな標準仕様です。AMQP の正確で詳しい内容は、AMQP の公式サイトや Google をご確認ください。 当の事を言うと、名前は AnyEvent::AMQP::Client でも良かったのですが、私は、AMQP ブローカー実装の一つ RabbitMQ を常用しており、RabbitMQ 以外の AMQP ブローカーを利用する機会も必要もなく、また、接続性を保証する事もしたくなかったので、あえて名前に AMQP を含め

    AnyEvent::RabbitMQ - メッセージキュー…使いこなしてますか? - Articles Advent Calendar 2011 Hacker
    jazzanova
    jazzanova 2011/12/05
  • App::Rolling - 標準入力を世代管理されたファイルに書き出す - Articles Advent Calendar 2011 Hacker

    前置き こんにちは。bayashi です。みなさん、意識は高まっていますか? 僕は上々です。今回は拙作の App::Rolling というモジュールを紹介いたします。 といっても、絶賛開発中のモジュールなので、ここで紹介したインターフェースは変更されるかもしれません。 つまり、人柱、大歓迎で㌃ 何をするモジュール? App::Rolling は、標準入力を世代管理されたファイルに書き出す目的で作っています。例えば、いつ起きるかわからない適当な通信のTCPダンプを取得したい場合、ひとつのファイルにひたすら書き出して捉えるのは、なんとなく気が引けますよね。そんなとき、App::Rolling に同梱される roll コマンドを使えば、好きな間隔で、好きな世代だけローテートさせながら、ファイルに書き出すことができるようになります。 通常、以下のようにダンプとったりしますね。 $ /usr/sbi

    App::Rolling - 標準入力を世代管理されたファイルに書き出す - Articles Advent Calendar 2011 Hacker
  • Amon2 と JavaScript - Articles Advent Calendar 2011 Amon2

    こんにちは!tokuhirom です! Ark アドベントカレンダーをやるということなので、Amon2 アドベントカレンダーもやろうかとおもいます。 しかし、こちらはあんなにしっかりしたものをかく余裕がないので、ぺろーっとかくかんじにしようかとおもいます。 初日からネタがつきたので Amon2 と JavaScript の話をかこうかとおもいます。あまりこのへんかいたことなかったですよね。 現代の Web Application においては、JS をつかわないことはほとんどないといっても過言ではないでしょう。 ある程度の規模のウェブアプリケーションでは、JS が必須となっております。 そこで Amon2 では JS のサポートをしっかりやっていきたいとかんがえているわけです。 まあ、JS のサポートといっても、jQuery のコードを Amon2 にバンドルしておくとかそういった程度のこと

    Amon2 と JavaScript - Articles Advent Calendar 2011 Amon2
  • HTTPサーバフレームワークとしてのPlack活用法と、Plack::Middleware::Pictogram::MobileJpを使ったその事例紹介 - Articles Advent Calendar 2010 Hacker

    HTTPサーバフレームワークとしてのPlack活用法と、Plack::Middleware::Pictogram::MobileJpを使ったその事例紹介 実はお腹回りが入らなくなってスーツを新調したhirose31です。 みなさん、Plack使ってますか? 弊社でもStarletをNginxのバックエンドに置いてプロダクション環境でモリモリ使っているのですが、ちょっとした検証にもPlackは大変重宝しています。 具体的には、キャッシュに関連するレスポンスヘッダ(Last-Modified、Expiresなど)の組み合わせと、条件付きGETやブラウザキャッシュの挙動をブラウザごとに調べたときに使いました。あくまで検証用と割りきって特にファイル分割などはせず、psgiファイルにゴリゴリっとベロっとコードを書いてパパパっと検証用のHTTPサーバを作りました。 このように、限定された目的のHTTP

    HTTPサーバフレームワークとしてのPlack活用法と、Plack::Middleware::Pictogram::MobileJpを使ったその事例紹介 - Articles Advent Calendar 2010 Hacker
  • How to run MovableType with Plack - Articles Advent Calendar 2010 English

    Hello, this is typester. I'm now creating kamakura.pm website with MTOS, but I'm using nginx as web server that doesn't support CGI. But no worry about that. Now we have Plack! This article shows you how to setup MovableType with Plack. Let's get started. Requirements Plack 0.9952+ Starlet or Starman MovableType or MTOS (MTOS-5.04, I confirmed) At first, make sure your Plack version is higher than

    How to run MovableType with Plack - Articles Advent Calendar 2010 English
  • Perl: Function Reference - Manual

    PHP: Function Reference - ManualのPerl版を作ってみようのコーナー 家のリファレンスと同じ構成で、Perlだったらどう書くか?を集めましょうか。それなんでarray_pushとかPerlには無い名前で出てますの予定。 やる事としては、PHPのリファレンスにある各組み込み関数と同等の実装をPerlで行った場合にどうなるのか?というコードを集めたいと思います。「PHPのこの関数と同じ事をPerlでどうやるんだ?」といった需要を満たせるようになればいいなぁ。 なんか量が膨大なので Arrays, Filesystem, Strings あたりからちびちび書いてみましょうか Main Tracks Arrays Filesystem Strings for writers 書き方はこちら

  • Acme::EyeDropsでアナタも記号プログラマー! - JPerl Advent Calendar 2009

    最近、全裸で転職しました。sugyanです。 まだまだPerlのことはよく分からないトーシロですが、大好きなモジュールを紹介したいと思います。 はじめに Perlは非常に柔軟な言語で、TMTOWTD【There's More Than One Way To Do It.】と言われる通り、同じ処理をするプログラムでも色んな書き方ができます。 例えばプログラムを予約語だけで書いてみたり、記号だけで書いてみたりできちゃうわけですね。 そんなスーパーハッカーみたいなことをやってみたい!という願望はPerl好きの変態な皆さんなら誰しも持っているのではないでしょうか!? 今回紹介するモジュールAcme::EyeDropsは、そんな変態プログラミングをお手伝いしてくれるモジュールです。 CPANからインストールできます。最新バージョンは1.55です。 使い方(初級編) まずは何も考えず普通のプログラムを

  • Perl のローレベルエラー処理 (もしくは Errno.pm のススメ) - JPerl Advent Calendar 2009

    Perl のローレベルエラー処理 (もしくは Errno.pm のススメ) - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? 例えば、「ディレクトリが存在しなければ作成」という処理を書くことを考えてみます。 if (! -d $dir) { mkdir $dir or die "failed to create dir:$dir:$!"; } でいいしょうか? いえ、違います。これだと、-d 演算子でディレクトリの不存在を確認した後、mkdir を呼ぶまでの間に他のプロセスがディレクトリを作成してしまう可能性があります。なので、たとえば C ならば、 if (mkdir(dir) != 0 && errno != EEXIST) { fprintf(stderr, "failed to create d

  • Don't use DBIx::Class::UTF8Columns - JPerl Advent Calendar 2009

    Don't use DBIx::Class::UTF8Columns - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? 自分のつくったもジュールを紹介するハッカートラックということで、僕は DBIx::Class に同封されている DBIx::Class::UTF8Columns について書きます。 まず最初に、このモジュールをつかわないでください。 DBIx::Class::UTF8Columns は DBIx::Class のコアモジュールになってから、utf8 を扱う場合はこのモジュールを使うといいよという記述をいろいろなところで目にします。しかしこのモジュールがしていることを理解せずに使用すると予期せぬ不具合に悩まされるかもしれません。今日はこのモジュールを使わない方が良い理由と、その代替案を示

  • Test::Declareで気持ちよくテストする - JPerl Advent Calendar 2009

    みんなテストをどうかいてる? みなさんはテストをどのように書いてますか? Test::Moreですかね? Test::Baseですかね? Test::Classですかね? perlには色々なtest用のフレームワークが存在していますが、皆さんはそれで満足していますか? 皆さんが書いたテストコードはメンテナンスしやすいですか? 私も先ほど例にあげたモジュールを使ってテストを書いてきましたがどれもしっくりきませんでした。 そこで作ったのがTest::Declareです。 Test::Declareには,以下の特徴があります。 テストコードをDSL風に(宣言的に)書く事を重点に置いている それによりテストコード自体の見やすさを向上させることができる 宣言的にテストを書く事により,一体なにを目的としたテストなのかがわかりやすくなる Test::More,Test::Deep,Test::Excep

  • かんたんコンテンツジェネレータ Nim に入門してみた - JPerl Advent Calendar 2009

    今年の jperl advent calendar はnimという typester さんが開発しているツールを使って生成しているのですが、これが便利らしいので入門してみる事にしました。 インストール github にリポジトリがあるので、 git が使える場合は以下のようにして取ってきます。以下、~/tmp を起点に作業する事にしますので、ご自分の環境に合わせて読み替えてください。 % mkdir ~/tmp % cd ~/tmp % git clone git://github.com/typester/nim.git git が使えない場合は http://github.com/typester/nim にアクセスして「download」ボタンを押せば最新版がダウンロードできます。 とってきた後は、 nim のディレクトリに入って % cd ~/tmp/nim % perl Make

  • optsでコマンドラインオプション - JPerl Advent Calendar 2009

    optsでコマンドラインオプション - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? はじめに こんにちは、mikihoshiこと ふしはらかんです。去年はadvent calendarが完成したら参加者全員に寿司をおごることにいつの間にかなっていたのに、私自身はcalendarに執筆者として参加できませんでした。今年は参加できて嬉しいです(今年もおごらないといけないようですが)。 perlでコマンドラインオプションを扱う perlは様々な用途に使われていますが、サーバ上でバッチ処理などを行なうスクリプトに使われるのも、良くある利用法の一つですね。 簡単な処理であればそれこそワンライナーで済みますが、何回も利用して、なおかつ毎回微妙に動作条件が違う、となってくるとオプション情報を引数として渡して実行した

  • Test::Requires でモジュールがないときにテストをスキップする - JPerl Advent Calendar 2009

    前置き みなさんこんにちは、tokuhirom です。今年もはじまりました JPerl Advent Calendar 2009。 こちらは hacker track ということで、僕がつくったモジュールの一つを紹介したいとおもいます。今回ご紹介するモジュールは Test::Requires です。 題 Test::Requires は非常に小粒なツールですが、なかなかいいモジュールなんじゃないかと自分でもおもっています。 モジュールのテストを書くときに、「このモジュールがあったときだけこのテストをはしらせたい」というようなユーズケースはままあります。 「Plack の Server::FCGI のテストは FCGI.pm と FCGI::Client の両方がインストールされていなければスキップしたい」のですが、このような用途にはTest::Requires がぴったんこです(実際に

  • 最速IPアドレスマッチ研修会 - JPerl Advent Calendar 2009

    最速IPアドレスマッチ研修会 - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? もうすぐ2010年になるわけですが、携帯のサイトなどでアクセス元のIPアドレスがキャリアのIPアドレス帯域内にあるかどうかを確認したりすることがあると思います。 例えば、ローカルネットワークのアドレス(192.168.1.0/24)にマッチするかどうか $env->{REMOTE_ADDR} =~ s/^192\.168\.1\.(?:\d+)$/ なんて書くことがあると思います。ここであげたローカルのアドレスのような/24のIPアドレス帯域であれば簡単に正規表現を書くことが可能ですが、/25, /26 /23、/22などのCIDRは正規表現で表すことはなかなか難しいです。 また、携帯キャリアのアドレスであることを確認しよう

  • Perl を crash させる方法 - モダンなPerl入門

    Perl を Crash させたい。そんな欲求を抑えきれないあなたのために、いくつかの方法を教えよう。 いろいろな crash unpack で不正アクセス perl -e 'unpack "p",0xdeadbeef' pack において 'p' は A pointer to a null-terminated string. を意味する。不正なメモリ領域にアクセスすれば死ぬのはあたりまえである。 overload の中で再帰する perl -e 'use overload q{""}=>sub{"$_[0]"};$a=bless{},main;"$a"' overload の stringify させる部分などで無限ループにおちいると、segv する。 このバグは昔から知られており、ticket が切られているが、なおっていない。 @INC の中の coderef で再帰する perl

  • can は coderef を返す - Perlにまつわる小ネタ集 - モダンなPerl入門

    ->can は coderef をかえす クラスにメソッドがはえているかどうかを確認するためには、 Foo->can('bar') という風に、can メソッドをつかいます。can メソッドの return value は、boolean だと おもわれがちですが、実際にはちがいます。->can の return value は Foo->bar メソッドの coderef です。 よって、 Foo->can('bar')->('baz'); は Foo::bar('baz') と同じ意味になります。 応用編 local と can をくみあわせると、スコープの中でだけ豚を飛ばす、などといった芸当が可能になります。 my $pig = Pig->new; { local *Pig::fly = Bird->can('fly'); $pig->fly; # $pig can fly now

  • Perl でモバイルウェブ開発 - モダンなPerl入門

    Perl でのモバイルウェブ開発。CPAN モジュールつかいまくって簡単に開発がすすめられます。 端末情報を制する(HTTP::MobileAttribute) HTTP::MobileAttribute をつかうと、HTTP ヘッダから情報をぬきだし、ケータイ端末の情報をあつかいやすくすることができます。 use HTTP::MobileAttribute plugins => [ qw/ IS / ]; my $ma = HTTP::MobileAttribute->new(); $ma->is_docomo(); 絵文字をふくむ文字列をUTF8にまとめつつ相互変換(Encode::JP::Mobile) Encode::JP::Mobile をつかえば、絵文字の相互変換は容易におこなえます。ユーザがポストした発言などにふくまれる絵文字を、各キャリア用に相互変換することができます。 E

  • XS code template - 動的にXSUBを生成する - エキスパートPerl - Perl-users.jp

    XSコードはふつうPerlコードよりも多機能で高速ですが,書くのが難しいため敷居が高いことも事実です。また,いちいちコンパイルしなければならないのも煩わしい点です。 ところで,Perlにはクロージャという仕組みがあり,動的にコードを生成することができます。したがって,XSでクロージャに等しいことを実現できれば,XSコードの煩わしさを避けつつXSの利益を享受することができます。 なお,この文書はXSによるコード例を解説していますが,XSそのものについては解説しません。 XSについてはperlxstutやperlxs,perlapiを参照してください。 クロージャの分析 まず,Perlのクロージャを分析します。Perlのクロージャは以下のようなものです。 sub make_accessor{ my($name) = @_; return sub{ $_[0]->{$name} }; } my

  • reduce だいすき

    デミグラスソース使った料理べたい cho45 です。Perl といえば某MMOゲームと同時に起動できないプログラムとして有名ですが今回はそれとは関係ない話です。 Ruby 厨の多くが inject 厨である気がします (てきとーです) が、 Perl で List::Util::reduce を使っているところをあんまり見たことがないのでいくつか便利な例を紹介します。 reduce は何かというとリストを1つの値に纏めるものです。例えばリストの要素の合計は use Perl6::Say; use List::Util qw/reduce/; my $list = [1, 2, 3, 4, 5]; say reduce { say "$a,$b"; $a + $b } @$list; 1,2 3,3 6,4 10,5 15 前回のループの返り値が $a に入り、$b には残りの要素

  • バイナリファイルを解析する

    Perlといえばテキスト処理や正規表現が得意で、バイナリを扱うような話についてはあまり聞かない印象があります。Perlが持つ関数pack/unpack等でもバイナリ処理は可能ですが、今回はData::ParseBinaryを使ってバイナリファイルを気軽に解析してみましょう。 基 ファイルからストリームを作る 解析したいファイルをData::ParseBinaryで扱えるストリームに変換します。 use Data::ParseBinary; my $stream = CreateStreamReader(File => $file_handle); 解析したい構造を定義する Struct関数で解析したい構造を定義します。Struct以下には基データ型やコンテナ型、ビット/バイトパディング型、制御構文型等を使用できます。各型に指定したラベルが解析結果として得られるハッシュのキーとなります。