Successfully reported this slideshow.
Your SlideShare is downloading. ×

Okinawapm#3

Ad

Mojolicious の拡張を考えた
@codehex

Ad

Who
• 上川 慶
• https://turtle.gq/
• 学科の鍵認証作りました。
• 最近 Go をよく書いてます。
• 就活も始めました <= new

Ad

去年開発したもの

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Upcoming SlideShare
YUI
YUI
Loading in …3
×

Check these out next

1 of 31 Ad
1 of 31 Ad

Okinawapm#3

Download to read offline

Okinawapm#3 で「去年Perlで作ったもの、今年Perlで作りたいもの」というテーマを基に発表しました

Okinawapm#3 で「去年Perlで作ったもの、今年Perlで作りたいもの」というテーマを基に発表しました

More Related Content

Okinawapm#3

  1. 1. Mojolicious の拡張を考えた @codehex
  2. 2. Who • 上川 慶 • https://turtle.gq/ • 学科の鍵認証作りました。 • 最近 Go をよく書いてます。 • 就活も始めました <= new
  3. 3. 去年開発したもの
  4. 4. Text::Shirasu https://metacpan.org/pod/Text::Shirasu
  5. 5. use utf8; use feature ':5.10'; use Text::Shirasu; my $ts = Text::Shirasu->new; # this parameter same as Text::MeCab my $normalize = $ts->normalize("昨日の晩御飯は「鮭のふりかけ」と「味噌汁」だけでした。"); $ts->parse($normalize); for my $node (@{ $ts->nodes }) { say $node->surface; } say $ts->join_surface; my $filter = $ts->filter(type => [qw/名詞 助動詞 記号/], 記号 => [qw/括弧開 括弧閉/]; say $filter->join_surface; SYNOPSIS
  6. 6. 昨日 の 晩 御飯 は 「 鮭 の ふりかけ 」 と 「 味噌汁 」 だけ でし た 。 昨日の晩御飯は「鮭のふりかけ」と「味噌汁」だけでした。 昨日晩御飯「鮭」「味噌汁」でした。
  7. 7. 今年は
  8. 8. WebApp を開発していきたい
  9. 9. Mojolicious
  10. 10. 拡張していきたい!
  11. 11. Go では echo という WAF 使ってミドルウェアを カスタマイズしていった https://github.com/Code-Hex/kamemaru
  12. 12. Mojolicious は?
  13. 13. Mojolicious + Plack
  14. 14. #!/usr/bin/env perl use strict; use warnings; use FindBin; BEGIN { unshift @INC, "$FindBin::Bin/../lib" } use Mojolicious::Commands; use Plack::Middleware; builder { Mojolicious::Commands->start_app('Hello'); }; ./script/app.psgi
  15. 15. $ start_server --port=8000 --pid- file=hello.pid --status- file=hello.status -- plackup -s Starlet script/hello.psgi 起動方法
  16. 16. $ cat hello.pid | xargs kill -HUP 再起動
  17. 17. $ cat hello.pid | xargs kill -TERM 終了
  18. 18. これで
 Plack::Middleware
 が使える!!
  19. 19. 例えば
  20. 20. File::RotateLogs https://metacpan.org/pod/File::RotateLogs
  21. 21. File::RotateLogs • ログは無限に増えていく • そこで一定期間もしくは容量になったら上書きして 新しいログを作成する • 最近のログに手軽にアクセスする
  22. 22. #!/usr/bin/env perl use strict; use warnings; use FindBin; BEGIN { unshift @INC, "$FindBin::Bin/../lib" } use Mojolicious::Commands; use Plack::Middleware; use Cwd; my $rotatelogs = File::RotateLogs->new( logfile => File::Spec->catfile(getcwd(), 'log', 'access_log.%Y%m%d%H%M'), linkname => File::Spec->catfile(getcwd(), 'log', 'access_log'), rotationtime => 3600, maxage => 86400, #1day ); builder { enable 'AccessLog', logger => sub { $rotatelogs->print(@_) }; Mojolicious::Commands->start_app('Hello'); }; ./script/app.psgi
  23. 23. ログをもっとパースしやすくする
  24. 24. ログを ltsv フォーマットで作成
  25. 25. ltsvとは • http://ltsv.org/ • 区切りをスペースではなくタブ行う • スペースだと区切ってはいけないところも分割して しまう
  26. 26. Plack::Middleware::AxsLog https://metacpan.org/pod/Plack::Middleware::AxsLog
  27. 27. #!/usr/bin/env perl use strict; use warnings; use FindBin; BEGIN { unshift @INC, "$FindBin::Bin/../lib" } use Mojolicious::Commands; use Plack::Middleware; use Cwd; my $rotatelogs = File::RotateLogs->new( logfile => File::Spec->catfile(getcwd(), 'log', 'access_log.%Y%m%d%H%M'), linkname => File::Spec->catfile(getcwd(), 'log', 'access_log'), rotationtime => 3600, maxage => 86400, #1day ); builder { enable 'AxsLog', lets => 1, combined => 1, response_time => 1, logger => sub { $rotatelogs- >print(@_) }; Mojolicious::Commands->start_app('Hello'); }; ./script/app.psgi
  28. 28. host:127.0.0.1<TAB>ident:-<TAB>user:frank<TAB>time: [10/Oct/2000:13:55:36 -0700]<TAB>req:GET / apache_pb.gif HTTP/1.0<TAB>status:200<TAB>size: 2326<TAB>referer:http://www.example.com/ start.html<TAB>ua:Mozilla/4.08 [en] (Win98; I ;Nav) Example
  29. 29. パースしやすい! $ perl -nlE 'say+(split /t/, $_)[2]' access_log
  30. 30. まとめ
  31. 31. まとめ • 去年は基礎を覚えていったと思う • 今年は Mojolicious の拡張を考えた • Mojo + Plack::Middleware がいい感じ

×