Mojo. Веб в коробке!
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Mojo. Веб в коробке!

  • 2,505 views
Uploaded on

BY Perl Too 2009

BY Perl Too 2009

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,505
On Slideshare
2,482
From Embeds
23
Number of Embeds
2

Actions

Shares
Downloads
8
Comments
0
Likes
2

Embeds 23

http://lj-toys.com 15
http://l.lj-toys.com 8

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

Transcript

  • 1. Mojo. Веб в коробке! BY Perl Too 2009 17 октября 2009 г.
  • 2. http://mojolicious.org/ 17 октября 2009 г.
  • 3. Sebastian Riedel создатель Catalyst и Mojo http://labs.kraih.com/ 17 октября 2009 г.
  • 4. http://twitter.com/kraih 17 октября 2009 г.
  • 5. Catalyst + Mojo = ? 17 октября 2009 г.
  • 6. Что такое Mojo? 17 октября 2009 г.
  • 7. Что такое Mojo? • Pure Perl веб-фреймворк • Без зависимостей (начиная с Perl 5.10) • Объектно-ориентированное API • Поддержка HTTP 1.1 (клиент-сервер) • CGI, FastCGI, Daemon и Daemon Prefork • MVC веб-фреймворки: Mojolicious и Mojolicious::Lite 17 октября 2009 г.
  • 8. Что такое Mojo? • Pure Perl веб-фреймворк • Без зависимостей (с версии Perl 5.8.1) • Объектно-ориентированное API • Поддержка HTTP 1.1 (клиент-сервер) • CGI, FastCGI, Daemon и Daemon Prefork • MVC веб-фреймворки: Mojolicious и Mojolicious::Lite 17 октября 2009 г.
  • 9. Что такое Mojo? • Pure Perl веб-фреймворк • Без зависимостей (с версии Perl 5.8.1) • Объектно-ориентированное API • Поддержка HTTP 1.1 (клиент-сервер) • CGI, FastCGI, Daemon и Daemon Prefork • MVC веб-фреймворки: Mojolicious и Mojolicious::Lite 17 октября 2009 г.
  • 10. Что такое Mojo? • Pure Perl веб-фреймворк • Без зависимостей (с версии Perl 5.8.1) • Объектно-ориентированное API • Поддержка HTTP 1.1 (клиент-сервер) • CGI, FastCGI, Daemon и Daemon Prefork • MVC веб-фреймворки: Mojolicious и Mojolicious::Lite 17 октября 2009 г.
  • 11. Что такое Mojo? • Pure Perl веб-фреймворк • Без зависимостей (с версии Perl 5.8.1) • Объектно-ориентированное API • Поддержка HTTP 1.1 (клиент-сервер) • CGI, FastCGI, Daemon и Daemon Prefork • MVC веб-фреймворки: Mojolicious и Mojolicious::Lite 17 октября 2009 г.
  • 12. Что такое Mojo? • Pure Perl веб-фреймворк • Без зависимостей (с версии Perl 5.8.1) • Объектно-ориентированное API • Поддержка HTTP 1.1 (клиент-сервер) • CGI, FastCGI, Daemon и Daemon Prefork • MVC веб-фреймворки: Mojolicious и Mojolicious::Lite 17 октября 2009 г.
  • 13. Что такое Mojo? • Pure Perl веб-фреймворк • Без зависимостей (с версии Perl 5.8.1) • Объектно-ориентированное API • Поддержка HTTP 1.1 (клиент-сервер) • CGI, FastCGI, Daemon и Daemon Prefork • MVC веб-фреймворки: Mojolicious и Mojolicious::Lite 17 октября 2009 г.
  • 14. Pure Perl веб-фреймворк 17 октября 2009 г.
  • 15. • Mojo::Base • Mojo::ByteStream • Mojo::Template, Mojo::JSON • Mojo::Loader, Mojo::Log, Mojo::Path • Mojo::URL, Mojo::Parameters, Mojo::Content • Mojo::Message::Request, Mojo::Message::Response, Mojo::Headers, Mojo::Cookie, Mojo::Date 17 октября 2009 г.
  • 16. • Mojo::Base • Mojo::ByteStream • Mojo::Template, Mojo::JSON • Mojo::Loader, Mojo::Log, Mojo::Path • Mojo::URL, Mojo::Parameters, Mojo::Content • Mojo::Message::Request, Mojo::Message::Response, Mojo::Headers, Mojo::Cookie, Mojo::Date 17 октября 2009 г.
  • 17. Mojo::Base Minimal Base Class For Mojo Projects 17 октября 2009 г.
  • 18. package App; use base ‘Mojo::Base’; __PACKAGE__->attr(‘conf’ => sub { return do ‘conf/app.conf’; }); __PACKAGE__->attr(‘db’ => sub { my $self = shift; return Util->db($self->conf->{'db'}); }); sub dispatch { ... } 17 октября 2009 г.
  • 19. package App; use base ‘Mojo::Base’; __PACKAGE__->attr(‘conf’ => sub { return do ‘conf/app.conf’; }); __PACKAGE__->attr(‘db’ => sub { my $self = shift; return Util->db($self->conf->{'db'}); }); sub dispatch { ... } 17 октября 2009 г.
  • 20. package App; use base ‘Mojo::Base’; __PACKAGE__->attr(‘conf’ => sub { return do ‘conf/app.conf’; }); __PACKAGE__->attr(‘db’ => sub { my $self = shift; return Util->db($self->conf->{'db'}); }); sub dispatch { ... } 17 октября 2009 г.
  • 21. • Mojo::Base • Mojo::ByteStream • Mojo::Template, Mojo::JSON • Mojo::Loader, Mojo::Log, Mojo::Path • Mojo::URL, Mojo::Parameters, Mojo::Content • Mojo::Message::Request, Mojo::Message::Response, Mojo::Headers, Mojo::Cookie, Mojo::Date 17 октября 2009 г.
  • 22. Mojo::ByteStream ByteStream 17 октября 2009 г.
  • 23. use Mojo::ByteStream; my $s = Mojo::ByteStream->new('foo_bar'); $s->camelize; $s->decamelize; $s->b64_encode; $s->b64_decode; $s->encode('utf8'); $s->decode('utf8'); $s->html_escape; $s->html_unescape; $s->qp_encode; $s->qp_decode; $s->quote; $stream->unquote; $s->url_escape; $s->url_unescape; $s->xml_escape; 17 октября 2009 г.
  • 24. use Mojo::ByteStream; my $s = Mojo::ByteStream->new('foo_bar'); $s->camelize; $s->decamelize; $s->b64_encode; $s->b64_decode; $s->encode('utf8'); $s->decode('utf8'); $s->html_escape; $s->html_unescape; $s->qp_encode; $s->qp_decode; $s->quote; $stream->unquote; $s->url_escape; $s->url_unescape; $s->xml_escape; 17 октября 2009 г.
  • 25. use Mojo::ByteStream; my $s = Mojo::ByteStream->new('foo_bar'); $s->camelize; $s->decamelize; $s->b64_encode; $s->b64_decode; $s->encode('utf8'); $s->decode('utf8'); $s->html_escape; $s->html_unescape; $s->qp_encode; $s->qp_decode; $s->quote; $stream->unquote; $s->url_escape; $s->url_unescape; $s->xml_escape; 17 октября 2009 г.
  • 26. use Mojo::ByteStream; my $s = Mojo::ByteStream->new('foo_bar'); $s->camelize; $s->decamelize; $s->b64_encode; $s->b64_decode; $s->encode('utf8'); $s->decode('utf8'); $s->html_escape; $s->html_unescape; $s->qp_encode; $s->qp_decode; $s->quote; $stream->unquote; $s->url_escape; $s->url_unescape; $s->xml_escape; 17 октября 2009 г.
  • 27. use Mojo::ByteStream; my $s = Mojo::ByteStream->new('foo_bar'); $s->camelize; $s->decamelize; $s->b64_encode; $s->b64_decode; $s->encode('utf8'); $s->decode('utf8'); $s->html_escape; $s->html_unescape; $s->qp_encode; $s->qp_decode; $s->quote; $stream->unquote; $s->url_escape; $s->url_unescape; $s->xml_escape; 17 октября 2009 г.
  • 28. use Mojo::ByteStream; my $s = Mojo::ByteStream->new('foo_bar'); $s->camelize; $s->decamelize; $s->b64_encode; $s->b64_decode; $s->encode('utf8'); $s->decode('utf8'); $s->html_escape; $s->html_unescape; $s->qp_encode; $s->qp_decode; $s->quote; $stream->unquote; $s->url_escape; $s->url_unescape; $s->xml_escape; 17 октября 2009 г.
  • 29. use Mojo::ByteStream; my $s = Mojo::ByteStream->new('foo_bar'); $s->camelize; $s->decamelize; $s->b64_encode; $s->b64_decode; $s->encode('utf8'); $s->decode('utf8'); $s->html_escape; $s->html_unescape; $s->qp_encode; $s->qp_decode; $s->quote; $stream->unquote; $s->url_escape; $s->url_unescape; $s->xml_escape; 17 октября 2009 г.
  • 30. use Mojo::ByteStream; my $s = Mojo::ByteStream->new('foo_bar'); $s->camelize; $s->decamelize; $s->b64_encode; $s->b64_decode; $s->encode('utf8'); $s->decode('utf8'); $s->html_escape; $s->html_unescape; $s->qp_encode; $s->qp_decode; $s->quote; $stream->unquote; $s->url_escape; $s->url_unescape; $s->xml_escape; 17 октября 2009 г.
  • 31. use Mojo::ByteStream; my $s = Mojo::ByteStream->new('foo_bar'); $s->camelize; $s->decamelize; $s->b64_encode; $s->b64_decode; $s->encode('utf8'); $s->decode('utf8'); $s->html_escape; $s->html_unescape; $s->qp_encode; $s->qp_decode; $s->quote; $stream->unquote; $s->url_escape; $s->url_unescape; $s->xml_escape; 17 октября 2009 г.
  • 32. • Mojo::Base • Mojo::ByteStream • Mojo::Template, Mojo::JSON • Mojo::Loader, Mojo::Log, Mojo::Path • Mojo::URL, Mojo::Parameters, Mojo::Content • Mojo::Message::Request, Mojo::Message::Response, Mojo::Headers, Mojo::Cookie, Mojo::Date 17 октября 2009 г.
  • 33. Mojo::Template Perlish Templates! 17 октября 2009 г.
  • 34. % my $self = shift; % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li><%= $_->{title} %></li> %} </ul> 17 октября 2009 г.
  • 35. • Mojo::Base • Mojo::ByteStream • Mojo::Template, Mojo::JSON • Mojo::Loader, Mojo::Log, Mojo::Path • Mojo::URL, Mojo::Parameters, Mojo::Content • Mojo::Message::Request, Mojo::Message::Response, Mojo::Headers, Mojo::Cookie, Mojo::Date 17 октября 2009 г.
  • 36. • Mojo::Base • Mojo::ByteStream • Mojo::Template, Mojo::JSON • Mojo::Loader, Mojo::Log, Mojo::Path • Mojo::URL, Mojo::Parameters, Mojo::Content • Mojo::Message::Request, Mojo::Message::Response, Mojo::Headers, Mojo::Cookie, Mojo::Date 17 октября 2009 г.
  • 37. • Mojo::Base • Mojo::ByteStream • Mojo::Template, Mojo::JSON • Mojo::Loader, Mojo::Log, Mojo::Path • Mojo::URL, Mojo::Parameters, Mojo::Content • Mojo::Message::Request, Mojo::Message::Response, Mojo::Headers, Mojo::Cookie, Mojo::Date 17 октября 2009 г.
  • 38. • Mojo::Base • Mojo::ByteStream • Mojo::Template, Mojo::JSON • Mojo::Loader, Mojo::Log, Mojo::Path • Mojo::URL, Mojo::Parameters, Mojo::Content • Mojo::Message::Request, Mojo::Message::Response, Mojo::Headers, Mojo::Cookie, Mojo::Date 17 октября 2009 г.
  • 39. • Mojo::Base • Mojo::ByteStream • Mojo::Template, Mojo::JSON • Mojo::Loader, Mojo::Log, Mojo::Path • Mojo::URL, Mojo::Parameters, Mojo::Content • Mojo::Message::Request, Mojo::Message::Response, Mojo::Headers, Mojo::Cookie, Mojo::Date 17 октября 2009 г.
  • 40. • Mojo::Trasaction, Mojo::Stateful • Mojo::Client • Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::Daemon • Mojo::Server::Daemon::Prefork • Mojo::Command • Mojo::Command::Generate и ~ Server 17 октября 2009 г.
  • 41. • Mojo::Trasaction, Mojo::Stateful • Mojo::Client • Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::Daemon • Mojo::Server::Daemon::Prefork • Mojo::Command • Mojo::Command::Generate и ~ Server 17 октября 2009 г.
  • 42. • Mojo::Trasaction, Mojo::Stateful • Mojo::Client • Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::Daemon • Mojo::Server::Daemon::Prefork • Mojo::Command • Mojo::Command::Generate и ~ Server 17 октября 2009 г.
  • 43. • Mojo::Trasaction, Mojo::Stateful • Mojo::Client • Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::Daemon • Mojo::Server::Daemon::Prefork • Mojo::Command • Mojo::Command::Generate и ~ Server 17 октября 2009 г.
  • 44. • Mojo::Trasaction, Mojo::Stateful • Mojo::Client • Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::Daemon • Mojo::Server::Daemon::Prefork • Mojo::Command • Mojo::Command::Generate и ~ Server 17 октября 2009 г.
  • 45. • Mojo::Trasaction, Mojo::Stateful • Mojo::Client • Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::Daemon • Mojo::Server::Daemon::Prefork • Mojo::Command • Mojo::Command::Generate и ~ Server 17 октября 2009 г.
  • 46. • Mojo::Trasaction, Mojo::Stateful • Mojo::Client • Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::Daemon • Mojo::Server::Daemon::Prefork • Mojo::Command • Mojo::Command::Generate и ~ Server 17 октября 2009 г.
  • 47. Всё, что нужно есть Mojo – веб в коробке! 17 октября 2009 г.
  • 48. Почти всё, что нужно есть :) Mojo – веб в коробке! 17 октября 2009 г.
  • 49. Без зависимостей с версии Perl 5.8.1 17 октября 2009 г.
  • 50. Почти без зависимостей :) 17 октября 2009 г.
  • 51. Mojo runtime 17 октября 2009 г.
  • 52. Perl 5.005 17 октября 2009 г.
  • 53. Perl 5.006002 17 октября 2009 г.
  • 54. Perl 5.008001 17 октября 2009 г.
  • 55. Mojo Perl 5.010 17 октября 2009 г.
  • 56. Объектно- ориентированное API 17 октября 2009 г.
  • 57. package TestMojo; use base 'Mojo'; sub handler { my ($self, $tx) = @_; warn $tx->req; warn $tx->req->url; $tx->res->headers ->content_type('text/plain'); $tx->res->body('Hello Mojo!'); } 17 октября 2009 г.
  • 58. package TestMojo; use base 'Mojo'; sub handler { my ($self, $tx) = @_; warn $tx->req; warn $tx->req->url; $tx->res->headers ->content_type('text/plain'); $tx->res->body('Hello Mojo!'); } 17 октября 2009 г.
  • 59. package TestMojo; use base 'Mojo'; sub handler { my ($self, $tx) = @_; warn $tx->req; warn $tx->req->url; $tx->res->headers ->content_type('text/plain'); $tx->res->body('Hello Mojo!'); } 17 октября 2009 г.
  • 60. package TestMojo; use base 'Mojo'; sub handler { my ($self, $tx) = @_; warn $tx->req; warn $tx->req->url; $tx->res->headers ->content_type('text/plain'); $tx->res->body('Hello Mojo!'); } 17 октября 2009 г.
  • 61. use overload '""' => sub { shift->to_string }, fallback => 1; 17 октября 2009 г.
  • 62. package TestMojo; use base 'Mojo'; sub handler { my ($self, $tx) = @_; warn $tx->req; warn $tx->req->url; $tx->res->headers ->content_type('text/plain'); $tx->res->body('Hello Mojo!'); } 17 октября 2009 г.
  • 63. package TestMojo; use base 'Mojo'; sub handler { my ($self, $tx) = @_; warn $tx->req; warn $tx->req->url; $tx->res->headers ->content_type('text/plain'); $tx->res->body('Hello Mojo!'); } 17 октября 2009 г.
  • 64. package TestMojo; use base 'Mojo'; sub handler { my ($self, $tx) = @_; warn $tx->req; warn $tx->req->url; $tx->res->headers ->content_type('text/plain'); $tx->res->body('Hello Mojo!'); } 17 октября 2009 г.
  • 65. Генерация mojo-приложения 17 октября 2009 г.
  • 66. mojo generate app TestMojo [mkdir] test_mojo/script [write] test_mojo/script/test_mojo [chmod] test_mojo/script/test_mojo 744 [mkdir] test_mojo/lib [write] test_mojo/lib/TestMojo.pm [mkdir] test_mojo/t [write] test_mojo/t/basic.t 17 октября 2009 г.
  • 67. mojo generate app TestMojo [mkdir] test_mojo/script [write] test_mojo/script/test_mojo [chmod] test_mojo/script/test_mojo 744 [mkdir] test_mojo/lib [write] test_mojo/lib/TestMojo.pm [mkdir] test_mojo/t [write] test_mojo/t/basic.t 17 октября 2009 г.
  • 68. use FindBin; use lib "$FindBin::Bin/../lib"; use lib "$FindBin::Bin/../../lib"; # Application $ENV{MOJO_APP} ||= 'TestMojo'; use Mojo::Commands; Mojo::Commands->start; # ->start(‘cgi’) 17 октября 2009 г.
  • 69. mojo generate app TestMojo [mkdir] test_mojo/script [write] test_mojo/script/test_mojo [chmod] test_mojo/script/test_mojo 744 [mkdir] test_mojo/lib [write] test_mojo/lib/TestMojo.pm [mkdir] test_mojo/t [write] test_mojo/t/basic.t 17 октября 2009 г.
  • 70. mojo generate app TestMojo [mkdir] test_mojo/script [write] test_mojo/script/test_mojo [chmod] test_mojo/script/test_mojo 744 [mkdir] test_mojo/lib [write] test_mojo/lib/TestMojo.pm [mkdir] test_mojo/t [write] test_mojo/t/basic.t 17 октября 2009 г.
  • 71. #!/usr/bin/env perl use strict; use warnings; use Test::More tests => 1; use_ok('TestMojo'); 17 октября 2009 г.
  • 72. Поддержка HTTP 1.1 17 октября 2009 г.
  • 73. 17 октября 2009 г.
  • 74. MojoX::UserAgent Pascal Gaudette Спасибо Google of Summer Code 2009! 17 октября 2009 г.
  • 75. Поддержка CGI, FastCGI, Daemon, Daemon Prefork 17 октября 2009 г.
  • 76. script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork --port 80 17 октября 2009 г.
  • 77. script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork --port 80 17 октября 2009 г.
  • 78. PATH_INFO='/' script/ test_mojo cgi Легко тестировать Можно профилировать код, используя Devel::NYProf 17 октября 2009 г.
  • 79. script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork --port 80 17 октября 2009 г.
  • 80. Mojo::Server::FCGI script/test_mojo fcgi script/test_mojo fcgi_prefork 17 октября 2009 г.
  • 81. Mojo::Server::FCGI script/test_mojo fcgi script/test_mojo fcgi_prefork 17 октября 2009 г.
  • 82. Mojo::Server::FCGI script/test_mojo fcgi script/test_mojo fcgi_prefork 17 октября 2009 г.
  • 83. location / { fastcgi_pass 127.0.0.1:3000; fastcgi_param MOJO_APP App; fastcgi_param SCRIPT_NAME http://127.0.0.1:3000; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; } 17 октября 2009 г.
  • 84. location / { fastcgi_pass 127.0.0.1:3000; fastcgi_param MOJO_APP App; fastcgi_param SCRIPT_NAME http://127.0.0.1:3000; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; } 17 октября 2009 г.
  • 85. location / { fastcgi_pass 127.0.0.1:3000; fastcgi_param MOJO_APP App; fastcgi_param SCRIPT_NAME http://127.0.0.1:3000; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; } 17 октября 2009 г.
  • 86. location / { fastcgi_pass 127.0.0.1:3000; fastcgi_param MOJO_APP App; fastcgi_param SCRIPT_NAME http://127.0.0.1:3000; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; } 17 октября 2009 г.
  • 87. location / { fastcgi_pass 127.0.0.1:3000; fastcgi_param MOJO_APP App; fastcgi_param SCRIPT_NAME http://127.0.0.1:3000; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; } 17 октября 2009 г.
  • 88. script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork --port 80 17 октября 2009 г.
  • 89. MOJO_RELOAD=1 script/test_mojo daemon Код перезагружается при каждом запросе 17 октября 2009 г.
  • 90. script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork --port 80 17 октября 2009 г.
  • 91. script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork --port 80 script/test_mojo test 17 октября 2009 г.
  • 92. MVC веб-фреймворки 17 октября 2009 г.
  • 93. Mojolicious use base 'Mojo'; 17 октября 2009 г.
  • 94. • Mojolicious::Renderer • Mojolicous::Controller • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes 17 октября 2009 г.
  • 95. • Mojolicious::Renderer • Mojolicous::Controller • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes 17 октября 2009 г.
  • 96. • Mojolicious::Renderer • Mojolicous::Controller • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes 17 октября 2009 г.
  • 97. • Mojolicious::Renderer • Mojolicous::Controller • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes 17 октября 2009 г.
  • 98. • Mojolicious::Renderer • Mojolicous::Controller • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes 17 октября 2009 г.
  • 99. • Mojolicious::Renderer • Mojolicous::Controller • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes 17 октября 2009 г.
  • 100. Генерация mojolicious-приложения 17 октября 2009 г.
  • 101. mojolicious generate app TestApp 17 октября 2009 г.
  • 102. [mkdir] test_app/script [write] test_app/script/test_app [chmod] test_app/script/test_app 744 [mkdir] test_app/lib [write] test_app/lib/TestApp.pm [mkdir] test_app/lib/TestApp [write] test_app/lib/TestApp/Example.pm [mkdir] test_app/t [write] test_app/t/basic.t [mkdir] test_app/log [mkdir] test_app/public [write] test_app/public/404.html [exist] test_app/public [write] test_app/public/500.html 17 октября 2009 г.
  • 103. [mkdir] test_app/script [write] test_app/script/test_app [chmod] test_app/script/test_app 744 [mkdir] test_app/lib [write] test_app/lib/TestApp.pm [mkdir] test_app/lib/TestApp [write] test_app/lib/TestApp/Example.pm [mkdir] test_app/t [write] test_app/t/basic.t [mkdir] test_app/log [mkdir] test_app/public [write] test_app/public/404.html [exist] test_app/public [write] test_app/public/500.html 17 октября 2009 г.
  • 104. [mkdir] test_app/script [write] test_app/script/test_app [chmod] test_app/script/test_app 744 [mkdir] test_app/lib [write] test_app/lib/TestApp.pm [mkdir] test_app/lib/TestApp [write] test_app/lib/TestApp/Example.pm [mkdir] test_app/t [write] test_app/t/basic.t [mkdir] test_app/log [mkdir] test_app/public [write] test_app/public/404.html [exist] test_app/public [write] test_app/public/500.html 17 октября 2009 г.
  • 105. [mkdir] test_app/script [write] test_app/script/test_app [chmod] test_app/script/test_app 744 [mkdir] test_app/lib [write] test_app/lib/TestApp.pm [mkdir] test_app/lib/TestApp [write] test_app/lib/TestApp/Example.pm [mkdir] test_app/t [write] test_app/t/basic.t [mkdir] test_app/log [mkdir] test_app/public [write] test_app/public/404.html [exist] test_app/public [write] test_app/public/500.html 17 октября 2009 г.
  • 106. package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; $self->renderer->default_handler('ep'); my $r = $self->routes; $r->route('/:controller/:action/:id') ->to(controller => 'example', action => 'welcome', id => 1); } 17 октября 2009 г.
  • 107. package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; $self->renderer->default_handler('ep'); my $r = $self->routes; $r->route('/:controller/:action/:id') ->to(controller => 'example', action => 'welcome', id => 1); } 17 октября 2009 г.
  • 108. package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; $self->renderer->default_handler('ep'); my $r = $self->routes; $r->route('/:controller/:action/:id') ->to(controller => 'example', action => 'welcome', id => 1); } 17 октября 2009 г.
  • 109. package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; $self->renderer->default_handler('ep'); my $r = $self->routes; $r->route('/:controller/:action/:id') ->to(controller => 'example', action => 'welcome', id => 1); } 17 октября 2009 г.
  • 110. package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; $self->renderer->default_handler('ep'); my $r = $self->routes; $r->route('/:controller/:action/:id') ->to(controller => 'example', action => 'welcome', id => 1); } 17 октября 2009 г.
  • 111. package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; $self->renderer->default_handler('ep'); my $r = $self->routes; $r->route('/:controller/:action/:id') ->to(controller => 'example', action => 'welcome', id => 1); } 17 октября 2009 г.
  • 112. package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; $self->renderer->default_handler('ep'); my $r = $self->routes; $r->route('/:controller/:action/:id') ->to(controller => 'example', action => 'welcome', id => 1); } 17 октября 2009 г.
  • 113. package TestApp::Example; use base 'Mojolicious::Controller'; sub welcome { my $self = shift; warn $self->stash(‘id’); $self->render(message => 'Welcome!'); } 1; 17 октября 2009 г.
  • 114. [exist] test_app/public [write] test_app/public/index.html [mkdir] test_app/templates [write] test_app/templates/exception.html.ep [mkdir] test_app/templates/layouts [write] test_app/templates/layouts/default.html.ep [mkdir] test_app/templates/example [write] test_app/templates/example/welcome.html.ep 17 октября 2009 г.
  • 115. [exist] test_app/public [write] test_app/public/index.html [mkdir] test_app/templates [write] test_app/templates/exception.html.ep [mkdir] test_app/templates/layouts [write] test_app/templates/layouts/default.html.ep [mkdir] test_app/templates/example [write] test_app/templates/example/welcome.html.ep 17 октября 2009 г.
  • 116. % layout 'default'; <h2><%= $message %></h2> <a href="<%== url_for %>">click here</a> 17 октября 2009 г.
  • 117. [exist] test_app/public [write] test_app/public/index.html [mkdir] test_app/templates [write] test_app/templates/exception.html.ep [mkdir] test_app/templates/layouts [write] test_app/templates/layouts/default.html.ep [mkdir] test_app/templates/example [write] test_app/templates/example/welcome.html.ep 17 октября 2009 г.
  • 118. <!doctype html> <html> <head><title>Welcome</title></head> <body> <%== content %> </body> </html> 17 октября 2009 г.
  • 119. [exist] test_app/public [write] test_app/public/index.html [mkdir] test_app/templates [write] test_app/templates/exception.html.ep [mkdir] test_app/templates/layouts [write] test_app/templates/layouts/default.html.ep [mkdir] test_app/templates/example [write] test_app/templates/example/welcome.html.ep 17 октября 2009 г.
  • 120. Mojolicious::Lite use base 'Mojolicious'; 17 октября 2009 г.
  • 121. mojolicious generate lite_app test_lite 17 октября 2009 г.
  • 122. [write] test_lite [chmod] test_lite 744 17 октября 2009 г.
  • 123. use Mojolicious::Lite; app->renderer->default_handler('ep'); get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; 17 октября 2009 г.
  • 124. use Mojolicious::Lite; app->renderer->default_handler('ep'); get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; 17 октября 2009 г.
  • 125. use Mojolicious::Lite; app->renderer->default_handler('ep'); get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; 17 октября 2009 г.
  • 126. use Mojolicious::Lite; app->renderer->default_handler('ep'); get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; # shagadelic(‘cgi’) 17 октября 2009 г.
  • 127. __DATA__ @@ index.html.ep % layout 'funky'; Yea baby! @@ layouts/funky.html.ep <!doctype html><html> <body> <%== content %> </body> </html> 17 октября 2009 г.
  • 128. Mojo-модули на CPAN 17 октября 2009 г.
  • 129. Mojo-модули на CPAN • Mojo • MojoX::Routes::AsGraph • Mojo::Server::FCGI • MojoX::Session • AnyEvent::Mojo • MojoX::Log::* • Apache::Mojo, Apache2::Mojo • MojoX::Renderer::* • Catalyst::Engine::Mojo, • JSON Squatting::On::Mojo • TT • MojoX::UserAgent • CTTP2, HTP 17 октября 2009 г.
  • 130. Стабильная версия, обратная совместимость? 17 октября 2009 г.
  • 131. Mojo 0.991252 Последняя версия всегда доступна на github.com 17 октября 2009 г.
  • 132. Обратная совместимость не гарантируется :) До первой стабильной версии 17 октября 2009 г.
  • 133. Первый критичный баг 17 октября 2009 г.
  • 134. get ‘/bug/’ => sub { my $self = shift; # open my $fh, ‘|-’, ‘/usr/sbin/sendmail -t’; open my $fh, ‘|-’, ‘perl test.pl’; print $fh join "n", 'To: sharifulin at gmail.com', 'Subject: Test', '', 'Test!'; $self->render_text(‘Test’);; }; 17 октября 2009 г.
  • 135. get ‘/bug/’ => sub { my $self = shift; # open my $fh, ‘|-’, ‘/usr/sbin/sendmail -t’; open my $fh, ‘|-’, ‘perl test.pl’; print $fh join "n", 'To: sharifulin at gmail.com', 'Subject: Test', '', 'Test!'; $self->render_text(‘Test’);; }; 17 октября 2009 г.
  • 136. test.pl #!/usr/bin/perl warn $_ while <STDIN>; 17 октября 2009 г.
  • 137. script/test_bug daemon # OK 17 октября 2009 г.
  • 138. script/test_bug daemon # OK script/test_bug daemon_prefork # DIE 17 октября 2009 г.
  • 139. Mojo::Server::Daemon::Prefork #323: $SIG{HUP } = $SIG{INT } =  $SIG{CHLD} = $SIG{TERM} = sub { exit 0 }; 17 октября 2009 г.
  • 140. Mojo::Server::Daemon::Prefork #323: $SIG{HUP } = $SIG{INT } =  $SIG{CHLD} = $SIG{TERM} = sub { exit 0 }; 17 октября 2009 г.
  • 141. Mojo::Server::Daemon::Prefork #323: $SIG{HUP } = $SIG{INT } =  $SIG{TERM } = sub { exit 0 }; $SIG{CHLD} = ‘IGNORE’; 17 октября 2009 г.
  • 142. Документация 17 октября 2009 г.
  • 143. Документация Не очень :) 17 октября 2009 г.
  • 144. «мне кажется документацию он никогда не напишет) он х**рит быстрее, чем можно писать документацию для него)» FriendFeed форева! 17 октября 2009 г.
  • 145. Полезная информация • http://mojolicious.org • http://labs.kraih.com/blog/ • http://search.cpan.org/dist/Mojo/ • http://github.com/kraih/mojo • http://sharifulin.livejournal.com/tag/mojo • http://getbootylicious.org/ 17 октября 2009 г.
  • 146. Полезная информация • http://mojolicious.org • http://labs.kraih.com/blog/ • http://search.cpan.org/dist/Mojo/ • http://github.com/kraih/mojo • http://sharifulin.livejournal.com/tag/mojo • http://getbootylicious.org/ 17 октября 2009 г.
  • 147. Bootylicious 17 октября 2009 г.
  • 148. Полезная информация • irc://irc.perl.org/#mojo • http://lists.kraih.com/cgi-bin/mailman/ listinfo/mojo • Twitter: @kraih, @vtivti, @sharifulin 17 октября 2009 г.
  • 149. Последние новости • PSGI and Plack is the future of HTTP::Engine that has support for servers like CGI, FastCGI, Apache, AnyEvent and Mojo. • As usually @vtivti is the first to use our newest Mojolicious feature, ep templates now in Bootylicious. • New #mod_perlite release looks great, #Mojolicious with CGI backend should "just work™" on it. • Unicode support in #Mojolicious looks really great now. 17 октября 2009 г.
  • 150. Опыт разработки на Mojo 17 октября 2009 г.
  • 151. Mojolicious + MojoX::Renderer::TT 17 октября 2009 г.
  • 152. Mojo + JSON 17 октября 2009 г.
  • 153. Mojolicious::Lite + 17 октября 2009 г. MojoX::Renderer::JSON
  • 154. Mojolicious::Lite + MojoX::Renderer::JSON + RSS 17 октября 2009 г.
  • 155. Mojolicious + Mojo::Template 17 октября 2009 г.
  • 156. Mojolicious::Lite + other render 17 октября 2009 г.
  • 157. «Я никогда так быстро не делал сайты на Perl» Анатолий Шарифулин :) 17 октября 2009 г.
  • 158. «Можно ли на хостинге, где только FTP, Apache и CGI?» Постоянный вопрос, который задают мне 17 октября 2009 г.
  • 159. Ответ: «Да!» 17 октября 2009 г.
  • 160. Ответ: «Да!» Только я не проверял :) 17 октября 2009 г.
  • 161. use Perl or die 17 октября 2009 г.
  • 162. use Mojo or die 17 октября 2009 г.
  • 163. JFDI 17 октября 2009 г.
  • 164. any ‘/questions/’ => sub { shift->render( say => ‘sharifulin’, ); }; shagadelic; 17 октября 2009 г.
  • 165. Дзякуй, кали ласка! Анатолий Шарифулин RostovOnDon.pm 17 октября 2009 г.