SlideShare a Scribd company logo
1 of 42
Download to read offline
joost@de-vries․name
	joost-de-vries
	@jouke
REACTIVE	STREAMS
IN	PRACTICE
Reactive	Streams	meetup	Utrecht
29-03-2017



THREE	ACTS
1.	 A	little	taste:	some	practical	code
2.	 what	is	stream	processing	and	what	can	we	do	with	it
3.	 reactive	streams
Let's	talk	about	our	experiences	with	streams
LET'S	START	WITH	SOME	CODE
We	want	to	poll	some	market	place	every	15	minutes	for	the
prices	of	our	products.	
And	we	don't	want	to	be	suspended,	so	we	only	do	4
requests	at	a	time.'
LET'S	START	WITH	SOME	CODE
		val	jobParallellism:	Int	=	4
		val	tickStream	=	Spout.tick((),	jobInterval)
		def	getProductIds():	List[String]	=	???	//	get	the	current	product	ids
		def	pollPrice(productId:	String):	Future[Long]	=	???	//	invoke	the	market	place	api
		val	prices	=	tickStream							//	tick	every	15	mins
				.flatMap(tick	=>	getProductIds())		//	product	ids	start	streaming	every	15	mins
				.mapAsync(jobParallellism)(productId	=>	pollPrice(productId))	//	poll	max	4	product	id
				.foreach(price	=>	println(s"price	is	$price"))		//	print	the	prices	as	they	come	in
												
This	happens	to	be	Scala
②
WHAT	IS	STREAM	PROCESSING?
And	what	can	we	do	with	it?
LIKE	A	CROSS	BETWEEN	ITERATOR
AND	COMPLETABLEFUTURE
synchronous asynchronous
one A	getA() ⇒ CompletableFuture[A]	getA()
many Iterator[A] ⇒ Observable[A]
Using	Java	and	RxJava
LIKE	A	CROSS	BETWEEN	ITERATOR
AND	COMPLETABLEFUTURE
synchronous asynchronous
one A	getA() ⇒ CompletableFuture[A]	getA()
many Iterator[A] ⇒ Observable[A]
We	call	for	data	vs	we	get	called	with	data
pull	vs	push
polling	vs	reactive
So	how	is	a	stream	different	from	a	collection?
HMM..
A	stream	is	potentially	infinite
A	stream	is	spread	out	in	time	instead	of	memory
A	stream	can	be	non	repeatable
..also	Spouts,	Pipes,	Drains
Rx:	Observable,	Observer
CREATE	A	STREAM
const	source	=	Rx.Observable.create((observer)	=>	{
				observer.onNext(3)
				observer.onNext(2)
				observer.onNext(1)	//	0	or	more	values
				observer.onCompleted()	//	potentially	end	or	error
})
3,	2,	1	.
(element)*	(complete|error)
A	FAILING	STREAM
const	source	=	Rx.Observable.create((observer)	=>	{
				observer.onNext(3)
				observer.onNext(2)
				observer.onError(new	Error("boom"))
})
3,	2,	1	x
STREAMS	IN	DIAGRAMS
Marble	diagrams
Streams	are	about	time	and	change
See	reactivex.io
③
WHAT	CAN	WE	DO	WITH	STREAMS?
WHAT	CAN	WE	DO	WITH
STREAMS?
IoT:	dealing	with	sensor	measurements
System	integration:	pumping	data	between	servers
User	interface	code
Server	push
(Near)	real	time
Fast	data
Immediate	results	as	the	inputs	are	coming	in
DETERMINE	HIGH	WATER
MARK	FOR	SENSOR
MEASUREMENTS
		case	class	Measurement(rotorSpeed:	Int,	windSpeed:	Int,	timestamp:	Instant)
		def	measureTurbine():	Measurement	=	Measurement(rotorSpeed=Random.nextInt(),	windSpeed	=
		
		tickStream
				.map(tick	=>	measureTurbine())
				.scan(0)	{
						case	(currentMaxRotorspeed,	measurement)	=>
								if	(measurement.rotorSpeed	>	currentMaxRotorspeed)	measurement.rotorSpeed	else	cur
				}
				.deduplicate		//	often	called	'distinct'
				.onElement(max	=>	println(s"max	rotor	speed	is	$max"))
				.drainToBlackHole()
USER	INTERFACE	LOGIC:	NETFLIX
function	play(movieId,	cancelButton,	callback)	{
				var	movieTicket,
								playError,
								tryFinish	=	()	=>	{
												if	(playError)	{
																	callback(null,	playError);
												}	else	if	(movieTicket	&&	player.initialized)	{
																	callback(null,	ticket);	}
												};
								cancelButton.addEventListener(“click”,	()	=>	{	playError	=	“cancel”;	});	
								if	(!player.initialized)	{
												player.init((error)	=>	{	
																	playError	=	error;	
																	tryFinish();
												}	
								}
								authorizeMovie(movieId,	(error,	ticket)	=>	{	playError	=	error;
												movieTicket	=	ticket;
												tryFinish();
								});	
	});
								
See	Jafar	Husains	talk
USER	INTERFACE	LOGIC:	NETFLIX
var	authorizations	=
			player
							.init()
							.map(()	=>
											playAttempts.
														map(movieId	=>
																	player.authorize(movieId).
																				catch(e	=>	Observable.empty).
																				takeUntil(cancels)
														).	concatAll())
							).concatAll();
authorizations.forEach(
			license	=>	player.play(license),
			error	=>	showDialog(“Sorry,	can’t	play	right	now.”)
);
								
See	Jafar	Husains	talk
CLUSTERED	STREAMS
		def	rankLangsReduceByKey(langs:	List[String],	articles:	DStream[WikipediaArticle]):	List[(St
				articles
						.flatMap	{	art	=>
								langs.map	{	lang	=>	if	(art.text.split("	").contains(lang))	
										(lang,	1)	
								else	
										(lang,	0)	
								}
						}
						.reduceByKey	{	case	(acc,	i)	=>	acc	+	i	}
						.collect().toList
						.sortBy	{	case	(lang,	i)	=>	i	}
						.reverse
		}
CLUSTERED	STREAMS
		def	rankLangsReduceByKey(langs:	List[String],	articles:	DStream[WikipediaArticle]):	List[(St
				articles
						.flatMap	{	art	=>
								langs.map	{	lang	=>	if	(art.text.split("	").contains(lang))	
										(lang,	1)	
								else	
										(lang,	0)	
								}
						}
						.reduceByKey	{	case	(acc,	i)	=>	acc	+	i	}
						.collect().toList								//	RDD	code!	collect	isn't	available	on	DStream
						.sortBy	{	case	(lang,	i)	=>	i	}
						.reverse
		}
Types	of	stream	processing
Not	only	JVM:	JS,	.Net,	Swift,..
④
WHY	STREAMS?
START	WORKING	WHEN	DATA
AVAILABLE
Push	instead	of	pull
Least	latency
Process	stuff	without	loading	it	all	in	memory
Reverse	of	query	/	polling
NON	BLOCKING	BOUNDED	USE	OF
RESOURCES
limited	threads
bounded	memory	usage	(see	backpressure)
important	for	microservices	/	IoT-mobile	long	running	reqs
CLEAN	PROGRAMMING	MODEL
Concurrency	model
(flat)map:	collection,	parallel	collection,	clustered
collection,	stream
Functional	programming
Path	of	exploring	streams
Symptoms:	side	effects,
assignments,	subjects
UI	LOGIC	IN	TYPESCRIPT	RXJS
const	incassos:	Observable<Pagination<IncassoListResult>>	=	this.queryObservable
		.filter((incassoQuery)	=>	{
				if	(incassoQuery.search)
						return	incassoQuery.search.length	>=	3
				else
						return	true
		})
		.switchMap((incassoQuery)	=>	{
				return	this.incassoService.getIncassos(incassoQuery,	PaginationComponent.calculatePaginati
		}).share()
				
Move	assignments	and	subjects
to	the	outside	of	your	code
Observable	in,	Observable	out
Use	pure	transformations
⑤
REACTIVE	STREAMS
What	makes	them	different?
REACTIVE	STREAMS
Interoperability	standard
Oracle
Lightbend
Pivotal
Netflix
Redhat
Supports	backpressure
STREAM	ANYTHING
Example	from	Akka
Spring	Cloud	will	support	Reactor	(?)
RS	INTERFACES	IN	JAVA	9
BACKPRESSURE
What	if	up	stream	is	faster?
Buffer
Drop	elements
Slow	down
BACKPRESSURE
Doesn't	make	sense	for	sensor	data,	mouse	clicks,	...
But	if	you	can't	lose	events...
Down	stream	communicates	demand
⑥
RESOURCES
Async	JavaScript	at	Netflix,"	Jafar	Husain
https://www.infoq.com/presentations/netflix-rx-
extensions
Erik	Meijer	on	observables
http://reactivex.io/
Talks	by	Stephane	Maldini
etc
SOURCES
Overview	of	types	of	streams:	Mathias	Doenitz	talk	on
Swave
Erik	Meijer	on	observables
-
Fin

More Related Content

Similar to Reactive Streams in Practice

Let's talk ChatOps - Hubot with less CoffeeScript
Let's talk ChatOps - Hubot with less CoffeeScriptLet's talk ChatOps - Hubot with less CoffeeScript
Let's talk ChatOps - Hubot with less CoffeeScriptSarahKowalik
 
PHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & PinbaPHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & PinbaPatrick Allaert
 
Moving away from legacy code with BDD
Moving away from legacy code with BDDMoving away from legacy code with BDD
Moving away from legacy code with BDDKonstantin Kudryashov
 
Simulation and modeling lab mnit jaipur.pptx
Simulation and modeling lab mnit jaipur.pptxSimulation and modeling lab mnit jaipur.pptx
Simulation and modeling lab mnit jaipur.pptxpankajbarupal101
 
The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...
The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...
The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...ITCamp
 
Developing and Deploying Apps with the Postgres FDW
Developing and Deploying Apps with the Postgres FDWDeveloping and Deploying Apps with the Postgres FDW
Developing and Deploying Apps with the Postgres FDWJonathan Katz
 
2019 Slides - Michelangelo Palette: A Feature Engineering Platform at Uber
2019 Slides - Michelangelo Palette: A Feature Engineering Platform at Uber2019 Slides - Michelangelo Palette: A Feature Engineering Platform at Uber
2019 Slides - Michelangelo Palette: A Feature Engineering Platform at UberKarthik Murugesan
 
Tech Startup Day 2016- Customers Wanted- Ann Fournier Digipolis
Tech Startup Day 2016-  Customers Wanted- Ann Fournier DigipolisTech Startup Day 2016-  Customers Wanted- Ann Fournier Digipolis
Tech Startup Day 2016- Customers Wanted- Ann Fournier DigipolisStartUps.be
 
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTechNETFest
 
Hard learned SharePoint development tips
Hard learned SharePoint development tipsHard learned SharePoint development tips
Hard learned SharePoint development tipsSPC Adriatics
 
TensorFlow Quantization Tour
TensorFlow Quantization TourTensorFlow Quantization Tour
TensorFlow Quantization TourKSuzukiii
 
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...ITCamp
 
20131028 BTUG.be - BizTalk Deployment
20131028 BTUG.be - BizTalk Deployment20131028 BTUG.be - BizTalk Deployment
20131028 BTUG.be - BizTalk DeploymentBTUGbe
 
E.D.D.I - Open Source Chatbot Platform
E.D.D.I - Open Source Chatbot PlatformE.D.D.I - Open Source Chatbot Platform
E.D.D.I - Open Source Chatbot PlatformGregor Jarisch
 
Microservices Chaos Testing at Jet
Microservices Chaos Testing at JetMicroservices Chaos Testing at Jet
Microservices Chaos Testing at JetC4Media
 
Stress Testing at Twitter: a tale of New Year Eves
Stress Testing at Twitter: a tale of New Year EvesStress Testing at Twitter: a tale of New Year Eves
Stress Testing at Twitter: a tale of New Year EvesHerval Freire
 
Data streaming for connected devices with Azure Stream Analytics by Juan Manu...
Data streaming for connected devices with Azure Stream Analytics by Juan Manu...Data streaming for connected devices with Azure Stream Analytics by Juan Manu...
Data streaming for connected devices with Azure Stream Analytics by Juan Manu...J On The Beach
 
Deep Dive into Futures and the Parallel Programming Library
Deep Dive into Futures and the Parallel Programming LibraryDeep Dive into Futures and the Parallel Programming Library
Deep Dive into Futures and the Parallel Programming LibraryJim McKeeth
 

Similar to Reactive Streams in Practice (20)

Let's talk ChatOps - Hubot with less CoffeeScript
Let's talk ChatOps - Hubot with less CoffeeScriptLet's talk ChatOps - Hubot with less CoffeeScript
Let's talk ChatOps - Hubot with less CoffeeScript
 
PHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & PinbaPHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & Pinba
 
Moving away from legacy code with BDD
Moving away from legacy code with BDDMoving away from legacy code with BDD
Moving away from legacy code with BDD
 
Simulation and modeling lab mnit jaipur.pptx
Simulation and modeling lab mnit jaipur.pptxSimulation and modeling lab mnit jaipur.pptx
Simulation and modeling lab mnit jaipur.pptx
 
The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...
The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...
The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...
 
ql.io at NodePDX
ql.io at NodePDXql.io at NodePDX
ql.io at NodePDX
 
Developing and Deploying Apps with the Postgres FDW
Developing and Deploying Apps with the Postgres FDWDeveloping and Deploying Apps with the Postgres FDW
Developing and Deploying Apps with the Postgres FDW
 
2019 Slides - Michelangelo Palette: A Feature Engineering Platform at Uber
2019 Slides - Michelangelo Palette: A Feature Engineering Platform at Uber2019 Slides - Michelangelo Palette: A Feature Engineering Platform at Uber
2019 Slides - Michelangelo Palette: A Feature Engineering Platform at Uber
 
Tech Startup Day 2016- Customers Wanted- Ann Fournier Digipolis
Tech Startup Day 2016-  Customers Wanted- Ann Fournier DigipolisTech Startup Day 2016-  Customers Wanted- Ann Fournier Digipolis
Tech Startup Day 2016- Customers Wanted- Ann Fournier Digipolis
 
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
.NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
 
Hard learned SharePoint development tips
Hard learned SharePoint development tipsHard learned SharePoint development tips
Hard learned SharePoint development tips
 
TensorFlow Quantization Tour
TensorFlow Quantization TourTensorFlow Quantization Tour
TensorFlow Quantization Tour
 
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
 
20131028 BTUG.be - BizTalk Deployment
20131028 BTUG.be - BizTalk Deployment20131028 BTUG.be - BizTalk Deployment
20131028 BTUG.be - BizTalk Deployment
 
E.D.D.I - Open Source Chatbot Platform
E.D.D.I - Open Source Chatbot PlatformE.D.D.I - Open Source Chatbot Platform
E.D.D.I - Open Source Chatbot Platform
 
Microservices Chaos Testing at Jet
Microservices Chaos Testing at JetMicroservices Chaos Testing at Jet
Microservices Chaos Testing at Jet
 
Stress Testing at Twitter: a tale of New Year Eves
Stress Testing at Twitter: a tale of New Year EvesStress Testing at Twitter: a tale of New Year Eves
Stress Testing at Twitter: a tale of New Year Eves
 
Code Contracts
Code ContractsCode Contracts
Code Contracts
 
Data streaming for connected devices with Azure Stream Analytics by Juan Manu...
Data streaming for connected devices with Azure Stream Analytics by Juan Manu...Data streaming for connected devices with Azure Stream Analytics by Juan Manu...
Data streaming for connected devices with Azure Stream Analytics by Juan Manu...
 
Deep Dive into Futures and the Parallel Programming Library
Deep Dive into Futures and the Parallel Programming LibraryDeep Dive into Futures and the Parallel Programming Library
Deep Dive into Futures and the Parallel Programming Library
 

Recently uploaded

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
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...Martijn de Jong
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
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 textsMaria Levchenko
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
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 DevelopmentsTrustArc
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
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 Processorsdebabhi2
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
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 organizationRadu Cotescu
 
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.pdfUK Journal
 

Recently uploaded (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
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...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
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
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
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
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
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
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
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
 

Reactive Streams in Practice