31
YAPC::Brasil::2009 Thiago Rondon POE Edgar Allan POE... POEtry ... Panel Of Experts ... Parallel Object Executor ... Parcel Out Execution ... Parenthetically Over- Engineered ... Parity Of Evil ... Part Of Elephant ... Particles Of Eternity ... Party On, Ebenezer ... Passed Out from Excitement ... Pathetically Over-Engineered ... Peace On Earth ... People Of Earth ... Perfect Orange Eater ... Perfectly Oblique Eggplant ... Periodically Orbits Earth ... Perl Obfuscation Engine ... Perl Object Environment ... Perl Objects for Enterprises ... Perl Objects for Events ... Perl On Extasy ... Perl Operating Environment ... Perl Operator Extravaganza ... Perl Over Easy ... Perl Over Ethernet ... Perl Overdrive Engine ... Perl, Objects and Events ... Perl: Objectively Excellent ... Perlmud Offers Expansions ... Perpetual Orgone Energy ... Persistent Object Environment ... Persnickity Oblong Erudition ... Perversely Oriented Entities ... Philanthropic Organization Enterprises ... Physician Order Entry ... Piece Of Eden ... Piece Of Eight ... Pigs, Owls, and Elephants ... Piles Of Eugh ... Pious Object Excelsior ... Piracy Over Ethernet ... Pissed Off Elephants ... Plain Old English ... Plastic Orbs Everywhere ... Platonic Object Engine ... Plenty Of Everything ... Plucky Object Engine ... Poe Oracle Environment ... Poe Organizes Everything ... Poe Over Earth ... Point Of Entry ... Polyolester ... Port of Embarkment ... Portal Of Evil ... Possibly Over-Engineered ... Post-Occupancy Evaluation ... Potatoes Of Eternity ... Potentially Omnipotent Entity ... Pow! Oof! Eek! ... Power Operating Environment ... Power Over Ethernet ... Practical Over Extraction ... Practically Overengineered Environment ... Preponderance of Evidence ... Preserve Our Essences ... Pretty Obelisk, Excavated ... Pretty Obfuscation Engine ... Pretty Obtuse Engine ... Pretty Odd Environment ... Price Of Entity ... Princess On Ecstasy ... Probable Obese Elephant ... Product Of Experts ... Products Of Eccentricity ... Prognosis: Over- Engineered ... Program Office Estimate ... Programming Over Easy ... Proliferation Of Events ... Prolifically Over-Eaten ... Purity Of Essence ... Purveyor Of Everything ...

YAPC::Brasil 2009, POE

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: YAPC::Brasil 2009, POE

YAPC::Brasil::2009Thiago Rondon

POEEdgar Allan POE... POEtry ... Panel Of Experts ... Parallel Object Executor ... Parcel Out Execution ... Parenthetically Over-

Engineered ... Parity Of Evil ... Part Of Elephant ... Particles Of Eternity ... Party On, Ebenezer ... Passed Out from Excitement ... Pathetically Over-Engineered ... Peace On Earth ... People Of Earth ... Perfect Orange Eater ... Perfectly Oblique Eggplant ...

Periodically Orbits Earth ... Perl Obfuscation Engine ... Perl Object Environment ... Perl Objects for Enterprises ... Perl Objects for Events ... Perl On Extasy ... Perl Operating Environment ... Perl Operator Extravaganza ... Perl Over Easy ... Perl Over Ethernet ... Perl

Overdrive Engine ... Perl, Objects and Events ... Perl: Objectively Excellent ... Perlmud Offers Expansions ... Perpetual Orgone Energy ... Persistent Object Environment ... Persnickity Oblong Erudition ... Perversely Oriented Entities ... Philanthropic

Organization Enterprises ... Physician Order Entry ... Piece Of Eden ... Piece Of Eight ... Pigs, Owls, and Elephants ... Piles Of Eugh ... Pious Object Excelsior ... Piracy Over Ethernet ... Pissed Off Elephants ... Plain Old English ... Plastic Orbs Everywhere ... Platonic Object Engine ... Plenty Of Everything ... Plucky Object Engine ... Poe Oracle Environment ... Poe Organizes Everything ... Poe Over

Earth ... Point Of Entry ... Polyolester ... Port of Embarkment ... Portal Of Evil ... Possibly Over-Engineered ... Post-Occupancy Evaluation ... Potatoes Of Eternity ... Potentially Omnipotent Entity ... Pow! Oof! Eek! ... Power Operating Environment ... Power Over

Ethernet ... Practical Over Extraction ... Practically Overengineered Environment ... Preponderance of Evidence ... Preserve Our Essences ... Pretty Obelisk, Excavated ... Pretty Obfuscation Engine ... Pretty Obtuse Engine ... Pretty Odd Environment ... Price Of

Entity ... Princess On Ecstasy ... Probable Obese Elephant ... Product Of Experts ... Products Of Eccentricity ... Prognosis: Over-Engineered ... Program Office Estimate ... Programming Over Easy ... Proliferation Of Events ... Prolifically Over-Eaten ... Purity Of

Essence ... Purveyor Of Everything ...

Page 2: YAPC::Brasil 2009, POE

FRAMEWORK

Page 3: YAPC::Brasil 2009, POE

EVENT DRIVEN

Page 4: YAPC::Brasil 2009, POE

MULTITASKING

Page 5: YAPC::Brasil 2009, POE

FORKING & THREADING ?

Page 6: YAPC::Brasil 2009, POE

AD-HOC EVENTS

Page 7: YAPC::Brasil 2009, POE

DISTRIBUTED PROGRAMMING

::IKC

Page 8: YAPC::Brasil 2009, POE

TESTED SYSTEM 1998-2000.........

Page 9: YAPC::Brasil 2009, POE

GROWING TOOLBOX

Page 10: YAPC::Brasil 2009, POE

POE::Component

POE::[Wheel,Filter,Driver]

POE::Session

POE::Kernel

Layer 1

Layer 2

Layer 3

Page 11: YAPC::Brasil 2009, POE

COMPONENT

WHEEL

SESSION

KERNEL

POE::Kernel

Disparador de eventos,

POE::Loop::Select

Singleton

Post & yield

Timers

Page 12: YAPC::Brasil 2009, POE

COMPONENT

WHEEL

SESSION

KERNEL

Responde aos eventos

$_[OBJECT]$_[SESSION]$_[HEAP]$_[STATE]$_[SENDER]$_[ARG0..ARG9]

POE::Session

Page 13: YAPC::Brasil 2009, POE

COMPONENT

WHEEL

SESSION

KERNEL

“Plugins” para a sessão. Encapsular conjuntos de

manipuladores de eventos.

#Exemplo: POE::Wheel::Run#Executa um programa ou um conjunto de código em um subprocesso usando fork() e troca informações pelo stdin, stdout, stderr.

POE::Wheel

Page 14: YAPC::Brasil 2009, POE

COMPONENT

WHEEL

SESSION

KERNEL

POE::Component::IRC,POE::Component::Server::RadiusPOE::Component::Server::TCPPOE::Component::Server::HTTPPOE::Component::GithubPOE::Component::Jabber(...)

POE::Component

564 componentes no CPAN até ontem.(30/Outubro/2009)

Page 15: YAPC::Brasil 2009, POE

ESTUDO DE CASOS

Page 16: YAPC::Brasil 2009, POE

“Ping Múltiplo”

Page 17: YAPC::Brasil 2009, POE

use POE;use POE::Component::Client::Ping;my @addresses = qw(200.219.201.245 200.219.201.246 200.219.201.247);

POE::Component::Client::Ping->spawn( Alias => 'pinger', Timeout => 5,);

POE::Session->create( inline_states => { _start => \&client_start, pong => \&client_got_pong, });

SESSION

COMPONENT

Page 18: YAPC::Brasil 2009, POE

sub client_start { my ($kernel, $session) =

@_[KERNEL, SESSION]; print "Starting to ping hosts.\n";

foreach my $address (@addresses) { $kernel->post(

pinger => ping => pong => $address); }}

Page 19: YAPC::Brasil 2009, POE

sub client_got_pong { my ($kernel, $session) = @_[KERNEL, SESSION]; my $request_packet = $_[ARG0]; my ($request_packetest_address, $request_timeout, $request_time) = @{$request_packet}; my $response_packet = $_[ARG1]; my ($response_address, $roundtrip_time, $reply_time) = @{$response_packet};

if (defined $response_address) { printf("Pinged %-15.15s - Response from %-15.15s in %6.3fs\n", $request_address, $response_address, $roundtrip_time); } else { print "Time's up for responses from $request_address.\n"; }}

Page 20: YAPC::Brasil 2009, POE

$poe_kernel->run();

KERNEL

Page 21: YAPC::Brasil 2009, POE

IRC

Page 22: YAPC::Brasil 2009, POE

#!/usr/bin/perluse warnings;use strict;use POE;use POE::Component::IRC;

my ($irc) = POE::Component::IRC->spawn();

POE::Session->create( inline_states => { _start => \&bot_start, irc_001 => \&on_connect, irc_public => \&on_public, },);

Page 23: YAPC::Brasil 2009, POE

#!/usr/bin/perluse warnings;use strict;use POE;use POE::Component::IRC;

my ($irc) = POE::Component::IRC->spawn();

POE::Session->create( inline_states => { _start => \&bot_start, irc_001 => \&on_connect, irc_public => \&on_public, },);

COMPONENT

Page 24: YAPC::Brasil 2009, POE

#!/usr/bin/perluse warnings;use strict;use POE;use POE::Component::IRC;

my ($irc) = POE::Component::IRC->spawn();

POE::Session->create( inline_states => { _start => \&bot_start, irc_001 => \&on_connect, irc_public => \&on_public, },);

SESSION

COMPONENT

Page 25: YAPC::Brasil 2009, POE

sub bot_start { $irc->yield(register => "all"); $irc->yield( connect => { Nick => 'maluco_yapc', Username => 'maluco', Ircname => 'YAPC Brasil 2009', Server => 'irc.perl.org', Port => '6667', } );}

COMPONENT

Page 26: YAPC::Brasil 2009, POE

sub on_connect { $irc->yield(join => “#yapcbrasil”);}

COMPONENT

Page 27: YAPC::Brasil 2009, POE

sub on_public { my ($kernel, $who, $where, $msg) =

@_[KERNEL, ARG0, ARG1, ARG2]; my $nick = (split /!/, $who)[0]; my $channel = $where->[0]; my $ts = scalar localtime; print " [$ts] <$nick:$channel> $msg\n"; if (my ($response) = $msg =~ /^$nick (.+)/) { $irc->yield(privmsg => $channel, “estamos aqui.“); }}

COMPONENTKERNEL

Page 28: YAPC::Brasil 2009, POE

$poe_kernel->run();

KERNEL

Page 29: YAPC::Brasil 2009, POE

Rocco Caputo

Page 30: YAPC::Brasil 2009, POE

http://poe.perl.org