perl

TheSchwartz で時間が掛かる job を実行するときは grab_for に注意

TheSchwartz の worker で、一つの job が worker->grab_for (default 3600) 秒以上掛かる処理をすると、処理中の job を他の worker が掴んでしまう。具体的には大量のメール送信をしていたんだけど、Data::Valve でスロットリングしてゆっくり送っていたら…

Data::Visitor の変更で Data::Visitor::Encode がこけた

つい先日、2008-07-21 にリリースされた Data::Visitor 0.18 をインストールしたら Data::Visitor::Encode がコンパイルエラー。 Can't locate object method "mk_accessors" via package "Data::Visitor::Encode" Data::Visitor の Changes には 0.18 - Wea…

Perl + Win32::OLE で Skype に発信

ほんのとっかかりだけ。 use strict; use warnings; use Win32::OLE; my $user_name = shift || die; my $skype = Win32::OLE->new('Skype4COM.Skype'); unless ( $skype->Client->IsRunning ) { $skype->Client->Start(); } my $user = $skype->User($user_…

Mail::Sendmail で RFC 違反のメールアドレスに送信

問題になった「RFC違反のメールアドレス」は、携帯でよく問題になる foobar.@example.com みたいな奴。 普通に送信しようとすると、"No recipient!" と例外が飛んでしまう。Mail::Sendmail は送信時に while ($recip =~ /$address_rx/go) { push @recipients…

Daemon::Generic 2題

以下 2点。ちょいと困ったので調べた。 1. Daemon::Generic で書いた daemon を cron から起動するとゾンビが残る件 2. logger 経由で表示されるログの pid が、自分のじゃない件まず、プロセスを daemon 化する処理について。 Unix Programming Frequently …

URI::Fetch で Cache Hit すると http_response が取れない

decoded_content が欲しかったので $res = URI::Fetch->fetch( $uri, Cache => $cache ); $res->http_response->decoded_content; ってしたのだが、Cache にヒットすると http_response が空っぽ。 Cache に書き込む部分は以下のようになっていて、http_resp…

Gearman で Capistrano の shell 機能みたいなのを

Gearman で遊んでたら思いついたので書いておきます。ネタに近い。 複数台のマシンで同じコマンドを実行して結果を見たい、てなのを Gearman でやってみる。 worker: 自分の hostname を function 名として job server に登録。job の引数に受け取った文字列…

DBICの再接続

DBICでバックエンドとの接続が切れた時などに再接続する際の挙動が、0.07x と 0.08x で異なるようなのでメモ。確認したのは PostgreSQL の場合です。 動作確認スクリプトは末尾に。動作は以下の流れ。 connect() resultset から find() バックエンドをkill r…

Deamon::Generic で TheSchwartz の worker をデーモン化する(2)

Deamon::Generic でデーモン化した場合、開始はいいけど終了に問題が出る気がする。stop した際には SIGINT が飛んでくるのだけど、TheSchwartz 自体は特に SIGINT をトラップしてたりはしないので、worker の処理中に stop が掛かると、処理が不完全なまま…

Deamon::Generic で TheSchwartz の worker をデーモン化する(1)

TheSchwartz の worker をデーモンにしたくて、どうしようかと。daemontools でもいいんだろうけど、CPAN で見つけた Daemon::Generic を使ってみた。 まず TheSchwartz の client (jobを投入する) と worker (jobを実行する) モジュールを普通に作る。 #!/u…

JPEG 画像を SWF に変換する

Flash Lite 1.1 では loadMovie で JPEG を読み込めない。SWF なら読み込める、ということで SWF::Builder を使ってでっち上げた。 use strict; use Image::Size; use SWF::Builder; my $file = shift; (my $swf = $file) =~ s/\.jpg$/.swf/; my ( $width, $…

Yahoo 日本語形態素解析Webサービスを使ってみる

使ってみた。 日本語文を形態素に分割し、品詞、読みがなの付与、統計情報を取得できる機能を提供します。 http://developer.yahoo.co.jp/jlp/MAService/V1/parse.html とりあえず動けばいいや、という版。 #!/usr/bin/perl use strict; use LWP::UserAgent;…

ファイルをシャッフルするワンライナー

perl -MList::Util -e 'print List::Util::shuffle <>' inputfile巨大なファイルだと困るけど。

RBridge::Erlang を Perl から呼ぶ

とりあえず、はじめてのErlanモジュール作成ということで悩んだ結果、RubyからErlangのメソッドを呼び出すRBridge::Erlangを作った。 http://rakuto.blogspot.com/2007/05/ruby-and-erlang-rbridgeerlang.html Young risk taker.: [Ruby and Erlang] そろそ…

IPアドレスから携帯キャリア判別のベンチマーク

Net::CIDR::MobileJPと、PostgreSQL の inet で速度を比べてみる。 PostgreSQLのinet型を使って、IPアドレスから携帯のキャリアを判定してみます。 http://www.mono-space.net/blog/pgsql/e070511_ipaddress.htm 元ネタは net-cidr-mobilejp-scraper.pl で抽…

NaN を数値比較

NaN という文字列を で比較すると -1, 0, 1 ではなくて undef が返るというお話。(v5.8.8 built for i386-linux-thread-multi)ことの発端は、DBD::CSV で ORDER BY するとエラー、という現象。 id,foo 1,FOO 2,BAR 3,NaN例えばこんなのを foo で ORDER BY で…

Unicode::RecursiveUpgrade

ネストしたリファレンス内の文字列 (utf8, not flagged) を一括で utf8 flagged にしたかった。 Unicode::RecursiveDowngrade を使えば出来るのだけど、upgrade するのに名前が downgrade ってなんか嫌だったのでついカッとなって作った。 package Unicode::…

Catalyst::Plugin::Session => 0.06 に注意

C::P::Session を 0.06 以降にバージョンアップするときは C::P::Session::State::* も一緒にバージョンアップすること。なんの気なしに C::P::Session だけ更新したら動かなくなって (セッションが切れる)、結構悩んでしまった。特にエラーが出たりしないの…

100までの素数 Perl6 / pugs 版

Perl6 (pugs) で動くようにしてみた。 #!/usr/bin/pugs my $max = @*ARGS.pop || 100; my @primes = (2); for (3..$max) -> $n { @primes.push($n) if @primes.before_incl:{ sqrt $n <= $_ }.all:{ $n % $_ }; } @primes.join(' ').say; sub all (@list, $t…

FedoreCore 5 に pugs インストール

FedoraにPugsをインストール - hide-k.net#blog を参考に。ghc は yum で 6.4.2 をインストール。 hs-plugins は http://www.haskell.org/fedora/ の RPM から、と思ったが FC5 用の RPM がまだないようだ。hs-plugins-0.9.10-4.20050922.src.rpm から hs-pl…

100までの素数 (キミならどう書く 2.0 - L.L. Ring)

http://ll.jus.or.jp/2006/blog/doukaku1/ http://d.hatena.ne.jp/t-akihito/20060625/1151227410 LL Ring のチケット発売今日からだ。買ってこなくちゃ。List::MoreUtils から all と before_incl を使って、リスト操作っぽく書いてみた。List::MoreUtils …

ちゃんぴおんらしいよ

輝け!全日本最強 CPAN Author 決定選手権 2006 - にぽたん研究所 http://app.blog.livedoor.jp/nipotan/tb.cgi/50523152 どう見ても規定打席不足です。本当に(ry 開幕戦で3打数3安打、それで首位打者! みたいなものですね。モジュール数を増やして来年も防…

UNIVERSAL::which - make test失敗

perl - UNIVERSAL::which 0.01 released! http://blog.livedoor.jp/dankogai/archives/50493218.htmlmake test が通らない。単純な typo みたい。 t/01-base........Can't locate Universal/which.pm in @INC--- t/01-base.t.orig 2006-05-14 05:09:02.00000…

Class::DBI キャッシュするな!

Class::DBI 0.96 以降のキャッシュ機構が mod_perl 環境で悪さをする件。 startup.pl に $Class::DBI::Weaken_Is_Available = 0; と書いておけば OK …… ではなかった。 普通に $obj = Obj->retrieve($id); などとして取ってくる場合は上記記述でキャッシュし…

DBIx::Class::Loader で View を扱う

Catalyst::Model::DBIC で View が扱えない話。 素の DBIx::Class ならば特に問題はない。 package PgTables; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/Core DB/); __PACKAGE__->connection('dbi:Pg:dbname=template1', 'fujiwara', '');…

CDBI vs DBIC

Class::DBI と DBIx::Class のパフォーマンス比較。最初は join の扱いを調べるために始めたのだけど、DBIx はパフォーマンスに気を遣って実装されているようなので、単純に速度を比べてみる。とあるアプリケーションで作った、tag のテーブル。データ件数10…

Catalyst::Plugin::Static::Simple と mod_perl の食い合わせ

Catalyst::Plugin::PageCache を使って caching をするようにしたら、 何故か時々 Internal Server Error が起きる。 access_log にはこのような記録。何故に HTTP Status が '1' なのだ? *.*.*.* - - [03/Mar/2006:05:17:05 +0900] "GET / HTTP/1.1" 1 757 …