Mojolicious. The web in a box!
Upcoming SlideShare
Loading in...5
×
 

Mojolicious. The web in a box!

on

  • 4,403 views

Perlburg 2010

Perlburg 2010

Statistics

Views

Total Views
4,403
Views on SlideShare
4,348
Embed Views
55

Actions

Likes
2
Downloads
69
Comments
0

3 Embeds 55

http://lj-toys.com 23
http://www.slideshare.net 19
http://l.lj-toys.com 13

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Mojolicious. The web in a box! Mojolicious. The web in a box! Presentation Transcript

  • Mojolicious. The web in a box! Perlburg 2010 English version пятница, 26 февраля 2010 г.
  • http://mojolicious.org/ пятница, 26 февраля 2010 г.
  • Sebastian Riedel автор Catalyst и Mojo http://labs.kraih.com/ пятница, 26 февраля 2010 г.
  • http://twitter.com/kraih пятница, 26 февраля 2010 г.
  • Sebastian Riedel автор Catalyst и Mojo http://labs.kraih.com пятница, 26 февраля 2010 г.
  • Sebastian Riedel creator of Catalyst and Mojolicious http://labs.kraih.com пятница, 26 февраля 2010 г.
  • Catalyst + Mojo = ? пятница, 26 февраля 2010 г.
  • What is Mojolicious? пятница, 26 февраля 2010 г.
  • What is Mojolicious? • Pure Perl amazing web framework, without any hidden magiс • No requirements besides Perl 5.8.1 • Very clean and object oriented API • Full stack HTTP 1.1, WebSocket, IPv6, SSL • CGI, FastCGI, PSGI, Daemon and Prefork • There are 3 frameworks: Mojo, Mojolicious and Mojolicious::Lite пятница, 26 февраля 2010 г.
  • «Fresh code, based upon years of experience developing Catalyst» пятница, 26 февраля 2010 г.
  • пятница, 26 февраля 2010 г.
  • Pure Perl web framework пятница, 26 февраля 2010 г.
  • • 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 пятница, 26 февраля 2010 г.
  • • 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 пятница, 26 февраля 2010 г.
  • Mojo::Base Minimal Base Class For Mojo Projects пятница, 26 февраля 2010 г.
  • 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 { ... } пятница, 26 февраля 2010 г.
  • 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 { ... } пятница, 26 февраля 2010 г.
  • 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 { ... } пятница, 26 февраля 2010 г.
  • • 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 пятница, 26 февраля 2010 г.
  • Mojo::ByteStream ByteStream пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • 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; $s->punycode_encode; $s->punycode_decode пятница, 26 февраля 2010 г.
  • • 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 пятница, 26 февраля 2010 г.
  • Mojo::Template Perlish Templates! пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • %= my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • %== my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % use Foo::Bar; <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%== $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <% my $foo = $_->{id} + 100_500; %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <% my $foo = $_->{id} + 100_500; %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • % my $list = $self->stash(‘list’); <ul> % for (@$list) { <li> <%= $_->{title} %> </li> %} </ul> <p><%# comment %></p> пятница, 26 февраля 2010 г.
  • Easy as PHP, but cool as Perl Mojo::Template пятница, 26 февраля 2010 г.
  • • 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 пятница, 26 февраля 2010 г.
  • Mojo::JSON Minimalistic JSON пятница, 26 февраля 2010 г.
  • my $json = Mojo::JSON->new; my $string = $json->encode({foo => ‘bar’}); my $hash = $json->decode(‘{"foo":"bar"}’); пятница, 26 февраля 2010 г.
  • my $json = Mojo::JSON->new; my $string = $json->encode({foo => ‘bar’}); my $hash = $json->decode(‘{"foo":"bar"}’); пятница, 26 февраля 2010 г.
  • my $json = Mojo::JSON->new; my $string = $json->encode({foo => ‘bar’}); my $hash = $json->decode(‘{"foo":"bar"}’); пятница, 26 февраля 2010 г.
  • • 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 пятница, 26 февраля 2010 г.
  • Mojo::Loader Class loader: load, reload, search пятница, 26 февраля 2010 г.
  • Mojo::Loader Class loader: load, reload, search пятница, 26 февраля 2010 г.
  • • 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 пятница, 26 февраля 2010 г.
  • • 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 пятница, 26 февраля 2010 г.
  • • 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 пятница, 26 февраля 2010 г.
  • • Mojo::Trasaction, Mojo::Stateful • Mojo::IOLoop • Mojo::Client, Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::PSGI • Mojo::Server::Daemon and ::Prefork • Mojo::Command • Mojo::Command::Generate and ~ Server пятница, 26 февраля 2010 г.
  • • Mojo::Trasaction, Mojo::Stateful • Mojo::IOLoop • Mojo::Client, Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::PSGI • Mojo::Server::Daemon and ::Prefork • Mojo::Command • Mojo::Command::Generate and ~ Server пятница, 26 февраля 2010 г.
  • • Mojo::Trasaction, Mojo::Stateful • Mojo::IOLoop • Mojo::Client, Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::PSGI • Mojo::Server::Daemon and ::Prefork • Mojo::Command • Mojo::Command::Generate and ~ Server пятница, 26 февраля 2010 г.
  • • Mojo::Trasaction, Mojo::Stateful • Mojo::IOLoop • Mojo::Client, Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::PSGI • Mojo::Server::Daemon and ::Prefork • Mojo::Command • Mojo::Command::Generate and ~ Server пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->get( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $self->client->get( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->get( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->post( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->head( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->put( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->get( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->get( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->get( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->get( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • my $client = Mojo::Client->new; $client->get( ‘http://goo.gl’ => sub { my ($self, $tx) = @_; say $tx->res; } )->process; пятница, 26 февраля 2010 г.
  • • Mojo::Trasaction, Mojo::Stateful • Mojo::IOLoop • Mojo::Client, Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::PSGI • Mojo::Server::Daemon and ::Prefork • Mojo::Command • Mojo::Command::Generate and ~ Server пятница, 26 февраля 2010 г.
  • • Mojo::Trasaction, Mojo::Stateful • Mojo::IOLoop • Mojo::Client, Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::PSGI • Mojo::Server::Daemon and ::Prefork • Mojo::Command • Mojo::Command::Generate and ~ Server пятница, 26 февраля 2010 г.
  • • Mojo::Trasaction, Mojo::Stateful • Mojo::IOLoop • Mojo::Client, Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::PSGI • Mojo::Server::Daemon and ::Prefork • Mojo::Command • Mojo::Command::Generate and ~ Server пятница, 26 февраля 2010 г.
  • • Mojo::Trasaction, Mojo::Stateful • Mojo::IOLoop • Mojo::Client, Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::PSGI • Mojo::Server::Daemon and ::Prefork • Mojo::Command • Mojo::Command::Generate and ~ Server пятница, 26 февраля 2010 г.
  • • Mojo::Trasaction, Mojo::Stateful • Mojo::IOLoop • Mojo::Client, Mojo::Server • Mojo::Server::CGI, Mojo::Server::FastCGI • Mojo::Server::PSGI • Mojo::Server::Daemon and ::Prefork • Mojo::Command • Mojo::Command::Generate and ~ Server пятница, 26 февраля 2010 г.
  • Mojolicious is the web in a box! пятница, 26 февраля 2010 г.
  • No requirements besides Perl 5.8.1 пятница, 26 февраля 2010 г.
  • Mojo runtime пятница, 26 февраля 2010 г.
  • Perl 5.005 пятница, 26 февраля 2010 г.
  • Perl 5.006002 пятница, 26 февраля 2010 г.
  • Perl 5.008001 пятница, 26 февраля 2010 г.
  • Mojo Perl 5.010 пятница, 26 февраля 2010 г.
  • Object oriented API пятница, 26 февраля 2010 г.
  • 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!'); } пятница, 26 февраля 2010 г.
  • 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!'); } пятница, 26 февраля 2010 г.
  • 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!'); } пятница, 26 февраля 2010 г.
  • 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!'); } пятница, 26 февраля 2010 г.
  • use overload '""' => sub { shift->to_string }, fallback => 1; пятница, 26 февраля 2010 г.
  • GET / HTTP/1.1 Connection: keep-alive Accept: text/html, application/xhtml, .... Accept-Charset: windows-1251, utf-8; ... Accept-Encoding: gzip,deflate Accept-Language: ru,en-us;q=0.7,en;q=0.3 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; ... Content-Length: 0 Keep-Alive: 300 пятница, 26 февраля 2010 г.
  • GET / HTTP/1.1 Connection: keep-alive Accept: text/html, application/xhtml, .... Accept-Charset: windows-1251, utf-8; ... Accept-Encoding: gzip,deflate Accept-Language: ru,en-us;q=0.7,en;q=0.3 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; ... Content-Length: 0 Keep-Alive: 300 пятница, 26 февраля 2010 г.
  • 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!'); } пятница, 26 февраля 2010 г.
  • 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!'); } пятница, 26 февраля 2010 г.
  • A generation of the mojo app пятница, 26 февраля 2010 г.
  • 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 пятница, 26 февраля 2010 г.
  • 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 пятница, 26 февраля 2010 г.
  • 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’) пятница, 26 февраля 2010 г.
  • 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 пятница, 26 февраля 2010 г.
  • 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!'); } пятница, 26 февраля 2010 г.
  • 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 пятница, 26 февраля 2010 г.
  • #!/usr/bin/env perl use strict; use warnings; use Test::More tests => 1; use_ok('TestMojo'); пятница, 26 февраля 2010 г.
  • Full stack HTTP 1.1 пятница, 26 февраля 2010 г.
  • пятница, 26 февраля 2010 г.
  • MojoX::UserAgent Pascal Gaudette Thanks to the Google of Summer Code 2009! пятница, 26 февраля 2010 г.
  • Support WebSocket пятница, 26 февраля 2010 г.
  • WebSocket protocol Google, Inc December 16, 2009 пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; websocket ‘/echo’ => sub { my $self = shift; $self->receive_message(sub { my ($self, $msg) = @_; $self->send_massage("echo: $msg"); }); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; websocket ‘/echo’ => sub { my $self = shift; $self->receive_message(sub { my ($self, $msg) = @_; $self->send_massage("echo: $msg"); }); }; shagadelic; пятница, 26 февраля 2010 г.
  • CGI, FastCGI, PSGI, Daemon and Prefork пятница, 26 февраля 2010 г.
  • script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork пятница, 26 февраля 2010 г.
  • script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork пятница, 26 февраля 2010 г.
  • PATH_INFO='/' script/ test_mojo cgi Easy testing Can profile the mojolicious app using Devel::NYTProf пятница, 26 февраля 2010 г.
  • script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork пятница, 26 февраля 2010 г.
  • Mojo::Server::FCGI script/test_mojo fcgi script/test_mojo fcgi_prefork пятница, 26 февраля 2010 г.
  • Mojo::Server::FCGI script/test_mojo fcgi script/test_mojo fcgi_prefork пятница, 26 февраля 2010 г.
  • Mojo::Server::FCGI script/test_mojo fcgi script/test_mojo fcgi_prefork пятница, 26 февраля 2010 г.
  • nginx + fcgi_prefork пятница, 26 февраля 2010 г.
  • 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; } пятница, 26 февраля 2010 г.
  • 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; } пятница, 26 февраля 2010 г.
  • 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; } пятница, 26 февраля 2010 г.
  • 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; } пятница, 26 февраля 2010 г.
  • 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; } пятница, 26 февраля 2010 г.
  • script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork пятница, 26 февраля 2010 г.
  • MOJO_RELOAD=1 script/test_mojo daemon Code of application reloads on each request пятница, 26 февраля 2010 г.
  • script/test_mojo daemon --reload Code of application reloads on each request пятница, 26 февраля 2010 г.
  • Support USR1 signal for reload app пятница, 26 февраля 2010 г.
  • script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork пятница, 26 февраля 2010 г.
  • script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork script/test_mojo psgi пятница, 26 февраля 2010 г.
  • script/test_mojo generate psgi my_app.psgi пятница, 26 февраля 2010 г.
  • use FindBin; use lib "$FindBin::Bin/lib"; use lib "$FindBin::Bin/../lib"; use Mojo::Server::PSGI; my $psgi = Mojo::Server::PSGI->new( app_class => 'MyApp' ); my $app = sub { $psgi->run(@_) }; пятница, 26 февраля 2010 г.
  • script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork script/test_mojo psgi script/test_mojo test пятница, 26 февраля 2010 г.
  • script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork script/test_mojo psgi script/test_mojo test script/test_mojo get пятница, 26 февраля 2010 г.
  • script/test_mojo COMMAND [OPTIONS] script/test_mojo cgi script/test_mojo fastcgi script/test_mojo daemon script/test_mojo daemon_prefork script/test_mojo psgi script/test_mojo test script/test_mojo get http://goo.gl пятница, 26 февраля 2010 г.
  • Web frameworks пятница, 26 февраля 2010 г.
  • Mojo Base framework пятница, 26 февраля 2010 г.
  • 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!'); } пятница, 26 февраля 2010 г.
  • MVC web frameworks пятница, 26 февраля 2010 г.
  • Mojolicious use base 'Mojo'; пятница, 26 февраля 2010 г.
  • • Mojolicous::Controller • Mojolicious::Plugin • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes пятница, 26 февраля 2010 г.
  • • Mojolicous::Controller • Mojolicious::Plugin • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes пятница, 26 февраля 2010 г.
  • Mojolicious::Controller Controller Base Class пятница, 26 февраля 2010 г.
  • • render • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render(tempate => ‘foo/bar’) • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render(controller => ‘foo’, action => ‘bar’) • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render(‘foo#bar’, format => ‘html') • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render • render(text => ‘Perlburg 2010’) • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render • render_text • render(json => {foo => ‘bar’}) • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • render • render_text • render_json • render_inner • render_partial • pause / resume • redirect_to / url_for пятница, 26 февраля 2010 г.
  • • Mojolicous::Controller • Mojolicious::Plugin • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes пятница, 26 февраля 2010 г.
  • Mojolicious::Plugin Plugin Base Class пятница, 26 февраля 2010 г.
  • Mojolicious::Plugins Plugins: load_plugin, add_hook, run_hook пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • Data::Dumper (Maxdepth: 2, Indent: 1, Terse: 1) • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • $self->req->param(...) • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • $self->stash(...) • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • $self->stash(layout => ...) • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • $self->render_partial(...) • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • $self->render_inner(...) • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • $self->stash(extends => ...) • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • url_for пятница, 26 февраля 2010 г.
  • • dumper • param • stash • layout • include • content • extends • $self->url_for(...) пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • extension of temlplates is .epl • my $self = shift; • $self->stash(foo => ‘bar’) пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • extension of temlplates is .ep • caсhing templates with stash parameters • $self->stash(foo => ‘bar’) – $foo • any helpers • default handler пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • AgentCondition • Charset • DefaultHelpers • EplRenderer • EpRenderer • HeaderCondition • I18n, JsonConfig, PoweredBy • PodRenderer, RequestTimer пятница, 26 февраля 2010 г.
  • • Mojolicous::Controller • Mojolicious::Plugin • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes пятница, 26 февраля 2010 г.
  • script/test_app COMMAND [OPTIONS] script/test_app cgi script/test_app fastcgi script/test_app daemon script/test_app daemon_prefork script/test_app psgi script/test_app test script/test_app get scritp/test_app routes пятница, 26 февраля 2010 г.
  • script/test_app COMMAND [OPTIONS] script/test_app cgi script/test_app fastcgi script/test_app daemon script/test_app daemon_prefork script/test_app psgi script/test_app test script/test_app get scritp/test_app routes пятница, 26 февраля 2010 г.
  • • Mojolicous::Controller • Mojolicious::Plugin • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes пятница, 26 февраля 2010 г.
  • • Mojolicous::Controller • Mojolicious::Plugin • Mojolicious::Commands • MojoX::Types • MojoX::Dispatcher, MojoX::Routes пятница, 26 февраля 2010 г.
  • A generation the mojolicious app пятница, 26 февраля 2010 г.
  • mojolicious generate app TestApp пятница, 26 февраля 2010 г.
  • [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 пятница, 26 февраля 2010 г.
  • [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 пятница, 26 февраля 2010 г.
  • [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 пятница, 26 февраля 2010 г.
  • [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 пятница, 26 февраля 2010 г.
  • package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; пятница, 26 февраля 2010 г.
  • package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; пятница, 26 февраля 2010 г.
  • package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; пятница, 26 февраля 2010 г.
  • package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; пятница, 26 февраля 2010 г.
  • package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; пятница, 26 февраля 2010 г.
  • package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->route('/:controller/:action/:id') ->to('example#welcome', id => 1); } 1; пятница, 26 февраля 2010 г.
  • package TestApp; use base 'Mojolicious'; sub startup { my $self = shift; my $r = $self->routes; $r->bridge->to('auth#check') # check auth ->route(...)->to(...); } 1; пятница, 26 февраля 2010 г.
  • package TestApp::Example; use base 'Mojolicious::Controller'; sub welcome { my $self = shift; warn $self->stash(‘id’); $self->render(message => 'Perlicious!'); } 1; пятница, 26 февраля 2010 г.
  • [exist] test_app/public [write] test_app/public/index.html [mkdir] test_app/templates [write] test_app/templates/exception.html.ep [write] test_app/templates/not_found.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 пятница, 26 февраля 2010 г.
  • [exist] test_app/public [write] test_app/public/index.html [mkdir] test_app/templates [write] test_app/templates/exception.html.ep [write] test_app/templates/not_found.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 пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • controller/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ action.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.handler Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.epl Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.tt Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ht Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.pro Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ctpp2 Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.foo Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.format.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.xml.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.rss.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.json.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.yaml.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.mail.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.bar.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • example/ welcome.html.ep Path to the template пятница, 26 февраля 2010 г.
  • controller/ action.format.handler Path to the template пятница, 26 февраля 2010 г.
  • % layout 'default'; <h2><%= $message %></h2> <a href="<%== url_for %>">click here</a> пятница, 26 февраля 2010 г.
  • [exist] test_app/public [write] test_app/public/index.html [mkdir] test_app/templates [write] test_app/templates/exception.html.ep [write] test_app/templates/not_found.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 пятница, 26 февраля 2010 г.
  • <!doctype html> <html> <head><title>Welcome</title></head> <body> <%== content %> </body> </html> пятница, 26 февраля 2010 г.
  • [exist] test_app/public [write] test_app/public/index.html [mkdir] test_app/templates [write] test_app/templates/exception.html.ep [write] test_app/templates/not_found.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 пятница, 26 февраля 2010 г.
  • Global symbol "$message2" requires explicit package name at (eval 280) line 2. 1: % layout 'default'; 2: <h2><%= $message2 %></h2> 3: ... { 'status' => 500, 'message' => ‘Perlicious!’, ... } пятница, 26 февраля 2010 г.
  • $ENV{MOJO_MODE} Default value is development пятница, 26 февраля 2010 г.
  • [exist] test_app/public [write] test_app/public/index.html [mkdir] test_app/templates [write] test_app/templates/exception.html.ep [write] test_app/templates/not_found.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 пятница, 26 февраля 2010 г.
  • Mojolicious::Lite use base 'Mojolicious'; пятница, 26 февраля 2010 г.
  • mojolicious generate lite_app test_lite пятница, 26 февраля 2010 г.
  • [write] test_lite [chmod] test_lite 744 пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; get '/' => 'index'; # / any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; post '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; any '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; get '/' => 'index'; any '/:groovy' => sub { # /* my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; get '/' => 'index'; any '/:groovy' => [groovy => qr/d+/] => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; get '/' => 'index'; any '/:groovy' => {groovy => 42} => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; get '/' => 'index'; any '/:groovy' => (agent=>qr/Firefox/) => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; app->renderer->default_handler(‘epl’); shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; websocket '/echo' => sub { ... }; # websocket get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; ladder sub { ... }; # auth get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; пятница, 26 февраля 2010 г.
  • use Mojolicious::Lite; get '/' => 'index'; any '/:groovy' => sub { my $self = shift; $self->render_text($self->stash('groovy')); }; shagadelic; # shagadelic(‘cgi’) пятница, 26 февраля 2010 г.
  • __DATA__ @@ index.html.ep % layout 'funky'; Yea baby! @@ layouts/funky.html.ep <!doctype html><html> <body> <%== content %> </body> </html> пятница, 26 февраля 2010 г.
  • Mojolicious modules on CPAN пятница, 26 февраля 2010 г.
  • Mojolicious modules on CPAN • Mojolicious • 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 пятница, 26 февраля 2010 г.
  • Mojolicious Style Guide Rules пятница, 26 февраля 2010 г.
  • Mojolicious Style Guide • Keep it simple, no magic unless absolutely nessary • Code should be written with a Perl6 port in mind • It’s not a feature without a test • Only add prereqs if absolutely necessary • No inline POD • No spaghetti code • Every files should contain at least one quote from The Simpsons or Futurama пятница, 26 февраля 2010 г.
  • Mojolicious Style Guide • Keep it simple, no magic unless absolutely nessary • Code should be written with a Perl6 port in mind • It’s not a feature without a test • Only add prereqs if absolutely necessary • No inline POD • No spaghetti code • Every files should contain at least one quote from The Simpsons or Futurama пятница, 26 февраля 2010 г.
  • Mojolicious Style Guide • Keep it simple, no magic unless absolutely nessary • Code should be written with a Perl6 port in mind • It’s not a feature without a test • Only add prereqs if absolutely necessary • No inline POD • No spaghetti code • Every files should contain at least one quote from The Simpsons or Futurama пятница, 26 февраля 2010 г.
  • Mojolicious Style Guide • Keep it simple, no magic unless absolutely nessary • Code should be written with a Perl6 port in mind • It’s not a feature without a test • Only add prereqs if absolutely necessary • No inline POD • No spaghetti code • Every files should contain at least one quote from The Simpsons or Futurama пятница, 26 февраля 2010 г.
  • Mojolicious Style Guide • Keep it simple, no magic unless absolutely nessary • Code should be written with a Perl6 port in mind • It’s not a feature without a test • Only add prereqs if absolutely necessary • No inline POD • No spaghetti code • Every files should contain at least one quote from The Simpsons or Futurama пятница, 26 февраля 2010 г.
  • Mojolicious Style Guide • Keep it simple, no magic unless absolutely nessary • Code should be written with a Perl6 port in mind • It’s not a feature without a test • Only add prereqs if absolutely necessary • No inline POD • No spaghetti code • Every files should contain at least one quote from The Simpsons or Futurama пятница, 26 февраля 2010 г.
  • Mojolicious Style Guide • Keep it simple, no magic unless absolutely nessary • Code should be written with a Perl6 port in mind • It’s not a feature without a test • Only add prereqs if absolutely necessary • No inline POD • No spaghetti code • Every files should contain at least one quote from The Simpsons or Futurama :) пятница, 26 февраля 2010 г.
  • The Simpsons or Futurama пятница, 26 февраля 2010 г.
  • Stable version and backwards compatibility пятница, 26 февраля 2010 г.
  • Mojolicious 0.999920 «Snowman» February, 11 2010 This is a mojor release, which means deprecation policies apply пятница, 26 февраля 2010 г.
  • Mojolicious 0.999922 The latest version of Mojo always available on github.com пятница, 26 февраля 2010 г.
  • http://github.com/kraih/mojo пятница, 26 февраля 2010 г.
  • No backwards compatibility :) Until the first stable version is released пятница, 26 февраля 2010 г.
  • Why it is like Mojolicious, but not like Mojo? пятница, 26 февраля 2010 г.
  • «Renaming the distribution is a marketing decision :)» January, 30 2010 пятница, 26 февраля 2010 г.
  • First critical bug пятница, 26 февраля 2010 г.
  • 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’);; }; пятница, 26 февраля 2010 г.
  • 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’);; }; пятница, 26 февраля 2010 г.
  • test.pl #!/usr/bin/perl warn $_ while <STDIN>; пятница, 26 февраля 2010 г.
  • script/test_bug daemon # OK пятница, 26 февраля 2010 г.
  • script/test_bug daemon # OK script/test_bug daemon_prefork # DIE пятница, 26 февраля 2010 г.
  • Mojo::Server::Daemon::Prefork #323: $SIG{HUP } = $SIG{INT } =  $SIG{CHLD} = $SIG{TERM} = sub { exit 0 }; пятница, 26 февраля 2010 г.
  • Mojo::Server::Daemon::Prefork #323: $SIG{HUP } = $SIG{INT } =  $SIG{CHLD} = $SIG{TERM} = sub { exit 0 }; пятница, 26 февраля 2010 г.
  • Mojo::Server::Daemon::Prefork #323: $SIG{HUP } = $SIG{INT } =  $SIG{TERM } = sub { exit 0 }; $SIG{CHLD} = ‘IGNORE’; пятница, 26 февраля 2010 г.
  • Second critical bug пятница, 26 февраля 2010 г.
  • My second critical bug пятница, 26 февраля 2010 г.
  • MOJO_RELOAD, daemon и attr пятница, 26 февраля 2010 г.
  • MOJO_RELOAD=1 script/test_bug2 daemon # OK пятница, 26 февраля 2010 г.
  • MOJO_RELOAD=1 script/test_bug2 daemon # sometimes ERROR пятница, 26 февраля 2010 г.
  • script/test_bug2 daemon_prefork # OK пятница, 26 февраля 2010 г.
  • 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 { ... } пятница, 26 февраля 2010 г.
  • 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 { ... } пятница, 26 февраля 2010 г.
  • package App; use base ‘Mojo::Base’; __PACKAGE__->attr(conf => sub { return do ‘conf/app.conf’; }); __PACKAGE__->attr(db => sub { my $self = shift; return $::DB ||= Util->db(...->{'db'}); }); sub dispatch { ... } пятница, 26 февраля 2010 г.
  • Third critical bug пятница, 26 февраля 2010 г.
  • Large file upload bug пятница, 26 февраля 2010 г.
  • $ENV {MOJO_MAX_MESSAGE_SIZE} = 500 * 1024 * 1024; пятница, 26 февраля 2010 г.
  • Documentation пятница, 26 февраля 2010 г.
  • Documentation Less than necessary :) пятница, 26 февраля 2010 г.
  • Links • http://mojolicious.org • http://labs.kraih.com/blog/ • http://search.cpan.org/dist/Mojolicious/ • http://github.com/kraih/mojo • http://sharifulin.livejournal.com/tag/mojo • http://getbootylicious.org/ пятница, 26 февраля 2010 г.
  • Links • http://mojolicious.org • http://labs.kraih.com/blog/ • http://search.cpan.org/dist/Mojolicious/ • http://github.com/kraih/mojo • http://sharifulin.livejournal.com/tag/mojo • http://getbootylicious.org/ пятница, 26 февраля 2010 г.
  • Bootylicious пятница, 26 февраля 2010 г.
  • Bootylicious пятница, 26 февраля 2010 г.
  • Links • irc://irc.perl.org/#mojo • http://groups.google.com/group/mojolicious • Github: kraih, vti • Twitter: @kraih, @vtivti, @sharifulin • Juick: @vti, @sharifulin пятница, 26 февраля 2010 г.
  • The latest news • New #mod_perlite release looks great, #Mojolicious with CGI backend should "just work™" on it. • Added native #PSGI support to #Mojolicious • The #Mojolicious client just got #WebSocket support too • Added session and signed cookie support to #Mojolicious, get testing! • Been working a lot on #Mojolicious reference docs пятница, 26 февраля 2010 г.
  • My experience during the development of Mojolicious пятница, 26 февраля 2010 г.
  • Mojolicious + MojoX::Renderer::TT пятница, 26 февраля 2010 г.
  • Mojo + JSON пятница, 26 февраля 2010 г.
  • Mojolicious::Lite + MojoX::Renderer::JSON + RSS пятница, 26 февраля 2010 г.
  • Mojolicious + EpRenderer пятница, 26 февраля 2010 г.
  • Mojolicious + EpRenderer ~7 projects пятница, 26 февраля 2010 г.
  • «Making hard things possible and everything fun!» The motto of Mojolicious пятница, 26 февраля 2010 г.
  • «Viva la revolution!» The second motto of Mojolicious пятница, 26 февраля 2010 г.
  • use Mojolicious or die пятница, 26 февраля 2010 г.
  • Viva la revolution! пятница, 26 февраля 2010 г.
  • use Perl or die пятница, 26 февраля 2010 г.
  • JFDI пятница, 26 февраля 2010 г.
  • any ‘/questions’ => sub { shift->render( answer => ‘sharifulin’, ); }; пятница, 26 февраля 2010 г.
  • Thanks! There are 328 slides :) Anatoly Sharifulin RostovOnDon.pm пятница, 26 февраля 2010 г.