SlideShare a Scribd company logo
copying iOS apps since 2010!
Cross Platform = 🚮
Platforms Converging
Today: mostly web
Our Position
Mobile 1st means
Mobile Leads
Mobile 1st means
Mobile Leads
There will be multiple
solutions
Pick something
I Can’t See
The Future
It’ll Be OK
Zooming in…
Doppl
Android-centric Code Sharing
J2objc
JRE
(lang, io, util, etc)
Android
(Log, ?)
JUnit Mockito
J2ObjC
JRE
(lang, io, util, etc)
Android
(Log, ?)
Gradle Plugin Library Format
JUnit Mockito
J2ObjC
Doppl
JRE
(lang, io, util, etc)
Android
(Log, ?)
JUnit Mockito
JRE
(lang, io, util, etc)
Android
(Log, ?)
Android
(Context, SQLiteDatabase,
Threading, Shared Preferences)
JUnit Mockito
J2ObjC
Doppl
JRE
(lang, io, util, etc)
Android
(Log, ?)
JUnit Mockito
Gradle Plugin Library Format
JRE
(lang, io, util, etc)
Android
(Log, ?)
JUnit Mockito
J2ObjC
Doppl
JRE
(lang, io, util, etc)
Android
(Log, ?)
JUnit Mockito
Android
(Context, SQLiteDatabase,
Threading, Shared Preferences)
Gradle Plugin Library Format
Testing Support
JRE
(lang, io, util, etc)
Android
(Log, ?)
JUnit Mockito
J2ObjC
Doppl
JRE
(lang, io, util, etc)
Android
(Log, ?)
JUnit Mockito
Android
(Context, SQLiteDatabase,
Threading, Shared Preferences)
Gradle Plugin Library Format
Retrofit
RxJava
RxAndroid
Gson
Dagger
SQLDelight
Room DB
Android
Architecture
etc…
Testing Support
JRE
(lang, io, util, etc)
Android
(Log, ?)
Android
(Context, SQLiteDatabase,
Threading, Shared Preferences)
Gradle Plugin Library Format
Retrofit
RxJava
RxAndroid
Gson
Dagger
SQLDelight
Room DB
Android
Architecture
etc…
Testing Support Xcode Support
JUnit Mockito
J2ObjC
Doppl
JRE
(lang, io, util, etc)
Android
(Log, ?)
JUnit Mockito
Share logic and
architecture
Similar Platforms
Similar Platforms
Right!
Similar Platforms
Nope
Android and iOS
Same methods, different names
Architecture is Hard
Fractivities
Architecture Components
Looper, Handler,
Message Queue Retrofit
SQLite
(Room, etc)
java.io.File
Android
Android Native
Stuff
Easy To Share
Fractivities
Architecture Components
Looper, Handler,
Message Queue Retrofit
SQLite
(Room, etc)
java.io.File
Android
ViewControllers
Architecture Components
Looper, Handler,
Message Queue Retrofit
SQLite
(Room, etc)
java.io.File
iOS
Android Native
Stuff
Easy To Share
iOS Native Stuff
Not Sharing UI
Great in some domains,
but…
Don’t Stare
One UI by design
Why Doppl?
Points of Interest
Smooth Interop
Android is 100%
Native
MVVM on iOS
Main
Main
Test
Do UI Shit
Do UI Shit
MVVM
Logic and Architecture
Development
Efficiency
Kotlin
C/C++
Assembly
Native Tools are Best
Platform Tax
November
November December
November December January
November December January February
November December January February March?
Which takes longer to
build?
The first platform takes
much longer to build
Platform tax is on
everything
Doppl has no tax
Iterate product on android
Share logic and architecture to iOS
Product differentiation
is Iteration
Star folders are awesome, right?
Sure!
Cooperative Sharing
No Big Decisions
Android is 100%
Native
2 Native == No Risk
High Efficiency/Low Risk
OK, but should
Android devs care?
Your Team
Community Level
Kotlin
JVM JS
Kotlin
JRE JS Native
Kotlin
JRE JS Native
Kotlin
WASM?
NativeKotlin
Kotlin
Kotlin Lib Kotlin Lib Kotlin Lib
Objc Lib
UIKit (Objc)
Foundation
(Objc)
Kotlin
Kotlin Lib Kotlin Lib Kotlin Lib
Objc Lib
Swift (or whatever)
Kotlin
Kotlin Lib Kotlin Lib Kotlin Lib
Objc Lib
Swift (or whatever)
Callbacks
Kotlin libraries need to
be native friendly
When?
Kotlin
Java
APK
Android
Kotlin
Java
APK
Android
Kotlin
???
iOS App
iOS
UIKit
Kotlin
Java/Doppl
APK
Android
Kotlin iOS App
iOS
UIKit
JotlinAPK Swift iOS App
Kotlin
Java/Doppl
Android iOS
JotlinAPK Swift iOS App
Kotlin
Java/Doppl
Android iOS
Java/JNI/C++/Rust Objc/C++/Rust
Libraries! Libraries! Libraries!
Check out Rust
Mark Murphy
Fixing the docs
http://doppl.co
About Screen
Or… @kpgalligan

More Related Content

What's hot

Mobile Programming - 1 Introduction
Mobile Programming - 1 IntroductionMobile Programming - 1 Introduction
Mobile Programming - 1 Introduction
AndiNurkholis1
 
Top reason to choose flutter app development
Top reason to choose flutter app developmentTop reason to choose flutter app development
Top reason to choose flutter app development
ElenorWisozk
 
Academy PRO: React Native - introduction
Academy PRO: React Native - introductionAcademy PRO: React Native - introduction
Academy PRO: React Native - introduction
Binary Studio
 
Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11 Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11
Lars Vogel
 
What To Choose Between - Native App And Hybrid Mobile App
What To Choose Between - Native App And Hybrid Mobile AppWhat To Choose Between - Native App And Hybrid Mobile App
What To Choose Between - Native App And Hybrid Mobile App
Mindbowser Inc
 
Flutter 2.2 version | skywave info solutions
Flutter 2.2 version | skywave info solutionsFlutter 2.2 version | skywave info solutions
Flutter 2.2 version | skywave info solutions
Skywave Info Solutions
 
Kotlin vs flutter which is better for doing business
Kotlin vs flutter  which is better for doing business Kotlin vs flutter  which is better for doing business
Kotlin vs flutter which is better for doing business
Concetto Labs
 
Swift
SwiftSwift
What is a Native Application and Why We Need Them
What is a Native Application and Why We Need ThemWhat is a Native Application and Why We Need Them
What is a Native Application and Why We Need Them
Subham Mazumdar
 
Cross platform mobile development with Corona
Cross platform mobile development with CoronaCross platform mobile development with Corona
Cross platform mobile development with Corona
KMS Technology
 
Compilation Of C/C++ program in Android
Compilation Of C/C++ program in AndroidCompilation Of C/C++ program in Android
Compilation Of C/C++ program in Android
rahulverma1080
 
Flutter vs React Native 2019
Flutter vs React Native 2019Flutter vs React Native 2019
Flutter vs React Native 2019
Rockers Technology
 
Choose flutter
Choose flutterChoose flutter
Choose flutter
SamuelAdetunji2
 
Must know about programming on the pc and typing faster on the keyboard
Must know about programming on the pc and typing faster on the keyboardMust know about programming on the pc and typing faster on the keyboard
Must know about programming on the pc and typing faster on the keyboard
FhfhfhJfjf
 
Kotlin for android development
Kotlin for android developmentKotlin for android development
Kotlin for android development
Jalpesh Vasa
 
iOS Development, with Swift and XCode
iOS Development, with Swift and XCodeiOS Development, with Swift and XCode
iOS Development, with Swift and XCode
Wan Leung Wong
 
Programming names
Programming namesProgramming names
Programming names
Basavaraj Hampali
 
Android study jams
Android study jamsAndroid study jams
Android study jams
GDSCIIITR
 
Swift vs flutter pixel values technolabs
Swift vs flutter pixel values technolabsSwift vs flutter pixel values technolabs
Swift vs flutter pixel values technolabs
Pixel Values Technolabs
 
Learning android with AOSP
Learning android with AOSPLearning android with AOSP
Learning android with AOSP
Jorge Barroso
 

What's hot (20)

Mobile Programming - 1 Introduction
Mobile Programming - 1 IntroductionMobile Programming - 1 Introduction
Mobile Programming - 1 Introduction
 
Top reason to choose flutter app development
Top reason to choose flutter app developmentTop reason to choose flutter app development
Top reason to choose flutter app development
 
Academy PRO: React Native - introduction
Academy PRO: React Native - introductionAcademy PRO: React Native - introduction
Academy PRO: React Native - introduction
 
Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11 Android Introduction on Java Forum Stuttgart 11
Android Introduction on Java Forum Stuttgart 11
 
What To Choose Between - Native App And Hybrid Mobile App
What To Choose Between - Native App And Hybrid Mobile AppWhat To Choose Between - Native App And Hybrid Mobile App
What To Choose Between - Native App And Hybrid Mobile App
 
Flutter 2.2 version | skywave info solutions
Flutter 2.2 version | skywave info solutionsFlutter 2.2 version | skywave info solutions
Flutter 2.2 version | skywave info solutions
 
Kotlin vs flutter which is better for doing business
Kotlin vs flutter  which is better for doing business Kotlin vs flutter  which is better for doing business
Kotlin vs flutter which is better for doing business
 
Swift
SwiftSwift
Swift
 
What is a Native Application and Why We Need Them
What is a Native Application and Why We Need ThemWhat is a Native Application and Why We Need Them
What is a Native Application and Why We Need Them
 
Cross platform mobile development with Corona
Cross platform mobile development with CoronaCross platform mobile development with Corona
Cross platform mobile development with Corona
 
Compilation Of C/C++ program in Android
Compilation Of C/C++ program in AndroidCompilation Of C/C++ program in Android
Compilation Of C/C++ program in Android
 
Flutter vs React Native 2019
Flutter vs React Native 2019Flutter vs React Native 2019
Flutter vs React Native 2019
 
Choose flutter
Choose flutterChoose flutter
Choose flutter
 
Must know about programming on the pc and typing faster on the keyboard
Must know about programming on the pc and typing faster on the keyboardMust know about programming on the pc and typing faster on the keyboard
Must know about programming on the pc and typing faster on the keyboard
 
Kotlin for android development
Kotlin for android developmentKotlin for android development
Kotlin for android development
 
iOS Development, with Swift and XCode
iOS Development, with Swift and XCodeiOS Development, with Swift and XCode
iOS Development, with Swift and XCode
 
Programming names
Programming namesProgramming names
Programming names
 
Android study jams
Android study jamsAndroid study jams
Android study jams
 
Swift vs flutter pixel values technolabs
Swift vs flutter pixel values technolabsSwift vs flutter pixel values technolabs
Swift vs flutter pixel values technolabs
 
Learning android with AOSP
Learning android with AOSPLearning android with AOSP
Learning android with AOSP
 

Similar to Doppl Code Sharing

Titanium Overview (Mobile March 2011)
Titanium Overview (Mobile March 2011)Titanium Overview (Mobile March 2011)
Titanium Overview (Mobile March 2011)
Kevin Whinnery
 
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
Kai Koenig
 
Html5 investigation
Html5 investigationHtml5 investigation
Html5 investigation
oppokui
 
How to become an android developer
How to become an android developerHow to become an android developer
How to become an android developer
um_adeveloper
 
Android Session.pdf
Android Session.pdfAndroid Session.pdf
Android Session.pdf
20TUCS033DHAMODHARAK
 
ID-ObjectiveConference 2012 - Introduction to iOS Development
ID-ObjectiveConference 2012 - Introduction to iOS DevelopmentID-ObjectiveConference 2012 - Introduction to iOS Development
ID-ObjectiveConference 2012 - Introduction to iOS Development
Andri Yadi
 
An introduction to Titanium
An introduction to TitaniumAn introduction to Titanium
An introduction to Titanium
Graham Weldon
 
Bringing the Ruby language into the mobile world
Bringing the Ruby language into the mobile worldBringing the Ruby language into the mobile world
Bringing the Ruby language into the mobile world
Laurent Sansonetti
 
Code and Conquer with Globe Labs, October 27, 2012
Code and Conquer with Globe Labs, October 27, 2012Code and Conquer with Globe Labs, October 27, 2012
Code and Conquer with Globe Labs, October 27, 2012
jobandesther
 
Mobile Delivery Run Through
Mobile Delivery Run ThroughMobile Delivery Run Through
Mobile Delivery Run Through
Mike Hartington
 
Android | Xamarin | Mobile Application development
Android | Xamarin | Mobile Application developmentAndroid | Xamarin | Mobile Application development
Android | Xamarin | Mobile Application development
KrishnaMildain
 
Write cross platform native apps in Ruby
Write cross platform native apps in RubyWrite cross platform native apps in Ruby
Write cross platform native apps in Ruby
Giedrius Rimkus
 
BlackBerry10 and iOS app SDK/Platform Comparison
BlackBerry10 and iOS app SDK/Platform ComparisonBlackBerry10 and iOS app SDK/Platform Comparison
BlackBerry10 and iOS app SDK/Platform Comparison
Dr. Ranbijay Kumar
 
IOS vs Android presentation by Saikrishna
IOS vs Android presentation by SaikrishnaIOS vs Android presentation by Saikrishna
IOS vs Android presentation by Saikrishna
Saikrishna Tanguturu
 
Overlook to the Future of Mobile Application Development- TechGropse.pdf
Overlook to the Future of Mobile Application Development- TechGropse.pdfOverlook to the Future of Mobile Application Development- TechGropse.pdf
Overlook to the Future of Mobile Application Development- TechGropse.pdf
sandeepsrivastav17
 
Android with kotlin course
Android with kotlin courseAndroid with kotlin course
Android with kotlin course
Abdul Rahman Masri Attal
 
Development of Mobile Application -PPT
Development of Mobile Application -PPTDevelopment of Mobile Application -PPT
Development of Mobile Application -PPT
Dhivya T
 
Cordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirstCordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirst
Raymond Camden
 
Felgo vs. Flutter vs. React Native: An in-Depth Comparison
Felgo vs. Flutter vs. React Native: An in-Depth ComparisonFelgo vs. Flutter vs. React Native: An in-Depth Comparison
Felgo vs. Flutter vs. React Native: An in-Depth Comparison
Katy Slemon
 
Modern mobile development overview
Modern mobile development overviewModern mobile development overview
Modern mobile development overview
Dima Maleev
 

Similar to Doppl Code Sharing (20)

Titanium Overview (Mobile March 2011)
Titanium Overview (Mobile March 2011)Titanium Overview (Mobile March 2011)
Titanium Overview (Mobile March 2011)
 
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
 
Html5 investigation
Html5 investigationHtml5 investigation
Html5 investigation
 
How to become an android developer
How to become an android developerHow to become an android developer
How to become an android developer
 
Android Session.pdf
Android Session.pdfAndroid Session.pdf
Android Session.pdf
 
ID-ObjectiveConference 2012 - Introduction to iOS Development
ID-ObjectiveConference 2012 - Introduction to iOS DevelopmentID-ObjectiveConference 2012 - Introduction to iOS Development
ID-ObjectiveConference 2012 - Introduction to iOS Development
 
An introduction to Titanium
An introduction to TitaniumAn introduction to Titanium
An introduction to Titanium
 
Bringing the Ruby language into the mobile world
Bringing the Ruby language into the mobile worldBringing the Ruby language into the mobile world
Bringing the Ruby language into the mobile world
 
Code and Conquer with Globe Labs, October 27, 2012
Code and Conquer with Globe Labs, October 27, 2012Code and Conquer with Globe Labs, October 27, 2012
Code and Conquer with Globe Labs, October 27, 2012
 
Mobile Delivery Run Through
Mobile Delivery Run ThroughMobile Delivery Run Through
Mobile Delivery Run Through
 
Android | Xamarin | Mobile Application development
Android | Xamarin | Mobile Application developmentAndroid | Xamarin | Mobile Application development
Android | Xamarin | Mobile Application development
 
Write cross platform native apps in Ruby
Write cross platform native apps in RubyWrite cross platform native apps in Ruby
Write cross platform native apps in Ruby
 
BlackBerry10 and iOS app SDK/Platform Comparison
BlackBerry10 and iOS app SDK/Platform ComparisonBlackBerry10 and iOS app SDK/Platform Comparison
BlackBerry10 and iOS app SDK/Platform Comparison
 
IOS vs Android presentation by Saikrishna
IOS vs Android presentation by SaikrishnaIOS vs Android presentation by Saikrishna
IOS vs Android presentation by Saikrishna
 
Overlook to the Future of Mobile Application Development- TechGropse.pdf
Overlook to the Future of Mobile Application Development- TechGropse.pdfOverlook to the Future of Mobile Application Development- TechGropse.pdf
Overlook to the Future of Mobile Application Development- TechGropse.pdf
 
Android with kotlin course
Android with kotlin courseAndroid with kotlin course
Android with kotlin course
 
Development of Mobile Application -PPT
Development of Mobile Application -PPTDevelopment of Mobile Application -PPT
Development of Mobile Application -PPT
 
Cordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirstCordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirst
 
Felgo vs. Flutter vs. React Native: An in-Depth Comparison
Felgo vs. Flutter vs. React Native: An in-Depth ComparisonFelgo vs. Flutter vs. React Native: An in-Depth Comparison
Felgo vs. Flutter vs. React Native: An in-Depth Comparison
 
Modern mobile development overview
Modern mobile development overviewModern mobile development overview
Modern mobile development overview
 

Recently uploaded

Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 

Recently uploaded (20)

Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 

Doppl Code Sharing

Editor's Notes

  1. Hello! ⅓ Doppl Some ecosystem and advocacy
  2. Building mobile, 2 incompatible ideas 1. Programming is basically the reduction of repetitive work 2. We’re repeating a lot of work Not unqiue to mobile Mobile scale is unique Games is close, but games has 1 UI, which I’ll talk about later
  3. I am Kevin Galligan. Android since 2008. Started touchlab in 2010. Just Android till the last year or so. Most of our work is “copy iPhone app”. Understand the mechanics and math of copying code.
  4. Hitting this right at the start. Cross platform tools suck. We all kind of hate them. At the same time, I think most of us have been expecting the situation to change at some point. I think that’s kind of now, or really starting before now. Background environment is changing, and better tools emerging. Part of this talk is reframing your thinking.
  5. We’ve heard “cross platform is coming!” for years. After a while it’s easy to believe that’s not true. There’s a lot of shit out there. Change will be gradual, so it’ll be really easy to not notice. It won’t be like Flash, where the market just decides its over.
  6. Mobile is mature. There are 2 platforms, and the web. 2+1. That’s it. Years of stability. Developers have time to iterate We have very forgiving devices Millions of apps. Billions of hours of dev time. Things will change.
  7. Most of the solutions are coming from the web. That should be obvious. Many more web devs. They’ve had a decade to work on this. React Native, and anything Javascript, is web Guess what? It’ll probably mostly be web, because it’s mostly web devs, however
  8. This is a summary of our position on the topic
  9. Name of talk I’m giving at a Swift conference. We’ve been working on architecture and frameworks for years for mobile. I don’t think the “solution” should automatically come from the web. Everything doesn’t need to be Javascript. Not saying web dev sucks. There are amazing and interesting things happening on the web. There’s also a largely different set of assumptions and restrictions. It’s possible I’m wrong and mobile turns into one big web things, but…
  10. If your team is mostly web devs with React experience, React Native. Of course. Discussion turns into “what about this”, or “why not that?” “What’s wrong with React Native?” “I don’t think you understand React’s model”, “Why do you hate Javascript?” Since this is a Googley crowd, “oh, you should use Flutter” “Everything will be Flutter soon”. “Oh, what you’re building is like Flutter, but Flutter has…” There will be multiple solutions. They’re all going to exist. Some will be more popular than others, but there won’t be a singular “thing”. It’s also important to discuss the context of what you’re building, like is this an app for you child’s soccer team or a bank, but I digress. Regardless of what solutions...
  11. Having lots of big org talks. Conversation isn’t “should we look at things”. It’s “what are the options?” Lots of places picking something. Swift talk is about this. Lots of web solutions. We’re (touchlab) working on an Android thing, as is Kotlin Native. Nobody’s working on the Swift thing, and it needs to come from the community. To be clear. Part of this talk is the same message. If you like this kind of thing, you should play with it and tell people about it. Pitch in if you’ve got time.
  12. I won’t predict the future. What the hell do I know? Will tell you what we’ve built, what else is happening, and see how it goes.
  13. Also, we should take this lightly. Whatever stuff comes out, it’ll probably be pretty good. You’re smart, and can learn new tech if you need to. It is fun to try to tackle big problems and bring new ideas to the table.
  14. Going from 10,000ft to 10ft view
  15. Android-centric Code Sharing It’s a very Android-leaning, code-sharing solution. We don’t really say “cross platform”. It’s a ruined term, and not really accurate anyway.
  16. The core tech is J2objc. Converts Java to Objective C Made by Google
  17. Sheets, Inbox, for example
  18. Very stable 2.0.4 Very hard to use Just “logic”
  19. Java Runtime, a very little bit of Android, some other libraries (JUnit, Mockito)
  20. Gradle Plugin/Library Format. Build system familiar to Android developers. Dependency configs.
  21. • Sqlite • shared preferences • Context • Threading (messagequeue, looper, handler) • Other stuff • What makes sense in iOS context and is often used by libraries/apps
  22. • Instrumentation Junit runner • Helper classes
  23. • RxJava 2 • Retrofit 2 • Gson • Dagger • Room DB • Android Architecture • (some others)
  24. • Cocoapod definitions that automate Xcode integration. • Share code, call from Swift. No bullshit. Why all this stuff?
  25. Cross platform discussion tends to be sharing “business logic” vs “everything” We’re talking about 3 things: biz logic, ui, and architecture
  26. This blog post came out a few weeks ago. I agree with a lot of their points, but they go way too far on some things.
  27. Lots of the same stuff with different method names.
  28. Lots of the same stuff with different method names.
  29. Very similar • Threading • Sqlite • local files • Unix-y • Networking • Gps • Etc Below the UI they are extremely similar. Same Methods Different names Sugar water in a can
  30. How many libraries deal with architecture? Blog posts on MVP vs MVVM, clean architecture, yada yada? Testable architecture is a big deal. We talk about architecture all the time, and Android and iOS are very similar below UI, so I think there’s value in reusing it.
  31. Doppl does work and the process is pretty smooth. Performance is pretty great.
  32. Leverage the hard stuff. This actually works, and isn’t terrible. That’s why I’m here. MVVM works fine on iOS. VIPER would be fine on Android. They’re not platform specific ideas.
  33. Shared UI has generally not gone well.
  34. It does work well in certain places. Apps where you don’t have much choice.
  35. Aside: React Native is *not* shared UI. I think that’s a broad misconception. There are libraries attempting to work on it, but ultimately, you do a lot of platform specific coding.
  36. We wouldn’t be here if shared UI was good, because…
  37. Games! Mentioned earlier. Games generally need 1 UI. Pretty rare that you code a game twice. Most code shared. It’s tempting to think that if we could just make a single UI for apps, that we could solve the problem (*cough* Flutter), but the market has resisted this. UI and platform interaction is a tough thing to solve. Code and architecture can be shred.
  38. Going on a quick Doppl tour. Some points of interest.
  39. Calling shared code from Swift, and back. Just another library. No weird barriers. Same runtime and memory universe. If you need to talk to native code, just make an abstract class or interface. Done.
  40. There is no “cross platform” on the Android side. Big impact on development efficiency and risk Those 2 things are THE BIG THINGS. You need some rules. UI and “logic” kept separate. Make testable. Keep in mind dependencies. You can’t just run doppl on a mature codebase, but still.
  41. Walk through a feature of the Droidcon app. Reactive architecture shared. RXJava 2, Retrofit 2, Arch components, Room.
  42. When you click on a speaker in the Droidcon app, you will open the UserDetail screen. To model the data, we have a ViewModel
  43. In our ViewModel, we subscribe to a Flowable that gives us updates on UserAccount data.
  44. We manage the data in FindUserInteractor…
  45. The interactor kicks of a remote data load, but ultimately returns a Flowable query from sqlite. Our initial data load should have the user info available locally, and should always return data. If the remote update changes anything, the local save will push an update to the UI through the Flowable.
  46. Back in ViewModel, the move from background thread to main thread is handled with an injected FlowableTransformer
  47. Main does processing on the io thread, and returns on mainThread
  48. Test on trampoline. How you do this is up to you, but the point is this is standard RxJava stuff. If you’re lost, find a talk on threading, RxJava, and testing.
  49. The UI is native. As mentioned, native interaction is through a Java interface (or abstract class).
  50. We wire up the Host interface in the ‘wire’ method. This method is called from Kotlin/Java, or Swift/Objective-C. BTW: We use the Host interface rather than returning some kind of reactive artifact directly because Swift kind of prefers concrete classes to generics. Life isn’t always perfect.
  51. Kotlin UI!
  52. Wire, passing in this (we implement the ViewModel Host)
  53. On error we show a toast and exit
  54. When user info found or updated, data gets passed in here.
  55. On the Swift side
  56. Pass self in to wire (we’re implementing the Host)
  57. On error we’re not doing anything useful because it’s a sample app
  58. When user found/updated, we get that here
  59. Do iOS UI shit
  60. I’m not going to get too into how this all works, but essentially there are a bunch of parallel dependencies that run on the iOS side. That’s what the “doppl” comes from.
  61. Retrofit. Mostly the same, except the actual network communication happens with URLSession.
  62. RxJava. Pretty much stock, although cleaning up memory cycles. Also found some unsafe field access in RxJava itself.
  63. Dagger. The annotation processor runs as usual. We translate the generated Java. The Dagger version is getting old. Will update soon, although they moved the build to Basil, so either need to do some surgery or start thinking about Basil.
  64. Doppl config. We config some prefixes, which shortens the file names. We also tell the gradle plugin what to translate.
  65. Sharing is easy, and performs well. That was Sqlite, with Room, pushing a reactive architecture all the way up to the UI. If you’re not seeing the value here, grab me after class.
  66. Talk about how this impacts on the business side
  67. This is hard to measure, but intuitive concept For a given feature set, say v1 of an app, the relative time it would take using different frameworks to build. As in, if you wrote a string parser in Kotlin, vs C, vs assembly code
  68. There is, btw, assembly code in the AOSP jni stuff. Nasty.
  69. Tweet of the year Anyway, I have math/charts, but we’re limited on time, and I don’t think you’ll need them. It’s all kind of theoretical anyway.
  70. This is the baseline assumption. For general app development, Android Studio and Xcode are your best options, by a reasonable distance. Not just a little bit. For an iPad only app, if I built it in React Native, I’d be wasting my time. I think some React Native fans wouldn’t agree with this, but I think it’s safe to assume that almost everybody would. It is not a quantum reality that “Native tools are best”. Google and Apple spend lots of time/money on this. Nobody in this room pays for their IDE anymore (Intellij, ironically, maybe). Painfully aware of this with Doppl. The reasons are simple less efficient development. Library support and maturity, relatively obscure build and runtime issues, missing features, Stack Overflow traffic, etc. Can’t just look at how long it took to build a sample. Think about when you run into that weird bug that takes several days, or the missing feature that you need to hand roll.
  71. Extra time on a different platform due to inefficiencies. Numbers are vague and nobody would ever agree I just say 25%+, generally more like a 1/3+ React Native, Xamarin, whatever. That’s a minimum, and 1 platform.
  72. Had a hard time expressing it visually that would translate viscerally. Imagine a feature with a 3 month build time, for first platform.
  73. This is the platform tax.
  74. iOS? Android? Trick question. First platform. Architectural churn/discovery. Server API. That’s just technical. Iterating on product. Agile exists because we don’t know what we want. It’s “waste”, but valuable waste. You learn lessons. New product? At least half of your time. Startup? Forget it. Majority of time is on failed ideas.
  75. Everything costs more. That includes the “waste”. That’s what’s missing in “cross platform” discussions. Could argue that “2 apps” isn’t really as expensive as you think. It *might* be smart, but doesn’t sound smart. Also, there are other measures and other value involved (bugs, etc)
  76. Iterate in Android. Share logic and architecture to iOS. Share what you want. Optional. Doppl isn’t painless, but the point is you can do the most intensive work with no extra cost.
  77. Our marketing team pointed this out last week. What differentiates mobile (or anything)? Design? Sort of. Technical implementation? Mostly not super complex. It’s how much iteration and testing of product/market fit. Make that as fast and as cheap as possible.
  78. The other big concern is risk.
  79. Management Has Scary Decisions, about things they often don’t really understand. Risk has many dimensions. • Technical risk. • Development efficiency risk. • Security risk. • Hiring/training. • Platform risk/Licensing risk React Native is apparently still using the “bad” license even after React.js changed to MIT. Who knew? Risk is a Big Deal!
  80. Result of smooth interop. Sharing is optional. Don’t want shared code touching the network? Wrap in interface. 2 weeks out from release and the shared code has an issue, just code around it. Don’t share that bit. Simple. Incrementally scoop out and share on existing code bases. Platform fidelity tests No capital B big decisions
  81. Android is the riskier platform. The only real option where one side is 100%. You have no extra runtime bloat • Instant apps, etc. • International apps (where the growth is)
  82. No additional risk. You won’t be able to do something in React Native that you can’t do with 2 native apps We’re starting from that and increasing efficiency. Not the other way. No capital B Big decsions.
  83. Our goal is to maintain the lowest risk, while adding greater efficiency All that to get to this. High efficiency of development with minimal risk. That’s the ultimate takeaway. That’s why we built things this way, and are advocating for some other stuff out there. Google puts J2objc in major apps. According to the Ray Ryan talk, Square has some mixed in there. It’s not sexy to talk about Java and Objective-C, but they are powering major, major apps.
  84. No super important if not talking cross platform Keep an ear to the ground. Sometimes this will seem like its out of left field, but the web team has been pushing React for a while.
  85. Same message to Swift folks. This is happening Dig in and try stuff. Advocate. Doppl libs need publishing Kotlin Native will need compatible libs
  86. Just came from Kotlinconf. Kotlin Native is happening. It’s very early, but it’s coming. If light on time, just skip to Swift/Kotlin slides.
  87. This has been working for a while now
  88. The native builds should allow you to also share with iOS
  89. Web assembly does technically work. Not sure if this is really going to be a thing, but really hopeful. Web assembly roadmap has threads and other stuff. Super cool. We’ll see.
  90. Let’s talk a bit about Native
  91. Right now you point it at Objective-C and you can write stuff in Kotlin. “Works” but not pretty
  92. Needs to be this. Cooperative sharing. Smooth interop.
  93. And of course being able to call back into native stuff.
  94. The next big step will be writing necessary libraries that function without a JVM. That’s DB, ViewModel, Reactive stuff. If you’ve been looking for good open source stuff to work on, this is it. Has to be smooth. Lose efficiency if you spend a lot of time sorting out cross platform issues.
  95. There are still some fundamental things in Native that need to get sorted. Threads, memory, etc. Then there will be that phase where we’re running into bugs and whatnot. I’d guess 1 year minimum, up to 2. To be super functional. You’ll be able to start playing with this very soon. The native team is very approachable. Start bugging them for what you want.
  96. Kotlinconf app is available and you can build, but you’ll need to have a solid understanding of Xcode and Kotlin Native. Not easy. App doesn’t share a whole lot of code because there aren’t many libraries. Like I’m pretty sure they use core data and write Objective-C helper stuff to handle data. Meh.
  97. How does Doppl live in this world?
  98. Kotlin native doesn’t have the JRE.
  99. J2objc is a JRE on iOS. This is what our sample Droidcon app is. It’ll need a little smoothing, but works. We were trying to beat the Kotlin Native team to release the first Kotlin Native app, but they beat us. Was running Room, RxJava 2, Retrofit 2, etc.
  100. Eventually, depending on what you’re trying to do, architecture can look like this. The point is these technologies are philosophically similar, and I think pretty compatible.
  101. Eventually, depending on what you’re trying to do, architecture can look like this. The point is these technologies are philosophically similar, and I think pretty compatible.
  102. As Kotlin Native becomes more stable, we’ll need the libraries you use every day. Also need some of the stuff in Doppl, like the database wrappers, etc. You *can* use J2objc stuff, but Kotlin specific libraries should be created.
  103. Ran out of slide time, but Rust is really cool. Share code, thread and memory safety. No runtime bloat. It’s pretty sweet. There is some risk there, like recruiting good developers with Rust experience is probably tricky, but still. It’s nice. But you’re a lot more likely to do Kotlin.
  104. I didn’t go too technical because you wouldn’t remember it. We have Mark Murphy doing a much better job than me on the docs. Come check out the sample.
  105. Sample and docs on website. Please come try and give feedback. Maybe even try to build something with it.
  106. If you’re actually looking to get some corporate help, that’s what our business is morphing into. Platform convergence experts. This doesn’t mean we’re trying to sell you Doppl. Different solutions for different folks. Please reach out.
  107. If you don’t remember the URLS, just remember the about screen in the app, or follow my twitter account. Sending out slides and a previously recorded version of this talk right now.