SlideShare a Scribd company logo
Architecture Components
Build your app right way and enjoy IT! :)
Constantine Mars
Team Lead, Senior Developer @ DataArt
#gdg_kharkiv_center
Android Has “Good Bones”
Components:
-Activities
-Fragments
-Services
-Content Providers
-Broadcast Receivers
#gdg_kharkiv_center
But… There are Everyday Problems to Solve
App-hopping
OS may kill app at random time
App components lifecycle is not under control
Components should not depend on each other
Can’t rely on data, stored in components
#gdg_kharkiv_center
Simply related to Activity Lifecycle
#gdg_kharkiv_center
Common Principles for staying in the mind :)
-Separation of concerns
-Provide solid user experience
-Keep UI lean and simple
-Keep UI free of app logic
-Drive UI from model
-Use persistent model
-Assign clear responsibilities for each model class
#gdg_kharkiv_center
Focus on Separation of Concerns...
image from fernandocejas.com
#gdg_kharkiv_center
Consider Clean Architecture approach...
image from fernandocejas.com
#gdg_kharkiv_center
Remember Good Architecture Goals...
-Modular app
-Each class responsible for one well-defined function
-Should be no god objects
-The app should be testable
#gdg_kharkiv_center
And Finally - Android Recommended Architecture
#gdg_kharkiv_center
Android Recommended Architecture. Another View
image from Guide to App Architecture
#gdg_kharkiv_center
Be together. not the same
#gdg_kharkiv_center
Be together. not the same
“It is impossible to have one way of writing apps that will be the best for every
scenario. That being said, this recommended architecture should be a good
starting point for most use cases. If you already have a good way of writing
Android apps, you don't need to change.”
Quote from Guide to App Architecture
Architecture Components
Building blocks
#gdg_kharkiv_center
Views = UI Controllers = LifecycleOwners
Purpose: Display data and pass on UI events
Neither contain the UI data, nor directly manipulate
data
Examples: Activity, Fragment
#gdg_kharkiv_center
LifecycleActivity, LifecycleFragment
After the lifecycles API in the Architecture Components
becomes stable, the Fragment class in the Android
Support Library will implement LifecycleOwner
#gdg_kharkiv_center
ViewModel
Data holder for Activity/Fragment
Survives configuration changes
NEVER references View / Activity / Fragment
#gdg_kharkiv_center
public class DetailActivityViewModel extends ViewModel {
private WeatherEntry mWeather;
public DetailActivityViewModel() {}
public WeatherEntry getWeather() { return mWeather; }
public void setWeather(WeatherEntry weatherEntry) { mWeather = weatherEntry; }
}
ViewModel
extend ViewModel
#gdg_kharkiv_center
ViewModel and Lifecycle
#gdg_kharkiv_center
public class DetailActivity extends LifecycleActivity {
DetailActivityViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
viewModel = ViewModelProviders.of(this).get(DetailActivityViewModel.class);
}
...
ViewModel and LifecycleOwner
Provider
#gdg_kharkiv_center
LiveData
Represent data needed for the UI to display
An observable data holder
Lifecycle aware
Automatic subscription management
#gdg_kharkiv_center
LiveData event propagation
#gdg_kharkiv_center
LiveData sample implementation
#gdg_kharkiv_center
public class DetailActivityViewModel extends ViewModel {
private MutableLiveData<WeatherEntry> mWeather;
public DetailActivityViewModel() {}
public MutableLiveData<WeatherEntry> getWeather() {
return mWeather;
}
public void setWeather(WeatherEntry weatherEntry) {
mWeather.postValue(weatherEntry);
}
}
Live Data
LiveData
#gdg_kharkiv_center
public class DetailActivity extends LifecycleActivity {
DetailActivityViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
viewModel = ViewModelProviders.of(this).get(DetailActivityViewModel.class);
viewModel.getWeather().observe(this, weatherEntry -> {
if(weatherEntry!=null) { bindWeatherToUI(weatherEntry); }
});
}
Live Data observing
Observe
#gdg_kharkiv_center
Repository
-Single source of truth
-ViewModels simply request
data from the repository
-Is a mediator between the
different data sources
image from fernandocejas.com
#gdg_kharkiv_center
Remote Network Data Source
Manages data from a remote
data source, such as the
internet
May use REST, Cloud
#gdg_kharkiv_center
Model
Manages local data stored in
the database
#gdg_kharkiv_center
Layered architecture pattern
Each class in the diagram only
stores a reference to the class
or classes directly "below it" and
not any classes above it
Room
ORooM :)
#gdg_kharkiv_center
Room?
#gdg_kharkiv_center
Room ORM purposes
-Less boilerplate compared to the built-in APIs
-Compile-time validation of SQL queries
-Data observation via LiveData, RxJava
#gdg_kharkiv_center
Room annotations
-@Entity
-@Dao
-@Database
#gdg_kharkiv_center
@Entity
#gdg_kharkiv_center
@Entity(tableName = "weather",
indices = {@Index(value = {"date"}, unique = true)})
public class WeatherEntry {
@PrimaryKey(autoGenerate = true)
private int id;
…
}
@Entity declaration
#gdg_kharkiv_center
//Room constructor
public WeatherEntry(int id, int weatherIconId, Date date, ...) {
//Json constructor - ignored by Room
@Ignore
public WeatherEntry(int weatherIconId, Date date,
// (!) Only one constructor should be exposed to Room
...
@Entity constructors
#gdg_kharkiv_center
@Dao
#gdg_kharkiv_center
@Dao
public interface WeatherDao {
@Query("SELECT * FROM weather") List<WeatherEntry> getAll();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(WeatherEntry... weatherEntries);
@Delete void delete(WeatherEntry weatherEntry);
}
@Dao declaration
#gdg_kharkiv_center
@Database
#gdg_kharkiv_center
@Database(entities = {WeatherEntry.class}, version = 1)
@TypeConverters(DateConverter.class)
public abstract class AppDatabase extends RoomDatabase {
public abstract WeatherDao weatherDao();
}
@Database declaration
#gdg_kharkiv_center
private static final String DATABASE_NAME = "weather";
private static final Object LOCK = new Object();
private static volatile AppDatabase sInstance;
public static AppDatabase getInstance(Context context) {
if (sInstance == null) { synchronized (LOCK) {
if (sInstance == null) {
sInstance = Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class, AppDatabase.DATABASE_NAME).build();
}
}}
return sInstance;
}
@Database - a singleton
#gdg_kharkiv_center
class DateConverter {
@TypeConverter
public static Date toDate(Long timestamp) {
return timestamp == null ? null : new Date(timestamp);
}
@TypeConverter
public static Long toTimestamp(Date date) {
return date == null ? null : date.getTime();
}
}
Type converters
#gdg_kharkiv_center
Alternatives
Repository
Single source of trust
#gdg_kharkiv_center
public class WeatherRepository {
public synchronized static WeatherRepository getInstance();
public synchronized void initializeData();
private void deleteOldData();
private boolean isFetchNeeded();
private void startFetchWeatherService();
}
Repository pattern
#gdg_kharkiv_center
mWeatherNetworkDataSource = weatherNetworkDataSource;
LiveData<WeatherEntry[]> networkData =
mWeatherNetworkDataSource.getCurrentWeatherForecasts();
networkData.observeForever(newForecastsFromNetwork -> {
mExecutors.diskIO().execute(() -> {
mWeatherDao.bulkInsert(newForecastsFromNetwork);
Log.d(LOG_TAG, "New values inserted");
});
});
Repository - fetch data from network
Get and observe
#gdg_kharkiv_center
private WeatherNetworkDataSource(Context context, AppExecutors executors)
{
mContext = context;
mExecutors = executors;
mDownloadedWeatherForecasts = new
MutableLiveData<WeatherEntry[]>();
}
Repository - use LiveData
LiveData
#gdg_kharkiv_center
private boolean isFetchNeeded() {
Date today = CustomDateUtils.getNormalizedUtcDateForToday();
int count = mWeatherDao.countAllFutureWeather(today);
return (count < WeatherNetworkDataSource.NUM_DAYS);
}
Check when to fetch
#gdg_kharkiv_center
public synchronized void initializeData() {
if (mInitialized) return;
mInitialized = true;
mExecutors.diskIO().execute(() -> {
if (isFetchNeeded()) {
startFetchWeatherService();
}
});
}
Check when to fetch
Check if fetch needed
#gdg_kharkiv_center
Display the data
#gdg_kharkiv_center
public class DetailActivity extends LifecycleActivity {
DetailActivityViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
viewModel = ViewModelProviders.of(this).get(DetailActivityViewModel.class);
viewModel.getWeather().observe(this, weatherEntry -> {
if(weatherEntry!=null) { bindWeatherToUI(weatherEntry); }
});
}
And again - observe LiveData
Testing
Sneak peek :)
#gdg_kharkiv_center
UI Controller - Instrumentation
#gdg_kharkiv_center
ViewModel - JUnit
#gdg_kharkiv_center
Repository - JUnit, MockWebServer
Latest updates
From Alpha to Beta
#gdg_kharkiv_center
September - October updates
October 5, 2017 - Beta 2
- improved LiveDataReactiveStreams,
- FullLifecycleObserver for Java 8,
- Handling @Query methods with @NonNull annotations,
- Still requires proguard settings to keep android.arch.lifecycle.GeneratedAdapter
1.0.0 Alpha 9-1
- Support Library 26.1.0, AppCompatActivity and Support Fragment now implement the
LifecycleOwner interface
- LifecycleActivity & LifecycleFragment are now deprecated
- New Library: Paging
#gdg_kharkiv_center
Paging Library
- DataSource,
- PagedList
- PagedListAdapter
- KeyedDataSource if you need to use data from item N-1 to load item N
- TiledDataSource
- LivePagedListProvider
#gdg_kharkiv_center
Paging Library - Annotations on DAO
@Query("select * from users WHERE age > :age order by name DESC, id ASC")
TiledDataSource<User> usersOlderThan(int age);
@Query("SELECT * from users order WHERE age > :age order by name DESC, id ASC")
public abstract LivePagedListProvider<Integer, User> usersOlderThan(int age);
#gdg_kharkiv_center
Paging Library - flow
Almost there...
Scalability
#gdg_kharkiv_center
Typical questions
What if...
I use RxJava?
I already have MVP?
I love Kotlin?
I’m working on legacy project?
#gdg_kharkiv_center
The Answer is...
#gdg_kharkiv_center
What to read :)
Guide to App Architecture https://developer.android.com/topic/libraries/architecture/guide.html
Architecture Components
https://developer.android.com/topic/libraries/architecture/index.html
I/O ‘17 Architecture Components Introduction - https://youtu.be/FrteWKKVyzI
Solving the Lifecycle Problem - https://youtu.be/bEKNi1JOrNs
Persistence and Offline - https://youtu.be/MfHsPGQ6bgE
Architecture Components on GDD Europe - https://youtu.be/Ts-uxYiBEQ8
GDD Europe CodeLabs g.co/codelabs/gdd17
Google Github samples https://github.com/googlesamples/android-architecture-components
#gdg_kharkiv_center
Alternatives to consider
Moxy https://github.com/Arello-Mobile/Moxy
Mosby https://github.com/sockeqwe/mosby
Android MVP Helper https://github.com/Ufkoku/AndroidMVPHelper
Clean Architecture https://github.com/android10/Android-CleanArchitecture
Reark https://github.com/reark/reark
MVP + Dagger2 + Rx https://android.jlelse.eu/mvp-dagger-2-rx-clean-modern-android-app-
code-74f63c9a6f2f
Architecture the Lost Years by Uncle Bob https://youtu.be/WpkDN78P884
#gdg_kharkiv_center
Where to go :)
#gdg_kharkiv_center
Where to go :)
Constantine Mars
@ConstantineMars
+ConstantineMars
Thank you!
Q&A Mobile Architecture Club

More Related Content

What's hot

Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
Eric Maxwell
 
My way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon SpainMy way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon Spain
Christian Panadero
 
ヘルスケアサービスを実現する最新技術 〜HealthKit・GCP + Goの活用〜
ヘルスケアサービスを実現する最新技術  〜HealthKit・GCP + Goの活用〜ヘルスケアサービスを実現する最新技術  〜HealthKit・GCP + Goの活用〜
ヘルスケアサービスを実現する最新技術 〜HealthKit・GCP + Goの活用〜
DeNA
 
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
Fukaya Akifumi
 
Testing Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJavaTesting Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJava
Fabio Collini
 
Modern Android Architecture
Modern Android ArchitectureModern Android Architecture
Modern Android Architecture
Eric Maxwell
 
My way to clean android V2
My way to clean android V2My way to clean android V2
My way to clean android V2
Christian Panadero
 
Interoperable Component Patterns
Interoperable Component PatternsInteroperable Component Patterns
Interoperable Component Patterns
Matthew Beale
 
Advancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and GesturesAdvancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and Gestures
Samsung Developers
 
Android Architecture Components - Guy Bar on, Vonage
Android Architecture Components - Guy Bar on, VonageAndroid Architecture Components - Guy Bar on, Vonage
Android Architecture Components - Guy Bar on, Vonage
DroidConTLV
 
Android Architecture Components
Android Architecture ComponentsAndroid Architecture Components
Android Architecture Components
BurhanuddinRashid
 
From iOS to Android
From iOS to AndroidFrom iOS to Android
From iOS to Android
Jose Manuel Ortega Candel
 

What's hot (13)

Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
 
My way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon SpainMy way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon Spain
 
ヘルスケアサービスを実現する最新技術 〜HealthKit・GCP + Goの活用〜
ヘルスケアサービスを実現する最新技術  〜HealthKit・GCP + Goの活用〜ヘルスケアサービスを実現する最新技術  〜HealthKit・GCP + Goの活用〜
ヘルスケアサービスを実現する最新技術 〜HealthKit・GCP + Goの活用〜
 
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
 
Testing Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJavaTesting Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJava
 
Modern Android Architecture
Modern Android ArchitectureModern Android Architecture
Modern Android Architecture
 
My way to clean android V2
My way to clean android V2My way to clean android V2
My way to clean android V2
 
Interoperable Component Patterns
Interoperable Component PatternsInteroperable Component Patterns
Interoperable Component Patterns
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Advancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and GesturesAdvancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and Gestures
 
Android Architecture Components - Guy Bar on, Vonage
Android Architecture Components - Guy Bar on, VonageAndroid Architecture Components - Guy Bar on, Vonage
Android Architecture Components - Guy Bar on, Vonage
 
Android Architecture Components
Android Architecture ComponentsAndroid Architecture Components
Android Architecture Components
 
From iOS to Android
From iOS to AndroidFrom iOS to Android
From iOS to Android
 

Similar to Architecture components, Константин Марс, TeamLead, Senior Developer, DataArt

Sharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFSharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SF
Pierre-Yves Ricau
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT Talk
Constantine Mars
 
Architecture Components
Architecture Components Architecture Components
Architecture Components
DataArt
 
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Nicolas HAAN
 
React Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsReact Native for multi-platform mobile applications
React Native for multi-platform mobile applications
Matteo Manchi
 
Command Query Responsibility Segregation and Event Sourcing
Command Query Responsibility Segregation and Event SourcingCommand Query Responsibility Segregation and Event Sourcing
Command Query Responsibility Segregation and Event Sourcing
MitinPavel
 
10 ways to make your code rock
10 ways to make your code rock10 ways to make your code rock
10 ways to make your code rockmartincronje
 
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
mharkus
 
Advanced android app development
Advanced android app developmentAdvanced android app development
Advanced android app development
Rachmat Wahyu Pramono
 
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
Hassan Abid
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalDroidcon Berlin
 
Mobile Software Engineering Crash Course - C04 Android Cont.
Mobile Software Engineering Crash Course - C04 Android Cont.Mobile Software Engineering Crash Course - C04 Android Cont.
Mobile Software Engineering Crash Course - C04 Android Cont.Mohammad Shaker
 
Clean Architecture @ Taxibeat
Clean Architecture @ TaxibeatClean Architecture @ Taxibeat
Clean Architecture @ Taxibeat
Michael Bakogiannis
 
Use Eclipse technologies to build a modern embedded IDE
Use Eclipse technologies to build a modern embedded IDEUse Eclipse technologies to build a modern embedded IDE
Use Eclipse technologies to build a modern embedded IDEBenjamin Cabé
 
MobileCity:Core Data
MobileCity:Core DataMobileCity:Core Data
MobileCity:Core DataAllan Davis
 
OpenWebBeans and DeltaSpike at ApacheCon
OpenWebBeans and DeltaSpike at ApacheConOpenWebBeans and DeltaSpike at ApacheCon
OpenWebBeans and DeltaSpike at ApacheCon
os890
 
Home Improvement: Architecture & Kotlin
Home Improvement: Architecture & KotlinHome Improvement: Architecture & Kotlin
Home Improvement: Architecture & Kotlin
Jorge Ortiz
 
Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stack
Tomáš Kypta
 
CQRS and Event Sourcing
CQRS and Event SourcingCQRS and Event Sourcing
CQRS and Event Sourcing
Sergey Seletsky
 

Similar to Architecture components, Константин Марс, TeamLead, Senior Developer, DataArt (20)

Sharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFSharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SF
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT Talk
 
Architecture Components
Architecture Components Architecture Components
Architecture Components
 
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
 
React Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsReact Native for multi-platform mobile applications
React Native for multi-platform mobile applications
 
Command Query Responsibility Segregation and Event Sourcing
Command Query Responsibility Segregation and Event SourcingCommand Query Responsibility Segregation and Event Sourcing
Command Query Responsibility Segregation and Event Sourcing
 
10 ways to make your code rock
10 ways to make your code rock10 ways to make your code rock
10 ways to make your code rock
 
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
 
Advanced android app development
Advanced android app developmentAdvanced android app development
Advanced android app development
 
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
 
Stmik bandung
Stmik bandungStmik bandung
Stmik bandung
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-final
 
Mobile Software Engineering Crash Course - C04 Android Cont.
Mobile Software Engineering Crash Course - C04 Android Cont.Mobile Software Engineering Crash Course - C04 Android Cont.
Mobile Software Engineering Crash Course - C04 Android Cont.
 
Clean Architecture @ Taxibeat
Clean Architecture @ TaxibeatClean Architecture @ Taxibeat
Clean Architecture @ Taxibeat
 
Use Eclipse technologies to build a modern embedded IDE
Use Eclipse technologies to build a modern embedded IDEUse Eclipse technologies to build a modern embedded IDE
Use Eclipse technologies to build a modern embedded IDE
 
MobileCity:Core Data
MobileCity:Core DataMobileCity:Core Data
MobileCity:Core Data
 
OpenWebBeans and DeltaSpike at ApacheCon
OpenWebBeans and DeltaSpike at ApacheConOpenWebBeans and DeltaSpike at ApacheCon
OpenWebBeans and DeltaSpike at ApacheCon
 
Home Improvement: Architecture & Kotlin
Home Improvement: Architecture & KotlinHome Improvement: Architecture & Kotlin
Home Improvement: Architecture & Kotlin
 
Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stack
 
CQRS and Event Sourcing
CQRS and Event SourcingCQRS and Event Sourcing
CQRS and Event Sourcing
 

More from Alina Vilk

Designer in you, Irina Shapoval, Lead Designer, DataArt
Designer in you, Irina Shapoval, Lead Designer, DataArtDesigner in you, Irina Shapoval, Lead Designer, DataArt
Designer in you, Irina Shapoval, Lead Designer, DataArt
Alina Vilk
 
.NET framework vs .net core 3.1 commons &amp; differences
 .NET framework vs .net core 3.1  commons &amp; differences .NET framework vs .net core 3.1  commons &amp; differences
.NET framework vs .net core 3.1 commons &amp; differences
Alina Vilk
 
Expression trees in c#, Алексей Голубь (Svitla Systems)
Expression trees in c#, Алексей Голубь (Svitla Systems)Expression trees in c#, Алексей Голубь (Svitla Systems)
Expression trees in c#, Алексей Голубь (Svitla Systems)
Alina Vilk
 
"Dev to PM" D.Fedotov
"Dev to PM" D.Fedotov"Dev to PM" D.Fedotov
"Dev to PM" D.Fedotov
Alina Vilk
 
Игорь Литвиненко (Senior iOS- и Android-разработчик,DataArt)
Игорь Литвиненко (Senior iOS- и Android-разработчик,DataArt)Игорь Литвиненко (Senior iOS- и Android-разработчик,DataArt)
Игорь Литвиненко (Senior iOS- и Android-разработчик,DataArt)
Alina Vilk
 
Алексей Рыбаков (Senior Engineer,Technical Evangelist DataArt )
Алексей Рыбаков (Senior Engineer,Technical Evangelist DataArt ) Алексей Рыбаков (Senior Engineer,Technical Evangelist DataArt )
Алексей Рыбаков (Senior Engineer,Technical Evangelist DataArt )
Alina Vilk
 
Ирина Шаповал,(Lead UI/UX дизайнер, DataArt)
Ирина Шаповал,(Lead UI/UX дизайнер, DataArt)Ирина Шаповал,(Lead UI/UX дизайнер, DataArt)
Ирина Шаповал,(Lead UI/UX дизайнер, DataArt)
Alina Vilk
 
Devops, v.02, Alexander Pavlenko (DataArt)
Devops, v.02, Alexander Pavlenko (DataArt)Devops, v.02, Alexander Pavlenko (DataArt)
Devops, v.02, Alexander Pavlenko (DataArt)
Alina Vilk
 
O DevOps, Stanislav Kolenkin ( DataArt)
O DevOps, Stanislav Kolenkin ( DataArt)O DevOps, Stanislav Kolenkin ( DataArt)
O DevOps, Stanislav Kolenkin ( DataArt)
Alina Vilk
 
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive  3D graphics for web with three.js, Andrey Vedilin, DataArtInteractive  3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
Alina Vilk
 
Al around ML 2017, Оксана Савенко, студентка НТУ имени Каразина
Al around ML 2017, Оксана Савенко, студентка НТУ имени КаразинаAl around ML 2017, Оксана Савенко, студентка НТУ имени Каразина
Al around ML 2017, Оксана Савенко, студентка НТУ имени Каразина
Alina Vilk
 
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)
Alina Vilk
 
Кирилл Безпалый, .NET Developer, Ciklum
Кирилл Безпалый, .NET Developer, CiklumКирилл Безпалый, .NET Developer, Ciklum
Кирилл Безпалый, .NET Developer, Ciklum
Alina Vilk
 
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo groupИгорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Alina Vilk
 
Александр Сергиенко, Senior Android Developer, DataArt
Александр Сергиенко, Senior Android Developer, DataArtАлександр Сергиенко, Senior Android Developer, DataArt
Александр Сергиенко, Senior Android Developer, DataArt
Alina Vilk
 
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgЕвгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
Alina Vilk
 
Дмитрий Козицкий,Lead UX / UI Designer, DataArt
Дмитрий Козицкий,Lead UX / UI Designer, DataArtДмитрий Козицкий,Lead UX / UI Designer, DataArt
Дмитрий Козицкий,Lead UX / UI Designer, DataArt
Alina Vilk
 
Игорь Юзовицкий,UX Expert, DataArt
Игорь Юзовицкий,UX Expert, DataArtИгорь Юзовицкий,UX Expert, DataArt
Игорь Юзовицкий,UX Expert, DataArt
Alina Vilk
 
Android Things, Alexey Rybakov, Technical Evangelist, DataArt
Android Things, Alexey Rybakov, Technical Evangelist, DataArtAndroid Things, Alexey Rybakov, Technical Evangelist, DataArt
Android Things, Alexey Rybakov, Technical Evangelist, DataArt
Alina Vilk
 
«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...
«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...
«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...
Alina Vilk
 

More from Alina Vilk (20)

Designer in you, Irina Shapoval, Lead Designer, DataArt
Designer in you, Irina Shapoval, Lead Designer, DataArtDesigner in you, Irina Shapoval, Lead Designer, DataArt
Designer in you, Irina Shapoval, Lead Designer, DataArt
 
.NET framework vs .net core 3.1 commons &amp; differences
 .NET framework vs .net core 3.1  commons &amp; differences .NET framework vs .net core 3.1  commons &amp; differences
.NET framework vs .net core 3.1 commons &amp; differences
 
Expression trees in c#, Алексей Голубь (Svitla Systems)
Expression trees in c#, Алексей Голубь (Svitla Systems)Expression trees in c#, Алексей Голубь (Svitla Systems)
Expression trees in c#, Алексей Голубь (Svitla Systems)
 
"Dev to PM" D.Fedotov
"Dev to PM" D.Fedotov"Dev to PM" D.Fedotov
"Dev to PM" D.Fedotov
 
Игорь Литвиненко (Senior iOS- и Android-разработчик,DataArt)
Игорь Литвиненко (Senior iOS- и Android-разработчик,DataArt)Игорь Литвиненко (Senior iOS- и Android-разработчик,DataArt)
Игорь Литвиненко (Senior iOS- и Android-разработчик,DataArt)
 
Алексей Рыбаков (Senior Engineer,Technical Evangelist DataArt )
Алексей Рыбаков (Senior Engineer,Technical Evangelist DataArt ) Алексей Рыбаков (Senior Engineer,Technical Evangelist DataArt )
Алексей Рыбаков (Senior Engineer,Technical Evangelist DataArt )
 
Ирина Шаповал,(Lead UI/UX дизайнер, DataArt)
Ирина Шаповал,(Lead UI/UX дизайнер, DataArt)Ирина Шаповал,(Lead UI/UX дизайнер, DataArt)
Ирина Шаповал,(Lead UI/UX дизайнер, DataArt)
 
Devops, v.02, Alexander Pavlenko (DataArt)
Devops, v.02, Alexander Pavlenko (DataArt)Devops, v.02, Alexander Pavlenko (DataArt)
Devops, v.02, Alexander Pavlenko (DataArt)
 
O DevOps, Stanislav Kolenkin ( DataArt)
O DevOps, Stanislav Kolenkin ( DataArt)O DevOps, Stanislav Kolenkin ( DataArt)
O DevOps, Stanislav Kolenkin ( DataArt)
 
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive  3D graphics for web with three.js, Andrey Vedilin, DataArtInteractive  3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
 
Al around ML 2017, Оксана Савенко, студентка НТУ имени Каразина
Al around ML 2017, Оксана Савенко, студентка НТУ имени КаразинаAl around ML 2017, Оксана Савенко, студентка НТУ имени Каразина
Al around ML 2017, Оксана Савенко, студентка НТУ имени Каразина
 
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)
 
Кирилл Безпалый, .NET Developer, Ciklum
Кирилл Безпалый, .NET Developer, CiklumКирилл Безпалый, .NET Developer, Ciklum
Кирилл Безпалый, .NET Developer, Ciklum
 
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo groupИгорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
 
Александр Сергиенко, Senior Android Developer, DataArt
Александр Сергиенко, Senior Android Developer, DataArtАлександр Сергиенко, Senior Android Developer, DataArt
Александр Сергиенко, Senior Android Developer, DataArt
 
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgЕвгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
 
Дмитрий Козицкий,Lead UX / UI Designer, DataArt
Дмитрий Козицкий,Lead UX / UI Designer, DataArtДмитрий Козицкий,Lead UX / UI Designer, DataArt
Дмитрий Козицкий,Lead UX / UI Designer, DataArt
 
Игорь Юзовицкий,UX Expert, DataArt
Игорь Юзовицкий,UX Expert, DataArtИгорь Юзовицкий,UX Expert, DataArt
Игорь Юзовицкий,UX Expert, DataArt
 
Android Things, Alexey Rybakov, Technical Evangelist, DataArt
Android Things, Alexey Rybakov, Technical Evangelist, DataArtAndroid Things, Alexey Rybakov, Technical Evangelist, DataArt
Android Things, Alexey Rybakov, Technical Evangelist, DataArt
 
«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...
«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...
«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...
 

Recently uploaded

TESDA TM1 REVIEWER FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
TESDA TM1 REVIEWER  FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...TESDA TM1 REVIEWER  FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
TESDA TM1 REVIEWER FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
EugeneSaldivar
 
Digital Tools and AI for Teaching Learning and Research
Digital Tools and AI for Teaching Learning and ResearchDigital Tools and AI for Teaching Learning and Research
Digital Tools and AI for Teaching Learning and Research
Vikramjit Singh
 
Normal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of LabourNormal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of Labour
Wasim Ak
 
June 3, 2024 Anti-Semitism Letter Sent to MIT President Kornbluth and MIT Cor...
June 3, 2024 Anti-Semitism Letter Sent to MIT President Kornbluth and MIT Cor...June 3, 2024 Anti-Semitism Letter Sent to MIT President Kornbluth and MIT Cor...
June 3, 2024 Anti-Semitism Letter Sent to MIT President Kornbluth and MIT Cor...
Levi Shapiro
 
"Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe..."Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe...
SACHIN R KONDAGURI
 
Multithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race conditionMultithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race condition
Mohammed Sikander
 
Synthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptxSynthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptx
Pavel ( NSTU)
 
The basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptxThe basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptx
heathfieldcps1
 
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdfUnit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Thiyagu K
 
A Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in EducationA Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in Education
Peter Windle
 
The French Revolution Class 9 Study Material pdf free download
The French Revolution Class 9 Study Material pdf free downloadThe French Revolution Class 9 Study Material pdf free download
The French Revolution Class 9 Study Material pdf free download
Vivekanand Anglo Vedic Academy
 
Lapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdfLapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdf
Jean Carlos Nunes Paixão
 
Francesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptxFrancesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptx
EduSkills OECD
 
The Challenger.pdf DNHS Official Publication
The Challenger.pdf DNHS Official PublicationThe Challenger.pdf DNHS Official Publication
The Challenger.pdf DNHS Official Publication
Delapenabediema
 
Acetabularia Information For Class 9 .docx
Acetabularia Information For Class 9  .docxAcetabularia Information For Class 9  .docx
Acetabularia Information For Class 9 .docx
vaibhavrinwa19
 
Embracing GenAI - A Strategic Imperative
Embracing GenAI - A Strategic ImperativeEmbracing GenAI - A Strategic Imperative
Embracing GenAI - A Strategic Imperative
Peter Windle
 
Pride Month Slides 2024 David Douglas School District
Pride Month Slides 2024 David Douglas School DistrictPride Month Slides 2024 David Douglas School District
Pride Month Slides 2024 David Douglas School District
David Douglas School District
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
Special education needs
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
Mohd Adib Abd Muin, Senior Lecturer at Universiti Utara Malaysia
 
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
MysoreMuleSoftMeetup
 

Recently uploaded (20)

TESDA TM1 REVIEWER FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
TESDA TM1 REVIEWER  FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...TESDA TM1 REVIEWER  FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
TESDA TM1 REVIEWER FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
 
Digital Tools and AI for Teaching Learning and Research
Digital Tools and AI for Teaching Learning and ResearchDigital Tools and AI for Teaching Learning and Research
Digital Tools and AI for Teaching Learning and Research
 
Normal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of LabourNormal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of Labour
 
June 3, 2024 Anti-Semitism Letter Sent to MIT President Kornbluth and MIT Cor...
June 3, 2024 Anti-Semitism Letter Sent to MIT President Kornbluth and MIT Cor...June 3, 2024 Anti-Semitism Letter Sent to MIT President Kornbluth and MIT Cor...
June 3, 2024 Anti-Semitism Letter Sent to MIT President Kornbluth and MIT Cor...
 
"Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe..."Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe...
 
Multithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race conditionMultithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race condition
 
Synthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptxSynthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptx
 
The basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptxThe basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptx
 
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdfUnit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdf
 
A Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in EducationA Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in Education
 
The French Revolution Class 9 Study Material pdf free download
The French Revolution Class 9 Study Material pdf free downloadThe French Revolution Class 9 Study Material pdf free download
The French Revolution Class 9 Study Material pdf free download
 
Lapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdfLapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdf
 
Francesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptxFrancesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptx
 
The Challenger.pdf DNHS Official Publication
The Challenger.pdf DNHS Official PublicationThe Challenger.pdf DNHS Official Publication
The Challenger.pdf DNHS Official Publication
 
Acetabularia Information For Class 9 .docx
Acetabularia Information For Class 9  .docxAcetabularia Information For Class 9  .docx
Acetabularia Information For Class 9 .docx
 
Embracing GenAI - A Strategic Imperative
Embracing GenAI - A Strategic ImperativeEmbracing GenAI - A Strategic Imperative
Embracing GenAI - A Strategic Imperative
 
Pride Month Slides 2024 David Douglas School District
Pride Month Slides 2024 David Douglas School DistrictPride Month Slides 2024 David Douglas School District
Pride Month Slides 2024 David Douglas School District
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
 
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
 

Architecture components, Константин Марс, TeamLead, Senior Developer, DataArt