Mojolicious.
                          Веб в коробке!
                            Анатолий Шарифулин




вторник, 18 мая 2...
Perl, CGI.pm


вторник, 18 мая 2010 г.
Perl, cgi-bin/


вторник, 18 мая 2010 г.
Perl, cgi-bin/, гамно!


вторник, 18 мая 2010 г.
вторник, 18 мая 2010 г.
Что такое
                          Mojolicious?


вторник, 18 мая 2010 г.
Что такое Mojolicious?
               • Веб фреймворки:
                          Mojolicious::Lite, Mojolicious, Mojo
   ...
HTTP 1.0
                    Запрос

                                        Ответ
                    Запрос

           ...
HTTP 1.1
                   Запрос


                   Запрос
                                       Ответ


            ...
Что такое Mojolicious?
               • Асинхронный ввод-вывод, prefork-веб
                          сервер с поддержкой ...
«Свежий» код,
                   основанный на опыте
                    разработке Catalyst


вторник, 18 мая 2010 г.
Удовольствие!

                                                   Код

                                             Mojoli...
Mojolicious::Lite
                             MVC веб-фреймворк
                                  ~ sinatra




вторник, ...
use Mojolicious::Lite;

                          get '/hello' => sub {
                             shift->render_text( '...
use Mojolicious::Lite;

                          post '/hello' => sub {
                             shift->render_text( ...
use Mojolicious::Lite;

                          any '/hello' => sub {
                             shift->render_text( '...
use Mojolicious::Lite;

                          get '/hello' => (agent => qr/Firefox/) => sub {
                        ...
use Mojolicious::Lite;

                          post '/:name' => sub { # /*
                            my $self = shift...
use Mojolicious::Lite;

                          post '/:name' => { id => 42 } => sub { # /*
                            ...
use Mojolicious::Lite;

                          post '/:name' => { id => 42 } => sub { # /*
                            ...
use Mojolicious::Lite;

                          post '/:name' => [ name => qr/d+/ ] => sub {
                           ...
use Mojolicious::Lite;

                          any '/time' => 'clock';

                          app->start;

        ...
use Mojolicious::Lite;

                          websocket '/echo' => sub {
                             my $self = shift...
Примеры
                     Mojolicious WebSocket
                                @xantus, @vti
                         ...
use Mojolicious::Lite;

                          get '/fetch' => sub {
                             my $self = shift;
   ...
use Mojolicious::Lite;

                          plugin charset => { charset => 'windows-1251' };

                      ...
Cписок всех роутеров
                              приложения
                           script/lite.pl routes
           ...
Если много шаблонов
                           в секции __DATA__
                            script/lite.pl inflate
       ...
Сокращатель ссылок
                           на Mojolicious::Lite
                            100 строк кода (5 обработчи...
вторник, 18 мая 2010 г.
Mojolicious
                           MVC веб-фреймворк
                             ~ Ruby on Rails




вторник, 18 мая ...
package App;
                          use base 'Mojolicious';

                          sub startup {
                  ...
package App;
                          use base 'Mojolicious';

                          sub startup {
                  ...
package App;
                          use base 'Mojolicious';

                          sub startup {
                  ...
package App;
                          use base 'Mojolicious';

                          sub startup {
                  ...
package App;
                          use base 'Mojolicious';

                          sub startup {
                  ...
package App;
                          use base 'Mojolicious';

                          sub startup {
                  ...
package App::Example;
                          use base 'Mojolicious::Controller';

                          sub welcome...
Шаблон
          example/welcome.html.ep
                          controller / action . format . handler




вторник, 18 ...
Шаблон
            example/welcome.xml.ep
                          controller / action . format . handler




вторник, 18...
Шаблон
               example/welcome.rss.ep
                          controller / action . format . handler




вторник,...
Шаблон
           example/welcome.mail.ep
                          controller / action . format . handler




вторник, 18...
Шаблон
          example/welcome.html.ep
                          controller / action . format . handler




вторник, 18 ...
Шаблон
            example/welcome.html.tt
                          controller / action . format . handler




вторник, 1...
Шаблон
  example/welcome.html.cttp2
                          controller / action . format . handler




вторник, 18 мая 2...
Шаблон
          example/welcome.html.ep
                          controller / action . format . handler




вторник, 18 ...
% layout 'default';

                          <h2><%= $message %></h2>

                          <a href="<%== url_for %...
<!doctype html>
                          <html>
                             <head><title> Привет! </title></head>
      ...
Около 20 проектов
                            на Mojolicious


вторник, 18 мая 2010 г.
вторник, 18 мая 2010 г.
Mojo
                          Базовый веб-фреймворк




вторник, 18 мая 2010 г.
package App;
                          use base 'Mojo';

                          sub handler {
                         ...
вторник, 18 мая 2010 г.
Mojo::Client
                          HTTP 1.1 и WebSocket клиент




вторник, 18 мая 2010 г.
my $client = Mojo::Client->new;

                          $client->get(
                          	

 ‘http://devconf.ru’...
my $client = Mojo::Client->new;

                          $client->post(
                          	

 ‘http://devconf.ru...
my $client = Mojo::Client->new;

                          $client->put(
                          	

 ‘http://devconf.ru’...
my $client = Mojo::Client->new;

                          $client->delete(
                          	

 ‘http://devconf....
my $client = Mojo::Client->new;

                          $self->client->get(
                          	

 ‘http://devco...
my $client = Mojo::Client->new;

                          $client->async->get(
                          	

 ‘http://devc...
my $client = Mojo::Client->new;

                          $client->get(‘http://devconf.ru’)->res->code;

                ...
Mojo::IOLoop
                            TCP клиент-сервер




вторник, 18 мая 2010 г.
my $loop = Mojo::IOLoop->new;
                          $loop->listen(port => 3000, cb => sub {
                          ...
Test::Mojo
                          Фреймворк для тестирования




вторник, 18 мая 2010 г.
my $t = Test::Mojo->new( app => 'App' );

                $t->get_ok( '/hello' )
                  ->status_is( 200 )
    ...
Всё, что нужно – есть!
                          Mojolicious – веб в коробке!




вторник, 18 мая 2010 г.
Mojolicious на CPAN
              • Mojolicious                • MojoX::Log::*
              • Mojo::Server::FCGI         ...
Документация

               • Пока мало документации, зато очень
                          хороший фидбек :)
            ...
Полезная информация
                   • http://mojolicious.org
                   • irc://irc.perl.org/#mojo
            ...
«Making hard things possible
          and everything fun!»
                          Девиз Mojolicious




вторник, 18 ма...
«Duct tape
                          for the HTML5 Web»
                              Девиз Mojolicious #2




вторник, 18...
«Viva la revolution!»
                              Девиз Mojolicious #3




вторник, 18 мая 2010 г.
«Особая разновидность
  современного программиста
   – программист, изучающий
          фреймворки»
                      ...
«Каждый программист
         должен сделать 3 вещи:
        фреймворк, шаблонизатор
         и событийную машину»
        ...
use Mojolicious
                                or die




вторник, 18 мая 2010 г.
Viva la revolution!



вторник, 18 мая 2010 г.
use Perl
                            or die




вторник, 18 мая 2010 г.
JFDI



вторник, 18 мая 2010 г.
Спасибо
                          за внимание!
                           Анатолий Шарифулин
                             ...
any ‘/questions’ => sub {
           	

 	

 shift->render(
           	

 	

 	

 answer => ‘sharifulin’
           	

 	...
Upcoming SlideShare
Loading in...5
×

Mojolicious

4,272

Published on

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

No Downloads
Views
Total Views
4,272
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
23
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Mojolicious

  1. 1. Mojolicious. Веб в коробке! Анатолий Шарифулин вторник, 18 мая 2010 г.
  2. 2. Perl, CGI.pm вторник, 18 мая 2010 г.
  3. 3. Perl, cgi-bin/ вторник, 18 мая 2010 г.
  4. 4. Perl, cgi-bin/, гамно! вторник, 18 мая 2010 г.
  5. 5. вторник, 18 мая 2010 г.
  6. 6. Что такое Mojolicious? вторник, 18 мая 2010 г.
  7. 7. Что такое Mojolicious? • Веб фреймворки: Mojolicious::Lite, Mojolicious, Mojo • Объектно-ориентированное API, без скрытой магии и зависимостей, написанное на чистом Perl • Полный стек HTTP 1.1 и WebSocket (клиент-сервер), а также IPv6, SSL и IDNA вторник, 18 мая 2010 г.
  8. 8. HTTP 1.0 Запрос Ответ Запрос Ответ вторник, 18 мая 2010 г.
  9. 9. HTTP 1.1 Запрос Запрос Ответ Ответ вторник, 18 мая 2010 г.
  10. 10. Что такое Mojolicious? • Асинхронный ввод-вывод, prefork-веб сервер с поддержкой epoll и kqueue, unix-сокетов и «горячей» разработки • CGI, FastCGI и PSGI • RESTful-роутеры, плагины, сессии, Perl-ish шаблонизатор, JSON, I18N вторник, 18 мая 2010 г.
  11. 11. «Свежий» код, основанный на опыте разработке Catalyst вторник, 18 мая 2010 г.
  12. 12. Удовольствие! Код Mojolicious::Lite Код Mojolicious Mojo CGI FastCGI PSGI HTTP 1.1 WebSocket вторник, 18 мая 2010 г.
  13. 13. Mojolicious::Lite MVC веб-фреймворк ~ sinatra вторник, 18 мая 2010 г.
  14. 14. use Mojolicious::Lite; get '/hello' => sub { shift->render_text( 'Привет Devconf!' ); }; app->start; вторник, 18 мая 2010 г.
  15. 15. use Mojolicious::Lite; post '/hello' => sub { shift->render_text( 'Привет Devconf!' ); }; app->start; вторник, 18 мая 2010 г.
  16. 16. use Mojolicious::Lite; any '/hello' => sub { shift->render_text( 'Привет Devconf!' ); }; app->start; вторник, 18 мая 2010 г.
  17. 17. use Mojolicious::Lite; get '/hello' => (agent => qr/Firefox/) => sub { shift->render_text( 'Привет Devconf!' ); }; app->start; вторник, 18 мая 2010 г.
  18. 18. use Mojolicious::Lite; post '/:name' => sub { # /* my $self = shift; my $name = $self->param('name'); $self->render_text( "Привет $name!" ); }; app->start; вторник, 18 мая 2010 г.
  19. 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. 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. 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. 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. 23. use Mojolicious::Lite; websocket '/echo' => sub { my $self = shift; $self->receive_message( sub { my ($self, $msg) = @_; $self->send_message( "тук-тук: $msg" ); } ); }; вторник, 18 мая 2010 г.
  24. 24. Примеры Mojolicious WebSocket @xantus, @vti Интересный пример IRC-клиент вторник, 18 мая 2010 г.
  25. 25. use Mojolicious::Lite; get '/fetch' => sub { my $self = shift; $self->render_data( $self->client ->get( 'http://devconf.ru' ) ->res ->body ); }; вторник, 18 мая 2010 г.
  26. 26. use Mojolicious::Lite; plugin charset => { charset => 'windows-1251' }; ladder sub { my $self = shift; # проверка авторизации }; ... вторник, 18 мая 2010 г.
  27. 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. 28. Если много шаблонов в секции __DATA__ script/lite.pl inflate /templates/ /templates/clock.html.ep вторник, 18 мая 2010 г.
  29. 29. Сокращатель ссылок на Mojolicious::Lite 100 строк кода (5 обработчиков) 130 строк шаблонов (4 шаблона) 1 файл вторник, 18 мая 2010 г.
  30. 30. вторник, 18 мая 2010 г.
  31. 31. Mojolicious MVC веб-фреймворк ~ Ruby on Rails вторник, 18 мая 2010 г.
  32. 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. 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. 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. 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. 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. 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. 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. 39. Шаблон example/welcome.html.ep controller / action . format . handler вторник, 18 мая 2010 г.
  40. 40. Шаблон example/welcome.xml.ep controller / action . format . handler вторник, 18 мая 2010 г.
  41. 41. Шаблон example/welcome.rss.ep controller / action . format . handler вторник, 18 мая 2010 г.
  42. 42. Шаблон example/welcome.mail.ep controller / action . format . handler вторник, 18 мая 2010 г.
  43. 43. Шаблон example/welcome.html.ep controller / action . format . handler вторник, 18 мая 2010 г.
  44. 44. Шаблон example/welcome.html.tt controller / action . format . handler вторник, 18 мая 2010 г.
  45. 45. Шаблон example/welcome.html.cttp2 controller / action . format . handler вторник, 18 мая 2010 г.
  46. 46. Шаблон example/welcome.html.ep controller / action . format . handler вторник, 18 мая 2010 г.
  47. 47. % layout 'default'; <h2><%= $message %></h2> <a href="<%== url_for %>">click here</a> вторник, 18 мая 2010 г.
  48. 48. <!doctype html> <html> <head><title> Привет! </title></head> <body> <%== content %> </body> </html> вторник, 18 мая 2010 г.
  49. 49. Около 20 проектов на Mojolicious вторник, 18 мая 2010 г.
  50. 50. вторник, 18 мая 2010 г.
  51. 51. Mojo Базовый веб-фреймворк вторник, 18 мая 2010 г.
  52. 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. 53. вторник, 18 мая 2010 г.
  54. 54. Mojo::Client HTTP 1.1 и WebSocket клиент вторник, 18 мая 2010 г.
  55. 55. my $client = Mojo::Client->new; $client->get( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  56. 56. my $client = Mojo::Client->new; $client->post( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  57. 57. my $client = Mojo::Client->new; $client->put( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  58. 58. my $client = Mojo::Client->new; $client->delete( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  59. 59. my $client = Mojo::Client->new; $self->client->get( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  60. 60. my $client = Mojo::Client->new; $client->async->get( ‘http://devconf.ru’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; вторник, 18 мая 2010 г.
  61. 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. 62. Mojo::IOLoop TCP клиент-сервер вторник, 18 мая 2010 г.
  63. 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. 64. Test::Mojo Фреймворк для тестирования вторник, 18 мая 2010 г.
  65. 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. 66. Всё, что нужно – есть! Mojolicious – веб в коробке! вторник, 18 мая 2010 г.
  67. 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. 68. Документация • Пока мало документации, зато очень хороший фидбек :) • Mojolicious::Lite и Mojolicious::Guides • Mojolicious Handbook @kvorg • Mojolicious FAQ @vti вторник, 18 мая 2010 г.
  69. 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. 70. «Making hard things possible and everything fun!» Девиз Mojolicious вторник, 18 мая 2010 г.
  71. 71. «Duct tape for the HTML5 Web» Девиз Mojolicious #2 вторник, 18 мая 2010 г.
  72. 72. «Viva la revolution!» Девиз Mojolicious #3 вторник, 18 мая 2010 г.
  73. 73. «Особая разновидность современного программиста – программист, изучающий фреймворки» Алекс Капранов вторник, 18 мая 2010 г.
  74. 74. «Каждый программист должен сделать 3 вещи: фреймворк, шаблонизатор и событийную машину» Анатолий Шарифулин вторник, 18 мая 2010 г.
  75. 75. use Mojolicious or die вторник, 18 мая 2010 г.
  76. 76. Viva la revolution! вторник, 18 мая 2010 г.
  77. 77. use Perl or die вторник, 18 мая 2010 г.
  78. 78. JFDI вторник, 18 мая 2010 г.
  79. 79. Спасибо за внимание! Анатолий Шарифулин sharifulin вторник, 18 мая 2010 г.
  80. 80. any ‘/questions’ => sub { shift->render( answer => ‘sharifulin’ ); }; вторник, 18 мая 2010 г.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×