SlideShare a Scribd company logo
1 of 155
Download to read offline
THE EVOLUTION OF
ASYNCHRONOUS
JAVASCRIPT
@cirpo
now & later
ASYNCRONY
the core of asynchronous programming
is the relationship between
the now and later parts of your program
ASYNCRONY
how to express, manage and
manipulate
program behaviours
over a period of time?
CONCURRENCY
CONCURRENCY
a way to structure a program
by breaking it into pieces
that can be executed independently
IS JS CONCURRENT?
A JS runtime contains a message queue, which
is a list of messages to be processed.
To each message is associated a function.
When the stack is empty, a message is taken
out of the queue and processed.
QUEUE
function f(b){
var a = 12;
return a+b+35;
}
function g(x){
var m = 4;
return f(m*x);
}
g(21);
STACK
function f(b){
var a = 12;
return a+b+35;
}
function g(x){
var m = 4;
return f(m*x);
}
g(21);
1 foo gets called
STACK
function f(b){
var a = 12;
return a+b+35;
}
function g(x){
var m = 4;
return f(m*x);
}
g(21);
2 first frame is created containing foo
and local variable
1 foo gets called
STACK
function f(b){
var a = 12;
return a+b+35;
}
function g(x){
var m = 4;
return f(m*x);
}
g(21);
2 first frame is created containing foo
and local variable
1 foo gets called
3 when foo calls bar, a second frame
is push on top of foo, containing bar
arguments and local variables
STACK
function f(b){
var a = 12;
return a+b+35;
}
function g(x){
var m = 4;
return f(m*x);
}
g(21);
4 when bar returns, the top frame
element is popped out of the stack
(leaving only foo call frame)
STACK
function f(b){
var a = 12;
return a+b+35;
}
function g(x){
var m = 4;
return f(m*x);
}
g(21);
5 When foo returns, the stack is empty
4 when bar returns, the top frame
element is popped out of the stack
(leaving only foo call frame)
STACK
EVENT LOOP
JS IS NON BLOCKING
events
eventloop
net
filesystem
…
event queue thread pool
JS unlike a lot of other languages, never blocks
Handling I/O is typically performed via events and callbacks
When the application is waiting for an IndexedDB query to return
or an XHR request to return, it can still process other things like
user input
JS IS NON BLOCKING
Node.js is great for Input/Output processing
but not optimised for CPU-bound work like
performing a large amount of calculations.
JS IS NON BLOCKING
Up until recently (ES6), JS itself has actually
never had any direct notion of asynchrony
built into it
JS runs inside a hosting environment (the
browser/nodejs)
The event loop is handled by it
IS JS CONCURRENT?
goroutinesprocesses
IS JS CONCURRENT?
JS IS SINGLE THREAD
SORT OF …
BUT THE HOSTING
ENVIRONMENT CAN USE
MULTI THREAD

FOR I/O OPERATIONS
most devs new to JS have issues with the fact
that later doesn’t happen strictly and
immediately after now
ASYNCRONY
tasks that cannot complete now are, by definition,
going to complete asynchronously
and thus no blocking behaviour as it might intuitively
expect or want.
ASYNCRONY
ASYNCRONY
ASYNC IS GREAT
BUT CAN BE HARD
SEQUENTIAL BRAIN
SEQUENTIAL BRAIN
put aside involuntary, subconscious, automatic
brain functions
we are not multitasker
SEQUENTIAL BRAIN
As soon as we introduce a single continuation
in the form of a callback function, we have
allowed a divergence to form between how our
brains work and the way the code will operate
can we do that?
yes… but we are blocking
WHEN YOU BLOCK,
YOU “PULL” A VALUE
CALLBACK
PIRAMID OF DOOM!
CALLBACK HELL!
BULLSHIT
HOW TO AVOID POD
HOW TO AVOID POD
ASYNC CALLBACK
ASYNC CALLBACK
=
ASYNC CALLBACK
PUSH
=
LOSS OF CONTROL
FLOW
LOSS OF ERROR
HANDLING
INVERSION
OF
CONTROL
“Don't call us, we'll call you”
INVERSION OF CONTROL
INVERSION OF CONTROL
what if it’s a third party call
not under our control?
INVERSION OF CONTROL
INVERSION OF CONTROL
what if it’s never called?
INVERSION OF CONTROL
what if it’s never called?
what if it’s called too early?
INVERSION OF CONTROL
what if it’s never called?
what if it’s called too early?
what if it’s called too late?
meh.
HOW CAN YOU TELL IF
IT’S AN
ASYNC CALL?
meh.
Callbacks are the fundamental unit of
asynchrony in JS.
But they’re not enough for the evolving
landscape of async programming as JS
matures.
I <3 callbacks
PROMISES
PROMISES
It allows you to associate handlers to an
asynchronous action's eventual success value or
failure reason.
This lets asynchronous methods return values like
synchronous methods: instead of the final value,
the asynchronous method returns a promise.
A promise represents a proxy for a value not
necessarily known when the promise is created.
PROMISES
http://ecma-international.org/ecma-262/6.0/#sec-jobs-and-job-queues
PROMISES
Promises are now the official way to provide async
return values in both JavaScript and the DOM.
All future async DOM APIs will use them, and
many already do, so be prepared!
PROMISES
pending: initial state, not fulfilled or rejected
fulfilled: the operation completed successfully
rejected: meaning that the operation failed.
PROMISES
always async
returns a promise
handled once
thenable
PROMISES
A promise must provide a then method to
access its current or eventual value or rejection
reason
.then()
PROMISES
.then(onFulfilled,
onRejected)
PROMISES
can return a promise
.then()
PROMISES
.then()
.then()
.then()
PROMISES
.catch()
Talk is cheap,
show me the code
PROMISES
PROMISES
PROMISES
inversion of control
async or sync?
error handling
control flow
WIN!
BUT …
PROMISE HELL!
AVOID PROMISE HELL!
AVOID PROMISE HELL!
DON’T USE PROMISES
FOR CONTROL FLOW
YOUR CODEBASE THEN
BECOMES
PROMISE DEPENDANT
USING PROMISES
EVERYWHERE
IMPACTS ON THE
DESIGN
TO PROMISE OR TO
CALLBACK?
IF YOU HAVE A
LIBRARY, SUPPORT BOTH
SINGLE VALUE
SINGLE RESOLUTION
BAD FOR STREAMS
SINGLE RESOLUTION
PERFORMANCES
PERFORMANCES
Promises are slower compared to callbacks
You don’t get rid of callbacks, they just orchestrate callbacks
in a trustable way
PERFORMANCES
Promises are slower compared to callbacks
You don’t get rid of callbacks, they just orchestrate callbacks
in a trustable way99.9% of the time you
won’t feel it
PROMISES
WHAT IF WAITING WERE
JUST AS EASY AS
BLOCKING?
GENERATORS
GENERATORS
A new type of function that does’t not behave with
the run-to-completion behaviour
GENERATORS
GENERATORS
1 constructing the iterator, not executing
GENERATORS
1 constructing the iterator, not executing
2 starts the iterator
GENERATORS
1 constructing the iterator, not executing
2 starts the iterator
3 pause the iterator
GENERATORS
1 constructing the iterator, not executing
2 starts the iterator
4 resume the iterator
3 pause the iterator
GENERATORS
1 constructing the iterator, not executing
2 starts the iterator
4 resume the iterator
3 pause the iterator
GENERATORS
with the yield where are pausing
GENERATORS
A.K.A
BLOCKING!
with the yield where are pausing
GENERATORS
GENERATORS
iterator is just one side…
GENERATORS
the other side is an observable
GENERATORS
GENERATORS
GENERATORS
GENERATORS
GENERATORS
we can block!
we can pull values
we can push values
GENERATORS
GENERATORS
+
PROMISES
the iterator should listen for the promise to
resolve
then either resume the generator with the
fulfilment message (or throw an error into the
generator with the rejection reason)
GENERATORS + PROMISES
GENERATORS + PROMISES
GENERATORS + PROMISES
GENERATORS + PROMISES
GENERATORS + PROMISES
npm install co
BUT…
ES7
ES2016
to the rescue!
async/await
async/await
npm install -g babel-cli
babel a.es6 -o a.js
node a.js
//add it either to .babelrc or package.json
{
"plugins": ["transform-async-to-generator"]
}
npm install babel-plugin-transform-async-to-generator
STREAMS
callbacks
async/await
CHOOSE YOUR
CONCURRENCY MODEL
A big thanks to
Kyle Simpson (@getify)
github.com/getify/You-Dont-Know-JS
@federicogalassi
@unlucio
… and my mentors
slideshare.net/fgalassi
slideshare.net/unlucio
@loige
@mariocasciaro
youtube.com/watch?v=lil4YCCXRYc
@cirpo
Dev lead at
github.com/cirpo
http://sainsburys.jobs
THANK YOU!

More Related Content

What's hot

Java Script Promise
Java Script PromiseJava Script Promise
Java Script Promise
Alok Guha
 
Boom! Promises/A+ Was Born
Boom! Promises/A+ Was BornBoom! Promises/A+ Was Born
Boom! Promises/A+ Was Born
Domenic Denicola
 

What's hot (20)

Promise pattern
Promise patternPromise pattern
Promise pattern
 
Callbacks and control flow in Node js
Callbacks and control flow in Node jsCallbacks and control flow in Node js
Callbacks and control flow in Node js
 
$q and Promises in AngularJS
$q and Promises in AngularJS $q and Promises in AngularJS
$q and Promises in AngularJS
 
Javascript Promises/Q Library
Javascript Promises/Q LibraryJavascript Promises/Q Library
Javascript Promises/Q Library
 
JavaScript Best Pratices
JavaScript Best PraticesJavaScript Best Pratices
JavaScript Best Pratices
 
Getting Comfortable with JS Promises
Getting Comfortable with JS PromisesGetting Comfortable with JS Promises
Getting Comfortable with JS Promises
 
JavaScript for real men
JavaScript for real menJavaScript for real men
JavaScript for real men
 
Practical JavaScript Promises
Practical JavaScript PromisesPractical JavaScript Promises
Practical JavaScript Promises
 
Java script for web developer
Java script for web developerJava script for web developer
Java script for web developer
 
Java Script Promise
Java Script PromiseJava Script Promise
Java Script Promise
 
JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
 
Boom! Promises/A+ Was Born
Boom! Promises/A+ Was BornBoom! Promises/A+ Was Born
Boom! Promises/A+ Was Born
 
Tech friday 22.01.2016
Tech friday 22.01.2016Tech friday 22.01.2016
Tech friday 22.01.2016
 
CLS & asyncListener: asynchronous observability for Node.js
CLS & asyncListener: asynchronous observability for Node.jsCLS & asyncListener: asynchronous observability for Node.js
CLS & asyncListener: asynchronous observability for Node.js
 
Async JavaScript Unit Testing
Async JavaScript Unit TestingAsync JavaScript Unit Testing
Async JavaScript Unit Testing
 
Swift & ReactiveX – Asynchronous Event-Based Funsies with RxSwift
Swift & ReactiveX – Asynchronous Event-Based Funsies with RxSwiftSwift & ReactiveX – Asynchronous Event-Based Funsies with RxSwift
Swift & ReactiveX – Asynchronous Event-Based Funsies with RxSwift
 
Javascript basics for automation testing
Javascript  basics for automation testingJavascript  basics for automation testing
Javascript basics for automation testing
 
Let's JavaScript
Let's JavaScriptLet's JavaScript
Let's JavaScript
 
JavaScript Basics and Best Practices - CC FE & UX
JavaScript Basics and Best Practices - CC FE & UXJavaScript Basics and Best Practices - CC FE & UX
JavaScript Basics and Best Practices - CC FE & UX
 
Reactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwiftReactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwift
 

Viewers also liked

Principales grupos religiosos
Principales grupos religiososPrincipales grupos religiosos
Principales grupos religiosos
Dusxz79
 

Viewers also liked (20)

Haciendo Universidad No. 56
Haciendo Universidad No. 56Haciendo Universidad No. 56
Haciendo Universidad No. 56
 
001 vol1 prefacio-introducao_cap1
001 vol1 prefacio-introducao_cap1001 vol1 prefacio-introducao_cap1
001 vol1 prefacio-introducao_cap1
 
B2B E-Commerce best practices and recommendations
B2B E-Commerce best practices and recommendationsB2B E-Commerce best practices and recommendations
B2B E-Commerce best practices and recommendations
 
Clipping banca digital febrero17
Clipping banca digital febrero17Clipping banca digital febrero17
Clipping banca digital febrero17
 
Steve Down: Tips for Financial Fitness and Creating Wealth
Steve Down: Tips for Financial Fitness and Creating WealthSteve Down: Tips for Financial Fitness and Creating Wealth
Steve Down: Tips for Financial Fitness and Creating Wealth
 
Factors impacting new hire performance and engagement
Factors impacting new hire performance and engagementFactors impacting new hire performance and engagement
Factors impacting new hire performance and engagement
 
Networking and Security
Networking and SecurityNetworking and Security
Networking and Security
 
State of the Art Facebook Promotions #AFBMC
State of the Art Facebook Promotions #AFBMCState of the Art Facebook Promotions #AFBMC
State of the Art Facebook Promotions #AFBMC
 
Aula Abierta "Construyendo ciudad desde la ciudadanía" de la #HEIeskola
Aula Abierta "Construyendo ciudad desde la ciudadanía" de la #HEIeskolaAula Abierta "Construyendo ciudad desde la ciudadanía" de la #HEIeskola
Aula Abierta "Construyendo ciudad desde la ciudadanía" de la #HEIeskola
 
Live music host fairfax va w3 dc music studio slideshare
Live music host fairfax va w3 dc music studio slideshareLive music host fairfax va w3 dc music studio slideshare
Live music host fairfax va w3 dc music studio slideshare
 
Principales grupos religiosos
Principales grupos religiososPrincipales grupos religiosos
Principales grupos religiosos
 
Truck Driver Pay Under Siege
Truck Driver Pay Under SiegeTruck Driver Pay Under Siege
Truck Driver Pay Under Siege
 
22@ Barcelona 2000-2015: Barcelona's innovation district
22@ Barcelona 2000-2015: Barcelona's innovation district22@ Barcelona 2000-2015: Barcelona's innovation district
22@ Barcelona 2000-2015: Barcelona's innovation district
 
MRI Differences: Closed Bore, Open MRI & Wide Bore
MRI Differences: Closed Bore, Open MRI & Wide BoreMRI Differences: Closed Bore, Open MRI & Wide Bore
MRI Differences: Closed Bore, Open MRI & Wide Bore
 
Metodos opticos
Metodos opticosMetodos opticos
Metodos opticos
 
OIL: The Real Outlook
OIL: The Real OutlookOIL: The Real Outlook
OIL: The Real Outlook
 
Getting Started with Socialfave
Getting Started with SocialfaveGetting Started with Socialfave
Getting Started with Socialfave
 
Class 1: Email Marketing Certification course: Email Marketing and Your Business
Class 1: Email Marketing Certification course: Email Marketing and Your BusinessClass 1: Email Marketing Certification course: Email Marketing and Your Business
Class 1: Email Marketing Certification course: Email Marketing and Your Business
 
Behind the Scenes: Launching HubSpot Tokyo
Behind the Scenes: Launching HubSpot TokyoBehind the Scenes: Launching HubSpot Tokyo
Behind the Scenes: Launching HubSpot Tokyo
 
Why People Block Ads (And What It Means for Marketers and Advertisers) [New R...
Why People Block Ads (And What It Means for Marketers and Advertisers) [New R...Why People Block Ads (And What It Means for Marketers and Advertisers) [New R...
Why People Block Ads (And What It Means for Marketers and Advertisers) [New R...
 

Similar to The evolution of asynchronous javascript

379008-rc217-functionalprogramming
379008-rc217-functionalprogramming379008-rc217-functionalprogramming
379008-rc217-functionalprogramming
Luis Atencio
 

Similar to The evolution of asynchronous javascript (20)

The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...
The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...
The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...
 
Asynchronyin net
Asynchronyin netAsynchronyin net
Asynchronyin net
 
Arrows in commercial web applications
Arrows in commercial web applicationsArrows in commercial web applications
Arrows in commercial web applications
 
Nodejs from zero to hero
Nodejs from zero to heroNodejs from zero to hero
Nodejs from zero to hero
 
Gr Node Dev Promises Presentation
Gr Node Dev Promises PresentationGr Node Dev Promises Presentation
Gr Node Dev Promises Presentation
 
Akka (1)
Akka (1)Akka (1)
Akka (1)
 
Reactive programming intro
Reactive programming introReactive programming intro
Reactive programming intro
 
DZone_RC_RxJS
DZone_RC_RxJSDZone_RC_RxJS
DZone_RC_RxJS
 
Cordova training : Day 3 - Introduction to Javascript
Cordova training : Day 3 - Introduction to JavascriptCordova training : Day 3 - Introduction to Javascript
Cordova training : Day 3 - Introduction to Javascript
 
RxSwift for Beginners - how to avoid a headache of reactive programming
RxSwift for Beginners - how to avoid a headache of reactive programmingRxSwift for Beginners - how to avoid a headache of reactive programming
RxSwift for Beginners - how to avoid a headache of reactive programming
 
Next generation of frontend architectures
Next generation of frontend architecturesNext generation of frontend architectures
Next generation of frontend architectures
 
Reactive programming with scala and akka
Reactive programming with scala and akkaReactive programming with scala and akka
Reactive programming with scala and akka
 
Reactive Java: Promises and Streams with Reakt (JavaOne talk 2016)
Reactive Java: Promises and Streams with Reakt  (JavaOne talk 2016)Reactive Java: Promises and Streams with Reakt  (JavaOne talk 2016)
Reactive Java: Promises and Streams with Reakt (JavaOne talk 2016)
 
Reactive Java: Promises and Streams with Reakt (JavaOne Talk 2016)
Reactive Java:  Promises and Streams with Reakt (JavaOne Talk 2016)Reactive Java:  Promises and Streams with Reakt (JavaOne Talk 2016)
Reactive Java: Promises and Streams with Reakt (JavaOne Talk 2016)
 
379008-rc217-functionalprogramming
379008-rc217-functionalprogramming379008-rc217-functionalprogramming
379008-rc217-functionalprogramming
 
Javascript internals
Javascript internalsJavascript internals
Javascript internals
 
Azure reactive systems
Azure reactive systemsAzure reactive systems
Azure reactive systems
 
Reactive programming with rx java
Reactive programming with rx javaReactive programming with rx java
Reactive programming with rx java
 
Reactive programming - Observable
Reactive programming - ObservableReactive programming - Observable
Reactive programming - Observable
 
Async discussion 9_29_15
Async discussion 9_29_15Async discussion 9_29_15
Async discussion 9_29_15
 

More from Alessandro Cinelli (cirpo)

PHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the foolPHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the fool
Alessandro Cinelli (cirpo)
 
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
Alessandro Cinelli (cirpo)
 

More from Alessandro Cinelli (cirpo) (18)

Dear JavaScript
Dear JavaScriptDear JavaScript
Dear JavaScript
 
The evolution of asynchronous JavaScript
The evolution of asynchronous JavaScriptThe evolution of asynchronous JavaScript
The evolution of asynchronous JavaScript
 
The journey to become a solid developer
The journey to become a solid developer The journey to become a solid developer
The journey to become a solid developer
 
PHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolPHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the fool
 
Apt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stageApt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stage
 
PHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the foolPHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the fool
 
Don't screw it up! How to build durable API
Don't screw it up! How to build durable API Don't screw it up! How to build durable API
Don't screw it up! How to build durable API
 
PHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the foolPHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the fool
 
Don't screw it up: how to build durable web apis
Don't screw it up: how to build durable web apisDon't screw it up: how to build durable web apis
Don't screw it up: how to build durable web apis
 
Nodejsconf 2012 - opening
Nodejsconf 2012 - openingNodejsconf 2012 - opening
Nodejsconf 2012 - opening
 
Symfonyday Keynote
Symfonyday KeynoteSymfonyday Keynote
Symfonyday Keynote
 
Introduzione a GIT - Webinar Zend
Introduzione a GIT - Webinar ZendIntroduzione a GIT - Webinar Zend
Introduzione a GIT - Webinar Zend
 
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
 
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
 
Symfony2 and Ror3 friends for an hour
Symfony2 and Ror3 friends for an hourSymfony2 and Ror3 friends for an hour
Symfony2 and Ror3 friends for an hour
 
Git e Git Flow
Git e Git Flow Git e Git Flow
Git e Git Flow
 
Presentazione framework Symfony
Presentazione framework Symfony Presentazione framework Symfony
Presentazione framework Symfony
 
Web 2.0 sviluppare e ottimizzare oggi
Web 2.0 sviluppare e ottimizzare oggiWeb 2.0 sviluppare e ottimizzare oggi
Web 2.0 sviluppare e ottimizzare oggi
 

Recently uploaded

Recently uploaded (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 

The evolution of asynchronous javascript