タグ

Perlに関するmitsutoのブックマーク (203)

  • 初めてのCatalyst入門(2) Catalystアプリはどのように作るのか?

    はじめに Ruby on Railsの登場から、Webアプリケーションを構築するためのフレームワークはさまざまなLL(Lightweight Language)系言語を中心に生み出されてきました。 連載ではPerlで実装されたWebアプリケーションフレームワークであるCatalyst(カタリスト)について、基的な仕組みや実装方法などをサンプルを交えて紹介していきます。 第1回目では、Catalystのインストール、簡単なアプリケーションを作成するまでの方法を説明しました。第2回目となる今回は、Catalystでの処理の流れや主要なコンポーネントについて、サンプルを交えつつ説明していきます。 対象読者 Perlで簡単なスクリプトを作成したことのある方 Webアプリケーションの基的な仕組み(HTTPリクエスト、レスポンスなど)についての知識のある方 これまでの連載 初めてのCatalys

    初めてのCatalyst入門(2) Catalystアプリはどのように作るのか?
  • recursive blocking wait detected への対処 - Pixel Pedals of Tomakomai

    連休の非同期祭も(疲れたので)これでラストです。 AnyEvent(5.2)でこんなコード書くと、「recursive blocking wait detected」が出ます。 use strict; use warnings; use AnyEvent; sub main { foreach my $i (1 .. 5) { my $cv = AE::cv; my $t = AE::timer $i, 0, sub { $cv->send($i); }; print $cv->recv, "\n"; } } my $t = AE::timer 0, 0, \&main; AE::cv->recv; # 結果 # EV: error in callback (ignoring): AnyEvent::CondVar: recursive blocking wait detected at

    recursive blocking wait detected への対処 - Pixel Pedals of Tomakomai
  • AnyEventとCoro::AnyEventで諸注意みたいなの - Pixel Pedals of Tomakomai

    またまた非同期ブームに乗ってお勉強継続中です。 AnyEventとCoro::AnyEventの違い AnyEventとCoro::AnyEventでは、メインループを回すスレッドが違います。 use strict; use warnings; use AnyEvent; use Coro; # use Coro::AnyEvent; my $done = AE::cv; my $t = AE::timer 0, 0, sub { print $Coro::current->{desc}, "\n"; $done->send; }; $done->recv; このまま動かすと出力は「[main::]」で、Coro::AnyEventを有効にすると「[AnyEvent idle process]」となります。 裏でメインループが回る Coro::AnyEventを有効にすると idle 状態

    AnyEventとCoro::AnyEventで諸注意みたいなの - Pixel Pedals of Tomakomai
  • Coroを使って、コールバック形式を普通の形式に書き換えてみた - Pixel Pedals of Tomakomai

    非同期ブーム第二段です。 書き換え方 func_by_cb( $cb, @params ) みたいな形式があった時に、Coroのrouse_cbを使うと、通常の関数呼び出しの形式で呼び出せる関数に変換ができます。こんな感じで。 sub func_by_coro { func_by_cb( Coro::rouse_cb, @_ ); return Coro::rouse_wait; } 変換前の関数(func_by_cb)は、以下のように使います。 func_by_cb( sub { print @_, "\n"; }, 1, 2, 3); 対して、変換後の関数(func_by_coro)では、この処理を以下のように書けます。 print func_by_coro(1,2,3), "\n"; 使い勝手は一目瞭然ですね! コールバックがAnyEventで実現されている場合 コールバックがAny

    Coroを使って、コールバック形式を普通の形式に書き換えてみた - Pixel Pedals of Tomakomai
  • Coro::LWP って何か調べてみた - Pixel Pedals of Tomakomai

    空前の非同期ブームに乗っかってみます。 Coro::LWPのドキュメントはやたらあっさりしてるんですが、以下のようなコードで効果がわかります。 use strict; use warnings; use Coro; # use Coro::LWP; use LWP::UserAgent; async { print "Hi\n"; }; my $ua = LWP::UserAgent->new; my $res = $ua->get("http://d.hatena.ne.jp/hiratara/"); print $res->title, "\n"; cede; このまま実行すると、 a geek born in Tomakomai Hiとなりますが、 use Coro::LWP の行を有効にすると、 Hi a geek born in Tomakomaiとなります。つまり、LWPがブロ

    Coro::LWP って何か調べてみた - Pixel Pedals of Tomakomai
  • 軽量スレッドブームだと思うので、そこらへんの情報をまとめてみる - 金利0無利息キャッシング – キャッシングできます - subtech

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    軽量スレッドブームだと思うので、そこらへんの情報をまとめてみる - 金利0無利息キャッシング – キャッシングできます - subtech
  • Coroで効率良くスクレイピング – taichino.com

    スクレイピング処理をしていると大量のリクエストを発行する事が多いので、サーバの応答待ち時間がもったいないと感じていたのですが、最近巷でよく目にするCoroというモジュールを調べてみた所、非同期処理が割と簡単に書けるという事で試してみました。 以下では複数のURLに対してCoroを使って非同期でリクエストを投げる関数と、一つ一つリクエストを処理していく関数で、申し訳程度ですが比較ベンチマークを取っています。基的にはasyncブロックの中に書いた処理が非同期になります。この例で注意するのはasyncブロック内のgetを非同期的に動かす為にCoro::LWPをuseしないと駄目だと言う事です。 #!/usr/bin/perl use strict; use warnings; use Perl6::Say; use Benchmark qw(timethese cmpthese); use L

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • hide-k.net#blog: MooseとClass::MOPでメタプログラミング始めた

    今、超熱いMoose始めたよ。 で、Moose理解するにはClass::MOP理解しなきゃいけなくて、Class::MOP理解するにはMOP理解しなきゃいけないので、ircでえろい人たちに色々教わったのでメモ。 メタプログラミング メタプログラミング - Wikipedia ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックによってプログラミングを行う方法 んで、これを実現するために必要なのがメタクラスとMOP。 MOP(メタオブジェクトプロトコル) メタクラスを通してオブジェクトシステムへアクセスするAPI メタクラス クラスの振る舞いを定義したクラスでイントロスペクション(introspection)とインターセッション(itercession)を備える イントロスペクション オブジェクトの属性を得る能力 ex) 何のクラスを継承してい

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • YAPC::Asia2009の特別研修「Perl, Unicode, and AJAX」は自由な感じの研修でした - こんにちはこんにちはmonmonです!

    小飼弾(id:dankogai)さんのAjaxの基礎講義でした。 ただ、ダブルブッキングだったらしく、16時前にdanさんは抜けました。(一通りの説明したので研修を疎かにしてはないです) ということで、16時からはMaki(id:lestrrat)さんとEmerson Millsさんがいろんな話をしてくれました。 これが何でも聞ける形式で面白い時間でした。こっちのコーナーが一日だったとしても面白かっただろうなぁと。 今回の研修は前日のMooseの研修と違い、ほぼ自由な感じでした。なので質問とかどんどんしてなかったら多分何も得られてなかっただろうなと思います。 その分、関係ないことも色々質問できて楽しかったです。 IRCの話とかそういうの。 研修と関係ないことメモ。 danさんは<script>のことをチートと言います。 danさんはemacs使います。 ただ、今回はsyntaxの拡張とか入

    YAPC::Asia2009の特別研修「Perl, Unicode, and AJAX」は自由な感じの研修でした - こんにちはこんにちはmonmonです!
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    mitsuto
    mitsuto 2009/09/19
  • DBIx::Skinnyを使った際のCache方法考察 - Hatena::Diary::Neko::kak 500 Internal Server Error

    DBIx::SkinnyにはDODやData::Modelのようにキャッシュを透過的に扱う 便利機能はありません。 無いのでラッパーを書きませう。 毎度の事でデモは http://github.com/nekokak/p5-dbix-skinny-sample/tree/master/cache/ に置いてあります。 ユーザテーブルがあるとします。 CREATE TABLE user ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(255) NOT NULL, UNIQUE(name) ); ユーザの情報をキャッシュからひけなければDBから引っ張って キャッシュしておき、次に使う時はキャッシュデータを使うという典型的なパターンです。 userテーブルの定義などはこのようにします。 今回はinflate/deflateも一緒にやってみ

    DBIx::Skinnyを使った際のCache方法考察 - Hatena::Diary::Neko::kak 500 Internal Server Error
    mitsuto
    mitsuto 2009/09/19
  • YAPC::Asia2009の特別研修「Moose入門、モダーンなオブジェクト指向システム」が超良かった! - こんにちはこんにちはmonmonです!

    Shawn Moore(Sartak)の講義でした。同時通訳。 感想。 超楽しかった!!sartakがとてもいい人だった!ちょっとした質問でもコード書きながら教えてくれた。 もっとみんな受けたらいいのに!もう終わっちゃったけど! 機能毎に、講義→実習→講義→実習、の繰り返し。 これがとても楽しかった。 1日最後まで楽しくコード書いて過ごせた。 実習の内容も、既にあるテストが通るようにモジュールを作成してテストが通ったら「やったー!」みたいな。 gitに資料があるのでみんな落としてやったらいいよ!ccのライセンスで公開してるので。 きっとtestファイル自体もキレイに書いてあるはずだから見たらいいと思うよ JPAにすごい感謝でした。3日間全部受けておけば良かったと思った。 以下メモ。 Part0: Mooseのコンセプト perl6からいろんなアイディアをもらってる まずはざっくりMoose

    YAPC::Asia2009の特別研修「Moose入門、モダーンなオブジェクト指向システム」が超良かった! - こんにちはこんにちはmonmonです!
  • YAPC::Asia 2009 特別研修 - Moose 入門

    先週末の YAPC::Asia 2009 のカンファレンスに引き続き、特別研修『Moose入門、モダーンなオブジェクト指向システム』に参加してきた。 研修の内容は、Moose とはなんぞやから始まり、以下(だいたい)7 部構成の入門講座。 Moose Concepts : コンセプト ざっと機能一通りみてみる なぜ Moose なのか Classes : Class の基礎から使い方 Moose::Object が何持ってるかとか BUIDLARGS, extends, override, super の使い方 Moose 使ったあとの後始末 (no Moose;) Role : Role の基礎から使いかた Role の持つ意味 使い方 alias で衝突回避 Basic Attributes : Attribute いろいろ required, default/builder, laz

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • http://perldoc.perlassociation.org/pod/Moose-Doc-JA/

  • myfinder's blog: DBIx::Encodingというモジュールを書いた

    YAPCおつかれさまでした。YAPC中、今まさに課題になっているDB周りの問題を解消すべくDBIx::Encodingというモジュールを書きました。このDBIx::EncodingはDBIのサブクラスで、executeとfetchの際に指定した文字コードでencode/decodeしてくれるものです。そもそもDBの文字コード設定がUTF8なら余り悩むこともないのですが、世の中いろいろと事情があってDB側を変更できない事も多いでしょう。そんなときにこのモジュールを使うと、DBI側で文字コードをencodeしてinsert/updateしてくれ、selectしたときにはutf8 flagを有効にした文字列を返してくれます。使い方はSYNOPSISにもありますが、下記の通りmy @dsn = ( 'dbi:mysql:host=localhost;database=mysql;