SlideShare a Scribd company logo
1 of 101
Download to read offline
It’s All In The
Implementation
Details
@FMuntenescu
upday
MVVM
M
V
V M
odel
iew
iew odel
M
V
V M
odel
iew
iew odel
(With RxJava)
DataModelView ViewModel
DataModelView ViewModel
Network
Database
SharedPreferences
DataModelView ViewModel
Network
Database
SharedPreferences
Observable<List<Article>>
DataModelView ViewModel
Network
Database
SharedPreferences
Observable<ArticlesUiModel>
Observable<List<Article>>
JUnit testable
DataModelView ViewModel
Network
Database
SharedPreferences
Android Classes?
Static Methods?
Providers
Android Classes?
Static Methods?
context.getString(id);
context.getString(id);
String getString(@StringRes int id) {
return
}
public class ResourceProvider {
Context context;
ResourceProvider(Context context) {
this.context = context;
}
context.getString(id);
String getString(@StringRes int id) {
return
}
FirebaseRemoteConfig.getInstance().getString(key)
FirebaseRemoteConfig.getInstance()
public class RemoteConfigProvider {
FirebaseRemoteConfig remoteConfig;
RemoteConfigProvider() {
remoteConfig =
;
}
FirebaseRemoteConfig.getInstance()
public class RemoteConfigProvider {
FirebaseRemoteConfig remoteConfig;
RemoteConfigProvider() {
remoteConfig =
;
}
String getString(String key) {
return remoteConfig.getString(key);
}
DataModel
DataModelView ViewModel
Network
Database
SharedPreferences
News	
Articles
News	
Articles
Network
Database
SharedPreferences
GET
.../articles
Database
SharedPreferences
GET
.../articles
TABLE
articles
SharedPreferences
GET
.../articles
TABLE
articles
SharedPreferences
Articles
DataModel
GET
.../articles
TABLE
articles
SharedPreferences
Articles
DataModel
ViewModelX
ViewModelY
public class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
Observable<List<Article>> getOrFetchTopNewsArticles() {
}
public class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
public class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
return localDataSource
.getTopNews()
Observable<List<Article>> getOrFetchTopNewsArticles() {
}
public class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
return localDataSource
.getTopNews()
Observable<List<Article>> getOrFetchTopNewsArticles() {
}
public class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.flatMap(getValidArticles())
return localDataSource
.getTopNews()
Observable<List<Article>> getOrFetchTopNewsArticles() {
}
public class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
Observable<List<Article>> getOrFetchTopNewsArticles() {
}
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.flatMap(getValidArticles())
public class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.flatMap(getValidArticles())
Observable<List<Article>>
Observable<List<Article>> getOrFetchTopNewsArticles() {
}
public class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.flatMap(getValidArticles())
.getTopNews()
Observable<List<Article>> getOrFetchTopNewsArticles() {
}
public class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.flatMap(getValidArticles())
.getTopNews()
Observable<List<Article>> getOrFetchTopNewsArticles() {
}
getOrFetchTopNewsArticles()
HomeView
Article Teaser	
View
Article Teaser	
View
ArticleTeaser
ViewModel
Articles
DataModel
Article Teaser	
View
ArticleTeaser
ViewModel
Database
Articles
DataModel
Article Teaser	
View
ArticleTeaser
ViewModel
Database
Articles
DataModel
Article Teaser	
View
ArticleTeaser
ViewModel
New	Article
Articles
DataModel
Database
Article Teaser	
View
ArticleTeaser
ViewModel
New	Article
getOrfetchTopNewsArticles
Database
Articles
DataModel
Article Teaser	
View
ArticleTeaser
ViewModel
New	Article
getTopNewsArticle
Article Teaser	
View
Database
Articles
DataModel
ArticleTeaser
ViewModel
New	Article
DataModel uses the Repository pattern
One DataModel per business model
DataModel drives the data flow
View
ViewModel
Article Teaser	
View
<LinearLayout>
<…ArticleTeaserView
…/>
</LinearLayout>
class ArticleTeaserView extends View {
@Inject
ArticleTeaserViewModel viewModel;
class ArticleTeaserView extends View {
public ArticleTeaserView(Context context) {
…
onInject();
}
@Inject
ArticleTeaserViewModel viewModel;
class ArticleTeaserView extends View {
public ArticleTeaserView(Context context) {
…
onInject();
}
@Inject
ArticleTeaserViewModel viewModel;
new ArticleTeaserViewModel()
class ArticleTeaserView extends View {
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
bind();
}
class ArticleTeaserView extends View {
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
bind();
}
private void bind() {
subscription.add(
viewModel.getTopNewsArticle()
.subscribeOn(…)
.observeOn(…)
.subscribe(this::showArticle,
error -> Timber.e(error, “Error …”);
}
class ArticleTeaserView extends View {
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
bind();
}
@Override
protected void onDetachedFromWindow() {
}
class ArticleTeaserView extends View {
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
bind();
}
@Override
protected void onDetachedFromWindow() {
}
unbind();
class ArticleTeaserView extends View {
@Override
protected void onDetachedFromWindow() {
}
unbind();
private void unbind() {
}
class ArticleTeaserView extends View {
@Override
protected void onDetachedFromWindow() {
}
unbind();
subscription.clear();
private void unbind() {
}
private void unbind() {
}
subscription.clear();
viewModel.dispose();
class ArticleTeaserView extends View {
@Override
protected void onDetachedFromWindow() {
}
unbind();
TopNewsStream
View
Fragment
public class TopNewsStreamView extends Fragment {
@Inject
TopNewsStreamViewModel viewModel;
public class TopNewsStreamView extends Fragment {
@Inject
TopNewsStreamViewModel viewModel;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
…
onInject();
}
public class TopNewsStreamView extends Fragment {
@Inject
TopNewsStreamViewModel viewModel;
@Override
public void onResume() {
…
bind();
}
@Override
public void onPause() {
…
unbind();
}
Lifecycle of the ViewModel depends on the lifecycle of the View
Only the View has a reference to the corresponding ViewModel
Only other native android classes know about the View
Model-View-ViewModel
RecyclerView
Adapter
ViewHolder
DataSet
Adapter
ViewHolder
DataSet
onCreateViewHolder
onBindViewHolder
Adapter
ViewHolder
DataSet
Adapter
ViewHolder
UiModels
TopNewsStream
View
TopNewsAdapter UiModels
ViewHolder
TopNewsStream
View
TopNewsAdapter UiModels
TopNewsViewHolder
TopNewsStream
View
TopNewsStream
View
TopNewsStream
ViewModel
public class TopNewsStreamViewModel {
Observable<TopNewsUiModel> getTopNewsUiModel() {
}
public class TopNewsStreamViewModel {
Observable<TopNewsUiModel> getTopNewsUiModel() {
}
@AutoValue
abstract class TopNewsUiModel {
abstract List<UiModel> uiModels();
abstract int position();
}
public class TopNewsStreamView extends Fragment {
@Inject
TopNewsStreamViewModel viewModel;
@Override
public void onResume() {
…
bind();
}
public class TopNewsStreamView extends Fragment {
@Inject
TopNewsStreamViewModel viewModel;
private void bind() {
subscription.add(
viewModel.getTopNewsUiModel()
.subscribe(uiModel -> setupUiModel(uiModel));
}
public class TopNewsStreamView extends Fragment {
private void setupUiModel(TopNewsUiModel model) {
// update Adapter with the UiModel
}
private void bind() {
subscription.add(
viewModel.getTopNewsUiModel()
.subscribe(uiModel -> setupUiModel(uiModel));
}
public class TopNewsStreamView extends Fragment {
public class TopNewsAdapter extends
RecyclerView.Adapter<TopNewsViewHolder> {
public class TopNewsAdapter extends
RecyclerView.Adapter<TopNewsViewHolder> {
@Override
public TopNewsViewHolder onCreateViewHolder(
ViewGroup parent, int viewType) {
// create a view holder with a new view
// that represents items of the given type
}
Open	Article
Open	Article
Share	Article
Open	Article
Share	Article
Label	should	
disappear	after	5sec
class TopNewsArticleViewModel {
void openArticle(){
…
}
void share(){
…
}
Observable<Boolean> isNewLabelVisible(){
…
}
}
public class TopNewsAdapter extends
RecyclerView.Adapter<TopNewsViewHolder> {
@Override
public TopNewsViewHolder onCreateViewHolder(
ViewGroup parent, int viewType) {
// create a view holder with a new view
// that represents items of the given type
// create the view model
}
ViewModel creates and emits the Model for the View
View subscribes to the emissions of the Model
View updates the RecyclerView.Adapter
The View and the corresponding ViewModel are created in
Adapter.onCreateViewHolder
Open	Article
Open	Article
No	ViewModel
class TopNewsStreamViewModel {
Observable<List<UiModel>> getUiModels() {
}
@AutoValue
abstract class UiModel {
abstract Article article();
class TopNewsStreamViewModel {
Observable<List<UiModel>> getUiModels() {
}
@AutoValue
abstract class UiModel {
abstract Article article();
abstract Action0 onClickAction();
class TopNewsStreamViewModel {
Observable<List<UiModel>> getUiModels() {
}
@AutoValue
abstract class UiModel {
abstract Article article();
abstract Action0 onClickAction();
static UiModel create(Article article,
Action0 onClickAction){
…
}
class TopNewsStreamViewModel {
Observable<List<UiModel>> getUiModels() {
}
class TopNewsStreamViewModel {
Observable<List<UiModel>> getUiModels() {
}
class TopNewsStreamViewModel {
Observable<List<UiModel>> getUiModels() {
}
return dataModel.getTopNewsArticles()
.flatMap(article -> createUiModel(article))
class TopNewsStreamViewModel {
Observable<List<UiModel>> getUiModels() {
}
return dataModel.getTopNewsArticles()
.flatMap(article -> createUiModel(article))
private UiModel createUiModel(Article article) {
return UiModel.create(article,
new Action0() {
@Override
public void call() {
// handle item click
}});
}
class TopNewsViewHolder extends RecyclerView.ViewHolder{
class TopNewsViewHolder extends RecyclerView.ViewHolder{
TextView title;
…
class TopNewsViewHolder extends RecyclerView.ViewHolder{
TextView title;
…
void bindItem(UiModel uiModel) {
title.setText(uiModel.getTitle());
}
void bindItem(UiModel uiModel) {
title.setText(uiModel.getTitle());
}
view.setOnClickListener(
v -> uiModel.onClickAction().call());
class TopNewsViewHolder extends RecyclerView.ViewHolder{
TextView title;
…
TopNewsAdapter UiModels
TopNewsViewHolder
bindItem(UiModel)
TopNewsAdapter UiModels
TopNewsViewHolder
bindItem(UiModel)
getUiModels()
TopNewsStream
ViewModel
Define an Action in the View’s Model
Bind the Model to the View via the RecyclerView.ViewHolder
Trigger the Action
Action is handled by the ViewModel
It’s All In The
Implementation
Details
@FMuntenescu
upday
MVVM
https://goo.gl/bIwdmc

More Related Content

What's hot

Anton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 lightAnton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 lightMichael Pustovit
 
Vaadin JPAContainer
Vaadin JPAContainerVaadin JPAContainer
Vaadin JPAContainercmkandemir
 
Converting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesConverting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesKaniska Mandal
 
Spring mvc my Faviourite Slide
Spring mvc my Faviourite SlideSpring mvc my Faviourite Slide
Spring mvc my Faviourite SlideDaniel Adenew
 
What is the difference between struts 1 vs struts 2
What is the difference between struts 1 vs struts 2What is the difference between struts 1 vs struts 2
What is the difference between struts 1 vs struts 2Santosh Singh Paliwal
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafMasatoshi Tada
 
Oleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring DataArturs Drozdovs
 
Code to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern ApplicationsCode to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern ApplicationsCaleb Jenkins
 

What's hot (14)

Anton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 lightAnton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 light
 
Vaadin JPAContainer
Vaadin JPAContainerVaadin JPAContainer
Vaadin JPAContainer
 
Converting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesConverting Db Schema Into Uml Classes
Converting Db Schema Into Uml Classes
 
Spring mvc my Faviourite Slide
Spring mvc my Faviourite SlideSpring mvc my Faviourite Slide
Spring mvc my Faviourite Slide
 
Lecture17
Lecture17Lecture17
Lecture17
 
TY.BSc.IT Java QB U1
TY.BSc.IT Java QB U1TY.BSc.IT Java QB U1
TY.BSc.IT Java QB U1
 
What is the difference between struts 1 vs struts 2
What is the difference between struts 1 vs struts 2What is the difference between struts 1 vs struts 2
What is the difference between struts 1 vs struts 2
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
 
Oleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoC
 
Java Persistence API
Java Persistence APIJava Persistence API
Java Persistence API
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring Data
 
Introduction to Struts 2
Introduction to Struts 2Introduction to Struts 2
Introduction to Struts 2
 
Code to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern ApplicationsCode to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern Applications
 
Spring 3 to 4
Spring 3 to 4Spring 3 to 4
Spring 3 to 4
 

Similar to MVM - It's all in the (Implementation) Details

Data binding в массы!
Data binding в массы!Data binding в массы!
Data binding в массы!Artjoker
 
"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил АнохинFwdays
 
Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"Fwdays
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT TalkConstantine Mars
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureC.T.Co
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsHassan Abid
 
JSUG - Google Guice by Jan Zarnikov
JSUG - Google Guice by Jan ZarnikovJSUG - Google Guice by Jan Zarnikov
JSUG - Google Guice by Jan ZarnikovChristoph Pickl
 
Skroutz Android MVP and Adapter Delegates presentation
Skroutz Android MVP and Adapter Delegates  presentationSkroutz Android MVP and Adapter Delegates  presentation
Skroutz Android MVP and Adapter Delegates presentationgmetal
 
CDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptorCDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptorCaelum
 
Binding business data to vaadin components
Binding business data to vaadin componentsBinding business data to vaadin components
Binding business data to vaadin componentsPeter Lehto
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data BindingEric Maxwell
 
Android Architecture Components
Android Architecture ComponentsAndroid Architecture Components
Android Architecture ComponentsBurhanuddinRashid
 
Building impressive layout systems with vaadin
Building impressive layout systems with vaadinBuilding impressive layout systems with vaadin
Building impressive layout systems with vaadinPeter Lehto
 
Presentation Android Architecture Components
Presentation Android Architecture ComponentsPresentation Android Architecture Components
Presentation Android Architecture ComponentsAttract Group
 
MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.
MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.
MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.UA Mobile
 
Storage Plug-ins
Storage Plug-ins Storage Plug-ins
Storage Plug-ins buildacloud
 
CloudStack Meetup Santa Clara
CloudStack Meetup Santa Clara CloudStack Meetup Santa Clara
CloudStack Meetup Santa Clara NetApp
 
The Best Way to Become an Android Developer Expert with Android Jetpack
The Best Way to Become an Android Developer Expert  with Android JetpackThe Best Way to Become an Android Developer Expert  with Android Jetpack
The Best Way to Become an Android Developer Expert with Android JetpackAhmad Arif Faizin
 

Similar to MVM - It's all in the (Implementation) Details (20)

Data binding в массы!
Data binding в массы!Data binding в массы!
Data binding в массы!
 
"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин
 
Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT Talk
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture Components
 
JSUG - Google Guice by Jan Zarnikov
JSUG - Google Guice by Jan ZarnikovJSUG - Google Guice by Jan Zarnikov
JSUG - Google Guice by Jan Zarnikov
 
Skroutz Android MVP and Adapter Delegates presentation
Skroutz Android MVP and Adapter Delegates  presentationSkroutz Android MVP and Adapter Delegates  presentation
Skroutz Android MVP and Adapter Delegates presentation
 
CDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptorCDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptor
 
Binding business data to vaadin components
Binding business data to vaadin componentsBinding business data to vaadin components
Binding business data to vaadin components
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
 
Android Architecture Components
Android Architecture ComponentsAndroid Architecture Components
Android Architecture Components
 
Building impressive layout systems with vaadin
Building impressive layout systems with vaadinBuilding impressive layout systems with vaadin
Building impressive layout systems with vaadin
 
Presentation Android Architecture Components
Presentation Android Architecture ComponentsPresentation Android Architecture Components
Presentation Android Architecture Components
 
MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.
MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.
MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.
 
Storage Plug-ins
Storage Plug-ins Storage Plug-ins
Storage Plug-ins
 
CloudStack Meetup Santa Clara
CloudStack Meetup Santa Clara CloudStack Meetup Santa Clara
CloudStack Meetup Santa Clara
 
Android development
Android developmentAndroid development
Android development
 
The Best Way to Become an Android Developer Expert with Android Jetpack
The Best Way to Become an Android Developer Expert  with Android JetpackThe Best Way to Become an Android Developer Expert  with Android Jetpack
The Best Way to Become an Android Developer Expert with Android Jetpack
 

More from Florina Muntenescu

Tech Talks: You Do Have Something To Say! Why and How To Start
Tech Talks: You Do Have Something To Say! Why and How To Start Tech Talks: You Do Have Something To Say! Why and How To Start
Tech Talks: You Do Have Something To Say! Why and How To Start Florina Muntenescu
 
Optimising The Performance Of VectorDrawables
Optimising The Performance Of VectorDrawablesOptimising The Performance Of VectorDrawables
Optimising The Performance Of VectorDrawablesFlorina Muntenescu
 
A Journey Through MV Wonderland
A Journey Through MV WonderlandA Journey Through MV Wonderland
A Journey Through MV WonderlandFlorina Muntenescu
 
Model-View-ViewModel and RxJava
Model-View-ViewModel and RxJavaModel-View-ViewModel and RxJava
Model-View-ViewModel and RxJavaFlorina Muntenescu
 
MVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mixMVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mixFlorina Muntenescu
 

More from Florina Muntenescu (8)

Tech Talks: You Do Have Something To Say! Why and How To Start
Tech Talks: You Do Have Something To Say! Why and How To Start Tech Talks: You Do Have Something To Say! Why and How To Start
Tech Talks: You Do Have Something To Say! Why and How To Start
 
Code Learn Share
Code Learn ShareCode Learn Share
Code Learn Share
 
Optimising The Performance Of VectorDrawables
Optimising The Performance Of VectorDrawablesOptimising The Performance Of VectorDrawables
Optimising The Performance Of VectorDrawables
 
Building a reactive mindset
Building a reactive mindsetBuilding a reactive mindset
Building a reactive mindset
 
A Journey Through MV Wonderland
A Journey Through MV WonderlandA Journey Through MV Wonderland
A Journey Through MV Wonderland
 
The ABCs of RxJava
The ABCs of RxJavaThe ABCs of RxJava
The ABCs of RxJava
 
Model-View-ViewModel and RxJava
Model-View-ViewModel and RxJavaModel-View-ViewModel and RxJava
Model-View-ViewModel and RxJava
 
MVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mixMVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mix
 

Recently uploaded

Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 

Recently uploaded (20)

Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 

MVM - It's all in the (Implementation) Details