SlideShare a Scribd company logo
1 of 31
In the Brain Of...Mark Murphy




    Facets of Fragmentation


                    
Those Who Cannot
    Remember the Past Are
    Condemned to Repeat It
                    George Santayana


               
Past? There's a Past?
              Too Many Android Developers




               
Screen Resolutions
    ●   The Concern: GUI Design
        –   Many existing resolutions
        –   New resolutions cropping up all the time
             ●   Documented support sometimes lags
             ●   Cannot always emulate desired sizes
        –   Designing for multiple resolutions “makes my
            head hurt”


                                       
Screen Resolutions
    ●   Historical Analogue: “The Window”
        –   Invented in the 1970's
        –   Allows for thousands (millions!) of possible
            resolutions
        –   Can be changed by user on the fly




                                      
Screen Resolutions
    ●   The Techniques
        –   RelativeLayout or weight-based LinearLayout
        –   Anything-but-pixels for dimensions
        –   Density-driven drawables
        –   Strategy-based presentation
             ●   Different layouts
             ●   Different presenter implementations


                                      
Screen Resolutions
    ●   What We Could Use
        –   More layout classes and better understanding of
            how to make custom layout classes
        –   More documented UI patterns with layouts and
            sample code
        –   A nice icon library
             ●   ...once the icon styles stabilize


                                          
Framework Changes
    ●   The Concern: Shifting APIs
        –   Deprecate-and-replace
             ●   Contacts
             ●   Sensors
        –   Deprecate-and-don't-replace
             ●   Secure settings




                                    
Framework Changes
    ●   Historical Analogue: “Java”
        –   Threads
        –   Bytecodes (1.4.2 → 1.5)
        –   I/O (streams → readers)
        –   Well over 100 classes, methods, interfaces,
            fields, etc. between Java 1.1 and Java 6.0
        –   Many new classes in each subsequent release

                                   
Framework Changes
    ●   The Techniques
        –   Version detection (android.os.Build)
        –   Reflection
        –   Conditional class loading
             ●   Abstract base class
             ●   Concrete classes for each API level
             ●   Abstract base class creates singleton based on API
                 level
             ●   Rest of app uses singleton
                                        
Framework Changes
    ●   What We Could Use
        –   More canned strategies
             ●   Example: Sensor API → 3D gesture library
        –   More sample wrappers
             ●   E.g., blog post with recommended wrapping
                 approach for each modified/deprecated API




                                       
OS Bugs
    ●   The Concern: Unintentionally Shifting APIs
        –   Example: OpenCORE → StageFright
        –   Flavors
             ●   Code that used to work, and should work, does not
                 work
             ●   New APIs that should work do not work




                                       
OS Bugs
    ●   Historical Analogue: “Windows”
        –   Each major release broke something from
            previous releases
        –   Service packs even more likely to break
            something
        –   Why do you think we have so many IT people?



                                  
OS Bugs
    ●   The Techniques
        –   Mostly the same as for official changes
             ●   Version detection
             ●   Reflection, conditional class loading, etc.
        –   More prone to problems near the edges
             ●   Example: video file formats




                                         
OS Bugs
    ●   What We Could Use
        –   Patience
        –   A case (or 20) of Red Bull
        –   Better/faster feedback on issue tracker




                                    
Presentation Layers
    ●   The Concern: Changing Look and Feel
        –   HTC Sense, MOTOBLUR, TouchWiz, Rachael,...
        –   Effects
             ●   Home screen and app widgets
             ●   Default colors (e.g., orange vs. green)
             ●   Theoretically, nothing else too much




                                         
Presentation Layers
    ●   Historical Analogue: “Themes”
        –   Available on most desktop/notebook OSes
        –   Effects
             ●   Colors used everywhere
             ●   Widget styles (e.g., radio button/checkbox)
             ●   Font sizes




                                        
Presentation Layers
    ●   The Techniques
        –   Will It Blend?
             ●   Make no color assumptions, try to specify as few
                 colors as possible
        –   Assert Your Authority
             ●   Use Android styles and themes and control the color
                 of every item



                                       
Presentation Layers
    ●   What We Could Use
        –   “BrowserCap”-style database
             ●   Mapping android.os.Build → presentation layer
        –   API for presentation layers
             ●   Database would only be needed for earlier Android
                 versions




                                       
Hardware Differences
    ●   The Concern: Devices Different, Dammit!
        –   Expected Differences
             ●   External storage availability
             ●   Camera resolution
        –   Unexpected Differences = No API
             ●   Multiple forms of external storage
             ●   Front-facing camera


                                         
Hardware Differences
    ●   Historical Analogue: “PCs”
        –   Hardware manufacturers used to often leap
            before Microsoft was ready
        –   Examples
             ●   Video cards
             ●   Input devices
             ●   CD burners


                                  
Hardware Differences
    ●   The Techniques
        –   Expected Differences: Use the APIs
             ●   Environment.getExternalStorageState()
             ●   Camera.Parameters values
        –   Unexpected Differences
             ●   SDK add-on
             ●   Lots of switch() statements
             ●   Ignore

                                     
Hardware Differences
    ●   What We Could Use
        –   “BrowserCap”-style database
             ●   Mapping android.os.Build → hardware
                 capabilities
        –   More organized support for advancing hardware
             ●   Android has improved support for expected
                 differences, negligible support for unexpected
                 differences


                                        
Device Bugs
    ●   The Concern: Irreconcilable Differences
        –   MOTOBLUR and 1.5 contacts
        –   Samsung and viewing contacts
        –   Notification “number”
        –   DROID 30fps limit
        –   Theme: bugs impacting compatibility


                                 
Device Bugs
    ●   Historical Analogue: “Damn Well Everything”
        –   Grace Hopper found Mark II hardware bug in
            1947
        –   Steady stream since then
        –   Compatibility issue only relevant for multi-
            vendor platforms
             ●   Android, Windows Mobile, Windows Phone,
                 Windows, Linux
             ●   Not iOS, Blackberry, WebOS, Palm OS, OS X
                                      
Device Bugs
    ●   The Techniques
        –   Strategic: Beef up the Compatibility Test Suite
             ●   Best “contract” between manufacturers and
                 developers, by way of Google
        –   Tactical
             ●   Drop features based on device
             ●   Find workarounds


                                       
Device Bugs
    ●   What We Could Use
        –   “BrowserCap”-style database
             ●   Mapping android.os.Build → recognizable
                 hardware limits (e.g., 30fps), identified flaws (e.g.,
                 notification “number”)
        –   Streamlined contribution process to CTS
             ●   Or perhaps just better documentation using CTS as
                 example


                                         
Self-Fragmentation
    ●   Going Past the SDK Boundaries
        –   Accessing public non-SDK classes and methods
            via reflection
        –   Using command-line utilities via Runtime.exec()
        –   Listening on undocumented broadcasts
    ●   Flaw: Android May Change


                                  
Self-Fragmentation
    ●   Treating Common Apps as OS Components
        –   Using undocumented app content providers
             ●   Calendar
             ●   Messaging
        –   Directly invoking activities via component names
    ●   Flaws
        –   Android may change
        –   Apps may be replaced by OEMs
                                  
Self-Fragmentation
    ●   You Are Welcome to Take the Risk
        –   “It's a free country...”
        –   Cannot do this on iOS App Store!
    ●   No Grounds for Complaints
        –   Systemic changes (e.g., Android OS releases)
        –   Device changes


                                        
Free As In...
    ●   Most Problems Due to Freedom
        –   Device manufacturers have broad latitude
        –   Developers don't have to play by the rules
        –   Exacerbated by rapid pace of evolution
    ●   Improvements Over Time
        –   Slower rate of change, stronger CTS
        –   More community support structures

 
    ●   Be the Change You Seek     

More Related Content

Viewers also liked

Viewers also liked (11)

Linkin park
Linkin parkLinkin park
Linkin park
 
DGH Lecture Series: Kenneth Sherr
DGH Lecture Series: Kenneth SherrDGH Lecture Series: Kenneth Sherr
DGH Lecture Series: Kenneth Sherr
 
Het I S S
Het  I S SHet  I S S
Het I S S
 
IBM_WebSphere_04_52_04_PM
IBM_WebSphere_04_52_04_PMIBM_WebSphere_04_52_04_PM
IBM_WebSphere_04_52_04_PM
 
IRAN SAKHT CRANE CO
IRAN SAKHT CRANE COIRAN SAKHT CRANE CO
IRAN SAKHT CRANE CO
 
Cert 103
Cert 103Cert 103
Cert 103
 
Seguridad informatica
Seguridad informaticaSeguridad informatica
Seguridad informatica
 
Builiding Byes laws
Builiding Byes laws Builiding Byes laws
Builiding Byes laws
 
Ssc1516 lyrics escolàpies el masnou just do it - can you help me
Ssc1516 lyrics escolàpies el masnou just do it - can you help meSsc1516 lyrics escolàpies el masnou just do it - can you help me
Ssc1516 lyrics escolàpies el masnou just do it - can you help me
 
Peritoneo y 9 cuadrantes abdominales
Peritoneo y 9 cuadrantes abdominalesPeritoneo y 9 cuadrantes abdominales
Peritoneo y 9 cuadrantes abdominales
 
Proposal
ProposalProposal
Proposal
 

Similar to Facets Of Fragmentation by Mark Murphy

Android Development...The 20,000-Foot View
Android Development...The 20,000-Foot ViewAndroid Development...The 20,000-Foot View
Android Development...The 20,000-Foot ViewCommonsWare
 
Full stack development
Full stack developmentFull stack development
Full stack developmentArnav Gupta
 
LAS16-108: JerryScript and other scripting languages for IoT
LAS16-108: JerryScript and other scripting languages for IoTLAS16-108: JerryScript and other scripting languages for IoT
LAS16-108: JerryScript and other scripting languages for IoTLinaro
 
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Opersys inc.
 
Making A Game Engine Is Easier Than You Think
Making A Game Engine Is Easier Than You ThinkMaking A Game Engine Is Easier Than You Think
Making A Game Engine Is Easier Than You ThinkGorm Lai
 
Planning your Dream Mobile App
Planning your Dream Mobile AppPlanning your Dream Mobile App
Planning your Dream Mobile AppSean Katz
 
Castle Game Engine and the joy of making and using a custom game engine
Castle Game Engine and the joy  of making and using a custom game engineCastle Game Engine and the joy  of making and using a custom game engine
Castle Game Engine and the joy of making and using a custom game engineMichalis Kamburelis
 
Web vs Native introduction
Web vs Native introductionWeb vs Native introduction
Web vs Native introductionandroidaalto
 
From Silicon to Software - IIT Madras
From Silicon to Software - IIT MadrasFrom Silicon to Software - IIT Madras
From Silicon to Software - IIT MadrasAanjhan Ranganathan
 
Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)ncoghlan_dev
 
Choose a pattern for a problem
Choose a pattern for a problemChoose a pattern for a problem
Choose a pattern for a problemAnton Keks
 
Enhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_osEnhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_osArnav Gupta
 
Adaptive Design for Android
Adaptive Design for AndroidAdaptive Design for Android
Adaptive Design for AndroidNi Yan
 
Android: Dealing with Different Devices
Android: Dealing with Different DevicesAndroid: Dealing with Different Devices
Android: Dealing with Different DevicesCommonsWare
 
Enhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_osEnhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_osArnav Gupta
 
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)Ron Munitz
 
Hardware Detection Tool
Hardware Detection ToolHardware Detection Tool
Hardware Detection ToolAnne Nicolas
 
Porting Android apps to the Series 40 platform
Porting Android apps to the Series 40 platformPorting Android apps to the Series 40 platform
Porting Android apps to the Series 40 platformMicrosoft Mobile Developer
 

Similar to Facets Of Fragmentation by Mark Murphy (20)

Android Development...The 20,000-Foot View
Android Development...The 20,000-Foot ViewAndroid Development...The 20,000-Foot View
Android Development...The 20,000-Foot View
 
Full stack development
Full stack developmentFull stack development
Full stack development
 
LAS16-108: JerryScript and other scripting languages for IoT
LAS16-108: JerryScript and other scripting languages for IoTLAS16-108: JerryScript and other scripting languages for IoT
LAS16-108: JerryScript and other scripting languages for IoT
 
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012
 
Linux para iniciantes
Linux para iniciantesLinux para iniciantes
Linux para iniciantes
 
Making A Game Engine Is Easier Than You Think
Making A Game Engine Is Easier Than You ThinkMaking A Game Engine Is Easier Than You Think
Making A Game Engine Is Easier Than You Think
 
Planning your Dream Mobile App
Planning your Dream Mobile AppPlanning your Dream Mobile App
Planning your Dream Mobile App
 
Android : Deep dive into developing MobileApp using Android
Android : Deep dive into developing MobileApp using AndroidAndroid : Deep dive into developing MobileApp using Android
Android : Deep dive into developing MobileApp using Android
 
Castle Game Engine and the joy of making and using a custom game engine
Castle Game Engine and the joy  of making and using a custom game engineCastle Game Engine and the joy  of making and using a custom game engine
Castle Game Engine and the joy of making and using a custom game engine
 
Web vs Native introduction
Web vs Native introductionWeb vs Native introduction
Web vs Native introduction
 
From Silicon to Software - IIT Madras
From Silicon to Software - IIT MadrasFrom Silicon to Software - IIT Madras
From Silicon to Software - IIT Madras
 
Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)
 
Choose a pattern for a problem
Choose a pattern for a problemChoose a pattern for a problem
Choose a pattern for a problem
 
Enhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_osEnhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_os
 
Adaptive Design for Android
Adaptive Design for AndroidAdaptive Design for Android
Adaptive Design for Android
 
Android: Dealing with Different Devices
Android: Dealing with Different DevicesAndroid: Dealing with Different Devices
Android: Dealing with Different Devices
 
Enhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_osEnhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_os
 
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
BYOD Revisited: Build Your Own Device (Embedded Linux Conference 2014)
 
Hardware Detection Tool
Hardware Detection ToolHardware Detection Tool
Hardware Detection Tool
 
Porting Android apps to the Series 40 platform
Porting Android apps to the Series 40 platformPorting Android apps to the Series 40 platform
Porting Android apps to the Series 40 platform
 

More from Skills Matter

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard LawrenceSkills Matter
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applicationsSkills Matter
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmSkills Matter
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimSkills Matter
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Skills Matter
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlSkills Matter
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsSkills Matter
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Skills Matter
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Skills Matter
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldSkills Matter
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Skills Matter
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Skills Matter
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingSkills Matter
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveSkills Matter
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSkills Matter
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tSkills Matter
 

More from Skills Matter (20)

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberl
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.js
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source world
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testing
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
 
Serendipity-neo4j
Serendipity-neo4jSerendipity-neo4j
Serendipity-neo4j
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Plug 20110217
Plug   20110217Plug   20110217
Plug 20110217
 
Lug presentation
Lug presentationLug presentation
Lug presentation
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
 
Plug saiku
Plug   saikuPlug   saiku
Plug saiku
 

Recently uploaded

Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Recently uploaded (20)

Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

Facets Of Fragmentation by Mark Murphy

  • 1. In the Brain Of...Mark Murphy Facets of Fragmentation    
  • 2. Those Who Cannot Remember the Past Are Condemned to Repeat It George Santayana    
  • 3. Past? There's a Past? Too Many Android Developers    
  • 4. Screen Resolutions ● The Concern: GUI Design – Many existing resolutions – New resolutions cropping up all the time ● Documented support sometimes lags ● Cannot always emulate desired sizes – Designing for multiple resolutions “makes my head hurt”    
  • 5. Screen Resolutions ● Historical Analogue: “The Window” – Invented in the 1970's – Allows for thousands (millions!) of possible resolutions – Can be changed by user on the fly    
  • 6. Screen Resolutions ● The Techniques – RelativeLayout or weight-based LinearLayout – Anything-but-pixels for dimensions – Density-driven drawables – Strategy-based presentation ● Different layouts ● Different presenter implementations    
  • 7. Screen Resolutions ● What We Could Use – More layout classes and better understanding of how to make custom layout classes – More documented UI patterns with layouts and sample code – A nice icon library ● ...once the icon styles stabilize    
  • 8. Framework Changes ● The Concern: Shifting APIs – Deprecate-and-replace ● Contacts ● Sensors – Deprecate-and-don't-replace ● Secure settings    
  • 9. Framework Changes ● Historical Analogue: “Java” – Threads – Bytecodes (1.4.2 → 1.5) – I/O (streams → readers) – Well over 100 classes, methods, interfaces, fields, etc. between Java 1.1 and Java 6.0 – Many new classes in each subsequent release    
  • 10. Framework Changes ● The Techniques – Version detection (android.os.Build) – Reflection – Conditional class loading ● Abstract base class ● Concrete classes for each API level ● Abstract base class creates singleton based on API level ● Rest of app uses singleton    
  • 11. Framework Changes ● What We Could Use – More canned strategies ● Example: Sensor API → 3D gesture library – More sample wrappers ● E.g., blog post with recommended wrapping approach for each modified/deprecated API    
  • 12. OS Bugs ● The Concern: Unintentionally Shifting APIs – Example: OpenCORE → StageFright – Flavors ● Code that used to work, and should work, does not work ● New APIs that should work do not work    
  • 13. OS Bugs ● Historical Analogue: “Windows” – Each major release broke something from previous releases – Service packs even more likely to break something – Why do you think we have so many IT people?    
  • 14. OS Bugs ● The Techniques – Mostly the same as for official changes ● Version detection ● Reflection, conditional class loading, etc. – More prone to problems near the edges ● Example: video file formats    
  • 15. OS Bugs ● What We Could Use – Patience – A case (or 20) of Red Bull – Better/faster feedback on issue tracker    
  • 16. Presentation Layers ● The Concern: Changing Look and Feel – HTC Sense, MOTOBLUR, TouchWiz, Rachael,... – Effects ● Home screen and app widgets ● Default colors (e.g., orange vs. green) ● Theoretically, nothing else too much    
  • 17. Presentation Layers ● Historical Analogue: “Themes” – Available on most desktop/notebook OSes – Effects ● Colors used everywhere ● Widget styles (e.g., radio button/checkbox) ● Font sizes    
  • 18. Presentation Layers ● The Techniques – Will It Blend? ● Make no color assumptions, try to specify as few colors as possible – Assert Your Authority ● Use Android styles and themes and control the color of every item    
  • 19. Presentation Layers ● What We Could Use – “BrowserCap”-style database ● Mapping android.os.Build → presentation layer – API for presentation layers ● Database would only be needed for earlier Android versions    
  • 20. Hardware Differences ● The Concern: Devices Different, Dammit! – Expected Differences ● External storage availability ● Camera resolution – Unexpected Differences = No API ● Multiple forms of external storage ● Front-facing camera    
  • 21. Hardware Differences ● Historical Analogue: “PCs” – Hardware manufacturers used to often leap before Microsoft was ready – Examples ● Video cards ● Input devices ● CD burners    
  • 22. Hardware Differences ● The Techniques – Expected Differences: Use the APIs ● Environment.getExternalStorageState() ● Camera.Parameters values – Unexpected Differences ● SDK add-on ● Lots of switch() statements ● Ignore    
  • 23. Hardware Differences ● What We Could Use – “BrowserCap”-style database ● Mapping android.os.Build → hardware capabilities – More organized support for advancing hardware ● Android has improved support for expected differences, negligible support for unexpected differences    
  • 24. Device Bugs ● The Concern: Irreconcilable Differences – MOTOBLUR and 1.5 contacts – Samsung and viewing contacts – Notification “number” – DROID 30fps limit – Theme: bugs impacting compatibility    
  • 25. Device Bugs ● Historical Analogue: “Damn Well Everything” – Grace Hopper found Mark II hardware bug in 1947 – Steady stream since then – Compatibility issue only relevant for multi- vendor platforms ● Android, Windows Mobile, Windows Phone, Windows, Linux ● Not iOS, Blackberry, WebOS, Palm OS, OS X    
  • 26. Device Bugs ● The Techniques – Strategic: Beef up the Compatibility Test Suite ● Best “contract” between manufacturers and developers, by way of Google – Tactical ● Drop features based on device ● Find workarounds    
  • 27. Device Bugs ● What We Could Use – “BrowserCap”-style database ● Mapping android.os.Build → recognizable hardware limits (e.g., 30fps), identified flaws (e.g., notification “number”) – Streamlined contribution process to CTS ● Or perhaps just better documentation using CTS as example    
  • 28. Self-Fragmentation ● Going Past the SDK Boundaries – Accessing public non-SDK classes and methods via reflection – Using command-line utilities via Runtime.exec() – Listening on undocumented broadcasts ● Flaw: Android May Change    
  • 29. Self-Fragmentation ● Treating Common Apps as OS Components – Using undocumented app content providers ● Calendar ● Messaging – Directly invoking activities via component names ● Flaws – Android may change – Apps may be replaced by OEMs    
  • 30. Self-Fragmentation ● You Are Welcome to Take the Risk – “It's a free country...” – Cannot do this on iOS App Store! ● No Grounds for Complaints – Systemic changes (e.g., Android OS releases) – Device changes    
  • 31. Free As In... ● Most Problems Due to Freedom – Device manufacturers have broad latitude – Developers don't have to play by the rules – Exacerbated by rapid pace of evolution ● Improvements Over Time – Slower rate of change, stronger CTS – More community support structures   ● Be the Change You Seek