SlideShare a Scribd company logo
Guillaume Valverde
Software Developer
guillaume.valverde@futurice.com
@drevlav
A year with RXJava
September / 2016
Kick Application
Observable / Observer
Pattern
Observable : emits event.
Observer : listens to events and acts accordingly.
Observable: emits data called a stream
Emits 0, 1, x or an infinite amount of items
Observable: emits data called a stream
Emits 0, 1, x or an infinite amount of items
Observable: emits data called a stream
Emits 0, 1, x or an infinite amount of items
Observable: emits data called a stream
Emits 0, 1, x or an infinite amount of items
Observable: emits data called a stream
Emits 0, 1, x or an infinite amount of items
Complete
Observable: emits data called a stream
Emits 0, 1, x or an infinite amount of items
Complete
Observable: emits data called a stream
Emits 0, 1, x or an infinite amount of items
Send an error
Observable: emits data called a stream
Emits 0, 1, x or an infinite amount of items
Send an error
OBSERVABLE CONTRACT
0 to N events
nothing | error | complete
Observable exemples:
• Mouse clicks
• Button Clicks
• Network request
• Network State
• Content Provider
update
• list, array
• UI State
Everything is an event
Observable.just(“rxjava”)
“rxjava”


Observable.just(“rxjava”)

.subscribe();
Observable.from(…)
1 2 3


Integer[] ids = {1, 2, 3};

Observable.from(ids)

.subscribe();
Using Retrofit
Network
Request
Response
RxView.clicks(View view)
first
click
RxView.clicks(sendButton)

.subscribe(click -> {

do something…

})
Second
click
Third
click
who is listening?
who is listening?
The subscriber
who is listening?
The subscriber
who is listening?
The subscriber


Integer[] ids = {1, 2, 3};

Observable.from(ids)

.subscribe();
who is listening?
The subscriber


Integer[] ids = {1, 2, 3};

Observable.from(ids)

.subscribe();
Subscriber:
Observer & subscription
public abstract class
Subscriber<T> implements Observer<T>, Subscription {
…
}
Subscriber : Observer & Subscription
public interface Observer<T> {



void onCompleted();



void onError(Throwable e);



void onNext(T t);



}
public interface Subscription {



void unsubscribe();



boolean isUnsubscribed();



}
Observable / Subscriber (Observer & Subscription)


String[] ids = {"1", "2", "3"};

Subscription subscription =
Observable.from(ids)

.subscribe(id -> Log.v(TAG, id),

error -> Log.e(TAG, "error: " + error.getMessage()),

() -> Log.v(TAG, "complete"));

Stream on steroids
operators
Composition
Map
RXJava is Awesome
.map(word -> word.length())
6 2 7
String[] ids = {“RXJava”, “is”, “Awesome”};

Observable.from(ids)
FlatMap
1 2 3
FlatMap
1 2 3
.Flatmap ( )xxx
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
.flatten
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
.flatten
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
.flatten
1
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
.flatten
1 2
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
.flatten
1 2 2
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
.flatten
1 2 2 1
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
.flatten
1 2 2 1 3
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
.flatten
1 2 2 1 3 3
FlatMap
1 2 3
.Flatmap ( )xxx
1
1
2
2
3
3
.flatten
1 2 2 1 3 3
id1 id2 id3
.flatMap(id -> fetchArticle())
Article1 Article2 Article3
FlatMap
List ids …
Observable.from(ids)

Compose with
Observables
Retrieve a list of repositories
• more than 3 letters
• cancel previous search when new one
• make a search when the user is done typing
Compose with Observables


RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(searchString -> networkManager.search(searchString))

.observeOn(AndroidSchedulers.mainThread())

.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
Type RxJava
Type RxJava
RxTextView.textChanges(editText)
Type RxJava
R Rx RxJ RxJa RxJav RxJava
RxTextView.textChanges(editText)
Type RxJava
R Rx RxJ RxJa RxJav RxJava
RxTextView.textChanges(editText)
.observeOn(Schedulers.io())
Type RxJava
R Rx RxJ RxJa RxJav RxJava
R Rx RxJ RxJa RxJav RxJava
RxTextView.textChanges(editText)
.observeOn(Schedulers.io())
Type RxJava
R Rx RxJ RxJa RxJav RxJava
R Rx RxJ RxJa RxJav RxJava
RxTextView.textChanges(editText)
.observeOn(Schedulers.io())
.debounce(500, TimeUnit.MILLISECONDS)

Type RxJava
R Rx RxJ RxJa RxJav RxJava
R Rx RxJ RxJa RxJav RxJava
RxTextView.textChanges(editText)
.observeOn(Schedulers.io())
.debounce(500, TimeUnit.MILLISECONDS)

RxJ RxJavaR
Type RxJava
R Rx RxJ RxJa RxJav RxJava
R Rx RxJ RxJa RxJav RxJava
RxTextView.textChanges(editText)
.observeOn(Schedulers.io())
.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() >= 3)
RxJ RxJavaR
Type RxJava
R Rx RxJ RxJa RxJav RxJava
R Rx RxJ RxJa RxJav RxJava
RxJ RxJava
RxTextView.textChanges(editText)
.observeOn(Schedulers.io())
.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() >= 3)
RxJ RxJavaR
RxJ RxJava
RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

RxJ RxJava
RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(searchString -> networkManager.search(searchString))

RxJ RxJava
RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(searchString -> networkManager.search(searchString))

List<R
epo>
RxJ RxJava
RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(searchString -> networkManager.search(searchString))

List<R
epo>
List<R
epo>
RxJ RxJava
RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(searchString -> networkManager.search(searchString))

List<R
epo>
List<Repo>
List<R
epo>
RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)
.switchMap(searchString -> networkManager.search(searchString))



List<Repo>
RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)
.switchMap(searchString -> networkManager.search(searchString))



List<Repo>
.observeOn(AndroidSchedulers.mainThread())
RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)
.switchMap(searchString -> networkManager.search(searchString))



List<Repo>
.observeOn(AndroidSchedulers.mainThread())
List<Repo>
RxTextView.textChanges(editText)

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)
.switchMap(searchString -> networkManager.search(searchString))



List<Repo>
.observeOn(AndroidSchedulers.mainThread())
List<Repo>
.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
R Rx RxJ RxJa RxJav RxJava
R Rx RxJ RxJa RxJav RxJava
RxJ RxJava
RxJ RxJava
List<Repo>
List<Repo>
R
RXjava is synchronous
by default
RXjava is synchronous
by default
for(String word: sentence) {

Log.v(TAG, word);

}
RXjava is synchronous
by default
Same as
for(String word: sentence) {

Log.v(TAG, word);

}
RXjava is synchronous
by default
Same as
for(String word: sentence) {

Log.v(TAG, word);

}
Observable.from(sentence)

.subscribe(word -> Log.v(TAG, word));
THREADING
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
THREADING
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
THREADING
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…)
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…) CurrentThread
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…)
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…)
Change
Thread,
New Thread
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…)
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…)
emit ids
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…)
emit an Article
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…)
emit an Article
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…)
emit an Article
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
ObserveOn / SubscribeOn
Observable.from(ids)
.flatMap(id -> fetchArticle())
.subscribeOn(… newThread)
.observeOn(… mainThread)
.subscribe(…) act on Article
Observable.from(ids)

.flatMap(id -> fetchArticle())

.subscribeOn(Schedulers.computation())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(article -> actOnArticle(article));
THREADING
SubscribeOn / ObserveOn
• Only 1 SubscribeOn effective.
• Multiple ObserveOn can work.
Organise your code
Architecture / View Model / Separation of
concern
business Logic
Return Observable
Input :
Source Observable
.subscribe()
Unit
testing
Integration
testing
Acceptance / smoke
testing
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
update
trigger
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(word -> dataLayer.fetchListRepo(word))

.observeOn(AndroidSchedulers.mainThread())



RxTextView.textChanges(editText)

.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(word -> dataLayer.fetchListRepo(word))

.observeOn(AndroidSchedulers.mainThread())

Input :
Source Observable


RxTextView.textChanges(editText)

.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
dataLayer
UI
View
dependencies:
.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(word -> dataLayer.fetchListRepo(word))

.observeOn(AndroidSchedulers.mainThread())

ViewModel
Input :
Source Observable


RxTextView.textChanges(editText)

.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
dataLayer
UI
View
dependencies:
.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(word -> dataLayer.fetchListRepo(word))

.observeOn(AndroidSchedulers.mainThread())

ViewModel
Input :
Source Observable


RxTextView.textChanges(editText)

.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
dataLayer
UI
View
dependencies:
.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(word -> dataLayer.fetchListRepo(word))

.observeOn(AndroidSchedulers.mainThread())

ViewModel
Input :
Source Observable
.subscribe(…)


RxTextView.textChanges(editText)

.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
dataLayer
UI
View
dependencies:
.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(word -> dataLayer.fetchListRepo(word))

.observeOn(AndroidSchedulers.mainThread())

ViewModel
Input :
Source Observable
.subscribe(…)


RxTextView.textChanges(editText)

.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
dataLayer
UI
View
dependencies:
.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(word -> dataLayer.fetchListRepo(word))

.observeOn(AndroidSchedulers.mainThread())

ViewModel
Input :
Source Observable
.subscribe(…)


RxTextView.textChanges(editText)

.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
dataLayer
UI
View
dependencies:
.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(word -> dataLayer.fetchListRepo(word))

.observeOn(AndroidSchedulers.mainThread())

ViewModel
Input :
Source Observable
.subscribe(…)


RxTextView.textChanges(editText)

.subscribe(list -> searchRecyclerAdapter.refreshListRepo(list),

error -> Logger.logOnNextError(TAG));
dataLayer
UI
View
dependencies:
ViewView Model
Architecture
Hold the
business logic
For the View
display ui
according to state of the
data
Data Layer
Store
Store
Binding
Hold the logic for data
emits Pojos
public class ViewModel {



private Observable<CharSequence> charSequenceObservable;

private DataLayer dataLayer;



ViewModel(Observable<CharSequence> charSequenceObservable,
DataLayer dataLayer) {

this.charSequenceObservable = charSequenceObservable;

this.dataLayer = dataLayer;

}



Observable<List<GitHubRepository>> getListObservable() {

return charSequenceObservable

.observeOn(Schedulers.io())

.debounce(500, TimeUnit.MILLISECONDS)

.filter(charSequence -> charSequence.length() > 3)

.map(CharSequence::toString)

.switchMap(word -> dataLayer.search(word));

}

}
Thank you

More Related Content

What's hot

Reactive programming with RxJava
Reactive programming with RxJavaReactive programming with RxJava
Reactive programming with RxJava
Jobaer Chowdhury
 
Reactive programming with RxAndroid
Reactive programming with RxAndroidReactive programming with RxAndroid
Reactive programming with RxAndroid
Savvycom Savvycom
 
RxJava Applied
RxJava AppliedRxJava Applied
RxJava Applied
Igor Lozynskyi
 
RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]
Igor Lozynskyi
 
Android architecture component - FbCircleDev Yogyakarta Indonesia
Android architecture component - FbCircleDev Yogyakarta IndonesiaAndroid architecture component - FbCircleDev Yogyakarta Indonesia
Android architecture component - FbCircleDev Yogyakarta Indonesia
Pratama Nur Wijaya
 
Functional Programming Past Present Future
Functional Programming Past Present FutureFunctional Programming Past Present Future
Functional Programming Past Present Future
IndicThreads
 
Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams
IndicThreads
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streams
mattpodwysocki
 
Rxjs ppt
Rxjs pptRxjs ppt
Reactive Programming for a demanding world: building event-driven and respons...
Reactive Programming for a demanding world: building event-driven and respons...Reactive Programming for a demanding world: building event-driven and respons...
Reactive Programming for a demanding world: building event-driven and respons...
Mario Fusco
 
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
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJS
Brainhub
 
Streams, Streams Everywhere! An Introduction to Rx
Streams, Streams Everywhere! An Introduction to RxStreams, Streams Everywhere! An Introduction to Rx
Streams, Streams Everywhere! An Introduction to Rx
Andrzej Sitek
 
Angular2 rxjs
Angular2 rxjsAngular2 rxjs
Angular2 rxjs
Christoffer Noring
 
Functional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event SystemsFunctional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event Systems
Leonardo Borges
 
RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)
Tracy Lee
 
Rxjs ngvikings
Rxjs ngvikingsRxjs ngvikings
Rxjs ngvikings
Christoffer Noring
 
Non Blocking I/O for Everyone with RxJava
Non Blocking I/O for Everyone with RxJavaNon Blocking I/O for Everyone with RxJava
Non Blocking I/O for Everyone with RxJava
Frank Lyaruu
 
Parallel streams in java 8
Parallel streams in java 8Parallel streams in java 8
Parallel streams in java 8
David Gómez García
 
apidays LIVE Australia 2020 - Strangling the monolith with a reactive GraphQL...
apidays LIVE Australia 2020 - Strangling the monolith with a reactive GraphQL...apidays LIVE Australia 2020 - Strangling the monolith with a reactive GraphQL...
apidays LIVE Australia 2020 - Strangling the monolith with a reactive GraphQL...
apidays
 

What's hot (20)

Reactive programming with RxJava
Reactive programming with RxJavaReactive programming with RxJava
Reactive programming with RxJava
 
Reactive programming with RxAndroid
Reactive programming with RxAndroidReactive programming with RxAndroid
Reactive programming with RxAndroid
 
RxJava Applied
RxJava AppliedRxJava Applied
RxJava Applied
 
RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]
 
Android architecture component - FbCircleDev Yogyakarta Indonesia
Android architecture component - FbCircleDev Yogyakarta IndonesiaAndroid architecture component - FbCircleDev Yogyakarta Indonesia
Android architecture component - FbCircleDev Yogyakarta Indonesia
 
Functional Programming Past Present Future
Functional Programming Past Present FutureFunctional Programming Past Present Future
Functional Programming Past Present Future
 
Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streams
 
Rxjs ppt
Rxjs pptRxjs ppt
Rxjs ppt
 
Reactive Programming for a demanding world: building event-driven and respons...
Reactive Programming for a demanding world: building event-driven and respons...Reactive Programming for a demanding world: building event-driven and respons...
Reactive Programming for a demanding world: building event-driven and respons...
 
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
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJS
 
Streams, Streams Everywhere! An Introduction to Rx
Streams, Streams Everywhere! An Introduction to RxStreams, Streams Everywhere! An Introduction to Rx
Streams, Streams Everywhere! An Introduction to Rx
 
Angular2 rxjs
Angular2 rxjsAngular2 rxjs
Angular2 rxjs
 
Functional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event SystemsFunctional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event Systems
 
RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)
 
Rxjs ngvikings
Rxjs ngvikingsRxjs ngvikings
Rxjs ngvikings
 
Non Blocking I/O for Everyone with RxJava
Non Blocking I/O for Everyone with RxJavaNon Blocking I/O for Everyone with RxJava
Non Blocking I/O for Everyone with RxJava
 
Parallel streams in java 8
Parallel streams in java 8Parallel streams in java 8
Parallel streams in java 8
 
apidays LIVE Australia 2020 - Strangling the monolith with a reactive GraphQL...
apidays LIVE Australia 2020 - Strangling the monolith with a reactive GraphQL...apidays LIVE Australia 2020 - Strangling the monolith with a reactive GraphQL...
apidays LIVE Australia 2020 - Strangling the monolith with a reactive GraphQL...
 

Viewers also liked

Java 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava ComparisonJava 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava Comparison
José Paumard
 
RxJava - introduction & design
RxJava - introduction & designRxJava - introduction & design
RxJava - introduction & design
allegro.tech
 
使用 RxJava 让数据流动 (Let data streaming using rxjava)
使用  RxJava 让数据流动 (Let data streaming using rxjava)使用  RxJava 让数据流动 (Let data streaming using rxjava)
使用 RxJava 让数据流动 (Let data streaming using rxjava)
Tankery Chen
 
Real-world applications of the Reactive Extensions
Real-world applications of the Reactive ExtensionsReal-world applications of the Reactive Extensions
Real-world applications of the Reactive Extensions
Jonas Chapuis
 
Code Learn Share
Code Learn ShareCode Learn Share
Code Learn Share
Florina Muntenescu
 
A Journey Through MV Wonderland
A Journey Through MV WonderlandA Journey Through MV Wonderland
A Journey Through MV Wonderland
Florina Muntenescu
 
Android architecture
Android architecture Android architecture
Android architecture
Trong-An Bui
 
RxJava 2.0 介紹
RxJava 2.0 介紹RxJava 2.0 介紹
RxJava 2.0 介紹
Kros Huang
 
大鱼架构演进
大鱼架构演进大鱼架构演进
大鱼架构演进
Jun Liu
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
Yuki Matsumura
 
Modern app programming with RxJava and Eclipse Vert.x
Modern app programming with RxJava and Eclipse Vert.xModern app programming with RxJava and Eclipse Vert.x
Modern app programming with RxJava and Eclipse Vert.x
Thomas Segismont
 
Welcome to rx java2
Welcome to rx java2Welcome to rx java2
Welcome to rx java2
Paresh Dudhat
 
Rocks of Aia
Rocks of AiaRocks of Aia
Rocks of Aia
Axiersukun
 
MVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mixMVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mix
Florina Muntenescu
 

Viewers also liked (14)

Java 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava ComparisonJava 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava Comparison
 
RxJava - introduction & design
RxJava - introduction & designRxJava - introduction & design
RxJava - introduction & design
 
使用 RxJava 让数据流动 (Let data streaming using rxjava)
使用  RxJava 让数据流动 (Let data streaming using rxjava)使用  RxJava 让数据流动 (Let data streaming using rxjava)
使用 RxJava 让数据流动 (Let data streaming using rxjava)
 
Real-world applications of the Reactive Extensions
Real-world applications of the Reactive ExtensionsReal-world applications of the Reactive Extensions
Real-world applications of the Reactive Extensions
 
Code Learn Share
Code Learn ShareCode Learn Share
Code Learn Share
 
A Journey Through MV Wonderland
A Journey Through MV WonderlandA Journey Through MV Wonderland
A Journey Through MV Wonderland
 
Android architecture
Android architecture Android architecture
Android architecture
 
RxJava 2.0 介紹
RxJava 2.0 介紹RxJava 2.0 介紹
RxJava 2.0 介紹
 
大鱼架构演进
大鱼架构演进大鱼架构演进
大鱼架构演进
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Modern app programming with RxJava and Eclipse Vert.x
Modern app programming with RxJava and Eclipse Vert.xModern app programming with RxJava and Eclipse Vert.x
Modern app programming with RxJava and Eclipse Vert.x
 
Welcome to rx java2
Welcome to rx java2Welcome to rx java2
Welcome to rx java2
 
Rocks of Aia
Rocks of AiaRocks of Aia
Rocks of Aia
 
MVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mixMVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mix
 

Similar to Rxjava meetup presentation

Iniciación rx java
Iniciación rx javaIniciación rx java
Iniciación rx java
Elisa De Gregorio Medrano
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
Kros Huang
 
"Kotlin и rx в android" Дмитрий Воронин (Avito)
"Kotlin и rx в android" Дмитрий Воронин  (Avito)"Kotlin и rx в android" Дмитрий Воронин  (Avito)
"Kotlin и rx в android" Дмитрий Воронин (Avito)
AvitoTech
 
Tech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn Tới
Tech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn TớiTech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn Tới
Tech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn Tới
Nexus FrontierTech
 
Rx java in action
Rx java in actionRx java in action
Rx java in action
Pratama Nur Wijaya
 
Luis Atencio on RxJS
Luis Atencio on RxJSLuis Atencio on RxJS
Luis Atencio on RxJS
Luis Atencio
 
Reactive x
Reactive xReactive x
Reactive x
Gabriel Araujo
 
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
Sages
 
Akka.NET streams and reactive streams
Akka.NET streams and reactive streamsAkka.NET streams and reactive streams
Akka.NET streams and reactive streams
Bartosz Sypytkowski
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
Tomáš Kypta
 
Rxjs marble-testing
Rxjs marble-testingRxjs marble-testing
Rxjs marble-testing
Christoffer Noring
 
GDG DevFest 2015 - Reactive approach for slowpokes
GDG DevFest 2015 - Reactive approach for slowpokesGDG DevFest 2015 - Reactive approach for slowpokes
GDG DevFest 2015 - Reactive approach for slowpokes
Sergey Tarasevich
 
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
 
Saving lives with rx java
Saving lives with rx javaSaving lives with rx java
Saving lives with rx java
Shahar Barsheshet
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
Dmitry Buzdin
 
RxJava и Android. Плюсы, минусы, подводные камни
RxJava и Android. Плюсы, минусы, подводные камниRxJava и Android. Плюсы, минусы, подводные камни
RxJava и Android. Плюсы, минусы, подводные камни
Stfalcon Meetups
 
RxJava for Android - GDG DevFest Ukraine 2015
RxJava for Android - GDG DevFest Ukraine 2015RxJava for Android - GDG DevFest Ukraine 2015
RxJava for Android - GDG DevFest Ukraine 2015
Constantine Mars
 
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
PROIDEA
 
RxJava 2 Reactive extensions for the JVM
RxJava 2  Reactive extensions for the JVMRxJava 2  Reactive extensions for the JVM
RxJava 2 Reactive extensions for the JVM
Netesh Kumar
 
How to Think in RxJava Before Reacting
How to Think in RxJava Before ReactingHow to Think in RxJava Before Reacting
How to Think in RxJava Before Reacting
IndicThreads
 

Similar to Rxjava meetup presentation (20)

Iniciación rx java
Iniciación rx javaIniciación rx java
Iniciación rx java
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
 
"Kotlin и rx в android" Дмитрий Воронин (Avito)
"Kotlin и rx в android" Дмитрий Воронин  (Avito)"Kotlin и rx в android" Дмитрий Воронин  (Avito)
"Kotlin и rx в android" Дмитрий Воронин (Avito)
 
Tech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn Tới
Tech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn TớiTech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn Tới
Tech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn Tới
 
Rx java in action
Rx java in actionRx java in action
Rx java in action
 
Luis Atencio on RxJS
Luis Atencio on RxJSLuis Atencio on RxJS
Luis Atencio on RxJS
 
Reactive x
Reactive xReactive x
Reactive x
 
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
 
Akka.NET streams and reactive streams
Akka.NET streams and reactive streamsAkka.NET streams and reactive streams
Akka.NET streams and reactive streams
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
 
Rxjs marble-testing
Rxjs marble-testingRxjs marble-testing
Rxjs marble-testing
 
GDG DevFest 2015 - Reactive approach for slowpokes
GDG DevFest 2015 - Reactive approach for slowpokesGDG DevFest 2015 - Reactive approach for slowpokes
GDG DevFest 2015 - Reactive approach for slowpokes
 
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
 
Saving lives with rx java
Saving lives with rx javaSaving lives with rx java
Saving lives with rx java
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
RxJava и Android. Плюсы, минусы, подводные камни
RxJava и Android. Плюсы, минусы, подводные камниRxJava и Android. Плюсы, минусы, подводные камни
RxJava и Android. Плюсы, минусы, подводные камни
 
RxJava for Android - GDG DevFest Ukraine 2015
RxJava for Android - GDG DevFest Ukraine 2015RxJava for Android - GDG DevFest Ukraine 2015
RxJava for Android - GDG DevFest Ukraine 2015
 
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
 
RxJava 2 Reactive extensions for the JVM
RxJava 2  Reactive extensions for the JVMRxJava 2  Reactive extensions for the JVM
RxJava 2 Reactive extensions for the JVM
 
How to Think in RxJava Before Reacting
How to Think in RxJava Before ReactingHow to Think in RxJava Before Reacting
How to Think in RxJava Before Reacting
 

Recently uploaded

The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
Fwdays
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
Neo4j
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
DianaGray10
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
Pablo Gómez Abajo
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
saastr
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
Ivo Velitchkov
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Precisely
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
Safe Software
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
DianaGray10
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Neo4j
 

Recently uploaded (20)

The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
 

Rxjava meetup presentation