SlideShare une entreprise Scribd logo
1  sur  81
Reflex
How does it work?
   Rocco Caputo – @rcaputo
     Orlando Perl Workshop
    Saturday, 15 January 2011
         Around Noon
Reflex
 What Is It?
Rocco Caputo – @rcaputo
  Orlando Perl Workshop
 Saturday, 15 January 2011
      Around Noon
What’s Reflex?!


• Library of roles that process eventy stuff—
  timers, I/O notifications, signals, etc.
• Eventy class library built with those roles.
Reflex Roles–Briefly
package AsyncConsole;
use Moose; extends 'Reflex::Base';

has stdin => (
   is       => 'rw',
   isa      => 'FileHandle',
   required => 1,
);

with 'Reflex::Role::Readable' => {
   handle     => 'stdin',
   cb_ready   => 'get_keystroke',
};

sub get_keystroke { ... }
Reflex Roles?
package Console;
use Moose; extends 'Reflex::Base';

has stdout    =>   (
   is         =>   'rw',
   isa        =>   'FileHandle',
   required   =>   1,
);

with 'Reflex::Role::Readable' => {
   handle     => 'stdin',
   cb_ready   => 'get_keystroke',
};

sub get_keystroke { ... }
Except Much
   Better
I’ll Explain
at YAPC::NA
Reflex
How does it work?
   Rocco Caputo – @rcaputo
     Orlando Perl Workshop
    Saturday, 15 January 2011
         Around Noon
Magic
Sufficiently
 Advanced
Technology
“Sufficiently
Advanced”
     =
 We Don’t
 Know Yet
Learn
Magic in 90
 Minutes
Learn Just
Enough Magic in
 20 Minutes to
 Harm Yourself
Learn Just
Enough Magic in
 18 Minutes to
 Harm Yourself
Reflex
How does it work?
   Rocco Caputo – @rcaputo
     Orlando Perl Workshop
    Saturday, 15 January 2011
         Around Noon
Program
Composition
Dynamic Composition
• Objects are created,
 • related,
   • communicated (with),
     • and destructicated
       • at run time.
• Lather, rinse, repeat until the program ends.
Static Composition

• Code is bolted together before running.
• It stays that way “forever”.

• Subclassing.
• Moose roles.
Dynamic Reflex
Anonymous
 Callbacks
Ye Olde Coderef
use Reflex::Interval;

my $i = Reflex::Interval->new(
   interval => 1,
   on_tick => sub { print "tick...n" },
);

$i->run_all();
Ye Olde Coderef

tick...
tick...
tick...
^C
Ye Olde Coderef
• Quick and dead simple to use.
• Closure tricks for convenience and speed.

• Closures can’t use OO to extend or
  override event handlers.
• Uses circular references—memory leakage
  if you’re not careful.
Method
Callbacks
Methods
has ticker => (
  isa => 'Reflex::Interval', is => 'rw' );

sub BUILD {
  my $self = shift;
  $self->ticker(
     Reflex::Interval->new(
       interval => 1,
       on_tick => cb_method($self, "callback"),
     )
  );
}

sub callback { print "tick...n" }
Methods
has ticker => (
  isa => 'Reflex::Interval', is => 'rw' );

sub BUILD {
  my $self = shift;
  $self->ticker(
     Reflex::Interval->new(
       interval => 1,
       on_tick => cb_method($self, "callback"),
     )
  );
}

sub callback { print "tick...n" }
Methods
has ticker => (
  isa => 'Reflex::Interval', is => 'rw' );

sub BUILD {
  my $self = shift;
  $self->ticker(
     Reflex::Interval->new(
       interval => 1,
       on_tick => cb_method($self, "callback"),
     )
  );
}

sub callback { print "tick...n" }
Methods
• Cleaner object oriented design.
• Callbacks can use every Moose trick in the
  book.


• Requires more forethought.
• Perl & Moose OO less performant than
  anonymous subroutines & closures.
Observed
Attributes
Callbacks
 Discovered
Automatically
Moose
Traits Rock
Observed Attributes
use Reflex::Trait::Observed qw(observes);

observes clock => (
   isa    => 'Reflex::Interval',
   setup => sub {
      Reflex::Interval->new(interval => 1)
   },
);

sub on_clock_tick { print "tick...n" }
Observed Attributes
use Reflex::Trait::Observed qw(observes);

observes clock => (
   isa    => 'Reflex::Interval',
   setup => sub {
      Reflex::Interval->new(interval => 1)
   },
);

sub on_clock_tick { print "tick...n" }
Observed Attributes
use Reflex::Trait::Observed qw(observes);

observes clock => (
   isa    => 'Reflex::Interval',
   setup => sub {
      Reflex::Interval->new(interval => 1)
   },
);

sub on_clock_tick { print "tick...n" }
Observed Attributes
use Reflex::Trait::Observed qw(observes);

observes clock => (
   isa    => 'Reflex::Interval',
   setup => sub {
      Reflex::Interval->new(interval => 1)
   },
);

sub on_clock_tick { print "tick...n" }
Observed Attributes
use Reflex::Trait::Observed qw(observes);

observes clock => (
   isa    => 'Reflex::Interval',
   setup => sub {
      Reflex::Interval->new(interval => 1)
   },
);

sub on_clock_tick { print "tick...n" }
Observed Attributes
use Reflex::Trait::Observed qw(observes);

observes penguin => (
   isa   => 'Reflex::Bomb',
   setup => sub { ... },
);

sub on_penguin_tick { ... }
sub on_penguin_stop { ... }
sub on_penguin_explode { ... }
Observed Attributes

use Reflex::Trait::Observed qw(observes);

observes watchdog => ( ... Interval ... );
observes log_mark => ( ... Interval ... );

sub on_watchdog_tick { ... }
sub on_log_mark_tick { ... }
One Class,
Three Uses
“But callbacks
   suck!”
Promises
What’s a Promise?
“an object that acts as a proxy
for a result that is initially not
  known, usually because the
 computation of its value has
     not yet completed.”
         — Wikipedia
What’s a Promise?


Blah blah blah.
What’s a Promise?
• Asynchronous object.
 • Create it.
 • Do other stuff while it runs.
 • Pick up the result later.
• Blocks or returns “incomplete” if not done.
 • Other stuff runs while it blocks.
Timer Promise (1 of 2)
use Reflex::Interval;

my $one = Reflex::Interval->new(
   interval => 1
);

my $two = Reflex::Interval->new(
   interval => 2
);
Timer Promise (2 of 2)

print "Before   : ", time(), "n";

my $event = $two->next();
print "After two: ", time(), "n";

$event = $one->next();
print "After one: ", time(), "n";
Eventy Timer Promise

% perl this-time-for-sure.pl
Before   : 1295045065
After two: 1295045067
After one: 1295045067
Eventy Timer Promise

% perl this-time-for-sure.pl
Before   : 1295045065
After two: 1295045067
After one: 1295045067
One Class,
Three Four Uses
Four
Dynamic Uses
Static Reflex
Subclassing
Eventy Subclassing
{
    package MyTimer;
    use Moose;
    extends 'Reflex::Interval';

    before on_tick => sub { say "tick..." };
}

MyTimer->new( interval => 1 )->run_all();
Eventy Subclassing

tick...
tick...
tick...
^C
One Class
Four Five Uses
Must be a
beast, right?
Reflex::Interval (1 of 3)
package Reflex::Interval;
use Moose; extends 'Reflex::Base';

has interval => (
   isa => 'Num', is   => 'ro'
);

has auto_repeat => (
   isa => 'Bool', is => 'ro', default => 1
);

has auto_start => (
   isa => 'Bool', is => 'ro', default => 1
);
Reflex::Interval (2 of 3)
with 'Reflex::Role::Interval' => {
   interval      => "interval",
   auto_start    => "auto_start",
   auto_repeat   => "auto_repeat",
   cb_tick       => "on_tick",
   ev_tick       => "tick",
   method_start => "start",
   method_stop   => "stop",
   method_repeat => "repeat",
};
Reflex::Interval (3 of 3)



       1;
Roles
Reflex Roles
• Reflex eventiness implemented with roles.
 • Timers, I/O, signals, etc.
• Roles are reified by simple classes.
 • Reflex::Interval is Reflex::Role::Interval.
• Larger roles comprise simpler ones.
• It’s all Mooses, all the way down.
Parameterized Roles

• MooseX::Role::Parameterized rocks.
 • Parameters customize roles—fill in the
    blanks like templates.
 • Reflex uses it like breadboarding with
    Moose.
Lots of Role
Parameters
They’re Tedious
 to Configure
Smart Defaults

• A primary attribute identifies the role.
• Default parameters are named after that
  attribute.
• Roles avoid conflicts by default.
• Without tediously supplying all parameters.
Key Attribute
with 'Reflex::Role::Interval' => {
  interval => "watchdog",
}

Role Parameter          Default Name
  method_start         start_watchdog()

   method_stop          stop_watchdog()

     cb_tick          on_watchdog_tick()

     ev_tick             watchdog_tick
Key Attribute
with 'Reflex::Role::Interval' => {
  interval => "logmark",
}

Role Parameter          Default Name
  method_start          start_logmark()

   method_stop          stop_logmark()

     cb_tick           on_logmark_tick()

     ev_tick             logmark_tick
One Class
Role Five Six
    Uses
Dynamic Fun
Smalltalk Messaging
• Reflex::Trait::EmitsOnChange
• Emits an event when an attribute changes.
  use Reflex::Trait::EmitsOnChange qw(emits);

  emits count => (
     isa => 'Int', default => 0
  );

  sub on_ticker_tick {
    my $self = shift;
    $self->count($self->count() + 1);
  }
Smalltalk Messaging

use Reflex::Trait::EmitsOnChange qw(emits);

emits count => (
   isa => 'Int', default => 0
);

sub on_ticker_tick {
  my $self = shift;
  $self->count($self->count() + 1);
}
Reflex::Collection

• Manages Reflex::Role::Collectible objects.
• Removes them as they stop.
• Great for holding autonomous things.
Reflex::Collection
{
    package TcpEchoServer; use Moose;
    extends 'Reflex::Acceptor'; use EchoStream;
    use Reflex::Collection qw(has_many);

    has_many clients => (
      handles => { remember_client => "remember" } );

    sub on_accept {
      my ($self, $args) = @_;
      $self->remember_client(
         EchoStream->new( handle => $args->{socket} )
      );
    }
}
Reflex::Collection
{
    package TcpEchoServer; use Moose;
    extends 'Reflex::Acceptor'; use EchoStream;
    use Reflex::Collection qw(has_many);

    has_many clients => (
      handles => { remember_client => "remember" } );

    sub on_accept {
      my ($self, $args) = @_;
      $self->remember_client(
         EchoStream->new( handle => $args->{socket} )
      );
    }
}
Reflex::Collection
{
    package TcpEchoServer; use Moose;
    extends 'Reflex::Acceptor'; use EchoStream;
    use Reflex::Collection qw(has_many);

    has_many clients => (
      handles => { remember_client => "remember" } );

    sub on_accept {
      my ($self, $args) = @_;
      $self->remember_client(
         EchoStream->new( handle => $args->{socket} )
      );
    }
}
EchoStream
package EchoStream;
use Moose;
extends 'Reflex::Stream';

sub on_data {
  my ($self, $args) = @_;
  $self->put($args->{data});
}

1;
But is Reflex
   ready?
Reflex is Newish

• Large swathes of design are stable.
• Details need to be ironed out.
• Will happen faster if you use it.
• Help me find the edge cases.
How To Help
• http://github.com/rcaputo/reflex
 • See docs/TODO.otl
• #reflex on irc.perl.org
• poe-subscribe@perl.org
• Hackathon?
• Hire someone to use it on your project.
Contribute to a Project
• Nick Perez’s Reflex-based psgi server.
• Reflexive::Stream::Filtering
 • Attach POE filters to Reflex streams.
• Reflexive::Role::TCPServer
 • Consumable full-featured TCP server.
• (Your Project Here)
Thank you!

Contenu connexe

Tendances

Explaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to ComeExplaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to ComeCory Forsyth
 
ES6 - Next Generation Javascript
ES6 - Next Generation JavascriptES6 - Next Generation Javascript
ES6 - Next Generation JavascriptRamesh Nair
 
連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」matuura_core
 
Ian 20150116 java script oop
Ian 20150116 java script oopIan 20150116 java script oop
Ian 20150116 java script oopLearningTech
 
Proxies are Awesome!
Proxies are Awesome!Proxies are Awesome!
Proxies are Awesome!Brendan Eich
 
Introduction to Ecmascript - ES6
Introduction to Ecmascript - ES6Introduction to Ecmascript - ES6
Introduction to Ecmascript - ES6Nilesh Jayanandana
 
Say Hello To Ecmascript 5
Say Hello To Ecmascript 5Say Hello To Ecmascript 5
Say Hello To Ecmascript 5Juriy Zaytsev
 
Functions, Types, Programs and Effects
Functions, Types, Programs and EffectsFunctions, Types, Programs and Effects
Functions, Types, Programs and EffectsRaymond Roestenburg
 
ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overviewhesher
 
Functional Reactive Programming (FRP): Working with RxJS
Functional Reactive Programming (FRP): Working with RxJSFunctional Reactive Programming (FRP): Working with RxJS
Functional Reactive Programming (FRP): Working with RxJSOswald Campesato
 
Reactive Summit 2017
Reactive Summit 2017Reactive Summit 2017
Reactive Summit 2017janm399
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Susan Potter
 
Javascript: the important bits
Javascript: the important bitsJavascript: the important bits
Javascript: the important bitsChris Saylor
 
Think Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJSThink Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJSAdam L Barrett
 
Execution model and other must-know's
Execution model and other must-know'sExecution model and other must-know's
Execution model and other must-know'sPablo Enfedaque
 
AST - the only true tool for building JavaScript
AST - the only true tool for building JavaScriptAST - the only true tool for building JavaScript
AST - the only true tool for building JavaScriptIngvar Stepanyan
 

Tendances (20)

Explaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to ComeExplaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to Come
 
ES6 - Next Generation Javascript
ES6 - Next Generation JavascriptES6 - Next Generation Javascript
ES6 - Next Generation Javascript
 
連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」
 
Akka tips
Akka tipsAkka tips
Akka tips
 
Ian 20150116 java script oop
Ian 20150116 java script oopIan 20150116 java script oop
Ian 20150116 java script oop
 
Proxies are Awesome!
Proxies are Awesome!Proxies are Awesome!
Proxies are Awesome!
 
Introduction to Ecmascript - ES6
Introduction to Ecmascript - ES6Introduction to Ecmascript - ES6
Introduction to Ecmascript - ES6
 
Say Hello To Ecmascript 5
Say Hello To Ecmascript 5Say Hello To Ecmascript 5
Say Hello To Ecmascript 5
 
ES6 in Real Life
ES6 in Real LifeES6 in Real Life
ES6 in Real Life
 
Akka in-action
Akka in-actionAkka in-action
Akka in-action
 
Functions, Types, Programs and Effects
Functions, Types, Programs and EffectsFunctions, Types, Programs and Effects
Functions, Types, Programs and Effects
 
ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overview
 
Your code is not a string
Your code is not a stringYour code is not a string
Your code is not a string
 
Functional Reactive Programming (FRP): Working with RxJS
Functional Reactive Programming (FRP): Working with RxJSFunctional Reactive Programming (FRP): Working with RxJS
Functional Reactive Programming (FRP): Working with RxJS
 
Reactive Summit 2017
Reactive Summit 2017Reactive Summit 2017
Reactive Summit 2017
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
 
Javascript: the important bits
Javascript: the important bitsJavascript: the important bits
Javascript: the important bits
 
Think Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJSThink Async: Asynchronous Patterns in NodeJS
Think Async: Asynchronous Patterns in NodeJS
 
Execution model and other must-know's
Execution model and other must-know'sExecution model and other must-know's
Execution model and other must-know's
 
AST - the only true tool for building JavaScript
AST - the only true tool for building JavaScriptAST - the only true tool for building JavaScript
AST - the only true tool for building JavaScript
 

En vedette

reflexes, clasifications, and functions.
reflexes, clasifications, and functions.reflexes, clasifications, and functions.
reflexes, clasifications, and functions.meducationdotnet
 
Classification of reflexes
Classification of reflexesClassification of reflexes
Classification of reflexesZanyar Salih
 
Reflexes, nervous system ppt
Reflexes, nervous system pptReflexes, nervous system ppt
Reflexes, nervous system pptnihattt
 
The Nervous System (Slide Show)
The Nervous System (Slide Show)The Nervous System (Slide Show)
The Nervous System (Slide Show)William Banaag
 

En vedette (6)

reflexes, clasifications, and functions.
reflexes, clasifications, and functions.reflexes, clasifications, and functions.
reflexes, clasifications, and functions.
 
Classification of reflexes
Classification of reflexesClassification of reflexes
Classification of reflexes
 
Reflexes, nervous system ppt
Reflexes, nervous system pptReflexes, nervous system ppt
Reflexes, nervous system ppt
 
Reflexes
Reflexes Reflexes
Reflexes
 
Reflex
ReflexReflex
Reflex
 
The Nervous System (Slide Show)
The Nervous System (Slide Show)The Nervous System (Slide Show)
The Nervous System (Slide Show)
 

Similaire à Reflex - How does it work?

Reflex - How Does It Work? (extended dance remix)
Reflex - How Does It Work? (extended dance remix)Reflex - How Does It Work? (extended dance remix)
Reflex - How Does It Work? (extended dance remix)Rocco Caputo
 
Asynchronous Programming FTW! 2 (with AnyEvent)
Asynchronous Programming FTW! 2 (with AnyEvent)Asynchronous Programming FTW! 2 (with AnyEvent)
Asynchronous Programming FTW! 2 (with AnyEvent)xSawyer
 
Concurrent programming with Celluloid (MWRC 2012)
Concurrent programming with Celluloid (MWRC 2012)Concurrent programming with Celluloid (MWRC 2012)
Concurrent programming with Celluloid (MWRC 2012)tarcieri
 
Gevent what's the point
Gevent what's the pointGevent what's the point
Gevent what's the pointseanmcq
 
The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)jeffz
 
Java script advance-auroskills (2)
Java script advance-auroskills (2)Java script advance-auroskills (2)
Java script advance-auroskills (2)BoneyGawande
 
rx.js make async programming simpler
rx.js make async programming simplerrx.js make async programming simpler
rx.js make async programming simplerAlexander Mostovenko
 
WebCamp:Front-end Developers Day. Александр Мостовенко "Rx.js - делаем асинхр...
WebCamp:Front-end Developers Day. Александр Мостовенко "Rx.js - делаем асинхр...WebCamp:Front-end Developers Day. Александр Мостовенко "Rx.js - делаем асинхр...
WebCamp:Front-end Developers Day. Александр Мостовенко "Rx.js - делаем асинхр...GeeksLab Odessa
 
Introduction to Protractor
Introduction to ProtractorIntroduction to Protractor
Introduction to ProtractorJie-Wei Wu
 
Node.js System: The Landing
Node.js System: The LandingNode.js System: The Landing
Node.js System: The LandingHaci Murat Yaman
 
Neuroevolution in Elixir
Neuroevolution in ElixirNeuroevolution in Elixir
Neuroevolution in ElixirJeff Smith
 
Any event intro
Any event introAny event intro
Any event introqiang
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterSimen Li
 
Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Ben Lesh
 
The Ring programming language version 1.8 book - Part 88 of 202
The Ring programming language version 1.8 book - Part 88 of 202The Ring programming language version 1.8 book - Part 88 of 202
The Ring programming language version 1.8 book - Part 88 of 202Mahmoud Samir Fayed
 

Similaire à Reflex - How does it work? (20)

Reflex - How Does It Work? (extended dance remix)
Reflex - How Does It Work? (extended dance remix)Reflex - How Does It Work? (extended dance remix)
Reflex - How Does It Work? (extended dance remix)
 
Reactive x
Reactive xReactive x
Reactive x
 
Asynchronous Programming FTW! 2 (with AnyEvent)
Asynchronous Programming FTW! 2 (with AnyEvent)Asynchronous Programming FTW! 2 (with AnyEvent)
Asynchronous Programming FTW! 2 (with AnyEvent)
 
Concurrent programming with Celluloid (MWRC 2012)
Concurrent programming with Celluloid (MWRC 2012)Concurrent programming with Celluloid (MWRC 2012)
Concurrent programming with Celluloid (MWRC 2012)
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Gevent what's the point
Gevent what's the pointGevent what's the point
Gevent what's the point
 
The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)The Evolution of Async-Programming (SD 2.0, JavaScript)
The Evolution of Async-Programming (SD 2.0, JavaScript)
 
Java script advance-auroskills (2)
Java script advance-auroskills (2)Java script advance-auroskills (2)
Java script advance-auroskills (2)
 
rx.js make async programming simpler
rx.js make async programming simplerrx.js make async programming simpler
rx.js make async programming simpler
 
WebCamp:Front-end Developers Day. Александр Мостовенко "Rx.js - делаем асинхр...
WebCamp:Front-end Developers Day. Александр Мостовенко "Rx.js - делаем асинхр...WebCamp:Front-end Developers Day. Александр Мостовенко "Rx.js - делаем асинхр...
WebCamp:Front-end Developers Day. Александр Мостовенко "Rx.js - делаем асинхр...
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
 
Introduction to Protractor
Introduction to ProtractorIntroduction to Protractor
Introduction to Protractor
 
Node.js System: The Landing
Node.js System: The LandingNode.js System: The Landing
Node.js System: The Landing
 
Neuroevolution in Elixir
Neuroevolution in ElixirNeuroevolution in Elixir
Neuroevolution in Elixir
 
Any event intro
Any event introAny event intro
Any event intro
 
Coding in Style
Coding in StyleCoding in Style
Coding in Style
 
Rxjs kyivjs 2015
Rxjs kyivjs 2015Rxjs kyivjs 2015
Rxjs kyivjs 2015
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitter
 
Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016
 
The Ring programming language version 1.8 book - Part 88 of 202
The Ring programming language version 1.8 book - Part 88 of 202The Ring programming language version 1.8 book - Part 88 of 202
The Ring programming language version 1.8 book - Part 88 of 202
 

Dernier

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 

Dernier (20)

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 

Reflex - How does it work?

Notes de l'éditeur

  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