• Like
Perl WAF Overview, with mod_perl - Hokkaido.pm#7 #hokkaidopm
Upcoming SlideShare
Loading in...5
×

Perl WAF Overview, with mod_perl - Hokkaido.pm#7 #hokkaidopm

  • 775 views
Uploaded on

このスライドは 2012/05/13に行われたHokkaido.pm#7にて「飛び入りLT」を行った際に休憩時間中の10分で作った即席スライドに、実際のトーク内容を織りまぜて再編集したものです

このスライドは 2012/05/13に行われたHokkaido.pm#7にて「飛び入りLT」を行った際に休憩時間中の10分で作った即席スライドに、実際のトーク内容を織りまぜて再編集したものです

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • アップ時点でのスライドの中で言及していませんが、コードをアップロードしたGistのURLは https://gist.github.com/3207493 です。
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
775
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
1
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Transcript

  • 1. Perl WAF Overview, with mod_perl 株式会社fonfun 尾形 鉄次 (OGATA Tetsuji) Twitter: @xtetsuji 2012/05/12 Hokkaido.pm#7
  • 2. *Preface for readers*• このスライドは 2012/05/13に行われた Hokkaido.pm#7にて「飛び入りLT」を 行った際に休憩時間中の10分で作った 即席スライドに、実際のトーク内容を 織りまぜて再編集したものです
  • 3. 自己紹介
  • 4. 自己紹介• 尾形 鉄次 (OGATA Tetsuji)• Twitter: @xtetsuji• Blog: http://post.tetsuji.jp/• 出身は北海道河東郡音更町(帯広市の隣)• 大学で上京して現在は東京の会社に勤務
  • 5. 自己紹介• Hokkaido.pm 3回目の参加• Hokkaido.pm#5「mod_perl温故知新」• Hokkaido.pm#6「mod_perl Hacks PHP」• モダンPerlに乗れていない30代• mod_perl Hacker…なのか?
  • 6. 所属紹介• 株式会社fonfun(フォンファン) http://www.fonfun.co.jp/ • 主力製品:リモートメール http://rmail.jp/
  • 7. Perl WAF,ancient and modern
  • 8. Perl WAF, ancient• raw (not WAF?)• CGI::Application• ...etc
  • 9. Perl WAF, modern• Catalyst• Jifty• ...etc
  • 10. Perl WAF, post-modern• Dancer• Mojolicious• Amon2• Kossy• ...etc
  • 11. What is WAF?• 「MVC分離」を促進するもの? • 違う• Catalystの失敗例? • ModelをWAFに密着させると、外側の 管理ツール等から使いづらくなる
  • 12. What is WAF?• 私はこう思う… HTTP Request/Responseの抽象化
  • 13. What is WAF?• HTTP Request/Responseの抽象化 • Web Serverごとの差異を吸収 • Catalyst::Engine:: とかのバッドノウハウ• PSGI/Plackの結実へ
  • 14. そんな細かい事より mod_perl2
  • 15. みんな大好きmod_perl2
  • 16. Latest Perl WAF fashion• Sinatra (WAF, powered by Ruby) Like• Perl post-modern WAFs almost have Sinatratic syntax• Lightweight• Controller oriented
  • 17. WAF by mod_perl2• mod_perl1 は割愛、mod_perl2 を使う• mod_perl2 のResponseHandlerを Sinatra Like にすれば WAF って言っていいん ジャマイカ?
  • 18. WAF by mod_perl2• 「Web Serverごとの差異を吸収」とか さっき言っていた事は無視!• Apache2/mod_perl2べったり• mod_perl2の $r (Apache2::RequestRec)は Request/Responseを良く抽象化している
  • 19. mod_perl2 handler’ssimple “Hello world”
  • 20. package MyApache2::Hello;use strict;use warnings;use Apache2::RequestRec;use Apache2::RequestIO;use Apache2::Const -compile => qw(OK);sub handler { my $r = shift; $r->content_type("text/plain"); $r->print("Hello, world"); return Apache2::Const::OK;}1;__END__<Location /> PerlResponseHandler MyApache2::Hello</Location>
  • 21. これをSinatra Likeに すればいい
  • 22. ならばと書いてみたMyApache2::Sinatratic
  • 23. package MyApache2::Sinatratic;use strict;use warnings;# $CALLBACK->{$handler_package}->{$http_method} = [ [$url, $handler], ... ];my $CALLBACK = {};sub import { my $pkg = shift; my @args = @_; my $callpkg = caller(0); for my $method (qw(get post put del)) { $CALLBACK->{$callpkg}->{$method} = []; } # sub handler definition require Apache2::RequestRec; require Apache2::RequestUtil; require APR::Table; no strict refs; *{"$callpkg::handler"} = &import_handler; for my $method (qw(get post put del)) { *{"$callpkg::$method"} = sub { my ($url, $handler) = @_; push @{$CALLBACK->{$callpkg}->{$method}}, [$url, $handler]; }; } *{"$callpkg::default"} = sub { my $handler = shift; $CALLBACK->{$callpkg} ||= {}; $CALLBACK->{$callpkg}->{default} = $handler; };}
  • 24. 概要はこんな感じ
  • 25. mod_perl2 handler’sSinatratic “Hello world”
  • 26. package MyApache2::Hello2;use strict;use warnings;use Apache2::RequestRec;use Apache2::RequestIO;use Apache2::Const -compile => qw(OK);use MyApache2::Sinatratic;get / => sub { my $r = shift; $r->content_type("text/plain"); $r->print("Hello, world"); return Apache2::Const::OK;};1;__END__<Location /> PerlResponseHandler MyApache2::Hello2</Location>
  • 27. Sinatraっぽくなった!mod_perl2もWAFだ!
  • 28. MyApache2::Sinatratic• …というのは完全なるジョーク• 足りない機能、バグ満載 • プレースホルダに対応したつもり程度
  • 29. MyApache2::Sinatratic• 物好きのためにGistに放り込んだ• 使う人はいないと思うけど、使おうと 思う勇者はCAVEATSを熟読して!• 勇者が集まればModPerl::Sinatratic(仮称) プロジェクトもやっちゃうかも!
  • 30. MyApache2::Sinatratic• 書いていて思った事 • Sinatra LikeなWAFって、Plack無しでも こう作ればいいんだと勉強できた • シンボルテーブルいじり楽しい♪ • I ♡ Perl!
  • 31. ご清聴ありがとうございました