SlideShare uma empresa Scribd logo
1 de 67
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

Mais conteúdo relacionado

Mais procurados

Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data BindingEric 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 SpainChristian 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 RxJavaFabio Collini
 
Modern Android Architecture
Modern Android ArchitectureModern Android Architecture
Modern Android ArchitectureEric Maxwell
 
Interoperable Component Patterns
Interoperable Component PatternsInteroperable Component Patterns
Interoperable Component PatternsMatthew 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 GesturesSamsung 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, VonageDroidConTLV
 
Android Architecture Components
Android Architecture ComponentsAndroid Architecture Components
Android Architecture ComponentsBurhanuddinRashid
 

Mais procurados (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
 

Semelhante a 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 SFPierre-Yves Ricau
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT TalkConstantine 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-2023Nicolas 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 applicationsMatteo 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 SourcingMitinPavel
 
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
 
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
 
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
 
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 ApacheConos890
 
Home Improvement: Architecture & Kotlin
Home Improvement: Architecture & KotlinHome Improvement: Architecture & Kotlin
Home Improvement: Architecture & KotlinJorge Ortiz
 
Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stackTomáš Kypta
 

Semelhante a 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
 

Mais de 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, DataArtAlina 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; differencesAlina 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.FedotovAlina 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, DataArtAlina 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, CiklumAlina 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 groupAlina Vilk
 
Александр Сергиенко, Senior Android Developer, DataArt
Александр Сергиенко, Senior Android Developer, DataArtАлександр Сергиенко, Senior Android Developer, DataArt
Александр Сергиенко, Senior Android Developer, DataArtAlina Vilk
 
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgЕвгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgAlina Vilk
 
Дмитрий Козицкий,Lead UX / UI Designer, DataArt
Дмитрий Козицкий,Lead UX / UI Designer, DataArtДмитрий Козицкий,Lead UX / UI Designer, DataArt
Дмитрий Козицкий,Lead UX / UI Designer, DataArtAlina Vilk
 
Игорь Юзовицкий,UX Expert, DataArt
Игорь Юзовицкий,UX Expert, DataArtИгорь Юзовицкий,UX Expert, DataArt
Игорь Юзовицкий,UX Expert, DataArtAlina 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, DataArtAlina Vilk
 
«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...
«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...
«Делегирование как идеальный способ угробить проект», Александр Ивахненко, IT...Alina Vilk
 

Mais de 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...
 

Último

Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Association for Project Management
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17Celine George
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxJisc
 
Dyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptxDyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptxcallscotland1987
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxAmanpreet Kaur
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...christianmathematics
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxEsquimalt MFRC
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.pptRamjanShidvankar
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...pradhanghanshyam7136
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibitjbellavia9
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...Nguyen Thanh Tu Collection
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfNirmal Dwivedi
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structuredhanjurrannsibayan2
 
Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsKarakKing
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfSherif Taha
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17Celine George
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentationcamerronhm
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...Poonam Aher Patil
 

Último (20)

Spatium Project Simulation student brief
Spatium Project Simulation student briefSpatium Project Simulation student brief
Spatium Project Simulation student brief
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptx
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
Dyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptxDyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptx
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structure
 
Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functions
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdf
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 

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