SlideShare ist ein Scribd-Unternehmen logo
1 von 81
Downloaden Sie, um offline zu lesen
•Moderne App-Architektur mit
Dagger2 und RxJava
•
code.talks 2015
Martin Breuer
http://www.gedankensuppe.de/hamburg
Dominik Helleberg
+DominikHelleberg
Mobile  Application  Development
Tools
Android  /  Embedded
Angelo Rüggeberg
+AngeloRüggeberg
Google  Developer  Group,  Munich |  Lead
Mobile  Application  Development
Android  Enthusiast
Since  Cupcake  (Version  1.5)  
Why?
App  Architektur
App  Architektur
App  Architektur
Themen
• Dependency Injection
• MV(i)P
• RxJava
Dependency Injection
• Your class get’s what it needs (Dependenciescome
to you)
• You have no idea where they come from
• A well known pattern
• Everyone uses it (more or less)
App  Architektur
Dependency Injection
Dependency Injection
• It’s common sense on the server side
• There are already frameworks out there:
–Spring DI
–Google Guice
–Pico Container
–...
App  Architektur
Dependency Injection
Dependency Injection - Android
Now what about android?
• Mobile (limited ressources)
• App Startup time does really matter
• Reflection is slow
• App Size + method count does really matter
App  Architektur
Dependency Injection
Dagger 2
Why another Framework?
• no reflection at all
• Based on Dagger1
• Proposed + Implemented by the Java Core Team (Google)
• Code generation (As if you would write it)
App  Architektur
Dependency Injection
Dagger 2 - Basics
@Modules / @Provides
• Provide Dependenciesto
@Inject
• Requests for Dependencies
@Components
• Public API, the Bridge between Modules and Injects
and some more...
App  Architektur
Dependency Injection
Dagger2
TwitterTimeline
(interface)
TwitterTimeline RestAdapter
MockTwitter
Timeline
HTTPClient
App  Architektur
Dependency Injection
Dagger2
TwitterTimeline
RestAdapter
MockTwitter
Timeline
MockNetworkModule
NetworkModule
ApplicationComponent
Mock
ApplicationComponent
App  Architektur
Dependency Injection
@Singleton
@Component
(modules =  {ApplicationModule.class,   NetworkingModule.class})
public interface ApplicationComponent {
MVPComponent plus();;
}
App  Architektur
Dependency Injection
@Module
public class NetworkingModule {
@Provides
@Singleton
TwitterTimeline provideTwitterTimeline(RestAdapter restAdapter)  {
return restAdapter.create(TwitterTimeline.class);;
}
@Provides
@Singleton
public RestAdapter provideRestAdapter(SigningOkClient client)  {
return TwitterApiAdapter.getInstance(client);;
}
App  Architektur
Dependency Injection
@Inject
TwitterTimeline  timeline;;
App  Architektur
Dependency Injection
@Module
public  class  MockNetworkingModule   extends  NetworkingModule   {
@Provides
@Singleton
TwitterTimeline  provideTwitterTimeline()   {
return  new  MockTwitterTimeline();;
}
}
App  Architektur
Dependency Injection
Dagger2
• DI is a good thing to have
• steep learning curve
• Sometimes hard to get hold on component
references
• Still under active development
• Enforces structured code
• Code generation is a good thing
App  Architektur
Dependency Injection
Model View Presenter (MViP)
• Seperate Business Logic, Application Logic, Display
Logic
• Change independent parts without Issues
• Easier to Test
–Mock Network Modules etc.
App  Architektur
MViP
MViP: Components
• Model
–Data that is represented
–for example Tweets
• View
–The View Displaying the Data
–can be Activity, Fragment, CustomView
• Presenter
–Logic
–for example fetching Tweets from Network
App  Architektur
MViP
MVP: Components
https://blog.8thlight.com/uncle-­bob/2012/08/13/the-­clean-­architecture.html
App  Architektur
MViP
Example
App  Architektur
MViP
App  Architektur
MViP
Activity
fetchFeed()
updateFeed(List  Feed)
updateListitem(item)
onTextChanged()
MViP: Model
• The Data that is displayed to the User
• Data used to do Interactions with the Presenter
• Can be the same as the Models for Network
Requests
–Retrofit
App  Architektur
MViP
public  class  Tweet  {    
@JsonProperty("created_at")
private  String  DateCreated;;
@JsonProperty("id")
private  long  Id;;
@JsonProperty("text")
private  String  Text;;
@JsonProperty("user")
private  TwitterUser  User;;
}
App  Architektur
MViP -­‐ Model
• Interface
• Actual Display Unit Implements Interface
–Fragment, Activity, Custom View, whatever…
• Views should be dumb!
–Only react to Actions
• No Business Logic in here
MVP: View
App  Architektur
MViP
public  interface  TwitterTimelineView  {
void  showLoading();;
void  hideLoading();;
void  showFeed(List<Tweet>  messages);;
void  showError(String  errorMessage);;
}
App  Architektur
MViP -­‐ View
class HashtagFeedActivity extends BaseActivity implements
TwitterTimelineView {
@Override
public void showLoading()           {  … }
@Override
public void hideLoading()   {  … }
@Override
public void showFeed(List<Tweet>  messages)  {  … }
@Override
public void showError(String  errorMessage)  {  …  }
App  Architektur
MViP -­‐ View
class HashtagFeedActivity extends BaseActivity implements
TwitterTimelineView {
@Override
public void showLoading()           {  …  }
@Override
public void hideLoading()   {  …  }
@Override
public void showFeed(List<Tweet>  messages)  {  …  }
@Override
public void showError(String  errorMessage)  {  …  }
App  Architektur
MViP -­‐ View
class HashtagFeedActivity extends BaseActivity implements
TwitterTimelineView {
@Override
public void showLoading()           {  … }
@Override
public void hideLoading()   {  … }
@Override
public void showFeed(List<Tweet>  messages)  {  … }
@Override
public void showError(String  errorMessage)  {  …  }
App  Architektur
MViP -­‐ View
Presenter
• Interface
• Binds to the View
• Business Logic in here
App  Architektur
MViP
public  interface  Presenter<T>  {
void  onDestroy();;
void  bindView(T  view);;
void  unbindView();;
}
App  Architektur
MViP -­‐ Presenter
public interface TwitterHashtagTimelinePresenter
extends Presenter<TwitterTimelineView>{
void bindSearchView(EditText textView);;
void loadHashtagTimeline(String   hashtag);;
void goToDetails(Activity context,  Tweet  t);;
}
App  Architektur
MViP -­‐ Presenter
public interface TwitterHashtagTimelinePresenter
extends Presenter<TwitterTimelineView>{
void bindSearchView(EditText textView);;
void loadHashtagTimeline(String   hashtag);;
void goToDetails(Activity context,  Tweet  t);;
}
App  Architektur
MViP -­‐ Presenter
public class TwitterHashtagTimelinePresenterImpl
implements TwitterHashtagTimelinePresenter {
private  TwitterTimelineView view;;
@Override
public void bindView(TwitterTimelineView view)  {
this.view =  view;;
}
@Override
public void loadHashtagTimeline(String   hashtag)  {
…  Do  Network  Request  ...
}
App  Architektur
MViP -­‐ Presenter
public class TwitterHashtagTimelinePresenterImpl
implements TwitterHashtagTimelinePresenter {
private  TwitterTimelineView view;;
@Override
public void bindView(TwitterTimelineView view)  {
this.view =  view;;
}
@Override
public void loadHashtagTimeline(String   hashtag)  {
…  Do  Network  Request  ...
}
App  Architektur
MViP -­‐ Presenter
public class TwitterHashtagTimelinePresenterImpl
implements TwitterHashtagTimelinePresenter {
private  TwitterTimelineView view;;
@Override
public void bindView(TwitterTimelineView view)  {
this.view =  view;;
}
@Override
public void loadHashtagTimeline(String   hashtag)  {
…  Do  Network  Request  ...
}
App  Architektur
MViP -­‐ Presenter
public class TwitterHashtagTimelinePresenterImpl
implements TwitterHashtagTimelinePresenter {
private  TwitterTimelineView view;;
@Override
public void bindView(TwitterTimelineView view)  {
this.view =  view;;
}
@Override
public void loadHashtagTimeline(String   hashtag)  {
…  Do  Network  Request  ...
}
App  Architektur
MViP -­‐ Presenter
@Override
public  void  loadHashtagTimeline(String   hashtag)  {
view.showLoading();;
List<Tweet>  tweets  =  interactor.loadHashtagTweets(hashtag);;
view.showTweets(tweets);;
view.hideLoading();;
}
App  Architektur
MViP -­‐ Presenter
@Override
public  void  loadHashtagTimeline(String   hashtag)  {
view.showLoading();;
List<Tweet>  tweets  =  interactor.loadHashtagTweets(hashtag);;
view.showTweets(tweets);;
view.hideLoading();;
}
App  Architektur
MViP -­‐ Presenter
@Override
public  void  loadHashtagTimeline(String   hashtag)  {
view.showLoading();;
List<Tweet>  tweets  =  interactor.loadHashtagTweets(hashtag);;
view.showTweets(tweets);;
view.hideLoading();;
}
App  Architektur
MViP -­‐ Presenter
Interactor?
• Do not bloat up Presenters!
• Interactors are used for doing things
–Fetching Stuff from the network
–Fetching Stuff from Disk
• Interface again!
App  Architektur
MViP -­‐ interactor
public interface TwitterTimelineInteractor {
void loadUserTweets(Observer<?  super  List<Tweet>>  
observer,  String  username);;
void loadHashtagTweets(Observer<?   super  List<Tweet>>  
observer,  String  hastag);;
Observable<List<Tweet>>  loadHashtagTweets(String  
hashtag);;
void pollHashtagTweets(Observer<?   super  List<Tweet>>  
observer,  String  hashtag);;
}
App  Architektur
MViP -­‐ interactor
public class TwitterTimelineInteractorImpl
implements TwitterTimelineInteractor {
TwitterTimeline twitterTimeline;;
@Override
public void loadUserTweets(Observer<?   super  List<Tweet>>  
observer,  String  username)  {
twitterTimeline
.getUserTimeline(username)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);;
}
App  Architektur
MViP -­‐ interactor
App  Architektur
Summary
Activity
textChangeObservable
Presenter
bindView()
Adapter
showFeed()
setTweets()
loadHashtagTimelineFeed
showFeed()
Interactor
loadHashtagTimeline
Why?
• Push don’t Poll!
–do not stress the UI
–do not stress the Application
• Avoid Lifecycle Problems
• Avoid the Callback Hell
• Death to:
–Boilerplate Code
–AsyncTasks, Timertasks, Loaders, etc...
App  Architektur
RXJava
RX: What?
• Programming Paradigm based on asynchronous
Data Flow
• Idea from the late 90s
• Erik Meijer (Microsoft) developed first RX extension
for .NET
• Adapted by many Programming languages
App  Architektur
RXJava
RX: What?
• Ported to JVM by Ben Christensen and Jafar Husain
(Netflix)
–Java, Closure, Groovy, Scala, etc etc….
• RXJava -> RXAndroid
• The Observer pattern done right.
App  Architektur
RXJava
http://reactivex.io/
RX: What?
App  Architektur
RXJava
RXAndroid: How?
• Producing Entities:
–Observables
–Subjects
• Consuming Entities:
–Observers
–Subscribers
• Consuming Entities subscribe to Producing Entities
App  Architektur
RXJava
RXAndroid: Setup
compile 'io.reactivex:rxandroid:1.0.1'
//optional
compile 'io.reactivex:rxjava:1.0.14'
App  Architektur
RXJava
Observers
Lifecycle:
–onNext(T):
• gets called when new Data is emited with the
Data
–onCompleted():
• gets called when the Sequence is done
–onError(Throwable):
• gets called when an Error occured
App  Architektur
RXJava
Observables
• Sequence that emits data
–can emit more than once
• Lives as long as there is work to do
• Observers subscribe to an Observable
• When there is no Subscriber, the Observable emits
the data nowhere
App  Architektur
RXJava
Sequence Example
Observable
Emits  Something  every  Second
App  Architektur
RXJava
Sequence Example
Observable
Observer
Subscribe Unsubscribe
onNext(T);;
App  Architektur
RXJava
Observable<Long>  interval  =  Observable
.interval(1,  TimeUnit.SECONDS);;
App  Architektur
RXJava
interval.subscribe(new Observer<Long>()  {
@Override
public void onCompleted()  {
Timber.d("onCompleted");;
}
@Override
public void onError(Throwable e)  {
Timber.e(e,  e.getMessage());;
}
@Override
public void onNext(Long  aLong)  {
Timber.d("Tick:  "  +  aLong.toString());;
App  Architektur
RXJava
Transforming the Data
• We do not want a Long as result, we want a String
• map()
–gets the Long value
–returns a String value
• Chainable!
–map().map().map().map().............map()
App  Architektur
RXJava
Observable<String>  interval  =  Observable
.interval(1,  TimeUnit.SECONDS)
.map(new  Func1<Long,  String>()  {
@Override
public  String  call(Long  aLong)  {
return  "Tick:  "  +  aLong.toString();;
}
});;
App  Architektur
RXJava
Observable<String>  interval  =  Observable
.interval(1,  TimeUnit.SECONDS)
.map(new  Func1<Long,  String>()  {
@Override
public  String  call(Long  aLong)  {
return  "Tick:  "  +  aLong.toString();;
}
});;
App  Architektur
RXJava
Observable<String>  interval  =  Observable
.interval(1,  TimeUnit.SECONDS)
.map(new  Func1<Long,  String>()  {
@Override
public  String  call(Long  aLong)  {
return  "Tick:  "  +  aLong.toString();;
}
});;
Returns Long
App  Architektur
RXJava
Observable<String>  interval  =  Observable
.interval(1,  TimeUnit.SECONDS)
.map(new  Func1<Long,  String>()  {
@Override
public  String  call(Long  aLong)  {
return  "Tick:  "  +  aLong.toString();;
}
});;
Takes the Long
Transforms the Data
and returns a String
App  Architektur
RXJava
Hello Again Boilerplatecode
• new Func1<T, T>() { public T call(t t2) { … } for every
mapping will turn the code really unreadable and
bloated
• Lambda to the Rescue!
–retrolambda for android & gradle
–https://github.com/evant/gradle-retrolambda
App  Architektur
RXJava
Observable<String>  interval  =  Observable
.interval(1,  TimeUnit.SECONDS)
.map(new  Func1<Long,  String>()  {
@Override
public  String  call(Long  aLong)  {
return  "Tick:  "  +  aLong.toString();;
}
});;
App  Architektur
RXJava
Observable<String>  interval  =  Observable
.interval(1,  TimeUnit.SECONDS)
.map(aLong  -­>  "Tick:  "  +  aLong.toString());;
App  Architektur
RXJava
Observable<String>  interval  =  Observable
.interval(1,  TimeUnit.SECONDS)
.map(aLong  -­>  aLong.toString())
.map(string  -­>  "Tick:  "  +  string);;
App  Architektur
RXJava
Combining Observables
• Prevent Callback hell
• Easy to Synchronize for async Operations
• Running 2 Network Calls and combine the
Results
• Combine onTextChanged events from two fields
• etc.
• .zip(), combineLatest()
App  Architektur
RXJava
Observable.combineLatest(
WidgetObservable.text(txt1,  false),  
WidgetObservable.text(txt2,  false),
(event1,  event2)  -­>  event1.text().toString()  +  
event2.text().toString()
).subscribe(combined  -­>  {
Timber.d(combined);;
});;
App  Architektur
RXJava
Observable.combineLatest(
WidgetObservable.text(txt1,  false),  
WidgetObservable.text(txt2,  false),
(event1,  event2)  -­>  event1.text().toString()  +  
event2.text().toString()
).subscribe(combined  -­>  {
Timber.d(combined);;
});;
App  Architektur
RXJava
Observable.combineLatest(
WidgetObservable.text(txt1,  false),  
WidgetObservable.text(txt2,  false),
(event1,  event2)  -­>  event1.text().toString()  +  
event2.text().toString()
).subscribe(combined  -­>  {
Timber.d(combined);;
});;
App  Architektur
RXJava
Observable.combineLatest(
WidgetObservable.text(txt1,  false),  
WidgetObservable.text(txt2,  false),
(event1,  event2)  -­>  event1.text().toString()  +  
event2.text().toString()
).subscribe(combined  -­>  {
Timber.d(combined);;
});;
App  Architektur
RXJava
Observable.combineLatest(
WidgetObservable.text(txt1,  false),  
WidgetObservable.text(txt2,  false),
(event1,  event2)  -­>  event1.text().toString()  +  
event2.text().toString()
).subscribe(combined  -­>  {
Timber.d(combined);;
});;
App  Architektur
RXJava
Example: Livesearch
• Retrieve the user Input from a EditText when text
changes
–only after nothing changes for 600 ms
• Add # infront of the input to do a hastag search
• Call the network (via Retrofit)
–returns StatusesResponse Object
• Transform to List<Tweets>
• Show Tweets in view
App  Architektur
RXJava
textChangeObservable
.observeOn(AndroidSchedulers.mainThread())
textChangeObservable
.observeOn(AndroidSchedulers.mainThread())
.map(onTextChangeEvent -­>  onTextChangeEvent.text().toString())
textChangeObservable
.observeOn(AndroidSchedulers.mainThread())
.map(onTextChangeEvent -­>  onTextChangeEvent.text().toString())
.map(searchText -­>  "#"  +  searchText)
textChangeObservable
.observeOn(AndroidSchedulers.mainThread())
.map(onTextChangeEvent -­>  onTextChangeEvent.text().toString())
.map(searchText -­>  "#"  +  searchText)
.subscribe(
tag  -­>  {
Timber.d(tag);;
loadHashtagTimeline(tag);;
}
textChangeObservable
.observeOn(AndroidSchedulers.mainThread())
.map(onTextChangeEvent -­>  onTextChangeEvent.text().toString())
.map(searchText -­>  "#"  +  searchText)
.subscribe(
tag  -­>  {
Timber.d(tag);;
loadHashtagTimeline(tag);;
},
e -­>  {
Timber.e(e,  e.getMessage());;
view.showError(e.getMessage());;
}  );;
textChangeObservable
.debounce(600,  TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.map(onTextChangeEvent -­>  onTextChangeEvent.text().toString())
.map(searchText -­>  "#"  +  searchText)
.subscribe(
tag  -­>  {
Timber.d(tag);;
loadHashtagTimeline(tag);;
},
e -­>  {
Timber.e(e,  e.getMessage());;
view.showError(e.getMessage());;
}  );;
Demo
Thank You!

Weitere ähnliche Inhalte

Was ist angesagt?

Android Modularization
Android ModularizationAndroid Modularization
Android ModularizationYoung-Hyuk Yoo
 
Oleksandr Valetskyy - Become a .NET dependency injection ninja with Ninject
Oleksandr Valetskyy - Become a .NET dependency injection ninja with NinjectOleksandr Valetskyy - Become a .NET dependency injection ninja with Ninject
Oleksandr Valetskyy - Become a .NET dependency injection ninja with NinjectOleksandr Valetskyy
 
Unit Testing Android Applications
Unit Testing Android ApplicationsUnit Testing Android Applications
Unit Testing Android ApplicationsRody Middelkoop
 
Inside Android Testing
Inside Android TestingInside Android Testing
Inside Android TestingFernando Cejas
 
Dicoding Developer Coaching #13: Android | Melakukan Testing secara Otomatis ...
Dicoding Developer Coaching #13: Android | Melakukan Testing secara Otomatis ...Dicoding Developer Coaching #13: Android | Melakukan Testing secara Otomatis ...
Dicoding Developer Coaching #13: Android | Melakukan Testing secara Otomatis ...DicodingEvent
 
An Introduction to Dependency Inversion Principle
An Introduction to Dependency Inversion PrincipleAn Introduction to Dependency Inversion Principle
An Introduction to Dependency Inversion PrincipleDunith Dhanushka
 
DeNA Technology Seminar #3 - OpenSocial and JavaScript
DeNA Technology Seminar #3 - OpenSocial and JavaScriptDeNA Technology Seminar #3 - OpenSocial and JavaScript
DeNA Technology Seminar #3 - OpenSocial and JavaScriptNaosuke Yokoe
 
Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...
Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...
Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...DicodingEvent
 
MobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android AppsMobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android AppsRon Munitz
 
Seeding a Tree in a Gherkin
Seeding a Tree in a GherkinSeeding a Tree in a Gherkin
Seeding a Tree in a GherkinPaul Rohorzka
 
Android Testing: An Overview
Android Testing: An OverviewAndroid Testing: An Overview
Android Testing: An OverviewSmartLogic
 
Barcode scanning on Android
Barcode scanning on AndroidBarcode scanning on Android
Barcode scanning on AndroidPietro F. Maggi
 
Clean architecture on android
Clean architecture on androidClean architecture on android
Clean architecture on androidBenjamin Cheng
 
Static Analysis For Security and DevOps Happiness w/ Justin Collins
Static Analysis For Security and DevOps Happiness w/ Justin CollinsStatic Analysis For Security and DevOps Happiness w/ Justin Collins
Static Analysis For Security and DevOps Happiness w/ Justin CollinsSonatype
 

Was ist angesagt? (20)

Android Modularization
Android ModularizationAndroid Modularization
Android Modularization
 
Oleksandr Valetskyy - Become a .NET dependency injection ninja with Ninject
Oleksandr Valetskyy - Become a .NET dependency injection ninja with NinjectOleksandr Valetskyy - Become a .NET dependency injection ninja with Ninject
Oleksandr Valetskyy - Become a .NET dependency injection ninja with Ninject
 
Unit Testing Android Applications
Unit Testing Android ApplicationsUnit Testing Android Applications
Unit Testing Android Applications
 
Inside Android Testing
Inside Android TestingInside Android Testing
Inside Android Testing
 
Dicoding Developer Coaching #13: Android | Melakukan Testing secara Otomatis ...
Dicoding Developer Coaching #13: Android | Melakukan Testing secara Otomatis ...Dicoding Developer Coaching #13: Android | Melakukan Testing secara Otomatis ...
Dicoding Developer Coaching #13: Android | Melakukan Testing secara Otomatis ...
 
An Introduction to Dependency Inversion Principle
An Introduction to Dependency Inversion PrincipleAn Introduction to Dependency Inversion Principle
An Introduction to Dependency Inversion Principle
 
Ci/CD Android
Ci/CD AndroidCi/CD Android
Ci/CD Android
 
DeNA Technology Seminar #3 - OpenSocial and JavaScript
DeNA Technology Seminar #3 - OpenSocial and JavaScriptDeNA Technology Seminar #3 - OpenSocial and JavaScript
DeNA Technology Seminar #3 - OpenSocial and JavaScript
 
Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...
Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...
Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...
 
MobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android AppsMobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android Apps
 
Seeding a Tree in a Gherkin
Seeding a Tree in a GherkinSeeding a Tree in a Gherkin
Seeding a Tree in a Gherkin
 
Dependency Inversion Principle
Dependency Inversion PrincipleDependency Inversion Principle
Dependency Inversion Principle
 
Android Testing: An Overview
Android Testing: An OverviewAndroid Testing: An Overview
Android Testing: An Overview
 
The path to cdi 2.0
The path to cdi 2.0The path to cdi 2.0
The path to cdi 2.0
 
Barcode scanning on Android
Barcode scanning on AndroidBarcode scanning on Android
Barcode scanning on Android
 
Clean architecture on android
Clean architecture on androidClean architecture on android
Clean architecture on android
 
Static Analysis For Security and DevOps Happiness w/ Justin Collins
Static Analysis For Security and DevOps Happiness w/ Justin CollinsStatic Analysis For Security and DevOps Happiness w/ Justin Collins
Static Analysis For Security and DevOps Happiness w/ Justin Collins
 
Micro Frontends
Micro FrontendsMicro Frontends
Micro Frontends
 
Django
DjangoDjango
Django
 
Adopt a JSR: CDI 2.0 at Devoxx UK
Adopt a JSR: CDI 2.0 at Devoxx UKAdopt a JSR: CDI 2.0 at Devoxx UK
Adopt a JSR: CDI 2.0 at Devoxx UK
 

Andere mochten auch

Android talks #08 dagger2
Android talks #08   dagger2Android talks #08   dagger2
Android talks #08 dagger2Infinum
 
Dagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency InjectionsDagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency InjectionsGlobalLogic Ukraine
 
Android Meetup Slovenija #3 - Testing with Robolectric by Ivan Kust
Android Meetup Slovenija #3 - Testing with Robolectric by Ivan KustAndroid Meetup Slovenija #3 - Testing with Robolectric by Ivan Kust
Android Meetup Slovenija #3 - Testing with Robolectric by Ivan KustInfinum
 
Dagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionDagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionStfalcon Meetups
 
Testable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVMTestable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVMFabio Collini
 
Android with dagger_2
Android with dagger_2Android with dagger_2
Android with dagger_2Kros Huang
 

Andere mochten auch (7)

Android talks #08 dagger2
Android talks #08   dagger2Android talks #08   dagger2
Android talks #08 dagger2
 
Dagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency InjectionsDagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency Injections
 
Android Meetup Slovenija #3 - Testing with Robolectric by Ivan Kust
Android Meetup Slovenija #3 - Testing with Robolectric by Ivan KustAndroid Meetup Slovenija #3 - Testing with Robolectric by Ivan Kust
Android Meetup Slovenija #3 - Testing with Robolectric by Ivan Kust
 
Dagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionDagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency Injection
 
Testable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVMTestable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVM
 
Android with dagger_2
Android with dagger_2Android with dagger_2
Android with dagger_2
 
Building maintainable app
Building maintainable appBuilding maintainable app
Building maintainable app
 

Ähnlich wie Moderne App-Architektur mit Dagger2 und RxJava

Play Support in Cloud Foundry
Play Support in Cloud FoundryPlay Support in Cloud Foundry
Play Support in Cloud Foundryrajdeep
 
Spring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsugSpring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsugToshiaki Maki
 
Real World Asp.Net WebApi Applications
Real World Asp.Net WebApi ApplicationsReal World Asp.Net WebApi Applications
Real World Asp.Net WebApi ApplicationsEffie Arditi
 
To Microservices and Beyond
To Microservices and BeyondTo Microservices and Beyond
To Microservices and BeyondMatt Stine
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyMark Proctor
 
Spring boot
Spring bootSpring boot
Spring bootsdeeg
 
Wordcamp Toronto Presentation
Wordcamp Toronto PresentationWordcamp Toronto Presentation
Wordcamp Toronto PresentationRoy Sivan
 
AngularJS for Web and Mobile
 AngularJS for Web and Mobile AngularJS for Web and Mobile
AngularJS for Web and MobileRocket Software
 
2011 - DNC: REST Wars
2011 - DNC: REST Wars2011 - DNC: REST Wars
2011 - DNC: REST WarsDaniel Fisher
 
Swift at IBM: Mobile, open source and the drive to the cloud
Swift at IBM: Mobile, open source and the drive to the cloudSwift at IBM: Mobile, open source and the drive to the cloud
Swift at IBM: Mobile, open source and the drive to the cloudDev_Events
 
Eclipse 40 - Eclipse Summit Europe 2010
Eclipse 40 - Eclipse Summit Europe 2010Eclipse 40 - Eclipse Summit Europe 2010
Eclipse 40 - Eclipse Summit Europe 2010Lars Vogel
 
Onion Architecture with S#arp
Onion Architecture with S#arpOnion Architecture with S#arp
Onion Architecture with S#arpGary Pedretti
 
Re-architecting the designer-developer workflow
Re-architecting the designer-developer workflowRe-architecting the designer-developer workflow
Re-architecting the designer-developer workflowRichard Lord
 
Clean Architecture on Android
Clean Architecture on AndroidClean Architecture on Android
Clean Architecture on AndroidTianming Xu
 
Developing maintainable Cordova applications
Developing maintainable Cordova applicationsDeveloping maintainable Cordova applications
Developing maintainable Cordova applicationsIvano Malavolta
 
A tour through Swift attributes
A tour through Swift attributesA tour through Swift attributes
A tour through Swift attributesMarco Eidinger
 
Micro front ends
Micro front endsMicro front ends
Micro front endsWaqasAli383
 
Enabling .NET Apps with Monitoring and Management Using Steeltoe
Enabling .NET Apps with Monitoring and Management Using SteeltoeEnabling .NET Apps with Monitoring and Management Using Steeltoe
Enabling .NET Apps with Monitoring and Management Using SteeltoeVMware Tanzu
 

Ähnlich wie Moderne App-Architektur mit Dagger2 und RxJava (20)

Play Support in Cloud Foundry
Play Support in Cloud FoundryPlay Support in Cloud Foundry
Play Support in Cloud Foundry
 
Spring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsugSpring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsug
 
Real World Asp.Net WebApi Applications
Real World Asp.Net WebApi ApplicationsReal World Asp.Net WebApi Applications
Real World Asp.Net WebApi Applications
 
To Microservices and Beyond
To Microservices and BeyondTo Microservices and Beyond
To Microservices and Beyond
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
 
Spring boot
Spring bootSpring boot
Spring boot
 
Wordcamp Toronto Presentation
Wordcamp Toronto PresentationWordcamp Toronto Presentation
Wordcamp Toronto Presentation
 
AngularJS for Web and Mobile
 AngularJS for Web and Mobile AngularJS for Web and Mobile
AngularJS for Web and Mobile
 
2011 - DNC: REST Wars
2011 - DNC: REST Wars2011 - DNC: REST Wars
2011 - DNC: REST Wars
 
Swift at IBM: Mobile, open source and the drive to the cloud
Swift at IBM: Mobile, open source and the drive to the cloudSwift at IBM: Mobile, open source and the drive to the cloud
Swift at IBM: Mobile, open source and the drive to the cloud
 
Eclipse 40 - Eclipse Summit Europe 2010
Eclipse 40 - Eclipse Summit Europe 2010Eclipse 40 - Eclipse Summit Europe 2010
Eclipse 40 - Eclipse Summit Europe 2010
 
Onion Architecture with S#arp
Onion Architecture with S#arpOnion Architecture with S#arp
Onion Architecture with S#arp
 
Re-architecting the designer-developer workflow
Re-architecting the designer-developer workflowRe-architecting the designer-developer workflow
Re-architecting the designer-developer workflow
 
Clean Architecture on Android
Clean Architecture on AndroidClean Architecture on Android
Clean Architecture on Android
 
JAX 08 - Agile RCP
JAX 08 - Agile RCPJAX 08 - Agile RCP
JAX 08 - Agile RCP
 
Developing maintainable Cordova applications
Developing maintainable Cordova applicationsDeveloping maintainable Cordova applications
Developing maintainable Cordova applications
 
Diving Into Xamarin.Forms
Diving Into Xamarin.Forms Diving Into Xamarin.Forms
Diving Into Xamarin.Forms
 
A tour through Swift attributes
A tour through Swift attributesA tour through Swift attributes
A tour through Swift attributes
 
Micro front ends
Micro front endsMicro front ends
Micro front ends
 
Enabling .NET Apps with Monitoring and Management Using Steeltoe
Enabling .NET Apps with Monitoring and Management Using SteeltoeEnabling .NET Apps with Monitoring and Management Using Steeltoe
Enabling .NET Apps with Monitoring and Management Using Steeltoe
 

Mehr von inovex GmbH

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegeninovex GmbH
 
Are you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIAre you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIinovex GmbH
 
Why natural language is next step in the AI evolution
Why natural language is next step in the AI evolutionWhy natural language is next step in the AI evolution
Why natural language is next step in the AI evolutioninovex GmbH
 
Network Policies
Network PoliciesNetwork Policies
Network Policiesinovex GmbH
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learninginovex GmbH
 
Jenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen UmgebungenJenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen Umgebungeninovex GmbH
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeteninovex GmbH
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetesinovex GmbH
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systemsinovex GmbH
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreiheninovex GmbH
 
Talk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale AssistentenTalk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale Assistenteninovex GmbH
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?inovex GmbH
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Projectinovex GmbH
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretabilityinovex GmbH
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use caseinovex GmbH
 
People & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessPeople & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessinovex GmbH
 
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with PulumiInfrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with Pulumiinovex GmbH
 

Mehr von inovex GmbH (20)

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
 
Are you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIAre you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AI
 
Why natural language is next step in the AI evolution
Why natural language is next step in the AI evolutionWhy natural language is next step in the AI evolution
Why natural language is next step in the AI evolution
 
WWDC 2019 Recap
WWDC 2019 RecapWWDC 2019 Recap
WWDC 2019 Recap
 
Network Policies
Network PoliciesNetwork Policies
Network Policies
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learning
 
Jenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen UmgebungenJenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen Umgebungen
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeten
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetes
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systems
 
Azure IoT Edge
Azure IoT EdgeAzure IoT Edge
Azure IoT Edge
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreihen
 
Talk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale AssistentenTalk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale Assistenten
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?
 
Dev + Ops = Go
Dev + Ops = GoDev + Ops = Go
Dev + Ops = Go
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Project
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretability
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use case
 
People & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessPeople & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madness
 
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with PulumiInfrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
 

Kürzlich hochgeladen

Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedDelhi Call girls
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
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
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...Nitya salvi
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfayushiqss
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 

Kürzlich hochgeladen (20)

Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
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
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 

Moderne App-Architektur mit Dagger2 und RxJava