SlideShare une entreprise Scribd logo
1  sur  66
Télécharger pour lire hors ligne
Iordanis Giannakakis
@iordanis_g
Device Fragmentation vs Clean Code
Introduction
• Iordanis “Jordan” Giannakakis
• Android Team Lead at Shazam
• @iordanis_g
How Shazam works
Running order
• What is fragmentation & clean code?
• Make the most of the Android platform
• DIY: Compatible cross-version features
• Handle complexity with MVP
• Write tests that cover all devices
• Q & A
Running order
• What is fragmentation & clean code?
• Make the most of the Android platform
• DIY: Compatible cross-version features
• Handle complexity with MVP
• Write tests that cover all devices
• Q & A
Device fragmentation
Distribution of OS versions (03/14)
• KitKat only 2x as
big as Froyo (2010)
– 2.5% vs. 1.2%
• Gingerbread still
20% (2010)
Screen variations
Variety of capabilities
Variety of capabilities
Does diversification matter?
• Variety is the power of Android
• Google Play Services updates
• OS features as apps
• Compatibility libraries
Bad code
Bad code
• Big ‘If’ statements, heavily branched
• Unmaintainable
• Duplication
• Mixed concerns
• Untestable
Clean code
Clean code
• Easy to change
• Object model
• Single responsibilities
• Reusable
• Testable
Code quality: Is it a concern really?
• Short-term projects
• Individually developed
• Lean
• A/B testing
Code quality: Is it a concern really?
• Codebase gets bigger
• Need to grow team
• No tests
• Code becomes legacy
Code quality at Shazam
Running order
• What is fragmentation & clean code?
• Make the most of the Android platform
• DIY: Compatible cross-version features
• Handle complexity with MVP
• Write tests that cover all devices
• Q & A
Resource System
res/
Some resource types
• Layouts
• Drawables
• Values
– Attributes
– Colours
– Strings
– Styles
Some resource qualifiers
• Locale
• Screen
– Size
– Density
– Orientation
– Ratio
• Platform version
Customise UI
Switchable components
Switchable components
Code example:
Resource System
github.com/iordanis/androidCleanCode
What we have gained
• Less code
• Separated presentation to logic
• Flexible UI
Running order
• What is fragmentation & clean code?
• Make the most of the Android platform
• DIY: Compatible cross-version features
• Handle complexity with MVP
• Write tests that cover all devices
• Q & A
API change
SharedPreferences.Editor
• commit() – slow, since v1
• apply() – fast, since v9
Compatibility libraries
• Backport features to old OS versions
• Version checking and graceful degradation
• Same package structure, different namespace
– android.app
– android.support.v2.app
• “Deprecated by design”
Compatibility libraries
• Official Libraries
– Support v4, v8, v13
– AppCompat v7
• 3rd party:
– ActionbarSherlock
– Nineoldandroids
Dependency Inject, Yourself (DIY)
• Break hardcoded dependencies
• What vs how
• Behaviour vs implementation
• Swappable dependencies for test and
production runtimes
Without Dependency Injection
Client
Feature X Feature X
Dependency Injection
Client
Injector
Feature X
Interface
Drive for DIY
• Fast
• Simple
• No magic necessary
• Pure Java!
• Run Android code on JVM for tests
java.lang.RuntimeException: Stub!
Code example:
SharedPreferences
Compatibility
github.com/iordanis/androidCleanCode
What we have gained
• Eliminated ‘ifs’ from production code
• Maintainability
• Testable code
• Reusable code
• More users
Running order
• What is fragmentation & clean code?
• Make the most of the Android platform
• DIY: Compatible cross-version features
• Handle complexity with MVP
• Write tests that cover all devices
• Q & A
Capabilities example – Google Play Services
Activity lifecycle
• Complex
• Few callbacks
relevant
Issues with presentation complexity
• Compounds complexity of lifecycle
• Testing presentation logic difficult
• Unfulfilled dependencies when in JVM
java.lang.RuntimeException: Stub!
• Robolectric is the only option
The MVP pattern
Presenter
Model View
The MVP pattern, with Android
Presenter
Model
View
start
stop
Android
Drive for MVP
• Make presentation logic testable
• Avoid Android dependencies
• No need to test the “slave” view
• Avoid Robolectric
Code example:
MVP
github.com/iordanis/androidCleanCode
What we have gained
• Separation of concerns
• Testable presentation logic
• Reusable code
• Avoiding need for dependencies when running
Android tests on JVM
Running order
• What is fragmentation & clean code?
• Make the most of the Android platform
• DIY: Compatible cross-version features
• Handle complexity with MVP
• Write tests that cover all devices
• Q & A
Test requirements
• Expressive
• Flexible
• Fast
• Helpful diagnostics
Testing Android apps
• Unit
• Integration
• System
System tests
• Instrumentation framework
• Robotium & Espresso
• gwen
Behaviour tests
• Given: arrange
• When: act
• Then: assert
Example
Given the server returns a track
When the user taps the Shazam button
Then the user sees the track result
gwen
given(server).returnsATrack()
when(user).tapsTheShazamButton()
then(user).seesTheTrackResult()
https://github.com/shazam/gwen
Phone behaviour
Tablet behaviour
Code example:
System Tests
github.com/iordanis/androidCleanCode
Test speed
• All tests on all devices
– not always necessary
• Device clouds
• Gradle
• Maven
Spoon
http://square.github.io/spoon/
Fork
• Inspired by Spoon
• Infinitely scalable
– 1 test / 3secs
• Pooled execution
– Create pool for any device parameter
Fork
Diagnostics
Flexibility
@SkipOnDevice(
deviceType = TABLET_LARGE)
@SkipOnDevice(
playServices = NOT_AVAILABLE)
Summary
• Relationship of fragmentation & clean code
• How to make the most of Android
• How to write compatible code cleanly
• How to apply the MVP pattern
• How to write awesome automation tests
Notes
@iordanis_g
+IordanisGiannakakis
Code examples:
github.com/iordanis/androidCleanCode
Hiring...
References
• Responsible Design For Android:
https://leanpub.com/ResponsibleDesignAndroid-Part1
• 50 Android Hacks: http://www.manning.com/sessa/
• Google I/O 2012: Multi-Versioning Android User Interfaces:
https://www.youtube.com/watch?v=amZM8oZBgfk
• Android Dashboards:
https://developer.android.com/about/dashboards/index.html
• Android Fragmentation visualized:
http://opensignal.com/reports/fragmentation-2013/
Questions?

Contenu connexe

Tendances

Tendances (20)

[Srijan Wednesday Webinars] Building a High Performance QA Team
[Srijan Wednesday Webinars] Building a High Performance QA Team[Srijan Wednesday Webinars] Building a High Performance QA Team
[Srijan Wednesday Webinars] Building a High Performance QA Team
 
Introduction to selenium
Introduction to seleniumIntroduction to selenium
Introduction to selenium
 
Cross platform mobile application development
Cross platform mobile application developmentCross platform mobile application development
Cross platform mobile application development
 
Android Test Automation – one year later
Android Test Automation – one year laterAndroid Test Automation – one year later
Android Test Automation – one year later
 
Android & iOS Automation Using Appium
Android & iOS Automation Using AppiumAndroid & iOS Automation Using Appium
Android & iOS Automation Using Appium
 
Getting started with appium
Getting started with appiumGetting started with appium
Getting started with appium
 
Mobile Cross Platform Automation in-practice and on a Large Scale
Mobile Cross Platform Automation in-practice and on a Large ScaleMobile Cross Platform Automation in-practice and on a Large Scale
Mobile Cross Platform Automation in-practice and on a Large Scale
 
Selendroid in Action
Selendroid in ActionSelendroid in Action
Selendroid in Action
 
Advanced Appium
Advanced AppiumAdvanced Appium
Advanced Appium
 
Cross Platform Development in C# (DDDNorth 2013)
Cross Platform Development in C# (DDDNorth 2013)Cross Platform Development in C# (DDDNorth 2013)
Cross Platform Development in C# (DDDNorth 2013)
 
Building Native “apps” with Visual Studio 2015
Building Native “apps” with Visual Studio 2015Building Native “apps” with Visual Studio 2015
Building Native “apps” with Visual Studio 2015
 
Mobile WebDriver Selendroid
Mobile WebDriver SelendroidMobile WebDriver Selendroid
Mobile WebDriver Selendroid
 
Continuous Testing Meets the Classroom at Code.org
Continuous Testing Meets the Classroom at Code.orgContinuous Testing Meets the Classroom at Code.org
Continuous Testing Meets the Classroom at Code.org
 
Appium
AppiumAppium
Appium
 
Advanced Appium: SeleniumConf UK 2016
Advanced Appium: SeleniumConf UK 2016Advanced Appium: SeleniumConf UK 2016
Advanced Appium: SeleniumConf UK 2016
 
Building Salesforce1 Communities Apps with React Native and Flux
Building Salesforce1 Communities Apps with React Native and FluxBuilding Salesforce1 Communities Apps with React Native and Flux
Building Salesforce1 Communities Apps with React Native and Flux
 
Azure MobileApp & Xamarin.Forms
Azure MobileApp & Xamarin.FormsAzure MobileApp & Xamarin.Forms
Azure MobileApp & Xamarin.Forms
 
QA Fest 2016. Роман Горин. Введение в системы распознавания речи глазами тест...
QA Fest 2016. Роман Горин. Введение в системы распознавания речи глазами тест...QA Fest 2016. Роман Горин. Введение в системы распознавания речи глазами тест...
QA Fest 2016. Роман Горин. Введение в системы распознавания речи глазами тест...
 
OSCON Titanium Tutorial
OSCON Titanium TutorialOSCON Titanium Tutorial
OSCON Titanium Tutorial
 
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
 

En vedette

En vedette (17)

Rapid Continuous Software Engineering - Meeting the challenges of modern sof...
Rapid Continuous Software Engineering - Meeting the challenges of modern sof...Rapid Continuous Software Engineering - Meeting the challenges of modern sof...
Rapid Continuous Software Engineering - Meeting the challenges of modern sof...
 
My way to clean android V2
My way to clean android V2My way to clean android V2
My way to clean android V2
 
ANDROID TRAINING IN CHENNAI
ANDROID TRAINING IN CHENNAIANDROID TRAINING IN CHENNAI
ANDROID TRAINING IN CHENNAI
 
5 Steps To Clean Your Android Code
5 Steps To Clean Your Android Code5 Steps To Clean Your Android Code
5 Steps To Clean Your Android Code
 
Android notifications. testing guideline
Android notifications. testing guidelineAndroid notifications. testing guideline
Android notifications. testing guideline
 
Location, location, geolocation
Location, location, geolocationLocation, location, geolocation
Location, location, geolocation
 
Clean code on Android (Droidcon Dubai 2015)
Clean code on Android (Droidcon Dubai 2015)Clean code on Android (Droidcon Dubai 2015)
Clean code on Android (Droidcon Dubai 2015)
 
The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...
The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...
The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...
 
Lecture 6 geolocation
Lecture 6 geolocationLecture 6 geolocation
Lecture 6 geolocation
 
Android technology sunny
Android technology sunnyAndroid technology sunny
Android technology sunny
 
Geolocation and mapping using Google Maps services
Geolocation and mapping using Google Maps servicesGeolocation and mapping using Google Maps services
Geolocation and mapping using Google Maps services
 
Beginner android
Beginner androidBeginner android
Beginner android
 
Architectural Design Pattern: Android
Architectural Design Pattern: AndroidArchitectural Design Pattern: Android
Architectural Design Pattern: Android
 
Modeling objects interaction via UML sequence diagrams [Software Modeling] [...
Modeling objects interaction via UML sequence diagrams  [Software Modeling] [...Modeling objects interaction via UML sequence diagrams  [Software Modeling] [...
Modeling objects interaction via UML sequence diagrams [Software Modeling] [...
 
Kotlin 初體驗
Kotlin 初體驗Kotlin 初體驗
Kotlin 初體驗
 
Android Things - Solid Foundations
Android Things - Solid FoundationsAndroid Things - Solid Foundations
Android Things - Solid Foundations
 
Modern Android app library stack
Modern Android app library stackModern Android app library stack
Modern Android app library stack
 

Similaire à Device fragmentation vs clean code

Mobile Test Automation Made Awesome With Appium
Mobile Test Automation Made Awesome With AppiumMobile Test Automation Made Awesome With Appium
Mobile Test Automation Made Awesome With Appium
vodQA
 

Similaire à Device fragmentation vs clean code (20)

Mobile Test Automation Made Awesome With Appium
Mobile Test Automation Made Awesome With AppiumMobile Test Automation Made Awesome With Appium
Mobile Test Automation Made Awesome With Appium
 
Mobile Test Automation Made Awesome With Appium
Mobile Test Automation Made Awesome With AppiumMobile Test Automation Made Awesome With Appium
Mobile Test Automation Made Awesome With Appium
 
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
 
Developing a mobile cross-platform library
Developing a mobile cross-platform libraryDeveloping a mobile cross-platform library
Developing a mobile cross-platform library
 
SenchaCon 2016: The Changing Landscape of JavaScript Testing - Joel Watson an...
SenchaCon 2016: The Changing Landscape of JavaScript Testing - Joel Watson an...SenchaCon 2016: The Changing Landscape of JavaScript Testing - Joel Watson an...
SenchaCon 2016: The Changing Landscape of JavaScript Testing - Joel Watson an...
 
.NET? MonoDroid Does
.NET? MonoDroid Does.NET? MonoDroid Does
.NET? MonoDroid Does
 
Webview: The fifth element
Webview: The fifth elementWebview: The fifth element
Webview: The fifth element
 
C# everywhere: Xamarin and cross platform development
C# everywhere: Xamarin and cross platform developmentC# everywhere: Xamarin and cross platform development
C# everywhere: Xamarin and cross platform development
 
Your choices for building a mobile app in 2016
Your choices for building a mobile app in 2016Your choices for building a mobile app in 2016
Your choices for building a mobile app in 2016
 
Ciprian redinciuc continuous integration with jenkins for i os
Ciprian redinciuc   continuous integration with jenkins for i osCiprian redinciuc   continuous integration with jenkins for i os
Ciprian redinciuc continuous integration with jenkins for i os
 
How ANDROID TESTING changed how we think about Death - Second Edition
How ANDROID TESTING changed how we think about Death - Second EditionHow ANDROID TESTING changed how we think about Death - Second Edition
How ANDROID TESTING changed how we think about Death - Second Edition
 
How ANDROID TESTING changed how we think about Death - Second Edition
How ANDROID TESTING changed how we think about Death - Second EditionHow ANDROID TESTING changed how we think about Death - Second Edition
How ANDROID TESTING changed how we think about Death - Second Edition
 
"WebView, the fifth element" por @fernando_cejas
"WebView, the fifth element" por @fernando_cejas"WebView, the fifth element" por @fernando_cejas
"WebView, the fifth element" por @fernando_cejas
 
Develop business apps cross-platform development using visual studio with x...
Develop business apps   cross-platform development using visual studio with x...Develop business apps   cross-platform development using visual studio with x...
Develop business apps cross-platform development using visual studio with x...
 
Cracking android app. Мокиенко Сергей
Cracking android app. Мокиенко СергейCracking android app. Мокиенко Сергей
Cracking android app. Мокиенко Сергей
 
Udvid din test portefølje med coded ui test og cloud load test
Udvid din test portefølje med coded ui test og cloud load testUdvid din test portefølje med coded ui test og cloud load test
Udvid din test portefølje med coded ui test og cloud load test
 
Continuos integration with Jenkins for iOS | SuperSpeakers@CodeCamp Iasi, 2014
Continuos integration with Jenkins for iOS | SuperSpeakers@CodeCamp Iasi, 2014Continuos integration with Jenkins for iOS | SuperSpeakers@CodeCamp Iasi, 2014
Continuos integration with Jenkins for iOS | SuperSpeakers@CodeCamp Iasi, 2014
 
Hybrid Mobile Development with Apache Cordova,AngularJs and ionic
Hybrid Mobile Development with Apache Cordova,AngularJs and ionicHybrid Mobile Development with Apache Cordova,AngularJs and ionic
Hybrid Mobile Development with Apache Cordova,AngularJs and ionic
 
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
Shifting landscape of mobile automation, and the future of Appium - Jonathan ...
 

Plus de Iordanis (Jordan) Giannakakis

Keeping 100m+ users happy: How we test Shazam on Android
Keeping 100m+ users happy: How we test Shazam on AndroidKeeping 100m+ users happy: How we test Shazam on Android
Keeping 100m+ users happy: How we test Shazam on Android
Iordanis (Jordan) Giannakakis
 
How to build rock solid apps and keep 100m+ users happy
How to build rock solid apps and keep 100m+ users happyHow to build rock solid apps and keep 100m+ users happy
How to build rock solid apps and keep 100m+ users happy
Iordanis (Jordan) Giannakakis
 

Plus de Iordanis (Jordan) Giannakakis (7)

Shazam on Android Wear
Shazam on Android WearShazam on Android Wear
Shazam on Android Wear
 
How to build rock solid apps & keep 100m+ users happy
How to build rock solid apps & keep 100m+ users happyHow to build rock solid apps & keep 100m+ users happy
How to build rock solid apps & keep 100m+ users happy
 
How to build rock solid apps & keep 100m+ users happy
How to build rock solid apps & keep 100m+ users happyHow to build rock solid apps & keep 100m+ users happy
How to build rock solid apps & keep 100m+ users happy
 
Keeping 100m+ users happy: How we test Shazam on Android
Keeping 100m+ users happy: How we test Shazam on AndroidKeeping 100m+ users happy: How we test Shazam on Android
Keeping 100m+ users happy: How we test Shazam on Android
 
How to build rock solid apps and keep 100m+ users happy
How to build rock solid apps and keep 100m+ users happyHow to build rock solid apps and keep 100m+ users happy
How to build rock solid apps and keep 100m+ users happy
 
Introduction to ART (Android Runtime)
Introduction to ART (Android Runtime)Introduction to ART (Android Runtime)
Introduction to ART (Android Runtime)
 
Device fragmentation vs clean code
Device fragmentation vs clean codeDevice fragmentation vs clean code
Device fragmentation vs clean code
 

Dernier

Top Rated Call Girls In chittoor 📱 {7001035870} VIP Escorts chittoor
Top Rated Call Girls In chittoor 📱 {7001035870} VIP Escorts chittoorTop Rated Call Girls In chittoor 📱 {7001035870} VIP Escorts chittoor
Top Rated Call Girls In chittoor 📱 {7001035870} VIP Escorts chittoor
dharasingh5698
 
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
dollysharma2066
 

Dernier (20)

(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
 
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
 
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineering
 
data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdf
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - V
 
Top Rated Call Girls In chittoor 📱 {7001035870} VIP Escorts chittoor
Top Rated Call Girls In chittoor 📱 {7001035870} VIP Escorts chittoorTop Rated Call Girls In chittoor 📱 {7001035870} VIP Escorts chittoor
Top Rated Call Girls In chittoor 📱 {7001035870} VIP Escorts chittoor
 
Intro To Electric Vehicles PDF Notes.pdf
Intro To Electric Vehicles PDF Notes.pdfIntro To Electric Vehicles PDF Notes.pdf
Intro To Electric Vehicles PDF Notes.pdf
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 
Unit 2- Effective stress & Permeability.pdf
Unit 2- Effective stress & Permeability.pdfUnit 2- Effective stress & Permeability.pdf
Unit 2- Effective stress & Permeability.pdf
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
 
Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . ppt
 
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
 
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
 
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leap
 
Unit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfUnit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdf
 
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
 

Device fragmentation vs clean code