タグ

ブックマーク / fbis.hatenablog.com (32)

  • List::MoreUtilsのuniq関数の実装が変わってた件 - Unknown::Programming

    大分昔に書いたHashを使って配列をユニークにしようという記事のブコメにてList::MoreUtilsのuniq関数の実装が変わったというコメントを頂きました。 List::MoreUtils 0.25_02 では少々変更されていた。 http://cpansearch.perl.org/src/VPARSEVAL/List-MoreUtils-0.25_02/lib/List/MoreUtils.pm はてなブックマーク - kitsのブックマーク / 2009年11月17日 さっそくどう変わったのか確認したところ、なんともアンビリーバボーな実装になってました。 # List::MoreUtils-0.22 sub uniq (@) { my %h; map { $h{$_}++ == 0 ? $_ : () } @_; } # List::MoreUtils-0.25_02 sub

    List::MoreUtilsのuniq関数の実装が変わってた件 - Unknown::Programming
    vkgtaro
    vkgtaro 2009/11/19
  • 今週末の予定 - Unknown::Programming

    希望 use fbis; use Beer::PremiumMalts; my $fbis = fbis->new; $fbis->drink(Beer::PremiumMalts->new( type => 'big' )) while $fbis->stomach; $fbis->say->say->say->say; $fbis->sleep(60 * 60 * 12); 現実 use fbis; use Work::Mobile::WebApp; my $fbis = fbis->new; my $work = Work::Mobile::WebApp->new( job_type => 'infinity' ); while ( my $job = $work->next_job ) { $fbis->work($job); last unless $fbis->life--;

    今週末の予定 - Unknown::Programming
    vkgtaro
    vkgtaro 2008/10/02
    おつですー
  • Catalyst::Model::なんとかAdaptor系の話 - Unknown::Programming

    Catalyst::Model::MultiAdaptorでlifecyle support - dann's blog - # やりたいことがいつの間にかできていた - 僕ト云フ事@はてな出張版 この辺の記事を見てて思ったこと。 Catalyst::Model::Adaptorは便利だけど、モジュールの数だけモデル化用のファイルが増えるのも微妙という話。 そこでCatalyst::Model::DynamicAdaptorやCatalyst::Model::MultiAdaptorとかでその辺を解決という話なんだけど、 パッケージ以下全部を読み込みって言うのが僕の今回の用途に合わないので、個人的にこんな感じで書けたらいいのかなぁという案だけちょっと考えてみた。 __PACKAGE__->config( package => { 'TestApp::Service::*' => { lif

    Catalyst::Model::なんとかAdaptor系の話 - Unknown::Programming
    vkgtaro
    vkgtaro 2008/09/24
    おー。POPO は僕の記憶するところでは dann さんの造語w
  • Catalyst::Model::AdaptorでModel作りまくってるけど・・・ - Unknown::Programming

    とにかく極力Catalystに依存しないようにモジュールを作って、Catalystから利用する場合はCatalyst::Model::AdaptorでModel化しまくりなんだけどいいのかなコレ。 Modelの数がエライことになってきたんだけどそんなもんかなぁ。やっぱり皆さんもModelりまくり? あとModelの引数変換のメソッド名よく忘れるのでついでにメモ。 package MyApp::Model::DateTime; use strict; use warnings; use base 'Catalyst::Model::Factory'; __PACKAGE__->config( class => 'DateTime', constructor => 'now', ); sub prepare_arguments { my ( $self, $c) = @_; return my

    Catalyst::Model::AdaptorでModel作りまくってるけど・・・ - Unknown::Programming
    vkgtaro
    vkgtaro 2008/09/09
    DynamicAdaptor で読み込みまくってる。
  • そういやURIモジュールって何でHashベースじゃないんだろう - Unknown::Programming

    URIモジュールってのは凄く便利なのでみんな重宝してるんだけどアレってスカラリファレンスのblessなんだよね。 いつも思うのが何でハッシュリファレンスにしなかったのかなーってこと。 まぁURIモジュール自体、かなり汎用的なモジュールなのでスカラの方がデータ構造をあれこれ考えなくても良い分、楽だったのかもしれない。 とはいえ実際問題、URIモジュールの使用用途ってURI::httpがその殆どを占めてると思うのでちょっくら適当にHashベースのURI::httpを実装してみた。もちろん全部じゃなくていくつかのメソッドだけね。 package URI::Hash::http; use Moose; use URI(); use URI::Escape(); use overload ( fallback => 1, '""' => sub { shift->as_string }, '=='

    そういやURIモジュールって何でHashベースじゃないんだろう - Unknown::Programming
    vkgtaro
    vkgtaro 2008/08/27
    スカラベースのオブジェクトと言えば URI。なんでだろね。
  • HTML::MobileJP::Filter::DoCoMoGUIDで同一ホスト内でのguid=ONを有効にするには - Unknown::Programming

    今やってるやつでCatalyst::View::MobileJpFilterを使って実装しようと思ってるんだけどHTML::MobileJP::Filter::DoCoMoGUIDで下記のようなケースではguid=ONがついてくれないのです。 <a href="http://example.com/">link</a> どうやらhttpから始まるURLに対してはつかないようですが、これは元となるHTML::StickyQueryモジュールのabsオプションを使えばついてくれるみたい。 my $html = '<a href="http://example.com/">link</a>'; my $sticky = HTML::StickyQuery::DoCoMoGUID->new; local $sticky->{sticky}->{abs} = 1; $sticky->sticky(

    HTML::MobileJP::Filter::DoCoMoGUIDで同一ホスト内でのguid=ONを有効にするには - Unknown::Programming
    vkgtaro
    vkgtaro 2008/08/19
    なるほどー「Catalyst::Plugin::SmartURIを使ってuri_forにて相対URLを返す」
  • URIモジュールのメモ - Unknown::Programming

    各種メソッドの挙動。 use URI; use Data::Dumper; sub p { local $Data::Dumper::Indent = 1; print $_[0]; print Dumper($_[1]); } my $url = 'http://example.com/foo/bar/00000.html?uid=aaaa&hoge=あああ'; my $uri = URI->new($url); p 'scheme :',$uri->scheme; p 'opaque :',$uri->opaque; p 'path :',$uri->path; p 'fragment :',$uri->fragment ; p 'as_string :',$uri->as_string; p 'canonical :',$uri->canonical; p 'authority :'

    URIモジュールのメモ - Unknown::Programming
    vkgtaro
    vkgtaro 2008/07/17
    僕は二つめの方法使ってるなぁ。めどい。
  • Catalyst、というかCPANの話 - Unknown::Programming

    ふむ。ただしこれを機にモジュールを公開することに億劫になって欲しくはないなぁ。なんか前にどっかでCPANの公共性について話題があったけどそーゆー方面には行って欲しくなかったり。 http://b.hatena.ne.jp/fbis/20080605#bookmark-8845759 Catalystって、ごく初期の時代はともかく、いまはだれもが認める開発チームが管理しているもの。そのチームのメンバーが、乱立するプラグインにうんざりして「もうやめれ」と政治的なコメントを出しているのに、それを無視してプラグインにこだわることにいったいどういうメリットがあるの? CPANは幼稚園児の砂場じゃないよね - Charsbar::Note いや、まあプラグインにはまったくこだわってはないんですが、取り上げられたので軽く一言。 僕の場合、昔誰かが「CPANってもっと気軽にうpっていいものなんだよ!」と言

    Catalyst、というかCPANの話 - Unknown::Programming
    vkgtaro
    vkgtaro 2008/06/07
  • Unknown::Programming

    3年ぶりの更新というわけで、まさしく3年寝太郎状態なわけですが。 今日は今巷を賑わせているJSON SQL Injectionについてです。 DeNA Engineers' Blog [ Technology of DeNA ] JSON SQL Injection、PHPならJSONなしでもできるよ | 徳丸浩の日記 徳丸さんの記事で紹介されていたように、僕が作ったSQL_Abstractでも同様の問題が発生するとのことです。 SQL::Makerのようにstrictモードを導入するかどうかも一応考えたのですが、PHPSQL_Abstract自体PHP5でも動作はしますがPHP4時代のコードですし、そもそもそんなに使われてないだろう(泣)いうことで今回は見送ることにしました。(ちょっと今すぐ時間が取れないという状況もありまして・・・) またstrictモードを導入したとしてもSQL_A

    Unknown::Programming
    vkgtaro
    vkgtaro 2008/06/07
  • 正規表現ベースのHTML::FillInForm::Lite - Unknown::Programming

    HTML::FillInFormを正規表現ベースで再実装したHTML::FillInForm::LiteってのがCPANにリリースされてます。 なかなか爽快ですね。HTML::FillInFormHTML::Parserを利用しているので無駄な部分が多かったのがデメリットだったわけで。 ドキュメントには2倍近く高速になると書いてたので一応ベンチを取ってみました。 use Benchmark qw(cmpthese timethese :hireswallclock); use HTML::FillInForm; use HTML::FillInForm::Lite; my $str = q{ <form> <input type="text" name="text_data1" value="" > <input type="text" name="text_data2" value="

    正規表現ベースのHTML::FillInForm::Lite - Unknown::Programming
    vkgtaro
    vkgtaro 2008/02/15
    HTML::FillInForm::Lite::Overwrite。「package # (^o^)」
  • セキュリティ云々の話 - Unknown::Programming

    ちょっと反応しとく。 そんなに大切な個人情報をたくさん扱ってるサイトなんてどれだけあるかな。 みんなそういうサービスつくってるの? なんかすごいね。 ぼくの使っている範囲だと、当にまずいのは銀行と証券とカード会社のような、お金のからむサービスくらいだよ。 そもそも、利用者もそれほどバカじゃないから、 うさんくさいサイトだったら、住所も名も預けたりしないよ。 http://d.hatena.ne.jp/Hamachiya2/20080131/security 賛成できる部分もあるができない部分もある。 僕は仕事上、携帯WEBサイト開発にずっと関わってきたので上記の考え方が間違いであることが良くわかる。 ユーザーはいともカンタンに個人情報を預けるよ、携帯サイトでは。 たとえばどっかのアーティストのキャリア公式サイトだとか、どっかのTVの番組のキャリア公式サイトだとかでECとかやるだけで簡単

    セキュリティ云々の話 - Unknown::Programming
    vkgtaro
    vkgtaro 2008/02/03
    「自社だけがセキュリティしっかりしてれば良いって事もない。回りまわって自分のところに降りかかってくることもあると思うんだ。」
  • リストの要素数を取得する - Unknown::Programming

    配列ではなくてリストの要素数を取得するのにはどうすればよいか?というお話。 まず配列の場合はスカラコンテキストで評価するだけなんでとても楽。 my @data = qw/ a b c d /; my $count = @data; # 4 ではリストの場合はどうなるか? 配列と同じように書くなら my $count = qw/ a b c d /; こうなるが、これは大間違いである。 リストをスカラコンテキストで評価すると最後の要素が返ってくるのでこの場合$countには「d」が入る。 とするならば一度配列で受け取り、その後にスカラコンテキストで評価するのが一番スマートなのかもしれない。 my $count = my @tmp = qw/ a b c d /; # 4 しかしながら要素数を取得するだけなのに@tmpを広いスコープに置くのが嫌なのであればdoを使って囲ってしまうのが吉であろう

    リストの要素数を取得する - Unknown::Programming
    vkgtaro
    vkgtaro 2007/11/14
    なんという TMTOWTDI。自分はこれが一番好きかも my $count = @{ [ qw/ a b c d / ] };
  • self-0.11なるものを触ってみた - Unknown::Programming

    ぼへーっとCPANのRSS眺めてたらselfとかいうのが目に付いた。 selfというネーミングから想像するに、なにやら面白いことしてくれそうな匂いがぷんぷん香ってきたので触ってみたわけです。 するとまさしくほぼ想像通りのことをやってくれるモジュールだったのですよ。 以下概要まんまだけども例をば。 package Hoge; use strict; use warnings; use self; sub new { my $class = shift; return bless {} , $class || ref $class; } sub hoge { if ( args ) { self->{hoge} = args; } return self->{hoge}; } my $obj = Hoge->new; $obj->hoge(100); print $obj->hoge; # 1

    self-0.11なるものを触ってみた - Unknown::Programming
    vkgtaro
    vkgtaro 2007/11/03
    self の詳しい説明とベンチマーク。
  • HTML::FillInFormがバージョンアップ(v2.00)したようだ - Unknown::Programming

    HTML-FillInForm-v2.00 とりあえず前バージョンとの差分を流し読みしてみたところ、 fillメソッドがクラスメソッド呼び出しできるようになったっぽい。 # 今まで my $fill = HTML::FillInForm->new; my $output = $fill->fill( scalarref => \$html ); # 新仕様 my $output = HTML::FillInForm->fill( scalarref => \$html ); でもうひとつの新仕様は、オプションの指定が無くてもOKになった。つまり、 # 今まで my $output = $fill->fill( scalarref => \$html , fdat => \%fdat ); # 新仕様 my $output = HTML::FillInForm->fill( \$html ,

    HTML::FillInFormがバージョンアップ(v2.00)したようだ - Unknown::Programming
  • Class::C3::Componentisedキタコレ - Unknown::Programming

    こりゃあいい。 Class::C3::Componentised DBIx::Class::ComponentisedがClass::C3::ComponentisedとしてDBIx::Classから切り離されました。 スバラシス。 1年くらい前の記事で切り離されないかなーとぼやいてて、とりあえずそんときは会社内だけで使うモジュールとして作ったことを思い出した。 これでもう自作の方は使う必要なくなたね。はは。

    Class::C3::Componentisedキタコレ - Unknown::Programming
  • C::P::FV::S::Aを使ってる時にFV::S::P::DBIC::Uが使えない?件 - Unknown::Programming

    タイトルは「Catalyst::Plugin::FormValidator::Simple::Autoを使ってる時にFormValidator::Simple::Plugin::DBIC::Uniqueが使えない?件」です。 長いので短くしてみました。 使えないというかどうやって使うのかがわからないというのが正解なんですが、FVS::Auto使って zip: - rule: [ 'NOT_DBIC_UNIQUE' , 'MyApp::Model::DBIC::Zipcode' , 'zip'] message: 存在しない郵便番号です みたいに書いてもFVS::P::DBIC::Uniqueエラーになっちゃいます。 Catalystが内部で保持しているmodel(ResultSet)オブジェクトを利用したいのですが現状のままじゃ無理ぽい? myapp.yamlでパスに変換してくれる特殊構文

    C::P::FV::S::Aを使ってる時にFV::S::P::DBIC::Uが使えない?件 - Unknown::Programming
    vkgtaro
    vkgtaro 2007/07/06
    諦めてた(;'-')
  • さぁ!use ttに触れよう! - Unknown::Programming

    Module::Compileを利用したttモジュールですが、なんかDBIx::Class::StorageReadOnlyとか見てたら実践投入されてたりして、もしかしたらこの先バリバリ使われていくのかなぁ?とか思って僕もちょっと触ってみた。 例題ってことでアクセサを作ってみた。 package Hoge; use strict; use warnings; use tt (accessors => [qw/name address mail/]); [% FOR accessor IN accessors %] sub [% accessor %] { my $self = shift; $self->{q{[% accessor %]}} = shift if @_; $self->{q{[% accessor %]}}; } [% END %] no tt; sub new { bl

    さぁ!use ttに触れよう! - Unknown::Programming
    vkgtaro
    vkgtaro 2007/05/15
  • 勝手に添削を添削 HTTP::MobileUserID - Unknown::Programming

    うぉぅ。弾さんから初の添削頂きました。 #あ、ちなみにパッケージ名だけどHTTP::MobileAgentと揃えるためにJapaneseは無しにしました 携帯のユーザーIDを取得する - Unknown::Programming 404 Blog Not Found:perl - 勝手に添削 - HTTP::MobileUserID::Japanese コードそのものというより、メソッド名がまずい。is_support()では英語になっていない。日専用モジュールではあるけど、CPANとかにうpするとしたら、これだとキョーレツに違和感がある。正しくはis_suppoted()またはis抜きのsupported()。 is_exists()の方は、has_user_id()が望ましいだろう。 きゃああ。これは恥ずかしい。 なんでもかんでもis_をつければそれっぽいっしょと考えてることがバレバ

    勝手に添削を添削 HTTP::MobileUserID - Unknown::Programming
    vkgtaro
    vkgtaro 2007/05/06
    HTTP::MobileUserID
  • 携帯のユーザーIDを取得する - Unknown::Programming

    DoCoMoの場合は端末ID、SoftBankの場合はユーザID、AUの場合はサブスクライバIDを返すというもの。 CPAN漁ってみたところ、一応HTTP::MobileAgent::Plugin::ExtensionやSledge::MobileGate::Mobileとか携帯のIDを取得できるヤツはあった。 だけど、HTTP::MobileAgent::Plugin::ExtensionはSoftBankのときにUAから取得できるシリアルナンバーしか取れない。あとDoCoMoのis_utnの判定がhtml_version取得できない場合に未対応になるのがどうにもいけてない。 一方Sledge::MobileGate::MobileはユーザID取れるには取れるんだけど取得できなかった場合にシリアルナンバー返すんでちょい微妙。というかどっちにしろSledgeしからしか扱えないのでもっと汎用

    携帯のユーザーIDを取得する - Unknown::Programming
  • Catalyst::Plugin::FillInFormで文字が二重に化ける - Unknown::Programming

    ってかね。 すべてがUTF8でいけるなら当になんの問題もでないのに出力をShift_JISにしなきゃいけないせいで各所各所でUTF8+Shift_JIS混合問題ややUTF8フラグ問題やその他もろもろ問題ですぎってばよ! 今度はFillInForm。 これ、UTF8フラグがたってないせいで化ける。なのでFillInForm::ForceUTF8が必要。 でもCatalyst::Plugin::FillInForm::ForceUTF8は存在しない。無いなら作るしかない。 package Catalyst::Plugin::FillInForm::ForceUTF8; use strict; use HTML::FillInForm::ForceUTF8; use NEXT; our $VERSION = '0.01'; sub finalize { my $c = shift; if (

    Catalyst::Plugin::FillInFormで文字が二重に化ける - Unknown::Programming
    vkgtaro
    vkgtaro 2007/04/21
    最近はとことん UTF-8 なので、いざって時のためにクリップ