SlideShare une entreprise Scribd logo
1  sur  27
The Hard but Right Path
Rx Architectures
in Android
Classical Scenario:
loading a web page
» 1. User writes the url in the address bar
» 2. Browser sends a request and shows a loading bar
» 3.Web page loads
Imperative Way
A = 0
B = A + 1
A = 2
- Place the value of 0 into variable A
- Read the value of A, calculate A + 1 and place it into B
- Place the value 2 into A
Result: B remains untouched
Modern Scenario:
Android App
» User navigates within the app
» Friends list is refreshed in the background
» Message delivery fails (for a message sent 20 seconds ago in another
screen)
» FarmVille request arrives and is shown as an in-app notification
» Application is suddenly suspended
Declarative Way
A = 0
B = A + 1
A = 2
- Emit the value of 0 from observable A
- Define B to be A + 1
- Emit the value 2 from observable A
Result: Everyone interested in B was also updated with the value of 3
How to do declarative
on Android then?
6Futurice
RxJava
703/20/14 Futurice
History of Rx
» Developed by Microsoft as Reactive Extensions
» “...is a library to compose asynchronous and event-based programs
using observable collections and LINQ-style query operators.”
» Has been ported on most platforms and languages (except PHP)
803/20/14 Futurice
Rx is..
» Also known as Functional Reactive Programming
» A way of composing (pure) functions into processing chains
» A way to avoid callback hell
» A very fancy event publish / listen mechanism
The Observable
» Observables are objects that emit values
» The emitted values are immutable, a new object comes when something
changes
» You can subscribe to an observable to receive the emitted values
henceforth
» Operations can be performed on the values that observables emit (a kind
of a wrapper pattern)
» Multiple observables can be combined into one with different kinds of
conditions, resulting in one observable
Characteristics of Rx Apps
» Basic building blocks of a program become observables – not
variables
» Favoring push over pull (reacting to change instead of polling it)
» Observables do not hold state that can be pulled, but they instead
emit values whenever something changes
» You can declare “pipes” or “flows” within the app that have defined
entry points for data process it in a deterministic way
What is Rx good for?
» Applications nowadays are increasingly asynchronous and imperative
programming is not enough for app logic
» Data can come into the application from many points
» … or to not come
» Reactive chains make sure the correct action happens each time new data
arrives
» The entry points for unexpected data are clearly defined
» Processing of asynchronous streams, such as throttling and composing
Our Goals
» Pass immutable objects through the system
» Combine elaborate data reliably
» Keep all data dependencies up-to-date
» Permanent subscriptions as event buses
» View models for increased testability
So in which parts of the app
should we use RxJava?
14Futurice
All of them!
15Futurice
Complete Rx Stack
Network Client
Data Store
View Models
Views
Activity or
Fragmentcreate and
destroy
stateless / one-off
preserved state (cache)
weak reference
subscription
subscribe
Data Store
» Uses the network client to fetch data
» Offers open subscriptions for receiving a new value whenever a
data entry changes (usually identified by an ID string)
» Can refresh all data in the background
» If you have a book, it can automatically fetch the author from a
different API
View Models
» Contains all logic necessary for processing “backend data” into
rendereable values
» Expose refined subscribable properties
» Upon subscription the latest value is immediate emitted and after
that refreshed as necessary
» Bindings (subscriptions) are done with weak references
» Subscribe to the appropriate data sources in Data Store
» Unsubscribes from everything whenever the owner is destroyed
Views
» Plain layouts and drawing code
» No further processing of values received from view models
The Problems in Android
» RxJava subscriptions create strong references – memory leaks if
not unsubscribed
» Unsubscribing at the right time is hard especially with nested view
models
» No established view model structure (we wrote our own)
» Rx in general forces one to think more and closes many shortcuts
» Bridging the gap between native components and view models can
sometimes be challenging since the views hold complex state
Why You Should do It?
» Cleaner code
» Makes you understand where bugs come from
» It feels right
Resources
» Github sample project: https://github.com/tehmou/rx
-android-architecture
» My blog post: http://blog.futurice.com/top-7-tips-for-rxjava-on-android
» Official RxJavaWiki: https://github.com/Netflix/RxJava/wiki
» A good intro to programming RxJava on
Android:http://mttkay.github.io/blog/2013/08/25/functional-reactive-
programming-on-android-with-rxjava/
» Original Rx: http://msdn.microsoft.com/en-gb/data/gg577609.aspx
TimoTuominen
Independent Software Consultant
@tehmou
timo.tuominen@gmail.com
+44 7459 371157
Contact
Futurice
Futurice in
brief
HELSINKI
TAMPERE
BERLIN
LONDON
200
Founded in
2000
1
2013: 20M€
1
We believe that our values – trust, caring, transparency and
continuous improvement – are the key to our happiness cycle
that includes happy customers, happy people and happy end-
users!
We have two GPTW Institute’s Best Workplace victories in a row
on European level. Futurice is the first company to ever achieve
this. This enables us to recruit the best talent in the market.
Futurice is the best place to work in
whole Europe
» Small, efficient teams of passionate and
dedicated people
» Modern ways of doing, modern
technologies
» Short lead times, Lean mindset
» Design and technology under the same
roof, zero hand-overs!
» Consumer grade user experience also for
How we do things

Contenu connexe

En vedette

Aggregate Programming through a Soft Modal Logic
Aggregate Programming through a Soft Modal LogicAggregate Programming through a Soft Modal Logic
Aggregate Programming through a Soft Modal LogicAlberto Lluch Lafuente
 
Reactive Android: RxJava and beyond
Reactive Android: RxJava and beyondReactive Android: RxJava and beyond
Reactive Android: RxJava and beyondFabio Tiriticco
 
RxJava for Android - GDG and DataArt
RxJava for Android - GDG and DataArtRxJava for Android - GDG and DataArt
RxJava for Android - GDG and DataArtConstantine Mars
 
The Mayans Lost Guide to RxJava on Android
The Mayans Lost Guide to RxJava on AndroidThe Mayans Lost Guide to RxJava on Android
The Mayans Lost Guide to RxJava on AndroidFernando Cejas
 
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 2015Constantine Mars
 
Intro to Functional Programming with RxJava
Intro to Functional Programming with RxJavaIntro to Functional Programming with RxJava
Intro to Functional Programming with RxJavaMike Nakhimovich
 
Reactive programming with Rxjava
Reactive programming with RxjavaReactive programming with Rxjava
Reactive programming with RxjavaChristophe Marchal
 
RxJava 2.0 介紹
RxJava 2.0 介紹RxJava 2.0 介紹
RxJava 2.0 介紹Kros Huang
 
React.js and Flux in details
React.js and Flux in detailsReact.js and Flux in details
React.js and Flux in detailsArtyom Trityak
 
Android Design Principles and Popular Patterns
Android Design Principles and Popular PatternsAndroid Design Principles and Popular Patterns
Android Design Principles and Popular PatternsFaiz Malkani
 
Intro to RxJava/RxAndroid - GDG Munich Android
Intro to RxJava/RxAndroid - GDG Munich AndroidIntro to RxJava/RxAndroid - GDG Munich Android
Intro to RxJava/RxAndroid - GDG Munich AndroidEgor Andreevich
 
Headless fragments in Android
Headless fragments in AndroidHeadless fragments in Android
Headless fragments in AndroidAli Muzaffar
 

En vedette (19)

Aggregate Programming through a Soft Modal Logic
Aggregate Programming through a Soft Modal LogicAggregate Programming through a Soft Modal Logic
Aggregate Programming through a Soft Modal Logic
 
Reactive Android: RxJava and beyond
Reactive Android: RxJava and beyondReactive Android: RxJava and beyond
Reactive Android: RxJava and beyond
 
2 презентация rx java+android
2 презентация rx java+android2 презентация rx java+android
2 презентация rx java+android
 
RxJava for Android - GDG and DataArt
RxJava for Android - GDG and DataArtRxJava for Android - GDG and DataArt
RxJava for Android - GDG and DataArt
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android
 
The Mayans Lost Guide to RxJava on Android
The Mayans Lost Guide to RxJava on AndroidThe Mayans Lost Guide to RxJava on Android
The Mayans Lost Guide to RxJava on Android
 
RxJava in practice
RxJava in practice RxJava in practice
RxJava in practice
 
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
 
rx-java-presentation
rx-java-presentationrx-java-presentation
rx-java-presentation
 
Intro to Functional Programming with RxJava
Intro to Functional Programming with RxJavaIntro to Functional Programming with RxJava
Intro to Functional Programming with RxJava
 
Reactive programming with Rxjava
Reactive programming with RxjavaReactive programming with Rxjava
Reactive programming with Rxjava
 
Rx java in action
Rx java in actionRx java in action
Rx java in action
 
RxJava 2.0 介紹
RxJava 2.0 介紹RxJava 2.0 介紹
RxJava 2.0 介紹
 
Choice Paralysis
Choice ParalysisChoice Paralysis
Choice Paralysis
 
About Flux
About FluxAbout Flux
About Flux
 
React.js and Flux in details
React.js and Flux in detailsReact.js and Flux in details
React.js and Flux in details
 
Android Design Principles and Popular Patterns
Android Design Principles and Popular PatternsAndroid Design Principles and Popular Patterns
Android Design Principles and Popular Patterns
 
Intro to RxJava/RxAndroid - GDG Munich Android
Intro to RxJava/RxAndroid - GDG Munich AndroidIntro to RxJava/RxAndroid - GDG Munich Android
Intro to RxJava/RxAndroid - GDG Munich Android
 
Headless fragments in Android
Headless fragments in AndroidHeadless fragments in Android
Headless fragments in Android
 

Dernier

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
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
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
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
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 

Dernier (20)

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
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
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
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
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 

RxJava Architectures on Android #8 Android LiveCode

  • 1. The Hard but Right Path Rx Architectures in Android
  • 2. Classical Scenario: loading a web page » 1. User writes the url in the address bar » 2. Browser sends a request and shows a loading bar » 3.Web page loads
  • 3. Imperative Way A = 0 B = A + 1 A = 2 - Place the value of 0 into variable A - Read the value of A, calculate A + 1 and place it into B - Place the value 2 into A Result: B remains untouched
  • 4. Modern Scenario: Android App » User navigates within the app » Friends list is refreshed in the background » Message delivery fails (for a message sent 20 seconds ago in another screen) » FarmVille request arrives and is shown as an in-app notification » Application is suddenly suspended
  • 5. Declarative Way A = 0 B = A + 1 A = 2 - Emit the value of 0 from observable A - Define B to be A + 1 - Emit the value 2 from observable A Result: Everyone interested in B was also updated with the value of 3
  • 6. How to do declarative on Android then? 6Futurice
  • 8. History of Rx » Developed by Microsoft as Reactive Extensions » “...is a library to compose asynchronous and event-based programs using observable collections and LINQ-style query operators.” » Has been ported on most platforms and languages (except PHP) 803/20/14 Futurice
  • 9. Rx is.. » Also known as Functional Reactive Programming » A way of composing (pure) functions into processing chains » A way to avoid callback hell » A very fancy event publish / listen mechanism
  • 10. The Observable » Observables are objects that emit values » The emitted values are immutable, a new object comes when something changes » You can subscribe to an observable to receive the emitted values henceforth » Operations can be performed on the values that observables emit (a kind of a wrapper pattern) » Multiple observables can be combined into one with different kinds of conditions, resulting in one observable
  • 11. Characteristics of Rx Apps » Basic building blocks of a program become observables – not variables » Favoring push over pull (reacting to change instead of polling it) » Observables do not hold state that can be pulled, but they instead emit values whenever something changes » You can declare “pipes” or “flows” within the app that have defined entry points for data process it in a deterministic way
  • 12. What is Rx good for? » Applications nowadays are increasingly asynchronous and imperative programming is not enough for app logic » Data can come into the application from many points » … or to not come » Reactive chains make sure the correct action happens each time new data arrives » The entry points for unexpected data are clearly defined » Processing of asynchronous streams, such as throttling and composing
  • 13. Our Goals » Pass immutable objects through the system » Combine elaborate data reliably » Keep all data dependencies up-to-date » Permanent subscriptions as event buses » View models for increased testability
  • 14. So in which parts of the app should we use RxJava? 14Futurice
  • 16. Complete Rx Stack Network Client Data Store View Models Views Activity or Fragmentcreate and destroy stateless / one-off preserved state (cache) weak reference subscription subscribe
  • 17. Data Store » Uses the network client to fetch data » Offers open subscriptions for receiving a new value whenever a data entry changes (usually identified by an ID string) » Can refresh all data in the background » If you have a book, it can automatically fetch the author from a different API
  • 18. View Models » Contains all logic necessary for processing “backend data” into rendereable values » Expose refined subscribable properties » Upon subscription the latest value is immediate emitted and after that refreshed as necessary » Bindings (subscriptions) are done with weak references » Subscribe to the appropriate data sources in Data Store » Unsubscribes from everything whenever the owner is destroyed
  • 19. Views » Plain layouts and drawing code » No further processing of values received from view models
  • 20. The Problems in Android » RxJava subscriptions create strong references – memory leaks if not unsubscribed » Unsubscribing at the right time is hard especially with nested view models » No established view model structure (we wrote our own) » Rx in general forces one to think more and closes many shortcuts » Bridging the gap between native components and view models can sometimes be challenging since the views hold complex state
  • 21. Why You Should do It? » Cleaner code » Makes you understand where bugs come from » It feels right
  • 22. Resources » Github sample project: https://github.com/tehmou/rx -android-architecture » My blog post: http://blog.futurice.com/top-7-tips-for-rxjava-on-android » Official RxJavaWiki: https://github.com/Netflix/RxJava/wiki » A good intro to programming RxJava on Android:http://mttkay.github.io/blog/2013/08/25/functional-reactive- programming-on-android-with-rxjava/ » Original Rx: http://msdn.microsoft.com/en-gb/data/gg577609.aspx
  • 26. We believe that our values – trust, caring, transparency and continuous improvement – are the key to our happiness cycle that includes happy customers, happy people and happy end- users! We have two GPTW Institute’s Best Workplace victories in a row on European level. Futurice is the first company to ever achieve this. This enables us to recruit the best talent in the market. Futurice is the best place to work in whole Europe
  • 27. » Small, efficient teams of passionate and dedicated people » Modern ways of doing, modern technologies » Short lead times, Lean mindset » Design and technology under the same roof, zero hand-overs! » Consumer grade user experience also for How we do things