Your SlideShare is downloading. ×
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Mojolicious
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Mojolicious

4,220

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,220
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
22
Comments
0
Likes
4
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

Transcript

  • 1. Mojolicious. Веб в коробке! Анатолий Шарифулин вторник, 18 мая 2010 г.
  • 2. Perl, CGI.pm вторник, 18 мая 2010 г.
  • 3. Perl, cgi-bin/ вторник, 18 мая 2010 г.
  • 4. Perl, cgi-bin/, гамно! вторник, 18 мая 2010 г.
  • 5. вторник, 18 мая 2010 г.
  • 6. Что такое Mojolicious? вторник, 18 мая 2010 г.
  • 7. Что такое Mojolicious? • Веб фреймворки: Mojolicious::Lite, Mojolicious, Mojo • Объектно-ориентированное API, без скрытой магии и зависимостей, написанное на чистом Perl • Полный стек HTTP 1.1 и WebSocket (клиент-сервер), а также IPv6, SSL и IDNA вторник, 18 мая 2010 г.
  • 8. HTTP 1.0 Запрос Ответ Запрос Ответ вторник, 18 мая 2010 г.
  • 9. HTTP 1.1 Запрос Запрос Ответ Ответ вторник, 18 мая 2010 г.
  • 10. Что такое Mojolicious? • Асинхронный ввод-вывод, prefork-веб сервер с поддержкой epoll и kqueue, unix-сокетов и «горячей» разработки • CGI, FastCGI и PSGI • RESTful-роутеры, плагины, сессии, Perl-ish шаблонизатор, JSON, I18N вторник, 18 мая 2010 г.
  • 11. «Свежий» код, основанный на опыте разработке Catalyst вторник, 18 мая 2010 г.
  • 12. Удовольствие! Код Mojolicious::Lite Код Mojolicious Mojo CGI FastCGI PSGI HTTP 1.1 WebSocket вторник, 18 мая 2010 г.
  • 13. Mojolicious::Lite MVC веб-фреймворк ~ sinatra вторник, 18 мая 2010 г.
  • 14. use Mojolicious::Lite; get '/hello' => sub { shift->render_text( 'Привет Devconf!' ); }; app->start; вторник, 18 мая 2010 г.
  • 15. use Mojolicious::Lite; post '/hello' => sub { shift->render_text( 'Привет Devconf!' ); }; app->start; вторник, 18 мая 2010 г.
  • 16. use Mojolicious::Lite; any '/hello' => sub { shift->render_text( 'Привет Devconf!' ); }; app->start; вторник, 18 мая 2010 г.
  • 17. use Mojolicious::Lite; get '/hello' => (agent => qr/Firefox/) => sub { shift->render_text( 'Привет Devconf!' ); }; app->start; вторник, 18 мая 2010 г.
  • 18. use Mojolicious::Lite; post '/:name' => sub { # /* my $self = shift; my $name = $self->param('name'); $self->render_text( "Привет $name!" ); }; app->start; вторник, 18 мая 2010 г.
  • 19. use Mojolicious::Lite; post '/:name' => { id => 42 } => sub { # /* my $self = shift; my $name = $self->param('name'); warn $self->param( 'id' ); $self->render_text( "Привет $name!" ); }; app->start; вторник, 18 мая 2010 г.
  • 20. use Mojolicious::Lite; post '/:name' => { id => 42 } => sub { # /* my $self = shift; my $name = $self->param('name'); warn $self->stash( 'id' ); $self->render_text( "Привет $name!" ); }; app->start; вторник, 18 мая 2010 г.
  • 21. use Mojolicious::Lite; post '/:name' => [ name => qr/d+/ ] => sub { my $self = shift; my $name = $self->param('name'); $self->render_text( "Привет $name!" ); }; app->start; вторник, 18 мая 2010 г.
  • 22. use Mojolicious::Lite; any '/time' => 'clock'; app->start; __DATA__ @@ clock.html.ep % my ($sec, $min, $hour) = (localtime)[0, 1, 2]; Текущее время <%= $hour %>:<%= $min %>:<%= $sec %> вторник, 18 мая 2010 г.
  • 23. use Mojolicious::Lite; websocket '/echo' => sub { my $self = shift; $self->receive_message( sub { my ($self, $msg) = @_; $self->send_message( "тук-тук: $msg" ); } ); }; вторник, 18 мая 2010 г.
  • 24. Примеры Mojolicious WebSocket @xantus, @vti Интересный пример IRC-клиент вторник, 18 мая 2010 г.
  • 25. use Mojolicious::Lite; get '/fetch' => sub { my $self = shift; $self->render_data( $self->client ->get( 'http://devconf.ru' ) ->res ->body ); }; вторник, 18 мая 2010 г.
  • 26. use Mojolicious::Lite; plugin charset => { charset => 'windows-1251' }; ladder sub { my $self = shift; # проверка авторизации }; ... вторник, 18 мая 2010 г.
  • 27. Cписок всех роутеров приложения script/lite.pl routes /hello (?-xism:^/hello) /time (?-xism:^/time) /echo (?-xism:^/echo) /fetch (?-xism:^/fetch) /:name (?-xism:^/((?-xism:d+))) вторник, 18 мая 2010 г.
  • 28. Если много шаблонов в секции __DATA__ script/lite.pl inflate /templates/ /templates/clock.html.ep вторник, 18 мая 2010 г.
  • 29. Сокращатель ссылок на Mojolicious::Lite 100 строк кода (5 обработчиков) 130 строк шаблонов (4 шаблона) 1 файл вторник, 18 мая 2010 г.
  • 30. вторник, 18 мая 2010 г.
  • 31. Mojolicious MVC веб-фреймворк ~ Ruby on Rails вторник, 18 мая 2010 г.
  • 32. package App; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; вторник, 18 мая 2010 г.
  • 33. package App; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; вторник, 18 мая 2010 г.
  • 34. package App; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; вторник, 18 мая 2010 г.
  • 35. package App; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; вторник, 18 мая 2010 г.
  • 36. package App; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; my $b = $r->bridge->to('auth#check); $b->route('/admin')->to('admin#welcome'); } вторник, 18 мая 2010 г.
  • 37. package App; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; вторник, 18 мая 2010 г.
  • 38. package App::Example; use base 'Mojolicious::Controller'; sub welcome { my $self = shift; warn $self->stash( ‘id’ ); $self->render( message => 'Devconf!' ); } 1; вторник, 18 мая 2010 г.
  • 39. Шаблон example/welcome.html.ep controller / action . format . handler вторник, 18 мая 2010 г.
  • 40. Шаблон example/welcome.xml.ep controller / action . format . handler вторник, 18 мая 2010 г.
  • 41. Шаблон example/welcome.rss.ep controller / action . format . handler вторник, 18 мая 2010 г.
  • 42. Шаблон example/welcome.mail.ep controller / action . format . handler вторник, 18 мая 2010 г.
  • 43. Шаблон example/welcome.html.ep controller / action . format . handler вторник, 18 мая 2010 г.
  • 44. Шаблон example/welcome.html.tt controller / action . format . handler вторник, 18 мая 2010 г.
  • 45. Шаблон example/welcome.html.cttp2 controller / action . format . handler вторник, 18 мая 2010 г.
  • 46. Шаблон example/welcome.html.ep controller / action . format . handler вторник, 18 мая 2010 г.
  • 47. % layout 'default'; <h2><%= $message %></h2> <a href="<%== url_for %>">click here</a> вторник, 18 мая 2010 г.
  • 48. <!doctype html> <html> <head><title> Привет! </title></head> <body> <%== content %> </body> </html> вторник, 18 мая 2010 г.
  • 49. Около 20 проектов на Mojolicious вторник, 18 мая 2010 г.
  • 50. вторник, 18 мая 2010 г.
  • 51. Mojo Базовый веб-фреймворк вторник, 18 мая 2010 г.
  • 52. package App; 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( 'Devconf 2010' ); } вторник, 18 мая 2010 г.
  • 53. вторник, 18 мая 2010 г.
  • 54. Mojo::Client HTTP 1.1 и WebSocket клиент вторник, 18 мая 2010 г.
  • 55. my $client = Mojo::Client->new; $client->get( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  • 56. my $client = Mojo::Client->new; $client->post( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  • 57. my $client = Mojo::Client->new; $client->put( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  • 58. my $client = Mojo::Client->new; $client->delete( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  • 59. my $client = Mojo::Client->new; $self->client->get( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  • 60. my $client = Mojo::Client->new; $client->async->get( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  • 61. my $client = Mojo::Client->new; $client->get(‘http://devconf.ru’)->res->code; $client->get( 'http://search.twitter.com/trends.json' )->success->json->{trends}->[0]->{name} вторник, 18 мая 2010 г.
  • 62. Mojo::IOLoop TCP клиент-сервер вторник, 18 мая 2010 г.
  • 63. my $loop = Mojo::IOLoop->new; $loop->listen(port => 3000, cb => sub { my ($self, $id) = @_; $self->read_cb ($id => sub { ... }); $self->write_cb($id => sub { ... }); ); my $id = $loop->connect(port => 3000, ...); $loop->start; $loop->stop; вторник, 18 мая 2010 г.
  • 64. Test::Mojo Фреймворк для тестирования вторник, 18 мая 2010 г.
  • 65. my $t = Test::Mojo->new( app => 'App' ); $t->get_ok( '/hello' ) ->status_is( 200 ) ->header_is( 'X-Powered-By' => 'Mojolicious (Perl)' ) ->content_is( 'Привет Devconf!' ); $t->post_ok( '/42' ) ->content_like(qr/Привет/, 'тест пройден!'); вторник, 18 мая 2010 г.
  • 66. Всё, что нужно – есть! Mojolicious – веб в коробке! вторник, 18 мая 2010 г.
  • 67. Mojolicious на CPAN • Mojolicious • MojoX::Log::* • Mojo::Server::FCGI • MojoX::Renderer::* • AnyEvent::Mojo • TT • Apache::Mojo • CTTP2, HTP Apache2::Mojo • XSLT • Catalyst::Engine::Mojo • Mail Squatting::On::Mojo вторник, 18 мая 2010 г.
  • 68. Документация • Пока мало документации, зато очень хороший фидбек :) • Mojolicious::Lite и Mojolicious::Guides • Mojolicious Handbook @kvorg • Mojolicious FAQ @vti вторник, 18 мая 2010 г.
  • 69. Полезная информация • http://mojolicious.org • irc://irc.perl.org/#mojo • http://groups.google.com/group/mojolicious • Github: kraih, vti, xantus, memowe, sharifulin • Twitter: @kraih, @vtivti, @sharifulin • Juick: @vti, @sharifulin вторник, 18 мая 2010 г.
  • 70. «Making hard things possible and everything fun!» Девиз Mojolicious вторник, 18 мая 2010 г.
  • 71. «Duct tape for the HTML5 Web» Девиз Mojolicious #2 вторник, 18 мая 2010 г.
  • 72. «Viva la revolution!» Девиз Mojolicious #3 вторник, 18 мая 2010 г.
  • 73. «Особая разновидность современного программиста – программист, изучающий фреймворки» Алекс Капранов вторник, 18 мая 2010 г.
  • 74. «Каждый программист должен сделать 3 вещи: фреймворк, шаблонизатор и событийную машину» Анатолий Шарифулин вторник, 18 мая 2010 г.
  • 75. use Mojolicious or die вторник, 18 мая 2010 г.
  • 76. Viva la revolution! вторник, 18 мая 2010 г.
  • 77. use Perl or die вторник, 18 мая 2010 г.
  • 78. JFDI вторник, 18 мая 2010 г.
  • 79. Спасибо за внимание! Анатолий Шарифулин sharifulin вторник, 18 мая 2010 г.
  • 80. any ‘/questions’ => sub { shift->render( answer => ‘sharifulin’ ); }; вторник, 18 мая 2010 г.

×