タグ

ブックマーク / mt.endeworks.jp (11)

  • ZMQ Perl バインディング - D-6 [相変わらず根無し]

    ZMQ Perl バインディング 2012年3月26日 09:50 D | ブログ記事のURL | コメント(0) | トラックバック(0) ZeroMQ.pmをつい相続してしまってから家libzmqの変更についていけず大分悩んだんだけど、ここのところ直してリクエストが多かったので一念発起してlibzmqのPerlバインディングを大幅リニューアルしました。まだ正式リリースは出してないので、何か文句を言うなら今のうち!英語での解説はこちら いままでlibzmqの直接バインディング、定数、Perlっぽいシンタックスシュガーのラッパーを全部同じディストリビューションにいれていたのをばらしました。これまでZeroMQ::Raw とされていたのは ZMQ::LibZMQ2 ならびに ZMQ::LibZMQ3 となりました。ZMQはこれらのバインディングをうまいことオブジェクト風味にするPPモジュー

    hiroyukim
    hiroyukim 2012/03/26
  • Brahman: a supervisor clone in Perl (under development) - D-6 [相変わらず根無し]

    Brahman: a supervisor clone in Perl (under development) 2011年6月13日 15:57 D | ブログ記事のURL | コメント(0) | トラックバック(0) 週末にsupervisorっていうものについて話してる人がいたので、特に理由なくPerlでクローンを書いてみようと思った。というわけで当に基の部分まで書いた。名前はBrahman。神様の名前にしたかったのはプロセスの生死を管理するから。 繰り返すけど、特に理由はない。書きたかったから。ちなみに内部的には多分家と全然互換性はない。設定ファイルがだいたいクローンできればいいや、というくらい。 今のところできることは、例えば今daemontoolsで管理してるplakupサーバーがあったとして、こんな感じの設定を書くと立ち上がってstdout/stderrを一緒のログに保存

    hiroyukim
    hiroyukim 2011/06/13
  • AnyEvent::DBIのはまりどころ - D-6 [相変わらず根無し]

    AnyEvent::DBIのはまりどころ Morris君の中身を書き換えてAnyEvent::DBIにしてみたわけだが、一個だけはまった部分があったので、メモっておく。 例えば以下のようなコードをAnyEvent::DBIを使うように変更したいとする。 use strict; use DBI; my $dbh = DBI->connect('dbi:SQLite:dbname=test.db'); $dbh->do( "CREATE TABLE IF NOT EXIST t1 (c1 int not null, c2 int not null)"); $dbh->do( "DELETE FROM t1"); for my $i (0..10) { $dbh->do( "INSERT INTO t1 (c1, c2) VALUES (?, ?)", $i, $i * 2); } my $st

    hiroyukim
    hiroyukim 2010/10/16
  • Perlシグナル処理 - D-6 [相変わらず根無し]

    Perlシグナル処理 思い立ったので適当に書いてみる Perlのシグナルハンドラは%SIGグローバル変数にシグナル毎のハンドラを設定することで実現できる。例えばCtrl-CはSIGINTを発生させるので、INT用のハンドラを設定する: $SIG{ INT } = sub { warn "got SIGINT!" }; %SIGに限った事ではないのだけれども、ここでまず注意しなくてはいけないのが、%SIGはグローバル変数であること。ある関数foo()内で%SIGをいじったあとにreturnすると、foo()を呼び出したスコープでもその値は有効になってしまう。これだと自分はよくても他のモジュール等に影響を与える可能性がある。そこでまず癖としてlocal修飾子を使う癖をつけてほしい local $SIG{INT} = sub { warn "got SIGINT (OUTSIDE)" }; su

    hiroyukim
    hiroyukim 2010/10/16
  • Script::Sub::Importが大変いただけない件 - D-6 [相変わらず根無し]

    Script::Sub::Importが大変いただけない件 スクリプトからサブルーチンだけをインポートするScript::Sub::Importというモジュールを作成しました http://d.hatena.ne.jp/perlcodesample/20091130/1258979624 これは大変いただけない。perlcodesampleというIDがさらに初心者に信用させがちだからさらにいただけない。なので苦言を呈させてもらう。 命題はスクリプト内で使っている巻数のテストをしたい、なんだよね。なら、いくつかこんなひどいハックじゃないやり方がある。 まず第一の、そして一番まともな方法としては「モジュール化」を考えるべき。元のスクリプトがこんな感じだとする: #!/usr/bin/perl use strict; main(); sub main { # pseudocode... foo(

    hiroyukim
    hiroyukim 2010/10/16
  • $. と <> と for と while - D-6 [相変わらず根無し]

    $. と <> と for と while forでは$.はカウントされない ちょっと違うので横から。 これはforの動作というより、式の評価コンテキストの問題。 forはその性質上、捜査対象は配列になる: for (<>) { .... } # 上記はこれと同等 my @lines = <>; for(@lines) { .... } なので、<>も配列として評価されるべく*まず最初に*<>を最後まで読み切って、行区切りの配列を作ってからforに渡す。このときファイルハンドルを読み切っているので、当然 $.はファイル全体の行数になる。 これに対して、whiileは対象を毎ループ評価するので、1行ずつの読み込みになる。だから$.は行毎の値になる。B::Deparseを使うとちょっとわかるかも。 # こっちはちょっと正直わかりにくいとは思うけど・・・ daisuke@beefcake $ p

    hiroyukim
    hiroyukim 2010/10/16
  • perlbrew - D-6 [相変わらず根無し]

    perlbrew Perl 5.6 とか Perl 5.8を今だに使ってるあなた!そうです、これを読んでるそこのあなたです。Perl5の開発チームは後方互換に関しては大変神経をつかっていますので、 Perl 5.6とかで動いてたコードをいきなり 5.12で走らせても基的には動くはずです(多分警告とかは一杯でるだろうけど)。でもだからといって新しいバージョンで施されている様々な最適化や新しい機能を使えないのはちょっと悲しくないですか? ということで新しい Perlを使いましょう!最新安定版は5.12.1ですよ!ちなみにどのバージョンを2010年8月時点で使うべきか、はこちらのエントリを参照してください。 え?アップグレードできない?システム管理者が許してくれない?前入れてたアプリが壊れる?いやいやいや、全然いけますって。自分用のPerlをインストールすればいいんですよ! ここではそれを簡単

    hiroyukim
    hiroyukim 2010/10/16
  • Plack + Router::Simpleで簡単なジョブキュー書いてみた - D-6 [相変わらず根無し]

    Plack + Router::Simpleで簡単なジョブキュー書いてみた まだちゃんと使ってないから問題点とかわからないけど、とりあえずStarmanを使うとかで結構スケールできる気がする。そのあたりを自由に変えられるのもPlack++だね。 使用想定としては、これをplackupしておいて、クライアント AnyEvent::HTTPで http_postして非同期で応答待ちする感じ。 package Lyra::Server::Worker; use Moose; use Router::Simple; use JSON::XS; use namespace::autoclean; use constant NO_SUCH_WORKER => [ 404, [ "Content-Type" => "application/json" ], [ q|{ "status" => 0, "

    hiroyukim
    hiroyukim 2010/10/15
  • CoroでFlickrにアクセスする - D-6 [相変わらず根無し]

    CoroでFlickrにアクセスする もうずいぶん前からCoroを使いたくて使いたくてしょうがなかったのだが、やっときたよ。Flickr APIを叩いて、非同期I/OしながらCoroで写真の情報をダウンロードするよ! まず某sukebeさん作のWebService::Simpleを使ってみるよ(当に使ったコードは違うフレームワーク用にいろいろついてたので、あまり利便性とか考えずに説明用のコードだけ書きだします) package MyFlickrModel; use strict; use WebService::Simple; my $webservice = WebService::Simple->new( \%必要な引数 ); # 写真のIDを渡すとinfo, context, sizes, permsを全部ひっぱってくる sub find_photo { my $class =

    hiroyukim
    hiroyukim 2009/10/09
  • Catalystベースのアプリケーションのlib構成 - D-6 [相変わらず根無し]

    Catalystベースのアプリケーションのlib構成 "MyApp"というアプリケーションを作りたい場合、Catalystのドキュメントにもそう書いてあるから皆ついついこう始める: catalyst.pl MyApp libディレクトリ内で作成されるモジュール類はこんな感じ: lib/MyApp.pm lib/MyApp/Controller/Root.pm lib/MyApp/Model lib/MyApp/View でもいくらWebアプリといってもバッチが走ったり、他のシステムとWeb以外のところで結合したりしてほぼ100% Webだけでは完結しない。そういう時にlib/MyApp直下にWeb用のモジュールを入れてしまうと段々おかしくなってきます。 例えばWebから入ってきたなんらかしらのデータをvalidateするコードを入れたいとして、lib/MyApp/Valid

    hiroyukim
    hiroyukim 2008/03/08
  • Text::MeCab 0.20005 - アップグレードしてください - D-6 [相変わらず根無し]

    Text::MeCab 0.20005 - アップグレードしてください 前のエントリで調査した結果、Text::MeCab に深刻なメモリーリークが発見されました。 メモリを解放する処理自体は問題なく呼ばれていたのですが、そのタイミングがperlプロセスが終了する時点まで待たされている状態でした。最終的には確実に解放されていたのでなかなか気づかなかったのですが、node->nextやnode->prevのような関数を呼ぶとperlが終了するまでメモリが解放されませんでした。特に形態素解析する文章が巨大な場合、これは一瞬でメモリリークとなり、問題が顕在化します。 先ほどアップロードした0.20005でこの不具合を修正してありますので、CPAN登録が済み次第アップグレードを推奨いたします。急いでいる場合はcodereposからも入手できます。 ちなみに最終的なフィックスの決め手はXML::Li

    hiroyukim
    hiroyukim 2008/03/08
  • 1