タグ

ブックマーク / ktat.hatenadiary.jp (12)

  • Amon2を継承して自分のWAFを作る - Practice of Programming

    2ヶ月くらい前からか、id:tokuhiromさん作成のAmon2を会社のFrameworkのベースにしています。 Amon2は拡張しやすい感じだし、Flavorをメンテするのは結構だるいし、会社なら共通させたほうがいいなーということで、継承して使ってます(Flavorも使っていますけど)。ORマッパーはid:nekokakさんのTeng、テンプレートはid:gfxさんのText::Xslate。 当分公開できるような状態にはならない気がするので、こんな感じにしてます的な話(実際のコードと同じだったり、全然違ったりするところもあるけど、手を入れたポイント的な話)。仮に、MyWAFていう名前空間で書きます。 コードが断片的なのでよくわかんないかも…しれません。 最近書かれているAmon2に関する記事 id:tokuhriomさん自身の解説 http://blog.64p.org/entry/

    Amon2を継承して自分のWAFを作る - Practice of Programming
  • Unicodeブロックを組み合わせて正規表現で使う - Practice of Programming

    Unicodeブロック使おうと思ってググってたら。 \p{InHalfwidthAndFullwidthForms} # 半角カナなど(※0-9とかA-Zにもマッチするみたい・・) http://blog.livedoor.jp/sasata299/archives/51194035.html あら、そうなんだ。 perldoc unicodeを読み直すと、Unicodeブロックを組み合わせてユーザー定義の文字プロパティ(User-Defined Character Properties)を作れると書いてあった。In/Isから始まる次のような関数を定義する。 package Hoge; sub InHankakuKana { return <<'END'; +utf8::InHalfwidthAndFullwidthForms -utf8::N -utf8::Ll -utf8::Lu EN

    Unicodeブロックを組み合わせて正規表現で使う - Practice of Programming
  • TemplateのWRAPPER - Practice of Programming

    2009/2/1追記 WRAPPERで勘違いしていた。METAでしか値を渡せないのかと思ってたら、普通に渡せるんですね。下記のMETAでやってるやつ、別にMETAでやる必要がないですね orz CatalystのTTSiteで見かけてから、WRAPPERを使って楽をするようにしています。 同じprefixで共通のものを読ませる jQueryとそのプラグインとかですね。 [% META use_jquery_multi_file_upload = 1 %]とか、書くと、jQuery体と、プラグインを読み込むような感じ。 ラップされるテンプレート側で [% META use_jquery_multi_file_upload = 1 %]のように書いて、ラップする側で、 [% IF template.use_jquery || template.use_jquery_multi_file_up

    TemplateのWRAPPER - Practice of Programming
    dealforest
    dealforest 2010/02/20
    これ便利
  • LinkSeeker スクレイピングフレームワーク - Practice of Programming

    最近、スクレイピングすることが多かったので、面倒くさくなって作りました。まだ、いろいろ途中ではありますが。 初Mouse、初git、初githubなんで、なんか変なことしてたらすみません。 http://github.com/ktat/LinkSeeker/ スクレイピングするときは、以前書いてますが、下記のような処理をしています。 URLのページを取得する (URLのページを保存) スクレイピングする (スクレイピングしたデータを保存) データをDBに入れたりする これを、各クラスにばらけさせました。 LinkSeeker::Getter (URLのページ取得) LinkSeeker::HtmlStore (取得したページの保存) LinkSeeker::Scraper (ページのスクレイピング) -- 実装は継承したsubclassで LinkSeeker::DataStore (スク

    LinkSeeker スクレイピングフレームワーク - Practice of Programming
  • スクレイピングとかするとき - Practice of Programming

    下記を簡単にするためのLinkSeekerというモジュール作りました。後、ネストしてscrapingできるように。でも、ドキュメントもテストもないです(^^;master/sample ディレクトリ内の news.yml 見ていただければと思います。 取って来て保存する(LWP::UserAgent, File::Slurp) 解釈して、データ化する(Web::Scraper, Storable/Data::Dumper) データをDBに入れる(DBIC) と段階を踏むようにしています。 プログラム内で分けるというよりは、別々のプログラムから実行できるようにしています。 1番目をしとくと、オフラインでも2番目以降の処理ができる。 2番目の解釈は意外と時間がかかる場合があるので、 3番目の処理を片付けるときに時間のロスがない。 Web Serviceとかだと、1番目と2番目がセットみたいなも

    スクレイピングとかするとき - Practice of Programming
  • [Perl]Exporterとimportじゃなくて、gotoとcaller - Practice of Programming

    某社の後輩に下記のブログの件は、普通はどうやって解決するのかと聞かれた(てか、後輩のブログだったようだ、なぜ言わないw)。 http://d.hatena.ne.jp/foosin/20090331/1238509129 僕も以前、悩んだことがあり、Exporterのドキュメントを見たら、まんま書いてたという。export_to_level。 sub import { strict->import; warnings->import; __PACKAGE__->export_to_level(1, @_); } で、まぁ、おしまい。 Perl のExportの仕組みは、perldoc -f use を見るとわかりやすいんだけど。 BEGIN { require Module; import Module LIST; } LIST部分が、use Module (...)の、(...)の部分。

    [Perl]Exporterとimportじゃなくて、gotoとcaller - Practice of Programming
  • 後置ループにもスコープがある? - Practice of Programming

    %SIGに同じ関数登録しようとして、 local $SIG{$_} = sub {...} for qw/INT TERM ALRM .../; みたいなことをしたんだが。うまくいかなかった。 どうも、後置forの前は見えないスコープがあるようだ。localが効いてない。 ちなみに、if はそんなことはない。 my $hoge = 1 if 1; print $hoge; もちろん、こんな使い方はありえないけど。 ラクダ 4.5 裸のブロック(p.143) に、「裸のブロックは一回だけ実行されるループなので、ループ制御ができる。ifやunlessはループではないので使えない」みたいな旨が書かれている。これは、 { # ... last if ...; # ... last if ...; } みたいなことができますよな話なんですが。if/unlessとループのブロックは、ループ制御ができ

    後置ループにもスコープがある? - Practice of Programming
    dealforest
    dealforest 2009/02/06
    後置ループでもループ制御できる
  • ファイルテスト演算子 -M -A -C には基準の時間がある - Practice of Programming

    ファイルテスト演算子 -M はファイルが作成されてからの日数を返す。 86400かけてやれば、秒数になる。 print 86400 * (-M $file); で、File::Findをループで回して、ファイルが変更されたら云々という処理に使おうかと思ったのだが、うまくいかない。次のscriptは、同じ値がずっと表示されてしまい、変更するとマイナスになるが、その値も以後変わらない。 $|=1; while(1) { sleep 1; print 86400 * (-M $file), "\n"; } なんか基準の時間があるっぽいなぁと思って、ラクダを調べたところ、p.116に書いてた。 -M -A -C はスクリプトが実行された時間($^T)を基準にしているということだ。 なので、$^T = time してやればいいとのこと。 $|=1; while(1) { local $^T = t

    ファイルテスト演算子 -M -A -C には基準の時間がある - Practice of Programming
    dealforest
    dealforest 2009/02/01
    $^T(実行時間) を基準にしているとのこと。
  • attributes - Practice of Programming

    てきとーなんで信用しないでください。アトリビュートについて、調べてみました。 暇ができたら、perldoc attributesでも訳します。 アトリビュートというのは、 sub index : Private{ ... }というように、サブルーチンの横にくっついている、: の横のもの、 上の例では、Privateになります。 Catalystでよく使われているのですが、Catalystでは、Private とか、Global とか、Regexとか色々あります。 何もしない状態だと、組み込みのアトリビュート以外のものを使うと、エラーになってしまいます。 組み込みのアトリビュートというのは、lvalue、method、locked などなど。 で、どうやったら、Catalystみたいなのできるのかなぁ、と調べてみました。 ちなみに、ここに書いているのは、package-specifiedなア

    attributes - Practice of Programming
  • Kansai.pm第9回ミーティング - Practice of Programming

    ひさびさに行ってきました。 Mooseとか、Hadoopとか、面白かったですよ。 naoyaさんが、グーグルの人みたいだったw LTでちょっと喋ってきましたが、 止められなかったので、時間オーバーしていまいた...。 ごめんなさい。喋りながら時間見れない人なので...。 前半、全部削ればよかった。 http://www.rwds.net/wiki?page=Extending+Test%3A%3ABase 資料はだーいぶぐだぐだです。 喋れなかったことで... evalの前にオブジェクト作っておくフィルター こんなフィルターを書くと便利。 evalの前で、テストコード内で使うオブジェクトを作っておけば、 わざわざオブジェクト作る手間が省けて便利。 sub evaldt { my $code = shift; my $d = Wiz::DateTime->now(); my $d2 = Wi

    Kansai.pm第9回ミーティング - Practice of Programming
    dealforest
    dealforest 2008/07/15
    testについて
  • .tファイルを t/hoge/*.t に置きたいとき - Practice of Programming

    今日はYAPC::Asia 2008 でしたね。僕は最近の体調の悪さ具合を考えて、午前中は自分の体調と相談してました。 いけそうだなーと思ったので、午後から参加。 YAPCでテストの話題があったから、書いている...わけではないけど。 ExtUtils::MakeMaker を使ってる場合ですが、Tutorialには、 t/ の下にフラットにファイルを置かないといけないと書いてある。 t/ Tests for your modules go here. Each test filename ends with a .t. So t/foo.t/ 'make test' will run these tests. The directory is flat, you cannot, for example, have t/foo/bar.t run by 'make test'. でも、ちょ

    .tファイルを t/hoge/*.t に置きたいとき - Practice of Programming
    dealforest
    dealforest 2008/06/27
    .tファイルの階層変更
  • Practice of Programming - SVK Tutorials翻訳

    Ron Bieberさんによる、SVK Tutorialsを翻訳します。 Part I から Part IIIまであるので、ここをまとめのリンク置場とします。 Part1 Part II Part III 今回は(も?)、結構適当訳かも...。 9/25追記: 今回、翻訳がしんどかったです。修行が足りないんでしょうが、ちっと今まで訳した文章の中でも、訳しづらい部類に入りまして...。読みづらいとは思いますが、ご辛抱ください。なお、これを読んで十分ってことはありません。pull/pushについて言及されていないので、片手落ち感があります。 svk pull/push について簡単に説明すると、下記みたいな感じです。 svk pull は、 sync smerge -l //mirror/xxx //local/xxx update working copy を一緒にやって、ログメッセージは自

    Practice of Programming - SVK Tutorials翻訳
    dealforest
    dealforest 2008/06/15
    svk tutorials
  • 1