perl

Flickr::API2をちょっと読んでみたというお話

flickr.photos.searchを使ってある案件のお手伝いをしたのですが、extrasパラメータで指定した値がレスポンスに入ってない。。。なので、調査のために蓋を開けてみたら驚愕。 # Flickr::API2::Base sub _response_to_photos { my ($self, $photos) = @_; my …

AnyEvent::FileWatchをバージョンアップしました

Filesys::Notify::SimpleのAnyEvent版であるところのAnyEvent::FileWatchですが、色々改修しました。大きくは、以下の2点です。 監視方法を大幅に変更(F::N::Simpleの実装を大いに参考にさせていただきました) Timerクラスの追加 ちょっとテストも追加 監…

AnyEventで指定したパス以下の変化を検知する

指定したパス以下の変更を検知するのってどうすればいいかな、ということにちょっと興味が湧いたので、調べてみました。 ここでは、Windowsが手元にないのでパスするとして、LinuxとMacOSX(BSD)について触れようと思います。 そもそもOSの検知システムは何が…

排他ロックしたままファイルを編集する

例えば、 abcde という内容のa.txtがあったとして、これを排他ロックしたまま、モジュール等を使わずに abc に変更する必要があるとする。僕は以下のようにしてみた。 既に開いてるファイルハンドルの変数に対して再度開き直すってどうなんだろ…。 上記の制…

延坪島の件、すごいっすね

しばらくgoogleのリアルタイム検索使ってたのですが、段々そのためにブラウザのページ開くのが面倒になってきたので、Perlでスクリプト書いて自動取得するようにしてみました。 googleのHTMLがとにかくアレなので、パースが面倒臭くなったので、ほぼ生データ…

テスト用にディレクトリを生成・コピーするTest::TempDir::Simple

最近になってようやっと、WAFを絡めた機能テストを書くようになってきました…>< 自分のやってる案件の都合等もあると思うのですが、例えば画像をアップして保存する、みたいなパターンは結構多いと思います。 んで、Catalystなんかだと、画像の保存パスを…

お仕事的な近況2

フォーム周りをゴリゴリ作ってたりすると、段々、既存のWAFの多くは、REST的な処理にはすんなり対応できても、ごく一般的なフォームに対応するのは結構しんどいなぁ、と思うようになってきてる。 A->B という程度の遷移ならともかく、A->B->C->D...と続いて…

お仕事的な近況

Plack::Handler::CGIとか使ってます。あまり多くは語りません。 FormValidator::LiteとかText::MicroTemplate::Extendedも使っています。 あともうちょっとマニアックな辺りでは、SOAP::LiteやXML::SAX::ParserFactoryとかも使っています。 他には、石ころ帽…

AnyEvent::Twitter::StreamをOAuthに対応させたいなぁ、と思ったので(ついでにChirpUserStreamsにも)

→ GitHub - taiyoh/AnyEvent-Twitter-Stream-OAuth: AnyEvent: :StreamをOAuth対応にする。将来的には名前も変えて、BASIC認証と混在できるようにしておくのがいいかと。 というモジュールを作成してみました。(若干現実逃避気味につき) ちょっと前から話…

標準的なlinux構成のマシン(RHELとか)に非rootでlocal::libをインストールするメモ

(追記 2010-06-20) 大変遅くなってしまいましたが、このエントリでいいたかったのは、~/.cpan/CPAN/MyConfig.pmのownerがrootだとどうしようもないよね、ということでした。 普通に使っていればこのような問題はないと思いますので、安心して@hokacchaのこ…

Yokohama.pm #5に参加させて頂きました(とか、最近の自分のPerl事情とか)

(単に「行った」という覚え書きのようなものです) 確か、第3回に続いて2回目の参加。 まだまだ知らない人はいっぱいいるけど、以前よりも、少し気後れしなくなった。 あとは、ごくごく個人的に、かなり前からわだかまってた部分が溶けたので、更に気分が…

AnyEvent::IMAPListen + WebService::ImKayacを組み合わせた時

こんな感じ。 #!/usr/bin/env perl use common::sense; use utf8; use FindBin; use lib "$FindBin::Bin/AnyEvent-IMAPListen/lib"; use lib "$FindBin::Bin/WebService-ImKayac/lib"; use AnyEvent::IMAPListen; use WebService::ImKayac; use Config::Pit;…

AnyEvent::IMAPListen

というモジュールをつくりました。 http://github.com/taiyoh/AnyEvent--IMAPListen ハイフンが2つになってしまったのはミス>< iPhoneで一番困るのは、メールの通知が(mobile.meを使っていない限り)プッシュ通知ができないということだと思います。 今…

WebService::ImKayac

AnyEvent::IMAPListenを作って、実際に複数アカウントを監視しようとしたとき、im.kayac.comにPOSTする処理をいくつも書く必要がでてきた。 関数化して置けば済む話ではあるのだけど、POSTのパラメータ生成方法とかは本質とは無関係だから隠蔽するべきだ(キ…

Mouse::Roleでちょっと途方に暮れてること

バグかどうかも分からないので、つらつらと記録。 #!/usr/bin/env perl use strict; use warnings; use Test::More tests => 2; do { package Hoge; sub new { my $pkg = shift; my $arg = @_ > 1 ? +{@_} : $_[0]; bless $arg, $pkg; } package Parent; use…

MouseX::ClassAttribute作ったよ!建設予定地

とりあえずは動いたものの、テスト落ちまくってるのでもう一度実装を考え直してるナウ、という感じです。

Test::DummyGeneratorの現行バージョン

主にルール周りを色々変更してます。 $_は$_のまま コールバックを設定してない値でもevalして$_を評価 String::Randomを黙らせる(localで$SIG{__WARN__}を弄ってます) add_rule関数を設けて、どこからでも追加できるように ルールの複数追加に対応 多分、ル…

Test::DummyGenerator fixed

昨日時間があったので、色々整理しました。 ただ、ちゃんと使おうと思ったのですが、色々難があることに自分で気づいてしまったので、どうすんべ、と。 とりあえず、コンセプトリリースと割り切って、今はあまり速度とか気にせずに(evalしまくったとしても…

ダミーデータを自動生成したい!プロジェクト

先日のエントリから更に掘り下げて、ダミーデータをある程度自動的に生成できれば、手間がもっと減るのではないかと考えた。 結果→GitHub - taiyoh/test-dummygenerator: for people who are lazy not to want to create many many test data... ハッシュリ…

Fixture系モジュールはコールバックで値を入れられる方がいい

例えば日付に絡むテストをしたい時、ダミーデータとしてハードコードしてしまうと、後々、データが古いというだけでテストがコケるという可能性が出てくる。 まあ、可能性というか、実際今僕のところで起きたんだけどさ。 もうちょっと具体例を挙げると、週…

FormValidator::Lite一行パッチ

--- Lite.pm 2009-03-30 17:48:49.000000000 +0900 +++ Lite.pm.new 2009-03-30 17:48:21.000000000 +0900 @@ -42,7 +42,7 @@ for my $rule (@$rules) { my $rule_name = ref $rule ? shift(@$rule) : $rule; my $is_ok = do { - if ((not defined $_) && $r…

FV::Liteでvalidメソッドとinvalidメソッドを書いてみると

多分こうなる sub valid { my ( $self, $key ) = @_; return !$self->has_error unless $key; return $self->{_error}->{$key} ? '' : $self->{_q}->param($key); } sub invalid { my ( $self, $key, $rule ) = @_; return $self->has_error unless $key; my…

C::M::FV::Liteを色々fix

最初はFormValidator::Liteのパッチを書こうとしていたものの、$c->model('Validator', [%rules])な書き方をした時、リクエストの度にルールが無駄に追加されていくという状態になってたので、パースしたデータを呼び出すときは、cloneしてルールのオブジェ…

CatalystでFormValidator::Liteを使ってみたかったので

やってしまいました。 →GitHub - taiyoh/catalyst-model-formvalidator-lite: I want to use FV::Lite in Catalyst Catalyst::Model::Data::Localizeの動きを意識して、PluginではなくModelで動かすようにして、あとはリクエストごとにインスタンスを生成す…

YAML::XS VS. YAML::Syck

ググってみたら意外となかった。というか、既に過去の話題すぎるだけかもしれないけど。 まずはベンチマーク。(単にベンチマークスクリプトの練習台という意見もある) #!/usr/bin/env perl use strict; use warnings; use utf8; use Benchmark qw/:all/;; …

DBIx::MoCoを触ってきてわかったこと

DBIx::MoCoの本質は、key-value型のキャッシュ。

DBIx::MoCoのhas_manyリレーション

結果オブジェクトがexpireなしでキャッシュされるのか…。ちょっとハマった。 回避策としては、リレーションテーブルにアクセスする際はflush_has_many_keysメソッドでキャッシュを消すことだけど、リレーション設定の時、 cache => 'nocache' # or number fo…

Geo::Coder::Googleを逆ジオコーディングに対応させる

リクエストパラメータを切り替えるだけでよかったので、簡単でした! { package Geo::Coder::Google; { no warnings 'redefine'; sub geocode { my $self = shift; my %param; if ( @_ % 2 == 0 ) { %param = @_; } else { $param{location} = shift; } my @…

Catalyst::Authentication::Store::MoCo fixed

→GitHub - taiyoh/catalyst-authentication-store-moco: based on Catalyst: :Class 今更気づいたんだけど、MoCoだとmany-to-manyって一発でいかない…? 代替策として、has_manyの2段構成で対処。 具体的には、 http://cpansearch.perl.org/src/JAYK/Cataly…

MoCoのキャッシュって

行オブジェクトの保存がメイン?個人的にはsearchして結果をDBIx::MoCo::Listのオブジェクトでくるんだ時にもキャッシュしてほしいな、と思ってたんだけど。 ただ、その辺は、こちら側で明示的にキャッシュしてあげた方がアプリケーション的には動作が理解し…