SlideShare a Scribd company logo
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!

More Related Content

What's hot

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
Cory Forsyth
 
ES6 - Next Generation Javascript
ES6 - Next Generation JavascriptES6 - Next Generation Javascript
ES6 - Next Generation Javascript
Ramesh Nair
 
連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」
matuura_core
 
Akka tips
Akka tipsAkka tips
Ian 20150116 java script oop
Ian 20150116 java script oopIan 20150116 java script oop
Ian 20150116 java script oop
LearningTech
 
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 - ES6
Nilesh Jayanandana
 
Say Hello To Ecmascript 5
Say Hello To Ecmascript 5Say Hello To Ecmascript 5
Say Hello To Ecmascript 5Juriy Zaytsev
 
ES6 in Real Life
ES6 in Real LifeES6 in Real Life
ES6 in Real Life
Domenic Denicola
 
Akka in-action
Akka in-actionAkka in-action
Akka in-action
Raymond Roestenburg
 
Functions, Types, Programs and Effects
Functions, Types, Programs and EffectsFunctions, Types, Programs and Effects
Functions, Types, Programs and Effects
Raymond Roestenburg
 
ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overview
hesher
 
Your code is not a string
Your code is not a stringYour code is not a string
Your code is not a string
Ingvar Stepanyan
 
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
Oswald Campesato
 
Reactive Summit 2017
Reactive Summit 2017Reactive Summit 2017
Reactive Summit 2017
janm399
 
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
Susan 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 NodeJS
Adam 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's
Pablo 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
 

What's hot (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
 

Viewers also liked

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 ppt
nihattt
 
Reflex
ReflexReflex
Reflex
Raghu Veer
 
The Nervous System (Slide Show)
The Nervous System (Slide Show)The Nervous System (Slide Show)
The Nervous System (Slide Show)
William Banaag
 

Viewers also liked (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)
 

Similar to 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
 
Reactive x
Reactive xReactive x
Reactive x
Gabriel Araujo
 
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
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
Scott Leberknight
 
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
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
Aditya Tiwari
 
Introduction to Protractor
Introduction to ProtractorIntroduction to Protractor
Introduction to Protractor
Jie-Wei Wu
 
Node.js System: The Landing
Node.js System: The LandingNode.js System: The Landing
Node.js System: The Landing
Haci Murat Yaman
 
Neuroevolution in Elixir
Neuroevolution in ElixirNeuroevolution in Elixir
Neuroevolution in Elixir
Jeff Smith
 
Any event intro
Any event introAny event intro
Any event intro
qiang
 
Coding in Style
Coding in StyleCoding in Style
Coding in Style
scalaconfjp
 
Rxjs kyivjs 2015
Rxjs kyivjs 2015Rxjs kyivjs 2015
Rxjs kyivjs 2015
Alexander Mostovenko
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitter
Simen 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 2016
Ben 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 202
Mahmoud Samir Fayed
 

Similar to 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
 

Recently uploaded

Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Zilliz
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 

Recently uploaded (20)

Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 

Reflex - How does it work?

Editor's Notes

  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