SlideShare a Scribd company logo
REACTIVE
APPROACH
FOR SLOWPOKES
BY SERGEY TARASEVICH
WHERE IT STARTED…
• “раздуплить”
• “я бы тоже хотел думать мозгом”
• “я понимаю, шо я так сходу лиспом в
голову”
• “оно производит изменения в мозгу,
которые делают программиста лучше”
• “чик-чик и в продакшн”
WHAT’S LEARNED
Reactive
programming
REACTIVE IS …
• Functional
• Avoid intricate stateful programs, using clean input/output functions over
observable streams.
• Less is more
• ReactiveX's operators often reduce what was once an elaborate challenge into a
few lines of code.
• Async error handling
• Traditional try/catch is powerless for errors in asynchronous computations, but
ReactiveX is equiped with proper mechanisms for handling errors.
• Concurrency made easy
• Observables and Schedulers in ReactiveX allow the programmer to abstract
away low-level threading, synchronization, and concurrency issues.
© Rob Wormald
ONE DOES NOT SIMPLY
BECOME REACTIVE
• New approach
• New thinking
• New data flow
• New error handling
• New language?
WHAT’S NEW?
RxJava
RXJAVA + JAVA 7
Удобно пи ец
Observable
.range(1, 4)
.delay(new Func1<Integer, Observable<Integer>>() {
@Override
public Observable<Integer> call(final Integer integer) {
return MathObservable
.sumInteger(Observable.range(1, integer))
.flatMap(new Func1<Integer, Observable<Integer>>() {
@Override
public Observable<Integer> call(Integer targetSecondDelay) {
return Observable
.just(integer)
.delay(targetSecondDelay, TimeUnit.SECONDS);
}
});
}
})
.doOnSubscribe(new Action0() {
@Override
public void call() {
_log(“…”);
}
})
.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
Timber.d("onCompleted");
IN JAVA
RXJAVA + JAVA 8
Java 8 on Android
RXJAVA + JAVA 8λ + RETROLAMBDA
RXJAVA + KOTLIN
Observable
.range(1, 4)
.delay { integer ->
MathObservable
.sumInteger(Observable.range(1, integer))
.flatMap { targetSecondDelay ->
Observable
.just(integer)
.delay(targetSecondDelay, TimeUnit.SECONDS)
}
}
.doOnSubscribe {
Timber.d(“…”)
}
.subscribe(
{ integer -> Timber.d(“…”) },
{ error -> Timber.d(error, "arrrr. Error") },
{ Timber.d("onCompleted") }
)
IN KOTLIN
TERMINS
• Observable / Single
• lift(Operator)
• subscribeOn(Scheduler) / observeOn(Scheduler)
• subscribe(Observer)
• Observer
• onNext()
• onError()
• onComplete()
• Subject = Observable + Observer
• Operators (map, flatMap, merge, delay, …)
• Schedulers
OBSERVABLE
Single Multiple
Sync T getData() Iterable<T> getData()
Async Future<T> getData() Observable<T> getData()
OBSERVABLE
Single Multiple
Sync T getData() Iterable<T> getData()
Async Future<T> getData() Observable<T> getData()
© Ben Christensen (Netflix)
OBSERVABLE
Single Multiple
Sync T getData() Iterable<T> getData()
Async
Future<T> getData()
Single<T> getData()
Observable<T> getData()
OBSERVABLE
Iterable Observable
T next() onNext(T)
throws Exception onError(Exception)
!hasNext() onComplete()
OBSERVABLE
observable
.map { … }
.subscribe(
{ data -> log(“onNext()”) },
{ error -> log(“onError()”) },
{ log(“onComplete”) }
)
OBSERVABLE
RXMARBLES.COM
• observable.first()
• observable.filter { x -> x > 10 }
• observable.delay(10, SECONDS)
• observable.mergeWith(observable2)
• observable.debounce(1, SECONDS)
• observable.skipUntil(observable2)
OBSERVER
observable
.map { … }
.filter { … }
.subscribe(
{ data -> log(“onNext()”) },
{ error -> log(“onError()”) },
{ log(“onComplete”) }
)
}Observer
OBSERVER
observable [“хочу сапоги”, “хочу шубу”, “хочу телефон”, …]
.map { … } [“сапоги” -> $200], [“шуба” -> $1000], …
.filter { … } [ ценник < $500 ]
.subscribe(
{ data -> log(“onNext()”) }, Окей, записал
{ error -> log(“onError()”) },
{ log(“onComplete”) }
)
OBSERVER
observable [“хочу парня нормального”]
.map { … } [#ERROR]
.filter { … } [#ERROR]
.subscribe(
{ data -> log(“onNext()”) },
{ error -> log(“onError()”) }, o_O
{ log(“onComplete”) }
)
OBSERVER
observable [Ой, все!]
.map { … } [Ой, все!]
.filter { … } [Ой, все!]
.subscribe(
{ data -> log(“onNext()”) },
{ error -> log(“onError()”) },
{ log(“onComplete”) } Ой, все!
)
SUBJECT
Subject = Observable + Observer
SUBJECT
observable
.map { … }
.filter { … }
.subscribe(
{ data -> log(“onNext()”) },
{ error -> log(“onError()”) },
{ log(“onComplete”) }
)
SUBJECT
observable subject
.map { … }
.filter { … }
.subscribe(
{ data -> log(“onNext()”) },
{ error -> log(“onError()”) },
{ log(“onComplete”) }
)
SUBJECT
observable
.map { … }
.filter { … }
.subscribe(subject)
{ data -> log(“onNext()”) },
{ error -> log(“onError()”) },
{ log(“onComplete”) }
)
SUBJECT
• PublishSubject
• BehaviorSubject
• ReplaySubject
• AsyncSubject
SUBJECT
• PublishSubject - for Junior
• BehaviorSubject - for Middle
• ReplaySubject - for Senior
• AsyncSubject - for PM
SCHEDULERS
observable
.subscribeOn(…)
.observeOn(…)
.subscribe {
…
}
SCHEDULERS
observable
…
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
textView.setText(…)
} wow
so mainthreadish
Integration
RX
OR NOT RX
ARCHITECTURE
NETWORK LAYER
RestFacade
——————————————————————————————————————————————————
void getUser(Params params,
DataListener<User> listener)
void pullUserNotifications(Params params,
DataListener<Notification> listener)
void saveProfile(UserProfile profile)
MODEL LAYER
UserService(RestFacade)
——————————————————————————————————————————————————
void getProfile(UserProfileListener listener) { … }
void addUserNotificationListener(
NotificationListener listener) { … }
void startListenNotifications() { … }
void stopListenNotifications() { … }
VIEW (IVIEW) LAYER
IUserView
——————————————————————————————————————————————————
void setName(String name)
void setOnSaveProfileListener(Listener listener)
——————————————————————————————————————————————————
INotificationsView
——————————————————————————————————————————————————
void setNotifications(List<Notification> notifications)
void setOnNotificationClickListener(
Listener<Notification> listener)
——————————————————————————————————————————————————
PRESENTER LAYER
UserProfilePresenter(UserService, IView)
——————————————————————————————————————————————————
private UserProfile profile;
private List<Notification> notifications;
void init() {
userService.addUserNotificationListener(this)
view.setOnSaveProfileListener(this)
userService.getUserProfile(this)
userService.startListenNotifications()
}
PRESENTER LAYER
UserProfilePresenter(UserService, IView)
——————————————————————————————————————————————————
@Override
void onUserProfileReceived(UserProfile profile) {
this.profile = profile
view.setName(profile.name + “ “ profile.lastName)
}
@Override
void onNotificationReceived(Notification notif) {
this.notifications.add(notif)
view.setNotifications(this.notifications)
}
@Override
void onSaveProfile() {
userService.saveProfile(…)
}
LAYERS 1.0
L
L
L
C
C
C
L - listener
C - call
LAYERS 2.0
L - listener
C - call
O - observable
O
L
L
C(o)
C
C
LAYERS 3.0
L - listener
C - call
O - observable
O
O
LC
C(o)
C{}
LAYERS 4.0
L - listener
C - call
O - observable
O
O
O
C{}
C
C(o)
NOT SURE
IF RETROFIT IS ALREADY REACTIVE
NETWORK LAYER 1.0
RestFacade
——————————————————————————————————————————————————
void getUser(Params params,
DataListener<User> listener)
void pullUserNotifications(Params params,
DataListener<Notification> listener)
void saveProfile(UserProfile profile)
NETWORK LAYER 2.0
RestFacade
——————————————————————————————————————————————————
void getUser(Params params,
DataListener<User> listener)
Observable<User> getUser(Params params)
void pullUserNotifications(Params params,
DataListener<Notification> listener)
Observable<Notification> pullUserNotifications(
Params params)
void saveProfile(UserProfile profile)
Observable<Void> saveProfile(UserProfile profile)
MODEL LAYER 1.0
UserService(RestFacade)
——————————————————————————————————————————————————
void getProfile(UserProfileListener listener) { … }
void addUserNotificationListener(
NotificationListener listener) { … }
void startListenNotifications() { … }
void stopListenNotifications() { … }
MODEL LAYER 2.0
UserService(RestFacade)
——————————————————————————————————————————————————
void getProfile(UserProfileListener listener) { … }
Observable<UserProfile> getProfile() { … }
void addUserNotificationListener(
NotificationListener listener) { … }
void startListenNotifications() { … }
void stopListenNotifications() { … }
Observable<Notification> getNotifications() { … }
VIEW (IVIEW) LAYER 1.0
IUserView
——————————————————————————————————————————————————
void setName(String name)
void setOnSaveProfileListener(Listener listener)
——————————————————————————————————————————————————
INotificationsView
——————————————————————————————————————————————————
void setNotifications(List<Notification> notifications)
void setOnNotificationClickListener(
Listener<Notification> listener)
——————————————————————————————————————————————————
VIEW (IVIEW) LAYER 2.0
IUserView
——————————————————————————————————————————————————
void setName(String name)
void setOnSaveProfileListener(Listener listener)
Observable<Void> saveProfileClicks()
——————————————————————————————————————————————————
INotificationsView
——————————————————————————————————————————————————
void setNotifications(List<Notification> notifications)
void setOnNotificationClickListener(
Listener<Notification> listener)
Observable<Notification> notificationClicks()
——————————————————————————————————————————————————
PRESENTER LAYER 1.0
UserProfilePresenter(UserService, IView)
——————————————————————————————————————————————————
private UserProfile profile;
private List<Notification> notifications;
void init() {
userService.addUserNotificationListener(this)
view.setOnSaveProfileListener(this)
userService.getUserProfile(this)
userService.startListenNotifications()
}
PRESENTER LAYER 1.0
UserProfilePresenter(UserService, IView)
——————————————————————————————————————————————————
@Override
void onUserProfileReceived(UserProfile profile) {
this.profile = profile
view.setName(profile.name + “ “ + profile.lastName)
}
@Override
void onNotificationReceived(Notification notif) {
this.notifications.add(notif)
view.setNotifications(this.notifications)
}
@Override
void onSaveProfile() { userService.saveProfile(…) }
PRESENTER LAYER 2.0
UserProfilePresenter(UserService, IView)
——————————————————————————————————————————————————
void init() {
userService.getUserProfile()
.map { profile -> formatName(profile) }
.observeOn(AndroidSchedulers.mainThread())
.subscribe { name ->
view.setName(name)
}
userService.pullNotifications()
.observeOn(AndroidSchedulers.mainThread())
.subscribe { notifications ->
view.setNotifications(notifications)
}
…
}
PRESENTER LAYER 2.0
UserProfilePresenter(UserService, IView)
——————————————————————————————————————————————————
void init() {
…
view.saveProfileClicks()
.withLatestFrom(currentProfileStream, …)
.flatMap { profile ->
userService.saveProfile(profile)
}
.subscribe(
{ success -> …},
{ error -> … }
{ … }
)
}
YOU SUBSCRIBE TO OBSERVABLE
BUT FIRE CALLBACK IN ONNEXT()
WTFs
BE ATTENTIVE
Observable<Void> saveProfile(UserProfile profile)
• userService.saveProfile(userProfile)
Do nothing!
• userService.saveProfile(userProfile).subscribe()
Do the thing!
BEHAVIOUR SUBJECT
Observable<Data> stream =
new BehaviorSubject(data)
…
stream.subscribe { data ->
… // first onNext() event is on the same thread
}
CONNECTABLE STREAM
ConnectableObservable statuses()
——————————————————————————————————————————————————
…
Subscription s = statuses().connect()
…
statuses().subscribe(…)
statuses().subscribe(…)
statuses().subscribe(…)
…
s.unsibscribe()
statuses().connect()
…
CONNECTABLE STREAM
ConnectableObservable statuses()
——————————————————————————————————————————————————
…
Subscription s = statuses().connect()
…
statuses().subscribe(…) // Where is my data?
statuses().subscribe(…) // Where is my data?
statuses().subscribe(…) // Where is my data?
…
s.unsibscribe()
statuses().connect()
…
In the end
• Easy to understand?
• Easy to use?
• Huge error stacktraces?
• GC works hard?
• Low performance?
FAQ
• RxJava is cool (with Kotlin)
• You can become reactive step by step
• It makes you happier
SO…
LINKS
• http://reactivex.io/
• http://rxmarbles.com/
• https://github.com/ReactiveX/RxJava
• https://www.youtube.com/watch?
v=SyWFvn0I6m8
• https://speakerdeck.com/benjchristensen/
functional-reactive-programming-in-the-netflix-
api-lambdajam-2013
QUESTIONS?
THANKS!
Ad

More Related Content

What's hot (20)

Practical RxJava for Android
Practical RxJava for AndroidPractical RxJava for Android
Practical RxJava for Android
Tomáš Kypta
 
Oracle 10g Performance: chapter 09 enqueues
Oracle 10g Performance: chapter 09 enqueuesOracle 10g Performance: chapter 09 enqueues
Oracle 10g Performance: chapter 09 enqueues
Kyle Hailey
 
Profiling Oracle with GDB
Profiling Oracle with GDBProfiling Oracle with GDB
Profiling Oracle with GDB
Enkitec
 
Angular2 rxjs
Angular2 rxjsAngular2 rxjs
Angular2 rxjs
Christoffer Noring
 
Azure SQL Database - Connectivity Best Practices
Azure SQL Database - Connectivity Best PracticesAzure SQL Database - Connectivity Best Practices
Azure SQL Database - Connectivity Best Practices
Jose Manuel Jurado Diaz
 
【Maclean liu技术分享】拨开oracle cbo优化器迷雾,探究histogram直方图之秘 0321
【Maclean liu技术分享】拨开oracle cbo优化器迷雾,探究histogram直方图之秘 0321【Maclean liu技术分享】拨开oracle cbo优化器迷雾,探究histogram直方图之秘 0321
【Maclean liu技术分享】拨开oracle cbo优化器迷雾,探究histogram直方图之秘 0321
maclean liu
 
Rxjs vienna
Rxjs viennaRxjs vienna
Rxjs vienna
Christoffer Noring
 
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Alex Zaballa
 
Dsi 11g convert_to RAC
Dsi 11g convert_to RACDsi 11g convert_to RAC
Dsi 11g convert_to RAC
Anil Kumar
 
Cassandra - lesson learned
Cassandra  - lesson learnedCassandra  - lesson learned
Cassandra - lesson learned
Andrzej Ludwikowski
 
UKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction LocksUKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction Locks
Kyle Hailey
 
Rxjs marble-testing
Rxjs marble-testingRxjs marble-testing
Rxjs marble-testing
Christoffer Noring
 
Strategic autovacuum
Strategic autovacuumStrategic autovacuum
Strategic autovacuum
Jim Mlodgenski
 
OOUG: Oracle transaction locking
OOUG: Oracle transaction lockingOOUG: Oracle transaction locking
OOUG: Oracle transaction locking
Kyle Hailey
 
Understanding reactive programming with microsoft reactive extensions
Understanding reactive programming  with microsoft reactive extensionsUnderstanding reactive programming  with microsoft reactive extensions
Understanding reactive programming with microsoft reactive extensions
Oleksandr Zhevzhyk
 
Reactive Programming no Android
Reactive Programming no AndroidReactive Programming no Android
Reactive Programming no Android
Guilherme Branco
 
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
EPAM_Systems_Bulgaria
 
Embedded Recipes 2018 - Finding sources of Latency In your system - Steven Ro...
Embedded Recipes 2018 - Finding sources of Latency In your system - Steven Ro...Embedded Recipes 2018 - Finding sources of Latency In your system - Steven Ro...
Embedded Recipes 2018 - Finding sources of Latency In your system - Steven Ro...
Anne Nicolas
 
監査ログをもっと身近に!〜統合監査のすすめ〜
監査ログをもっと身近に!〜統合監査のすすめ〜監査ログをもっと身近に!〜統合監査のすすめ〜
監査ログをもっと身近に!〜統合監査のすすめ〜
Michitoshi Yoshida
 
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
 
Practical RxJava for Android
Practical RxJava for AndroidPractical RxJava for Android
Practical RxJava for Android
Tomáš Kypta
 
Oracle 10g Performance: chapter 09 enqueues
Oracle 10g Performance: chapter 09 enqueuesOracle 10g Performance: chapter 09 enqueues
Oracle 10g Performance: chapter 09 enqueues
Kyle Hailey
 
Profiling Oracle with GDB
Profiling Oracle with GDBProfiling Oracle with GDB
Profiling Oracle with GDB
Enkitec
 
Azure SQL Database - Connectivity Best Practices
Azure SQL Database - Connectivity Best PracticesAzure SQL Database - Connectivity Best Practices
Azure SQL Database - Connectivity Best Practices
Jose Manuel Jurado Diaz
 
【Maclean liu技术分享】拨开oracle cbo优化器迷雾,探究histogram直方图之秘 0321
【Maclean liu技术分享】拨开oracle cbo优化器迷雾,探究histogram直方图之秘 0321【Maclean liu技术分享】拨开oracle cbo优化器迷雾,探究histogram直方图之秘 0321
【Maclean liu技术分享】拨开oracle cbo优化器迷雾,探究histogram直方图之秘 0321
maclean liu
 
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Alex Zaballa
 
Dsi 11g convert_to RAC
Dsi 11g convert_to RACDsi 11g convert_to RAC
Dsi 11g convert_to RAC
Anil Kumar
 
UKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction LocksUKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction Locks
Kyle Hailey
 
OOUG: Oracle transaction locking
OOUG: Oracle transaction lockingOOUG: Oracle transaction locking
OOUG: Oracle transaction locking
Kyle Hailey
 
Understanding reactive programming with microsoft reactive extensions
Understanding reactive programming  with microsoft reactive extensionsUnderstanding reactive programming  with microsoft reactive extensions
Understanding reactive programming with microsoft reactive extensions
Oleksandr Zhevzhyk
 
Reactive Programming no Android
Reactive Programming no AndroidReactive Programming no Android
Reactive Programming no Android
Guilherme Branco
 
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
Tech Talks_25.04.15_Session 3_Tibor Sulyan_Distributed coordination with zook...
EPAM_Systems_Bulgaria
 
Embedded Recipes 2018 - Finding sources of Latency In your system - Steven Ro...
Embedded Recipes 2018 - Finding sources of Latency In your system - Steven Ro...Embedded Recipes 2018 - Finding sources of Latency In your system - Steven Ro...
Embedded Recipes 2018 - Finding sources of Latency In your system - Steven Ro...
Anne Nicolas
 
監査ログをもっと身近に!〜統合監査のすすめ〜
監査ログをもっと身近に!〜統合監査のすすめ〜監査ログをもっと身近に!〜統合監査のすすめ〜
監査ログをもっと身近に!〜統合監査のすすめ〜
Michitoshi Yoshida
 
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
 

Similar to GDG DevFest 2015 - Reactive approach for slowpokes (20)

Example R usage for oracle DBA UKOUG 2013
Example R usage for oracle DBA UKOUG 2013Example R usage for oracle DBA UKOUG 2013
Example R usage for oracle DBA UKOUG 2013
BertrandDrouvot
 
RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]
Igor Lozynskyi
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
Tomáš Kypta
 
MongoDB World 2019: Life In Stitch-es
MongoDB World 2019: Life In Stitch-esMongoDB World 2019: Life In Stitch-es
MongoDB World 2019: Life In Stitch-es
MongoDB
 
Going Reactive with Relational Databases
Going Reactive with Relational DatabasesGoing Reactive with Relational Databases
Going Reactive with Relational Databases
Ivaylo Pashov
 
ROracle
ROracle ROracle
ROracle
Mohamed Magdy
 
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Oracle Developers
 
Building Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJavaBuilding Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJava
Rick Warren
 
Oracle Drivers configuration for High Availability
Oracle Drivers configuration for High AvailabilityOracle Drivers configuration for High Availability
Oracle Drivers configuration for High Availability
Ludovico Caldara
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
Kros Huang
 
Fosdem10
Fosdem10Fosdem10
Fosdem10
wremes
 
Programming Sideways: Asynchronous Techniques for Android
Programming Sideways: Asynchronous Techniques for AndroidProgramming Sideways: Asynchronous Techniques for Android
Programming Sideways: Asynchronous Techniques for Android
Emanuele Di Saverio
 
Postgres Vienna DB Meetup 2014
Postgres Vienna DB Meetup 2014Postgres Vienna DB Meetup 2014
Postgres Vienna DB Meetup 2014
Michael Renner
 
Oracle Client Failover - Under The Hood
Oracle Client Failover - Under The HoodOracle Client Failover - Under The Hood
Oracle Client Failover - Under The Hood
Ludovico Caldara
 
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
 
Integration-Monday-Stateful-Programming-Models-Serverless-Functions
Integration-Monday-Stateful-Programming-Models-Serverless-FunctionsIntegration-Monday-Stateful-Programming-Models-Serverless-Functions
Integration-Monday-Stateful-Programming-Models-Serverless-Functions
BizTalk360
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android
Dustin Graham
 
Matheus Albuquerque "The best is yet to come: the Future of React"
Matheus Albuquerque "The best is yet to come: the Future of React"Matheus Albuquerque "The best is yet to come: the Future of React"
Matheus Albuquerque "The best is yet to come: the Future of React"
Fwdays
 
OGSA-DAI DQP: A Developer's View
OGSA-DAI DQP: A Developer's ViewOGSA-DAI DQP: A Developer's View
OGSA-DAI DQP: A Developer's View
Bartosz Dobrzelecki
 
[JEEConf-2017] RxJava as a key component in mature Big Data product
[JEEConf-2017] RxJava as a key component in mature Big Data product[JEEConf-2017] RxJava as a key component in mature Big Data product
[JEEConf-2017] RxJava as a key component in mature Big Data product
Igor Lozynskyi
 
Example R usage for oracle DBA UKOUG 2013
Example R usage for oracle DBA UKOUG 2013Example R usage for oracle DBA UKOUG 2013
Example R usage for oracle DBA UKOUG 2013
BertrandDrouvot
 
RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]
Igor Lozynskyi
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
Tomáš Kypta
 
MongoDB World 2019: Life In Stitch-es
MongoDB World 2019: Life In Stitch-esMongoDB World 2019: Life In Stitch-es
MongoDB World 2019: Life In Stitch-es
MongoDB
 
Going Reactive with Relational Databases
Going Reactive with Relational DatabasesGoing Reactive with Relational Databases
Going Reactive with Relational Databases
Ivaylo Pashov
 
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Oracle Developers
 
Building Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJavaBuilding Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJava
Rick Warren
 
Oracle Drivers configuration for High Availability
Oracle Drivers configuration for High AvailabilityOracle Drivers configuration for High Availability
Oracle Drivers configuration for High Availability
Ludovico Caldara
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
Kros Huang
 
Fosdem10
Fosdem10Fosdem10
Fosdem10
wremes
 
Programming Sideways: Asynchronous Techniques for Android
Programming Sideways: Asynchronous Techniques for AndroidProgramming Sideways: Asynchronous Techniques for Android
Programming Sideways: Asynchronous Techniques for Android
Emanuele Di Saverio
 
Postgres Vienna DB Meetup 2014
Postgres Vienna DB Meetup 2014Postgres Vienna DB Meetup 2014
Postgres Vienna DB Meetup 2014
Michael Renner
 
Oracle Client Failover - Under The Hood
Oracle Client Failover - Under The HoodOracle Client Failover - Under The Hood
Oracle Client Failover - Under The Hood
Ludovico Caldara
 
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
 
Integration-Monday-Stateful-Programming-Models-Serverless-Functions
Integration-Monday-Stateful-Programming-Models-Serverless-FunctionsIntegration-Monday-Stateful-Programming-Models-Serverless-Functions
Integration-Monday-Stateful-Programming-Models-Serverless-Functions
BizTalk360
 
Matheus Albuquerque "The best is yet to come: the Future of React"
Matheus Albuquerque "The best is yet to come: the Future of React"Matheus Albuquerque "The best is yet to come: the Future of React"
Matheus Albuquerque "The best is yet to come: the Future of React"
Fwdays
 
OGSA-DAI DQP: A Developer's View
OGSA-DAI DQP: A Developer's ViewOGSA-DAI DQP: A Developer's View
OGSA-DAI DQP: A Developer's View
Bartosz Dobrzelecki
 
[JEEConf-2017] RxJava as a key component in mature Big Data product
[JEEConf-2017] RxJava as a key component in mature Big Data product[JEEConf-2017] RxJava as a key component in mature Big Data product
[JEEConf-2017] RxJava as a key component in mature Big Data product
Igor Lozynskyi
 
Ad

Recently uploaded (20)

What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
Andre Hora
 
PDF Reader Pro Crack Latest Version FREE Download 2025
PDF Reader Pro Crack Latest Version FREE Download 2025PDF Reader Pro Crack Latest Version FREE Download 2025
PDF Reader Pro Crack Latest Version FREE Download 2025
mu394968
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
How to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud PerformanceHow to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud Performance
ThousandEyes
 
Automation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath CertificateAutomation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath Certificate
VICTOR MAESTRE RAMIREZ
 
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage DashboardsAdobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
BradBedford3
 
FL Studio Producer Edition Crack 2025 Full Version
FL Studio Producer Edition Crack 2025 Full VersionFL Studio Producer Edition Crack 2025 Full Version
FL Studio Producer Edition Crack 2025 Full Version
tahirabibi60507
 
The Significance of Hardware in Information Systems.pdf
The Significance of Hardware in Information Systems.pdfThe Significance of Hardware in Information Systems.pdf
The Significance of Hardware in Information Systems.pdf
drewplanas10
 
Solidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license codeSolidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license code
aneelaramzan63
 
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
Egor Kaleynik
 
Landscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature ReviewLandscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature Review
Hironori Washizaki
 
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AIScaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
danshalev
 
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Dele Amefo
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
AxisTechnolabs
 
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
steaveroggers
 
Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025
kashifyounis067
 
Societal challenges of AI: biases, multilinguism and sustainability
Societal challenges of AI: biases, multilinguism and sustainabilitySocietal challenges of AI: biases, multilinguism and sustainability
Societal challenges of AI: biases, multilinguism and sustainability
Jordi Cabot
 
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
ssuserb14185
 
Not So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java WebinarNot So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java Webinar
Tier1 app
 
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
Andre Hora
 
PDF Reader Pro Crack Latest Version FREE Download 2025
PDF Reader Pro Crack Latest Version FREE Download 2025PDF Reader Pro Crack Latest Version FREE Download 2025
PDF Reader Pro Crack Latest Version FREE Download 2025
mu394968
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
How to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud PerformanceHow to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud Performance
ThousandEyes
 
Automation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath CertificateAutomation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath Certificate
VICTOR MAESTRE RAMIREZ
 
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage DashboardsAdobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
BradBedford3
 
FL Studio Producer Edition Crack 2025 Full Version
FL Studio Producer Edition Crack 2025 Full VersionFL Studio Producer Edition Crack 2025 Full Version
FL Studio Producer Edition Crack 2025 Full Version
tahirabibi60507
 
The Significance of Hardware in Information Systems.pdf
The Significance of Hardware in Information Systems.pdfThe Significance of Hardware in Information Systems.pdf
The Significance of Hardware in Information Systems.pdf
drewplanas10
 
Solidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license codeSolidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license code
aneelaramzan63
 
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...
Egor Kaleynik
 
Landscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature ReviewLandscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature Review
Hironori Washizaki
 
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AIScaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
danshalev
 
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Dele Amefo
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
AxisTechnolabs
 
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
steaveroggers
 
Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025
kashifyounis067
 
Societal challenges of AI: biases, multilinguism and sustainability
Societal challenges of AI: biases, multilinguism and sustainabilitySocietal challenges of AI: biases, multilinguism and sustainability
Societal challenges of AI: biases, multilinguism and sustainability
Jordi Cabot
 
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
ssuserb14185
 
Not So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java WebinarNot So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java Webinar
Tier1 app
 
Ad

GDG DevFest 2015 - Reactive approach for slowpokes