SlideShare a Scribd company logo
1 of 90
vert.x v3
high performance
polyglot application toolkit
Hello!
Bartek Zdanowski
@bartekzdanowski
2
Hello!
developer @
vertx lover
father and husband :)
3
vert.x
4
vert.x
5
Invented by Tim Fox as Node.x
24 June 2015 - released v3
still it’s very hot :D
vert.x buzzwords
simple embeddable toolkit
threadSafe concurrent
asynchronous eventDriven reactive
eventBus scalable
polyglot
6
vert.x buzzwords
fun
7
the problem
8
the problem
number of mobile users raises
2,1 bln in 2012 -> 7 bln in 2018
Internet of things - 30 bln in 2020!
IPv4 is exhausted
IPv6 is already ready for all of them
9
the problem
traditional synchronous approach
■one thread handles one task
■thread is waiting for job to finish
■whole queue of tasks waits
10
the problem
traditional synchronous approach
■synchronous code
■scalability problem
■lots of threads
■concurrency that no-one understands ;)
11
the problem
12
Tomcat: 200 threads = 200 connections
rest of incoming connections must wait*…
*okay, now you can do nonblocking in Tomcat
https://tomcat.apache.org/tomcat-7.0-doc/aio.html
the problem
13
thread pools
the problem
14
thread pools
the problem
big thread pools are evil
synchronous code is even more evil
concurrency is very hard
synchronous == blocking
15
the solution
16
the solution
17
thread pools
the solution
18
1 task = series of loosely coupled events
event that informs that new job/data is
waiting
the solution
19
program should release thread instead of
waiting for operation (I/O) to be finished
use non-blocking IO (NIO)
the solution
20
asynchronous
event driven
the solution
21
vert.x
22
dispatcherhandlers
thread pool
reactor
vert.x
23
handlers
thread pool
thread-1
handler 1
handler 2
vert.x
24
thread pool == double cores count
actor like model
some code
25
26
public class HelloVerticle extends AbstractVerticle {
@Override
public void start() {
LoggerFactory.getLogger(getClass()).info(
"Hello vert.x");
}
}
27
public static final String CONSUMER_ADDRESS =
"consumer.address";
public void start() {
vertx.eventBus().consumer(CONSUMER_ADDRESS,
new Handler<Message<String>>() {
public void handle(Message<String> message) {
logger.info("Got message:" + message.body());
}
});
}
//Java < 8
28
public static final String CONSUMER_ADDRESS =
"consumer.address";
public void start() {
vertx.eventBus().consumer(CONSUMER_ADDRESS,
message -> {
logger.info("Got message: " + message.body());
});
}
//Java 8 Lambdas FTW!
threadsafe code
29
threadsafe
30
class MyService {
public synchronized Result doSomething(Data data) {
//do some critical stuff
}
}
threadsafe
only when one thread!
31
class MyService {
public synchronized Result doSomething(Data data) {
//do some critical stuff
}
}
threadsafe
particular verticle runs in one thread!
32
33
verticle
34
basic deployment unit
actor-like model (akka similarity)
always run in the same thread
can have many instances
verticle
verticle
threadsafe code
■verticle instance - always the same thread
■can have separated classloaders for each
verticle instance
35
verticle
threadsafe code
■event bus separates threads
■shared data: maps, counters, locks
36
verticle
types
■standard
■worker
■multi-threaded worker
37
let’s code!
38
■hello world vert.x - first verticle
■deploying other verticles
●one instance
●many instances
●other after successful deployment
●deployment options
●passing config
39
let’s code!
S1
■running from IDE
■running from command line
●java -jar
●vertx run
40
let’s code!
S1
41
eventBus
42
eventBus
43
eventBus
44
eventBus
server 1
server 2
server 3
45
eventBus
server 1
webclientserver 2
server 3
46
eventBus
Publisher - subscriber
publish() //broadcast
like JMS Topics, no replying
47
eventBus
p2p
send() //point-to-point
like JMS Queues, can reply
48
eventBus
p2p
send() //point-to-point
like JMS Queues, can reply
round robin
49
eventBus
p2p
send() //point-to-point
like JMS Queues, can reply
round robin
50
public void start() {
getLogger().info("Broadcaster started");
vertx.setPeriodic(PERIOD_MS, timerID -> {
getLogger().info("Broadcasting message " + counter);
vertx.eventBus().publish(Consumer.CONSUMER_ADDRESS,
"Message " + counter);
counter++;
});
}
Broadcasting a message
51
public void start() {
getLogger().info("Broadcaster started");
vertx.setPeriodic(PERIOD_MS, timerID -> {
getLogger().info("Broadcasting message " + counter);
vertx.eventBus().send(Consumer.CONSUMER_ADDRESS,
"Message " + counter);
counter++;
});
}
Sending a message p2p
52
public void start() {
getLogger().info("Consumer started! " + hashCode());
vertx.eventBus().consumer(CONSUMER_ADDRESS, message -> {
getLogger().info("Received message: " + message.body());
});
}
Consuming a message
public void start() {
getLogger().info("Consumer started! " + hashCode());
vertx.eventBus().consumer(CONSUMER_ADDRESS, message -> {
getLogger().info("Received message: " + message.body());
message.reply("I got your message");
});
}
53
Consuming a message + replying
let’s code!
54
■periodic events
■sending/receiving events
●publish-subscribe / broadcast
○ one producer
○a few consumers
55
let’s code!
S2
■sending/receiving events
●point2p
○one consumer
○one consumer with response
○ a few consumers with response
56
let’s code!
S2
web client
57
58
HttpClientOptions opts = new HttpClientOptions()
.setDefaultHost("some.host.com");
HttpClient client = vertx.createHttpClient(opts);
client.get("/request/uri").handler(resp -> {
resp.bodyHandler(bodyBuffer -> {
System.out.println("here's the body");
System.out.println(bodyBuffer.toString());
});
}).end();
http client
■pulling data from http server
■parsing data with multiple verticles
59
let’s code!
S3
60
vert.x ecosystem
61
lightweight vert.x core
extensions
■web
■data access (mongoDB, redis, JDBC)
■security (basic auth, jdbc auth, jwt, shiro)
■reactive (based on RxJava)
■others
vert.x ecosystem
62
web server
63
web server
■vert.x core - very raw and basic HTTP server
■web server ext - neat path and content
routing
64
vertx.createHttpServer().requestHandler( req -> {
LOG.info(String.format("Got request [%s]", req.path()));
switch (req.path()) {
case "/" : req.response().end("Ok. Here's root"); break;
case "/other": req.response().end("Other things..."); break;
default:
req.response().setStatusCode(404).end("Unknown resource!");
}
}).listen(port)
vert.x core - very raw and basic HTTP server
■serving primitive
65
let’s code!
S4
66
Router router = new RouterImpl(vertx);
router.get("/users/:uid").handler( ctx -> {
String id = ctx.request().getParam("uid");
JsonObject user =
new JsonObject().put("id", id).put("name", "bartek");
ctx.response().end(user.encode());
});
HttpServer server = vertx.createHttpServer();
server.requestHandler(router::accept).listen(8080);
web server ext - neat path and content routing
67
router.post("/some/post/path")
router.put()
router.get("/user/data").consumes("application/json")
router.get("/user/data").consumes("text/html")
router.get("/info").produces("text/html")
router.get("/info").produces("text/plain")
web server ext - content routing
68
//SessionHandler must be preceded with SessionHandler
router.route().handler(CookieHandler.create());
router.route().handler(
SessionHandler.create(LocalSessionStore.create(vertx)));
router.get("/sessionCounter").handler(ctx -> {
ctx.session().get("counter");
}
web server ext - accessing session
69
vertx.sharedData().getLocalMap("myMap").get("myKeyInMap")
accessing shared data
■adding EventBus via websockets
■using shared data S4c
■using web session
■adding REST endpoints
●GET /sessionCounter
●GET /globalCounter
70
let’s code!
S4b/S4c
71
The Big App
let’s create Jenkins Monitor
■fetching build statuses parallely
■storing build statuses in shared map
■serving builds list GET /jobs
■serving build status GET /job/id
72
let’s code!
S5
73
benchmarking
74
benchmarking
https://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=plaintext
75
vert.x vs akka
verticles:
■are actor-like
■can be addressed
■can subscribe to many addresses
■can do processing jobs
■can send back content
■can have multiple instances of same class
76
vert.x vs akka
how vert.x scales
77
vertically
■verticle can have multiple instances
■each instance can have own processor core
horizontally
■clustering - lot’s of nodes
■eventbus reaches all nodes
78
how vert.x scales
polyglot
79
■java
■groovy
■javascript
■ruby
■...more to come!
80
polyglot
81
puts "Ruby for the win!"
eb = $vertx.event_bus()
# Send a message every second
$vertx.set_periodic(1000) { |v|
puts "RUBY: sending Ruby message"
eb.publish("producer.address", "Ruby shines!")
}
Ruby shines
82
var eb = vertx.eventBus();
eb.consumer("producer.address", function (message) {
console.log("JAVASCRIPT: Received a message: " + message.body());
});
console.log("Receiver ready!");
For JavaScript dare devils!
usecases
83
■effective use of servers’ resources
■parallel computing
■great as a backend for lots of (mobile)
clients
■nice integration platform
■could be awesome in microservices
84
usecases
YOU getting started
85
http://vertx.io/
https://github.com/vert-x3
https://github.com/zdanek/vertx-pres
86
YOU getting started
grab a sticker!
87
YOU getting started
have fun!
88
YOU getting started
I’m not the owner of the pictures used. Just found them on:
http://www.rantchic.com/wp-content/uploads/2013/12/Apollo-13.jpg
http://www.gamesaktuell.de/screenshots/1280x1024/2009/04/terminator_2_blu_ray03.jpg
http://tripoutlook.com/wp-content/uploads/2013/03/Car-parking.jpg
http://upload.wikimedia.org/wikipedia/commons/5/52/Parallel_Parking_cars.jpg
http://www.foreverbarcelona.com/wp-content/uploads/2014/02/Taxi-Tips.png
http://www.125p.eu/wp-content/uploads/2009/03/fiat-125p-zmiennicy-5.jpg
http://www.novosti.rs/upload/images/2011/07/2107/bg-taksi.jpg
http://i.livescience.com/images/i/000/024/292/iFF/neurons-120208.jpg?1328727600
89
All the pics used
90
Thank you

More Related Content

What's hot

Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
Tom Croucher
 
Java script at backend nodejs
Java script at backend   nodejsJava script at backend   nodejs
Java script at backend nodejs
Amit Thakkar
 
OSCON 2011 - Node.js Tutorial
OSCON 2011 - Node.js TutorialOSCON 2011 - Node.js Tutorial
OSCON 2011 - Node.js Tutorial
Tom Croucher
 

What's hot (20)

Introduction to Node.js: What, why and how?
Introduction to Node.js: What, why and how?Introduction to Node.js: What, why and how?
Introduction to Node.js: What, why and how?
 
Philly Tech Week Introduction to NodeJS
Philly Tech Week Introduction to NodeJSPhilly Tech Week Introduction to NodeJS
Philly Tech Week Introduction to NodeJS
 
Node.js Patterns for Discerning Developers
Node.js Patterns for Discerning DevelopersNode.js Patterns for Discerning Developers
Node.js Patterns for Discerning Developers
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
Bucks County Tech Meetup: node.js introduction
Bucks County Tech Meetup: node.js introductionBucks County Tech Meetup: node.js introduction
Bucks County Tech Meetup: node.js introduction
 
Vert.x for Microservices Architecture
Vert.x for Microservices ArchitectureVert.x for Microservices Architecture
Vert.x for Microservices Architecture
 
How to Test Asynchronous Code (v2)
How to Test Asynchronous Code (v2)How to Test Asynchronous Code (v2)
How to Test Asynchronous Code (v2)
 
Comet with node.js and V8
Comet with node.js and V8Comet with node.js and V8
Comet with node.js and V8
 
NodeJS
NodeJSNodeJS
NodeJS
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
Node.js Workshop - Sela SDP 2015
Node.js Workshop  - Sela SDP 2015Node.js Workshop  - Sela SDP 2015
Node.js Workshop - Sela SDP 2015
 
Java script at backend nodejs
Java script at backend   nodejsJava script at backend   nodejs
Java script at backend nodejs
 
Meetup RomaJS - introduzione interattiva a Node.js - Luca Lanziani - Codemoti...
Meetup RomaJS - introduzione interattiva a Node.js - Luca Lanziani - Codemoti...Meetup RomaJS - introduzione interattiva a Node.js - Luca Lanziani - Codemoti...
Meetup RomaJS - introduzione interattiva a Node.js - Luca Lanziani - Codemoti...
 
Non-blocking I/O, Event loops and node.js
Non-blocking I/O, Event loops and node.jsNon-blocking I/O, Event loops and node.js
Non-blocking I/O, Event loops and node.js
 
OSCON 2011 - Node.js Tutorial
OSCON 2011 - Node.js TutorialOSCON 2011 - Node.js Tutorial
OSCON 2011 - Node.js Tutorial
 
Intro to node and non blocking io
Intro to node and non blocking ioIntro to node and non blocking io
Intro to node and non blocking io
 
Intro to Node.js (v1)
Intro to Node.js (v1)Intro to Node.js (v1)
Intro to Node.js (v1)
 
NodeJS
NodeJSNodeJS
NodeJS
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
 
Node.js code tracing
Node.js code tracingNode.js code tracing
Node.js code tracing
 

Similar to Vert.x v3 - high performance polyglot application toolkit

Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
Serge Stinckwich
 
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesJavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for Dummies
Charles Nutter
 

Similar to Vert.x v3 - high performance polyglot application toolkit (20)

Node.js - As a networking tool
Node.js - As a networking toolNode.js - As a networking tool
Node.js - As a networking tool
 
How to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machineHow to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machine
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
 
Node.js: The What, The How and The When
Node.js: The What, The How and The WhenNode.js: The What, The How and The When
Node.js: The What, The How and The When
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
 
Groovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentationGroovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentation
 
Rainbow Over the Windows: More Colors Than You Could Expect
Rainbow Over the Windows: More Colors Than You Could ExpectRainbow Over the Windows: More Colors Than You Could Expect
Rainbow Over the Windows: More Colors Than You Could Expect
 
NetDevOps Developer Environments with Vagrant @ SCALE16x
NetDevOps Developer Environments with Vagrant @ SCALE16xNetDevOps Developer Environments with Vagrant @ SCALE16x
NetDevOps Developer Environments with Vagrant @ SCALE16x
 
Nodejs - Should Ruby Developers Care?
Nodejs - Should Ruby Developers Care?Nodejs - Should Ruby Developers Care?
Nodejs - Should Ruby Developers Care?
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-Persistence
 
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesJavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for Dummies
 
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
 
Nodejs - A quick tour (v6)
Nodejs - A quick tour (v6)Nodejs - A quick tour (v6)
Nodejs - A quick tour (v6)
 
Nodejs and WebSockets
Nodejs and WebSocketsNodejs and WebSockets
Nodejs and WebSockets
 
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
 
Nodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevNodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredev
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js Applications
 
Node js lecture
Node js lectureNode js lecture
Node js lecture
 
posix.pdf
posix.pdfposix.pdf
posix.pdf
 
Process and Threads in Linux - PPT
Process and Threads in Linux - PPTProcess and Threads in Linux - PPT
Process and Threads in Linux - PPT
 

More from Sages

Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
Sages
 

More from Sages (20)

Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze Azure
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki start
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstęp
 
Bezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach javaBezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach java
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
 
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache Spark
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki start
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 

Recently uploaded

Uncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac FolorunsoUncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac Folorunso
Kayode Fayemi
 
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
amilabibi1
 
Unlocking Exploration: Self-Motivated Agents Thrive on Memory-Driven Curiosity
Unlocking Exploration: Self-Motivated Agents Thrive on Memory-Driven CuriosityUnlocking Exploration: Self-Motivated Agents Thrive on Memory-Driven Curiosity
Unlocking Exploration: Self-Motivated Agents Thrive on Memory-Driven Curiosity
Hung Le
 
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
David Celestin
 
Jual obat aborsi Jakarta 085657271886 Cytote pil telat bulan penggugur kandun...
Jual obat aborsi Jakarta 085657271886 Cytote pil telat bulan penggugur kandun...Jual obat aborsi Jakarta 085657271886 Cytote pil telat bulan penggugur kandun...
Jual obat aborsi Jakarta 085657271886 Cytote pil telat bulan penggugur kandun...
ZurliaSoop
 

Recently uploaded (17)

AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdfAWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
 
Introduction to Artificial intelligence.
Introduction to Artificial intelligence.Introduction to Artificial intelligence.
Introduction to Artificial intelligence.
 
Dreaming Marissa Sánchez Music Video Treatment
Dreaming Marissa Sánchez Music Video TreatmentDreaming Marissa Sánchez Music Video Treatment
Dreaming Marissa Sánchez Music Video Treatment
 
Zone Chairperson Role and Responsibilities New updated.pptx
Zone Chairperson Role and Responsibilities New updated.pptxZone Chairperson Role and Responsibilities New updated.pptx
Zone Chairperson Role and Responsibilities New updated.pptx
 
Dreaming Music Video Treatment _ Project & Portfolio III
Dreaming Music Video Treatment _ Project & Portfolio IIIDreaming Music Video Treatment _ Project & Portfolio III
Dreaming Music Video Treatment _ Project & Portfolio III
 
in kuwait௹+918133066128....) @abortion pills for sale in Kuwait City
in kuwait௹+918133066128....) @abortion pills for sale in Kuwait Cityin kuwait௹+918133066128....) @abortion pills for sale in Kuwait City
in kuwait௹+918133066128....) @abortion pills for sale in Kuwait City
 
Uncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac FolorunsoUncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac Folorunso
 
SOLID WASTE MANAGEMENT SYSTEM OF FENI PAURASHAVA, BANGLADESH.pdf
SOLID WASTE MANAGEMENT SYSTEM OF FENI PAURASHAVA, BANGLADESH.pdfSOLID WASTE MANAGEMENT SYSTEM OF FENI PAURASHAVA, BANGLADESH.pdf
SOLID WASTE MANAGEMENT SYSTEM OF FENI PAURASHAVA, BANGLADESH.pdf
 
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
 
My Presentation "In Your Hands" by Halle Bailey
My Presentation "In Your Hands" by Halle BaileyMy Presentation "In Your Hands" by Halle Bailey
My Presentation "In Your Hands" by Halle Bailey
 
ICT role in 21st century education and it's challenges.pdf
ICT role in 21st century education and it's challenges.pdfICT role in 21st century education and it's challenges.pdf
ICT role in 21st century education and it's challenges.pdf
 
Digital collaboration with Microsoft 365 as extension of Drupal
Digital collaboration with Microsoft 365 as extension of DrupalDigital collaboration with Microsoft 365 as extension of Drupal
Digital collaboration with Microsoft 365 as extension of Drupal
 
Unlocking Exploration: Self-Motivated Agents Thrive on Memory-Driven Curiosity
Unlocking Exploration: Self-Motivated Agents Thrive on Memory-Driven CuriosityUnlocking Exploration: Self-Motivated Agents Thrive on Memory-Driven Curiosity
Unlocking Exploration: Self-Motivated Agents Thrive on Memory-Driven Curiosity
 
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
 
Jual obat aborsi Jakarta 085657271886 Cytote pil telat bulan penggugur kandun...
Jual obat aborsi Jakarta 085657271886 Cytote pil telat bulan penggugur kandun...Jual obat aborsi Jakarta 085657271886 Cytote pil telat bulan penggugur kandun...
Jual obat aborsi Jakarta 085657271886 Cytote pil telat bulan penggugur kandun...
 
Report Writing Webinar Training
Report Writing Webinar TrainingReport Writing Webinar Training
Report Writing Webinar Training
 
lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.
 

Vert.x v3 - high performance polyglot application toolkit