SlideShare uma empresa Scribd logo
1 de 143
Deploying Plack
Web Applications
    Tatsuhiko Miyagawa
   O’Reilly OSCON 2011
Me

• Tatsuhiko Miyagawa
• @miyagawa
• Lives in San Francisco, CA
• Software Engineer, DotCloud
My Software

• Plack
• PSGI
• cpanminus
• carton (NEW!)
PSGI
PSGI in 3 min.
#
PSGI
my
$app
=
sub
{




my
$env
=
shift;




return
[









200,








[
‘Content‐Type’,
‘text/plain’
],








[
‘Hello
World’
],




];
};
Catalyst    CGI::App           Jifty        Mojolicious   Dancer


                                                  Plack::Middleware

                                PSGI


    Plack::Handler::* (CGI, FCGI, Apache)


Apache       lighttpd       HTTP::Server::PSGI    mod_psgi     Perlbal


Starman      Twiggy        uWSGI            Corona   Feersum
Mason           CGI::Application         Jifty               Catalyst




Mason::CGIHandler
                                 CGI.pm                  Catalyst::Engine


                     mod_perl          CGI     fastcgi


    HTTP::Server
      ::Simple      Apache             IIS      lighttpd          nginx
Catalyst    CGI::App           Jifty        Mojolicious   Dancer


                                                  Plack::Middleware

                                PSGI


    Plack::Handler::* (CGI, FCGI, Apache)


Apache       lighttpd       HTTP::Server::PSGI    mod_psgi     Perlbal


Starman      Twiggy        uWSGI            Corona   Feersum
Momentum
Catalyst 5.9
Built-in PSGI/Plack support
CGI::Application 4.5
    Built-in PSGI support
Dancer, Mojolicious
20+
Web Frameworks
25+
Web Servers/Handlers
150+
Plack Middleware
Cloud (PaaS)
Still not convinced?
“FastCGI is good enough”?
    http://xrl.us/psgireddit
Deploying Plack
Web applications
1)
Server Environment
2)
Code Deployment
3)
Application Environment
1)
Server Environment
Writing a PSGI app?
Maypole Mason Mojolicious Sledge Catalyst Spoon
    PageKit AxKit Egg Gantry Continuity Solstice
Mojolicious Tripletail Konstrukt Reaction Jifty WebGUI
  OpenInteract Squatting Dancer CGI::Application
    Ark Angelos Noe Schenker Tatsumaki Amon
   Apache2::WebApp Web::Simple Apache2::REST
             SweetPea Hydrant Titanium
Pick one.
Whichever you like.
Deploying a PSGI app?
HTTP::Server::PSGI CGI FastCGI mod_perl
 mod_perl2 Fastpass Starman Starlet Twiggy
HTTP::Server::Simple::PSGI Feersum Corona
 mod_psgi evpsgi nginx_psgi Pelrbal uWSGI
FCGI::EV AnyEvent::FCGI AnyEvent::HTTPD
           Prack/nack Mongrel2
Pick one.
Whichever you like.
“I don’t know which
   I like the most.”
Some hints
Based on my experience
  and your experience
HTTP::Server::PSGI
• Plack Built-in
• Pure Perl
• Single-process, cross platform
• Experimental IPv6, SSL
• Automatic reloading with -r
HTTP::Server::PSGI
• Plack Built-in
• Pure Perl
• Single-process, cross platform
• Experimental IPv6, SSL
• Automatic reloading with -r
  Great for development and testing
HTTP::Server::Simple::PSGI

• Zero non-core dependencies (other than
  HTTP::Server::Simple)
• Single-process, extensible with H::S::S
• Works on 5.005_*
• Dancer’s default web server
HTTP::Server::Simple::PSGI

• Zero non-core dependencies (other than
  HTTP::Server::Simple)
• Single-process, extensible with H::S::S
• Works on 5.005_*
• Dancer’s default web server
   Great for embedding e.g. Android
CGI
• Plack::Handler::CGI
• Almost universally available
• Quite slow and inefficient
• Reasonably easy to run from the shell
CGI
• Plack::Handler::CGI
• Almost universally available
• Quite slow and inefficient
• Reasonably easy to run from the shell
        Last resort for Win32/IIS
            laptop web apps
mod_perl
• Plack::Handler::Apache[12]
• Lots of hooks and Apache modules
• Porting from mod_perl to PSGI might be
  tricky. (There are some tools/attempts)
mod_perl
• Plack::Handler::Apache[12]
• Lots of hooks and Apache modules
• Porting from mod_perl to PSGI might be
  tricky. (There are some tools/attempts)
   Not recommended unless you’ve
    hugely invested in mod_perl
Perlbal::Plugin::PSGI

• Pure perl load balancer
• LiveJournal, TypePad etc.
• Reproxying, Plugins etc.
• Danga::Socket (non-blocking)
Perlbal::Plugin::PSGI

• Pure perl load balancer
• LiveJournal, TypePad etc.
• Reproxying, Plugins etc.
• Danga::Socket (non-blocking)
     Considered EXPERIMENTAL
mod_psgi

• Apache module to run PSGI apps
• No mod_perl hooks
• Just persistent PSGI apps
• Simpler
mod_psgi

• Apache module to run PSGI apps
• No mod_perl hooks
• Just persistent PSGI apps
• Simpler
     Considered EXPERIMENTAL
nginx_mod_psgi

• nginx native PSGI extension
• https://github.com/yko/ngx_mod_psgi
• Pretty new
nginx_mod_psgi

• nginx native PSGI extension
• https://github.com/yko/ngx_mod_psgi
• Pretty new
     Considered EXPERIMENTAL
Mongrel2
• Zed Shaw
• ZeroMQ
• Pretty cool stuff
• lestrrat (Plack::Handler::Mongrel2)
• jockway (AnyEvent::Mongrel2)
Mongrel2
• Zed Shaw
• ZeroMQ
• Pretty cool stuff
• lestrrat (Plack::Handler::Mongrel2)
• jockway (AnyEvent::Mongrel2)
     Considered EXPERIMENTAL
Recommended Servers?
Standalone HTTP Servers
FastCGI daemons
Put it behind the frontend
        (nginx etc.)
Starman
•   Standalone HTTP

•   Prefork, app preloading

•   Dynamic process management

•   TCP/UNIX Sockets

•   Partial HTTP/1.1 support

•   Graceful restarts
Starman (cont.)

•   The Lacuna Expanse

•   perl.org

•   cpanratings.perl.org

•   etc.
Starlet

• Standalone HTTP server
• Prefork, app preloading
• HTTP/1.0
• Max/min spare workers
• Hot deploy via Server::Starter
Starlet (cont.)

• Livedoor
• Hatena
• etc.
Twiggy

• Standalone HTTP server
• AnyEvent based
• Tiny memory footprint
Twiggy (cont.)

• mixi
• SAY Media
• beta.metacpan.org
Feersum

• Standalone HTTP server
• EV.xs
• picohttpparser (C library)
• AnyEvent compatible
• Lighting fast
Plack::Handler::FCGI
• Standalone FastCGI daemon
  (or web server mode)
• Preforking
• TCP/UNIX sockets
• FCGI.xs
• Little bit of process management
fastpass

• github.com/miyagawa/fastpass
• Standalone FastCGI daemon
• preforking, dynamic process management
• Net::FastCGI (no XS)
• TCP/UNIX sockets
FCGI::EV/AE::FCGI

• Standalone FastCGI daemon
• EV/AnyEvent based
• asynchronous, non-blocking
uWSGI
• FastCGI-like protocol
• Optimized for *SGI
• built-in nginx/cherokee support
• AnyEvent support in the works
• Lots of configurations
• harakiri mode
uWSGI (cont.)


• DotCloud.com
  (more server types coming!)
Proc.             UNIX Graceful
           Proto,   Prefork   Async           TCP/IP                    XS/Perl
                                      Mgmt.            Sockets Restarts

Starman    HTTP       ✔                ✔        ✔        ✔        ✔       XS

 Starlet   HTTP       ✔                ✔        ✔                 ✔      XS/PP

 Twiggy    HTTP                ✔                ✔        ✔               XS/PP

Feersum    HTTP                ✔                ✔                         XS

FastCGI    FCGI       ✔                         ✔        ✔        ✔       XS

fastpass   FCGI       ✔                ✔        ✔        ✔        ✔       PP

AE::FCGI   FCGI                ✔                ✔        ✔                PP

FCGI::EV   FCGI                ✔                ✔        ✔                XS

uWSGI      uWSGI      ✔                ✔        ✔        ✔        ✔      C/XS
General guideline:
“Traditional” MVC apps?
Lots of RDBMS queries?
Coming from mod_perl?
Preforking servers
   Put it behind nginx.
Lots of I/O bound requests?
New app or can rewrite to use AE?
 Resource limited environment?
Asynchronous servers
     Twiggy or Feersum.
HTTP or FastCGI?
HTTP Standalone☺

• Put it behind frontend (nginx, lighttpd)
• Most web servers support reverse proxy
• As well as load balancers (perlbal, varnish)
• Easy for human to debug and test
• nginx + unix socket workers work well
HTTP Standalone ☹

• You may have to configure X-Forwarded-*
  and ReverseProxy middleware
• Keep-alives can be problematic in dumb
  servers like mod_proxy on apache2
• Path mismatch on frontend/backend could
  cause headaches
FastCGI ☺

• Many web servers support fastcgi
• No need for X-Forwarded-* configuration
• Potentially faster binary protocol between
  web server and app server
• “Hot deploy” via UNIX sockets
FastCGI ☹

• Binary protocol, may not be easy to debug
• Requires C/XS (but see fastpass)
• Hard to get SCRIPT_NAME/PATH_INFO
  right (e.g. lighttpd, mod_fcgid)
Questions/Suggestions?
2)
Code Deployment
Conventions = good.
Web app convention:
1) PSGI endpoint
2) CPAN dependencies
1)
app.psgi
2)
Makefile.PL
>
git
commit
‐m
‘releasing
v1.0.0’
>
git
tag
v1.0.0
>
git
push
‐‐tags

>
(checking
out
code)
>
cpanm
‐‐installdeps
.
>
(restart
app
servers
gracefully)
cpanm --installdeps .
<3
Problem
Pulls the latest versions
    of CPAN today.
Many solutions:
Shipwright, MyCPAN, orepan, DPAN
Carton
inspired by bundler
Carton
• App-specific local environment (local::lib)
• Dep-tree analysis, including versions.
• Single-file,VCS friendly
• Freezing/locking versions
• Recreates mirror on deploy
• Conservative Updates
>
carton
install
>
git
commit
‐m
‘releasing
v1.0.0’





carton.lock
Makefile.PL
>
git
tag
v1.0.0
>
git
push
‐‐tags

>
(checking
out
code)
>
carton
install

>
(restart
app
servers
gracefully)
dotCloud will do
all of this for you :)
      DISCLAIMER: I work for dotCloud.
github.com/miyagawa/carton
3)
Application Environment
Useful middleware
 for deployments
SizeLimit
     Port of Apache::SizeLimit
Supported by Starman, Starlet, uWSGI
use
Plack::Builder;

builder
{


enable
“SizeLimit”,




max_unshared_size_in_kb
=>
4096,




check_every_n_requests
=>
5;


$app;
}
ServerStatus::Lite
   Port of mod_status
     Starlet, Starman
use
Plack::Builder;

builder
{


enable
“ServerStatus::Lite”,




path
=>
‘/server‐status’;


$app;
}
Runtime
Adds X-Runtime: header
use
Plack::Builder;

builder
{


enable
“Runtime”;


$app;
}
use
Plack::Builder;

builder
{


enable
“Runtime”;


$app;
}
%
curl
‐I
http://localhost:5000/
HTTP/1.0
200
OK
Server:
HTTP::Server::PSGI
X‐Runtime:
0.00029
ErrorDocument
 Customize error pages
   500/503/404 etc.
use
Plack::Builder;

builder
{


enable
“ErrorDocument”,




500
=>
‘/home/www/errors/500.html’;


$app;
};
Throttle
Rate-limiting framework
use
Plack::Builder;

builder
{


enable
“Throttle::Hourly”,





max
=>
200,




backend
=>
...,




path
=>
qr!^/api!;


$app;
}
Expires
     Port of mod_expires
Cache static files on proxy/clients
use
Plack::Builder;

builder
{


enable
“Expires”,




content_type
=>
qr!^image/!,




expires
=>
‘access
plus
3
months’;


$app;
};
Rewrite
mod_rewrite-ish URL rewriting
      pure perl syntax
use
Plack::Builder;

builder
{


enable
‘Rewrite’,
rules
=>
sub
{




s{^/here}{/there};









return
301
if
s{^/foo/}{/bar/};




return
201
if
$_
eq
‘/favicon.ico’;




return
503
if
‐e
‘/tmp/maint.txt’;


};


$app;
}
Auth::Basic/Digest
   Add Basic authentication
with any Auth::Simple backends
use
Plack::Builder;
use
Authen::Simple::Kerberos;

my
$auth
=
Authen::Simple::Kerberos‐>new(


realm
=>
‘REALM.MYCOMPANY.COM’,
);

builder
{


enable
“Auth::Basic”,




authenticator
=>
$auth;


$app;
};
PSGI Deployment
     Survey
~100 responses
    Thank you!
What category describes
   your apps best?
Intranet
                        9%

                            Personal
                              21%
Small to mid-scale
       49%


                      Large scale
                         21%
Where is it hosted?
VPS   Colocation   Own Data Center   Enterprise   Home   Cloud
Operating Systems?
Ubuntu

  Debian

 CentOS

   RHEL

   Linux

FreeBSD

Mac OS X

Windows

  Solaris

            0   10   20   30   40
Perl versions?
60


45


30


15


0
     “5.8”   “5.10”   “5.12”   “5.14”
Web Frameworks?
(in-house)


       Catalyst


    Mojolicious


        Dancer


CGI::Application


     Tatsumaki


         Amon2


         Mason

                   0   10   20   30   40
When did you migrate
 or start using PSGI?
2009 Year   2010 Q2   2010 Q4   2011 Q2   Future
Which PSGI server?
Starman

             Starlet

             Twiggy

Plack::Handler::FCGI

         mod_perl 2

 HTTP::Server::PSGI

  H::S::Simple::PSGI

                CGI

           Feersum

             uWSGI

       mod_perl 1.3

                       0   15   30   45   60
FastCGI web servers


      mod_fcgid
         8%
lighttpd
  20%             nginx
                  40%




  mod_fastcgi
     33%
Frontend web servers


    nginx

mod_proxy

   perlbal

   Varnish

  lighttpd

    Squid
How did you measure the right # of
  servers and worker processes?
Guess
    Defaults 7%
      6%

                        by RAM
by CPU                   40%
 19%




         by req. time
             27%
How do you keep
logs of your apps?
Log4perl


daemontools


      syslog


    logrotate


Log::Dispatch


 Log::Minimal


   supervisor


        runit


      Others
Results will be posted on
http://blog.plackperl.org/
One more thing...
REPL
InteractiveDebugger
Thanks!
  Check out Booth 527
for FREE DotCloud T-shirt

Mais conteúdo relacionado

Mais procurados

Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Tatsuhiko Miyagawa
 
Using Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivityUsing Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivity
Claus Ibsen
 

Mais procurados (20)

Plack - LPW 2009
Plack - LPW 2009Plack - LPW 2009
Plack - LPW 2009
 
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
 
DevOps tools for everyone - Vagrant, Puppet and Webmin
DevOps tools for everyone - Vagrant, Puppet and WebminDevOps tools for everyone - Vagrant, Puppet and Webmin
DevOps tools for everyone - Vagrant, Puppet and Webmin
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
 
Integration using Apache Camel and Groovy
Integration using Apache Camel and GroovyIntegration using Apache Camel and Groovy
Integration using Apache Camel and Groovy
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга Свиридова
 
Keybase Vault Auto-Unseal HashiTalks2020
Keybase Vault Auto-Unseal HashiTalks2020Keybase Vault Auto-Unseal HashiTalks2020
Keybase Vault Auto-Unseal HashiTalks2020
 
Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014
 
Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016
 
Gruntwork Executive Summary
Gruntwork Executive SummaryGruntwork Executive Summary
Gruntwork Executive Summary
 
Using Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivityUsing Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivity
 
Apache Camel - The integration library
Apache Camel - The integration libraryApache Camel - The integration library
Apache Camel - The integration library
 
Building real time applications with Symfony2
Building real time applications with Symfony2Building real time applications with Symfony2
Building real time applications with Symfony2
 
Killer Docker Workflows for Development
Killer Docker Workflows for DevelopmentKiller Docker Workflows for Development
Killer Docker Workflows for Development
 
OWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersOWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA Testers
 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
 
Caching the Uncacheable: Leveraging Your CDN to Cache Dynamic Content
Caching the Uncacheable: Leveraging Your CDN to Cache Dynamic ContentCaching the Uncacheable: Leveraging Your CDN to Cache Dynamic Content
Caching the Uncacheable: Leveraging Your CDN to Cache Dynamic Content
 
Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015
 
Regex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language InsteadRegex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language Instead
 
Stupid Boot Tricks: using ipxe and chef to get to boot management bliss
Stupid Boot Tricks: using ipxe and chef to get to boot management blissStupid Boot Tricks: using ipxe and chef to get to boot management bliss
Stupid Boot Tricks: using ipxe and chef to get to boot management bliss
 

Destaque (6)

Carton CPAN dependency manager
Carton CPAN dependency managerCarton CPAN dependency manager
Carton CPAN dependency manager
 
Network Programming With Anyevent
Network Programming With AnyeventNetwork Programming With Anyevent
Network Programming With Anyevent
 
CPAN Realtime feed
CPAN Realtime feedCPAN Realtime feed
CPAN Realtime feed
 
Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012
 
ZeroMQ in PHP
ZeroMQ in PHPZeroMQ in PHP
ZeroMQ in PHP
 
No Hugging, No Learning
No Hugging, No LearningNo Hugging, No Learning
No Hugging, No Learning
 

Semelhante a Deploying Plack Web Applications: OSCON 2011

Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012
Yuji Takayama
 
Developing Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptDeveloping Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScript
nohuhu
 
ApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
ApacheCon NA 2010 - High Performance Cloud-enabled SCA RuntimesApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
ApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
Jean-Sebastien Delfino
 
Move out from AppEngine, and Python PaaS alternatives
Move out from AppEngine, and Python PaaS alternativesMove out from AppEngine, and Python PaaS alternatives
Move out from AppEngine, and Python PaaS alternatives
tzang ms
 

Semelhante a Deploying Plack Web Applications: OSCON 2011 (20)

Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012
 
PSGI/Plack OSDC.TW
PSGI/Plack OSDC.TWPSGI/Plack OSDC.TW
PSGI/Plack OSDC.TW
 
Joomla! Performance on Steroids
Joomla! Performance on SteroidsJoomla! Performance on Steroids
Joomla! Performance on Steroids
 
Nginx pres
Nginx presNginx pres
Nginx pres
 
Nginx, PHP, Apache and Spelix
Nginx, PHP, Apache and SpelixNginx, PHP, Apache and Spelix
Nginx, PHP, Apache and Spelix
 
What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24
 
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
 
Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009
 
Get your teeth into Plack
Get your teeth into PlackGet your teeth into Plack
Get your teeth into Plack
 
Real-Time Web applications with WebSockets
Real-Time Web applications with WebSocketsReal-Time Web applications with WebSockets
Real-Time Web applications with WebSockets
 
Developing Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptDeveloping Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScript
 
ApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
ApacheCon NA 2010 - High Performance Cloud-enabled SCA RuntimesApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
ApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
 
Beyond Puppet
Beyond PuppetBeyond Puppet
Beyond Puppet
 
Testing with Codeception
Testing with CodeceptionTesting with Codeception
Testing with Codeception
 
Developing Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & PythonDeveloping Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & Python
 
PHP on Windows 2008
PHP on Windows 2008PHP on Windows 2008
PHP on Windows 2008
 
Northeast PHP - High Performance PHP
Northeast PHP - High Performance PHPNortheast PHP - High Performance PHP
Northeast PHP - High Performance PHP
 
State of Big Data on ARM64 / AArch64 - Apache Bigtop
State of Big Data on ARM64 / AArch64 - Apache BigtopState of Big Data on ARM64 / AArch64 - Apache Bigtop
State of Big Data on ARM64 / AArch64 - Apache Bigtop
 
Crafting APIs
Crafting APIsCrafting APIs
Crafting APIs
 
Move out from AppEngine, and Python PaaS alternatives
Move out from AppEngine, and Python PaaS alternativesMove out from AppEngine, and Python PaaS alternatives
Move out from AppEngine, and Python PaaS alternatives
 

Mais de Tatsuhiko Miyagawa

Asynchronous programming with AnyEvent
Asynchronous programming with AnyEventAsynchronous programming with AnyEvent
Asynchronous programming with AnyEvent
Tatsuhiko Miyagawa
 
Why Open Matters It Pro Challenge 2008
Why Open Matters It Pro Challenge 2008Why Open Matters It Pro Challenge 2008
Why Open Matters It Pro Challenge 2008
Tatsuhiko Miyagawa
 
20 modules i haven't yet talked about
20 modules i haven't yet talked about20 modules i haven't yet talked about
20 modules i haven't yet talked about
Tatsuhiko Miyagawa
 
Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8
Tatsuhiko Miyagawa
 

Mais de Tatsuhiko Miyagawa (15)

cpanminus at YAPC::NA 2010
cpanminus at YAPC::NA 2010cpanminus at YAPC::NA 2010
cpanminus at YAPC::NA 2010
 
Asynchronous programming with AnyEvent
Asynchronous programming with AnyEventAsynchronous programming with AnyEvent
Asynchronous programming with AnyEvent
 
Remedie OSDC.TW
Remedie OSDC.TWRemedie OSDC.TW
Remedie OSDC.TW
 
Why Open Matters It Pro Challenge 2008
Why Open Matters It Pro Challenge 2008Why Open Matters It Pro Challenge 2008
Why Open Matters It Pro Challenge 2008
 
20 modules i haven't yet talked about
20 modules i haven't yet talked about20 modules i haven't yet talked about
20 modules i haven't yet talked about
 
Web::Scraper for SF.pm LT
Web::Scraper for SF.pm LTWeb::Scraper for SF.pm LT
Web::Scraper for SF.pm LT
 
Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8
 
Web::Scraper
Web::ScraperWeb::Scraper
Web::Scraper
 
XML::Liberal
XML::LiberalXML::Liberal
XML::Liberal
 
Test::Base
Test::BaseTest::Base
Test::Base
 
Hacking Vox and Plagger
Hacking Vox and PlaggerHacking Vox and Plagger
Hacking Vox and Plagger
 
Plagger the duct tape of internet
Plagger the duct tape of internetPlagger the duct tape of internet
Plagger the duct tape of internet
 
Tilting Google Maps and MissileLauncher
Tilting Google Maps and MissileLauncherTilting Google Maps and MissileLauncher
Tilting Google Maps and MissileLauncher
 
Writing Pluggable Software
Writing Pluggable SoftwareWriting Pluggable Software
Writing Pluggable Software
 
How we build Vox
How we build VoxHow we build Vox
How we build Vox
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 

Deploying Plack Web Applications: OSCON 2011

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n