Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Okinawapm#3

290 views

Published on

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

Published in: Software
  • Be the first to comment

  • Be the first to like this

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 がいい感じ

×