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

>100 Views

February 25, 24

スライド概要

2012/05/13 に Hokkaido.pm#7 で発表したスライドです。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
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’s simple “Hello world”

20.
[beta]
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.
[beta]
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’s Sinatratic “Hello world”

26.
[beta]
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.

ご清聴 ありがとうございました