SlideShare a Scribd company logo
Cutting edge
Android stack
One year later
Anton Rutkevich, Juno
Igor Korotenko, Juno
What’s in the stack?
What’s is the stack?
Core ideas
Core ideas
1.Safety
a. Immutability
b. Easy concurrency
2.Concise code
3.Modularity (SOLID-inspired, Clean architecture)
4.Test-ready
Safety. Immutability
Basics
1.No state - simpler program
a. “Simple made easy” talk by Rich Hickey
2.Mutable state is the core of concurrency issues
3.Allows to perform more optimizations
4.Immutability is transitive
Reference immutability
Objects immutability. Data classes
Collections immutability
Rx
1.Implicitly relies on immutable data in streams
2.Hides the state in operators & subjects
Safety. Easy concurrency
Concurrency is hard
Rx approach to concurrency
Safety. Other
Safe by default
1.Immutability by default
2.Classes & methods are final by default
3.Nested classes don’t hold a reference to the outer
4....
Null safety
Functional style
Advanced type safety. Why?
More checks are guaranteed at compile time
Type safety. Sum types 1. TimeDiff
Type safety. Sum types 2.
Network response
Concise code
Properties, type inference
Smart casts
Stream-like API
Easy to understand complex data-flow
Modularity. Architecture
High-level view on architecture
ViewModel
View
starts here
Retrofit BL homeSOLID
Dagger 2
helps here
Service A
Service B
Service D
Networking
ends here
Testability
Main ideas
1.Separation of concerns (clean architecture principles)
2.Dependencies of SUT are interfaces
3.Business logic is isolated from platform code
4.UI layer can be replaced for tests
Rx
1.TestScheduler
2.TestSubscriber
Mockito
1.Still using PowerMock in “legacy” parts
2.Clean architecture eliminates the need of PowerMock
AssertJ
Just AssertJ
Roboliectric
No need for it, as UI & business logic are isolated from the
platform
Spock + Groovy
1.Works
2.Hard to set up
3.Fun to use, when everything works
4.Not really fun when something breaks (dynamic Groovy)
Kotlin
Interop
Koltin interop’s rule of thumb
1.No black magic -> works fine
2.Black magic ->
most probably works fine, but need to re-check
Koltin + Dagger 2
Initially DI code was in Java
Now, with kapt, DI can also be in Kotlin
Koltin + Retrofit
Just works :)
Koltin + Rx
Works even better than Java + RxJava
1.Lambdas (non-capturing)
2.Extension functions
Koltin + Gson
Gson uses reflection to set field values
-> can set null into non-nullable field.
Beware!
Rx + Retrofit
Retrofit provides API for Rx:
Response as Observable<T>
What other libs bother you?
Challenges
Testing. Koltin + Mockito
1.Everything is final by default in Kotlin
a. Solution 1: PowerMock. Dirty
b. Solution 2: Clean architecture. Clean
2.Mockito returns nulls where Koltin expects non-nullable
a. Use Mockito-Kotlin library
Java -> Kotlin interop
Beware of nulls that come from the Java’s dark side
String!
Static code analyzers
1.Findbugs
a. ?
2.Pmd
a. ?
3.Lint
a. Works in IDE now, command line support comes soon
Compile time
1.Was kind of a problem:
a. Clean ~3 min
b. Incremental ~55 sec
c. Of which compile Kotlin ~50 sec
2.Much better with Koltin 1.0.2 & dex in process
a. Clean ~2m
Method count
1.Kotlin ~6K
2.RxJava ~5K
3.Multidex works
Proguard
Works, causes ~ same amount of issues as in Java
Be a stream
Outro

More Related Content

What's hot

Clojure - an introduction (and some CFML)
Clojure - an introduction (and some CFML)Clojure - an introduction (and some CFML)
Clojure - an introduction (and some CFML)
Kai Koenig
 
Concurrency and Python - PyCon MY 2015
Concurrency and Python - PyCon MY 2015Concurrency and Python - PyCon MY 2015
Concurrency and Python - PyCon MY 2015
Boey Pak Cheong
 
Extracting source code of apk file
Extracting source code of apk fileExtracting source code of apk file
Extracting source code of apk file
Deepanshu Gajbhiye
 
The Onward Journey: Porting Twisted to Python 3
The Onward Journey: Porting Twisted to Python 3The Onward Journey: Porting Twisted to Python 3
The Onward Journey: Porting Twisted to Python 3
Craig Rodrigues
 
Migrating our monolith to Python 3
Migrating our monolith to Python 3Migrating our monolith to Python 3
Migrating our monolith to Python 3
Ilian Iliev
 
Eth cc --eth2-tests-and-implementation
Eth cc --eth2-tests-and-implementationEth cc --eth2-tests-and-implementation
Eth cc --eth2-tests-and-implementation
Bruno Skvorc
 
Μεταπρογραµµατισµός κώδικα Python σε γλώσσα γραµµικού χρόνου για αυτόµατη επα...
Μεταπρογραµµατισµός κώδικα Python σε γλώσσα γραµµικού χρόνου για αυτόµατη επα...Μεταπρογραµµατισµός κώδικα Python σε γλώσσα γραµµικού χρόνου για αυτόµατη επα...
Μεταπρογραµµατισµός κώδικα Python σε γλώσσα γραµµικού χρόνου για αυτόµατη επα...
ISSEL
 
Kotlin == Java++
Kotlin == Java++Kotlin == Java++
Kotlin == Java++
GlobalLogic Ukraine
 
[Question Paper] Network Security (75:25 Pattern) [November / 2015]
[Question Paper] Network Security (75:25 Pattern) [November / 2015][Question Paper] Network Security (75:25 Pattern) [November / 2015]
[Question Paper] Network Security (75:25 Pattern) [November / 2015]
Mumbai B.Sc.IT Study
 
JAVA CLASS1
JAVA CLASS1JAVA CLASS1
JAVA CLASS1
Prudhvi Akella
 
Shared objects and synchronization
Shared objects and synchronization Shared objects and synchronization
Shared objects and synchronization Dr. C.V. Suresh Babu
 
Critical Section in Operating System
Critical Section in Operating SystemCritical Section in Operating System
Critical Section in Operating System
MOHIT AGARWAL
 
9 d55201 testing & testability
9 d55201 testing & testability9 d55201 testing & testability
9 d55201 testing & testability
Vinod Kumar Gorrepati
 
[Question Paper] Network Security (75-25 Pattern) [November / 2015]
[Question Paper] Network Security (75-25 Pattern) [November / 2015][Question Paper] Network Security (75-25 Pattern) [November / 2015]
[Question Paper] Network Security (75-25 Pattern) [November / 2015]
Mumbai B.Sc.IT Study
 
Kotlin Presentation
Kotlin PresentationKotlin Presentation
Kotlin Presentation
Shayan Pourvatan
 
Is this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin languageIs this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin language
Antonis Lilis
 

What's hot (16)

Clojure - an introduction (and some CFML)
Clojure - an introduction (and some CFML)Clojure - an introduction (and some CFML)
Clojure - an introduction (and some CFML)
 
Concurrency and Python - PyCon MY 2015
Concurrency and Python - PyCon MY 2015Concurrency and Python - PyCon MY 2015
Concurrency and Python - PyCon MY 2015
 
Extracting source code of apk file
Extracting source code of apk fileExtracting source code of apk file
Extracting source code of apk file
 
The Onward Journey: Porting Twisted to Python 3
The Onward Journey: Porting Twisted to Python 3The Onward Journey: Porting Twisted to Python 3
The Onward Journey: Porting Twisted to Python 3
 
Migrating our monolith to Python 3
Migrating our monolith to Python 3Migrating our monolith to Python 3
Migrating our monolith to Python 3
 
Eth cc --eth2-tests-and-implementation
Eth cc --eth2-tests-and-implementationEth cc --eth2-tests-and-implementation
Eth cc --eth2-tests-and-implementation
 
Μεταπρογραµµατισµός κώδικα Python σε γλώσσα γραµµικού χρόνου για αυτόµατη επα...
Μεταπρογραµµατισµός κώδικα Python σε γλώσσα γραµµικού χρόνου για αυτόµατη επα...Μεταπρογραµµατισµός κώδικα Python σε γλώσσα γραµµικού χρόνου για αυτόµατη επα...
Μεταπρογραµµατισµός κώδικα Python σε γλώσσα γραµµικού χρόνου για αυτόµατη επα...
 
Kotlin == Java++
Kotlin == Java++Kotlin == Java++
Kotlin == Java++
 
[Question Paper] Network Security (75:25 Pattern) [November / 2015]
[Question Paper] Network Security (75:25 Pattern) [November / 2015][Question Paper] Network Security (75:25 Pattern) [November / 2015]
[Question Paper] Network Security (75:25 Pattern) [November / 2015]
 
JAVA CLASS1
JAVA CLASS1JAVA CLASS1
JAVA CLASS1
 
Shared objects and synchronization
Shared objects and synchronization Shared objects and synchronization
Shared objects and synchronization
 
Critical Section in Operating System
Critical Section in Operating SystemCritical Section in Operating System
Critical Section in Operating System
 
9 d55201 testing & testability
9 d55201 testing & testability9 d55201 testing & testability
9 d55201 testing & testability
 
[Question Paper] Network Security (75-25 Pattern) [November / 2015]
[Question Paper] Network Security (75-25 Pattern) [November / 2015][Question Paper] Network Security (75-25 Pattern) [November / 2015]
[Question Paper] Network Security (75-25 Pattern) [November / 2015]
 
Kotlin Presentation
Kotlin PresentationKotlin Presentation
Kotlin Presentation
 
Is this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin languageIs this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin language
 

Viewers also liked

Exploring Koltin on Android
Exploring Koltin on AndroidExploring Koltin on Android
Exploring Koltin on Android
Deepanshu Madan
 
Linea de la tangente
Linea de la tangenteLinea de la tangente
Linea de la tangente
Mateo Aristizabal Skate
 
Apresentação foco na vida powerpoint
Apresentação foco na vida powerpointApresentação foco na vida powerpoint
Apresentação foco na vida powerpoint
PAULO RICARDO FERREIRA
 
Oficios remitidos 06 11-16
Oficios remitidos 06 11-16Oficios remitidos 06 11-16
Oficios remitidos 06 11-16
Oscar Alberto Barnett Contreras
 
Evolucion del logo de los productos de marca
Evolucion del logo de los productos de marcaEvolucion del logo de los productos de marca
Evolucion del logo de los productos de marca
lorena sanabria
 
MHF MIU info packet v2
MHF MIU info packet v2MHF MIU info packet v2
MHF MIU info packet v2Michael Lutz
 
Presentation EADL influence new technology learning
Presentation EADL influence new technology learningPresentation EADL influence new technology learning
Presentation EADL influence new technology learningWilfredRubens.com
 
Managing your training lifestyle_Ayobamidele Kalejaiye_04102016.Faculty of Ed...
Managing your training lifestyle_Ayobamidele Kalejaiye_04102016.Faculty of Ed...Managing your training lifestyle_Ayobamidele Kalejaiye_04102016.Faculty of Ed...
Managing your training lifestyle_Ayobamidele Kalejaiye_04102016.Faculty of Ed...Ayobamidele Kalejaiye
 
งานนำเสนอ1
งานนำเสนอ1งานนำเสนอ1
งานนำเสนอ1kruluck
 
Entorno gráfico word
Entorno gráfico wordEntorno gráfico word
Entorno gráfico word
zanethpineda
 
Pulse Design & Delivery Panel
Pulse Design & Delivery PanelPulse Design & Delivery Panel
Pulse Design & Delivery PanelMauricio Godoy
 
Gbi 668 giovanny rofiguez grupo 1
Gbi 668 giovanny rofiguez grupo 1Gbi 668 giovanny rofiguez grupo 1
Gbi 668 giovanny rofiguez grupo 1timancoco
 
Sports Association
Sports Association Sports Association
Sports Association
Sports Association
 
Advent Part 2
Advent   Part 2Advent   Part 2
Advent Part 2
jamesmoody
 
Sydney house prices
Sydney house pricesSydney house prices
Sydney house prices
Lee Morley
 
La matemática
La matemáticaLa matemática
La matemática
Maynor023
 

Viewers also liked (18)

Exploring Koltin on Android
Exploring Koltin on AndroidExploring Koltin on Android
Exploring Koltin on Android
 
Linea de la tangente
Linea de la tangenteLinea de la tangente
Linea de la tangente
 
Apresentação foco na vida powerpoint
Apresentação foco na vida powerpointApresentação foco na vida powerpoint
Apresentação foco na vida powerpoint
 
Oficios remitidos 06 11-16
Oficios remitidos 06 11-16Oficios remitidos 06 11-16
Oficios remitidos 06 11-16
 
Evolucion del logo de los productos de marca
Evolucion del logo de los productos de marcaEvolucion del logo de los productos de marca
Evolucion del logo de los productos de marca
 
MHF MIU info packet v2
MHF MIU info packet v2MHF MIU info packet v2
MHF MIU info packet v2
 
Khishigzaya
KhishigzayaKhishigzaya
Khishigzaya
 
Presentation EADL influence new technology learning
Presentation EADL influence new technology learningPresentation EADL influence new technology learning
Presentation EADL influence new technology learning
 
Managing your training lifestyle_Ayobamidele Kalejaiye_04102016.Faculty of Ed...
Managing your training lifestyle_Ayobamidele Kalejaiye_04102016.Faculty of Ed...Managing your training lifestyle_Ayobamidele Kalejaiye_04102016.Faculty of Ed...
Managing your training lifestyle_Ayobamidele Kalejaiye_04102016.Faculty of Ed...
 
งานนำเสนอ1
งานนำเสนอ1งานนำเสนอ1
งานนำเสนอ1
 
Entorno gráfico word
Entorno gráfico wordEntorno gráfico word
Entorno gráfico word
 
Pulse Design & Delivery Panel
Pulse Design & Delivery PanelPulse Design & Delivery Panel
Pulse Design & Delivery Panel
 
Gbi 668 giovanny rofiguez grupo 1
Gbi 668 giovanny rofiguez grupo 1Gbi 668 giovanny rofiguez grupo 1
Gbi 668 giovanny rofiguez grupo 1
 
Bullying 2
Bullying 2Bullying 2
Bullying 2
 
Sports Association
Sports Association Sports Association
Sports Association
 
Advent Part 2
Advent   Part 2Advent   Part 2
Advent Part 2
 
Sydney house prices
Sydney house pricesSydney house prices
Sydney house prices
 
La matemática
La matemáticaLa matemática
La matemática
 

Similar to Cutting edge android stack. One year later

Kotlin
KotlinKotlin
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
Roman Elizarov
 
QCon São Paulo 2018
QCon São Paulo 2018QCon São Paulo 2018
QCon São Paulo 2018
Augusto Afonso Borges Branquinho
 
Creating Realistic Unit Tests with Testcontainers
Creating Realistic Unit Tests with TestcontainersCreating Realistic Unit Tests with Testcontainers
Creating Realistic Unit Tests with Testcontainers
Paul Balogh
 
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor BuzatovićJavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Core java interview questions1
Core java interview questions1Core java interview questions1
Core java interview questions1Lahari Reddy
 
Where destructors meet threads
Where destructors meet threadsWhere destructors meet threads
Where destructors meet threads
Shuo Chen
 
Intro to kotlin
Intro to kotlinIntro to kotlin
Intro to kotlin
Tomislav Homan
 
Concurrency: Best Practices
Concurrency: Best PracticesConcurrency: Best Practices
Concurrency: Best Practices
IndicThreads
 
RedisConf18 - Implementing a New Data Structure for Redis
RedisConf18 - Implementing a New Data Structure for Redis  RedisConf18 - Implementing a New Data Structure for Redis
RedisConf18 - Implementing a New Data Structure for Redis
Redis Labs
 
Metrics ekon 14_2_kleiner
Metrics ekon 14_2_kleinerMetrics ekon 14_2_kleiner
Metrics ekon 14_2_kleiner
Max Kleiner
 
Java concurrency in practice
Java concurrency in practiceJava concurrency in practice
Java concurrency in practice
Deon Huang
 
Threading in C#
Threading in C#Threading in C#
Threading in C#
Medhat Dawoud
 
Concurrency on the JVM
Concurrency on the JVMConcurrency on the JVM
Concurrency on the JVM
Bernhard Huemer
 
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
Sigma Software
 
Clean Code�Chapter 3. (1)
Clean Code�Chapter 3. (1)Clean Code�Chapter 3. (1)
Clean Code�Chapter 3. (1)Felix Chen
 
Building Top-Notch Androids SDKs
Building Top-Notch Androids SDKsBuilding Top-Notch Androids SDKs
Building Top-Notch Androids SDKs
relayr
 
Ice Age melting down: Intel features considered usefull!
Ice Age melting down: Intel features considered usefull!Ice Age melting down: Intel features considered usefull!
Ice Age melting down: Intel features considered usefull!
Peter Hlavaty
 
Breaking the monolith
Breaking the monolithBreaking the monolith
Breaking the monolith
Jacopo Nardiello
 

Similar to Cutting edge android stack. One year later (20)

Kotlin
KotlinKotlin
Kotlin
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
 
QCon São Paulo 2018
QCon São Paulo 2018QCon São Paulo 2018
QCon São Paulo 2018
 
Creating Realistic Unit Tests with Testcontainers
Creating Realistic Unit Tests with TestcontainersCreating Realistic Unit Tests with Testcontainers
Creating Realistic Unit Tests with Testcontainers
 
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor BuzatovićJavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
 
Core java interview questions1
Core java interview questions1Core java interview questions1
Core java interview questions1
 
Where destructors meet threads
Where destructors meet threadsWhere destructors meet threads
Where destructors meet threads
 
BigO and Sorting
BigO and SortingBigO and Sorting
BigO and Sorting
 
Intro to kotlin
Intro to kotlinIntro to kotlin
Intro to kotlin
 
Concurrency: Best Practices
Concurrency: Best PracticesConcurrency: Best Practices
Concurrency: Best Practices
 
RedisConf18 - Implementing a New Data Structure for Redis
RedisConf18 - Implementing a New Data Structure for Redis  RedisConf18 - Implementing a New Data Structure for Redis
RedisConf18 - Implementing a New Data Structure for Redis
 
Metrics ekon 14_2_kleiner
Metrics ekon 14_2_kleinerMetrics ekon 14_2_kleiner
Metrics ekon 14_2_kleiner
 
Java concurrency in practice
Java concurrency in practiceJava concurrency in practice
Java concurrency in practice
 
Threading in C#
Threading in C#Threading in C#
Threading in C#
 
Concurrency on the JVM
Concurrency on the JVMConcurrency on the JVM
Concurrency on the JVM
 
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
 
Clean Code�Chapter 3. (1)
Clean Code�Chapter 3. (1)Clean Code�Chapter 3. (1)
Clean Code�Chapter 3. (1)
 
Building Top-Notch Androids SDKs
Building Top-Notch Androids SDKsBuilding Top-Notch Androids SDKs
Building Top-Notch Androids SDKs
 
Ice Age melting down: Intel features considered usefull!
Ice Age melting down: Intel features considered usefull!Ice Age melting down: Intel features considered usefull!
Ice Age melting down: Intel features considered usefull!
 
Breaking the monolith
Breaking the monolithBreaking the monolith
Breaking the monolith
 

Recently uploaded

Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
Srikant77
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 

Recently uploaded (20)

Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 

Cutting edge android stack. One year later

Editor's Notes

  1. Всем привет! Меня зовут Антон Меня зовут Игорь Мы разрабатываем 2 Android приложения в компании Juno. Традиционный вопрос: кто здесь Андроид разработчик? А кто использовал Kotlin? А кто использовал RxJava? Ок, вам будет чуть понятнее о чем речь, но и для остальных никакого rocket science не будет. Сегодня мы расскажем вам, что мы поняли за год использования нашего стека. Говорить будем много и быстро. У нас нету цели научить вас чему-то, скорее поделиться опытом. Если останется время - обсудим наиболее инетерсные темы подробнее. Но сначала пара слов о Juno - компании, в которой созданы условия для того, чтобы писать действительно качественные программы, и благодаря которой, собственно, нам сегодня есть чем поделиться с вами. Да, Juno еще является спонсором сегодняшнего митапа.
  2. Juno - это новый sharing-economy стратап, мы сейчас находимся на стадии public beta в NY. В основе компании лежат принципы доброго, уважительного, позитивного отношения ко всем заинтересованным сторонам. Примерно так выглядит Juno для человека снаружи. Естественно, те же самые принципы живут и внутри компании. Помимо очень хороших людей, Juno удалось собрать одновременно и отличных профессионалов. Многие из ребят были в предыдущих компаниях либо тимлидами, либо очень сильными разработчиками, а в Juno они все еще начали учиться друг у друга и дополнять друг друга. Мой уровень и как и уровень других ребят у нас вырос за последний год очень сильно, и, что самое интеерсное, чем выше ты растешь, тем лучше ты понимаешь насколько мало знаешь. И это вот все действителньо мотивирует. Тот драйв, который был когда мы только начинали, за год только вырос. Мне действительно сложно передать вам, насколько это круто :) Давайте скажем спасибо Juno :) С технологической точки зрения мобильные команды сами выбирали свой стек, и получился он, естественно, cutting edge. Игорь?
  3. Стек сам по себе не имеет смысла
  4. Безопасность, выразительность кода, модульнсть, тестируемость
  5. Val - как final
  6. Перегружает equals, hashCode, toString Мы говорили о транзитивности - иммутабельная ссылка, иммутабельны все проперти объекта. Copy - если хотим изменить объект
  7. Транзитивность - ссылка, объект, коллекция объектов
  8. Итого - переменных почти нету, программа получается простой в смысле simple, а не easy. Ну и конечно, количество проблем с многопоточностью уменьшается драматически - об этом расскажет Игорь.
  9. Если можете избегайте, если не можете - минимизируйте стэйт. Изи ту факап
  10. Прослеживается через весь язык
  11. Гарантируется в compile time -> не было ни одного NPE в проде. Да и вообще крешей почти/совсем нету Bottom line - null safety это круто, начинаешь по другому мыслить, гораздо чаще скомпилировавшийся код работает.
  12. Функция - это объект. Есть лямбды, есть функции вне классов.
  13. WHY? Runtime проверка на “тип данных” переходит в compile-time
  14. -1 превращается в конкретный тип. А это значит: run-time проверка на “-1” переходит в compile-time На UI нигде не вылезет “-1”
  15. Error prone стрим -> to Error free в TypeSafe манере. Привет Rx.
  16. Отсутствие синтаксической шелухи
  17. Благодаря таким стримам в проекте нету, наверное, ни одного обычного for
  18. RX стрим - классная визуализация потока данных. Весь пайплайн изложен в виде последовательных операций над данными, что упрощает чтение и восприятие кода. В проактивном java-мире этот код занимал бы в несколько раз больше места, от этого он отнюдь не был бы более понятным. Меньше кода - лучше фокус - меньше багов.
  19. Разделение ответственности сущностей (принципы clean architecture) Вынесенение интерфейсов для зависимостей SUT. Изоляция бизнес-логики от платформы. Возможность подмены UI уровня (одна из зависимостей SUT) в тесте.
  20. Когда тип приходит из Java, он помечается ! С ним можно работать как с non-null, но если будет null, то бросится exception.
  21. Прочувствовать RX Что у собаки снизу? Правильно, everything is a stream.