SlideShare a Scribd company logo
1 of 126
Download to read offline
FROM GRAILS TO ANDROID
A SIMPLE JOURNEY
GRAILS
@BRWNGRLDEV
ANDROID
@BRWNGRLDEV
OVERVIEW
@BRWNGRLDEV
OVERVIEW
▸Project Structure
@BRWNGRLDEV
OVERVIEW
▸Project Structure
▸User Interface
@BRWNGRLDEV
OVERVIEW
▸Project Structure
▸User Interface
▸Dependency Injection
@BRWNGRLDEV
OVERVIEW
▸Project Structure
▸User Interface
▸Dependency Injection
▸Persistence
@BRWNGRLDEV
PROJECT STRUCTURE
@BRWNGRLDEV
GRAILS APP STRUCTURE
grails create-app
@BRWNGRLDEV
GRAILS APP STRUCTURE
grails create-app
@BRWNGRLDEV
GRAILS APP STRUCTURE
@BRWNGRLDEV
ANDROID APP STRUCTURE
@BRWNGRLDEV
ANDROID APP STRUCTURE
@BRWNGRLDEV
ANDROID APP STRUCTURE
@BRWNGRLDEV
▸app directory
ANDROID APP STRUCTURE
@BRWNGRLDEV
▸app directory
▸test directories
ANDROID APP STRUCTURE
@BRWNGRLDEV
▸app directory
▸test directories
▸gradle wrapper
ANDROID APP STRUCTURE
@BRWNGRLDEV
ANDROID APP STRUCTURE
@BRWNGRLDEV
most source code
ANDROID APP STRUCTURE
@BRWNGRLDEV
images
ANDROID APP STRUCTURE
@BRWNGRLDEV
views
ANDROID APP STRUCTURE
@BRWNGRLDEV
launcher icons
LAUNCHER ICONS
@BRWNGRLDEV
https://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html
ANDROID APP STRUCTURE
@BRWNGRLDEV
strings, colors, sizes, etc.
DOMAIN MODELS
@BRWNGRLDEV
GRAILS DOMAIN CLASS
@BRWNGRLDEV
GRAILS DOMAIN CLASS
@BRWNGRLDEV
▸BookSpec
▸BookController
▸BookControllerSpec
▸/book/edit.gsp
▸/book/create.gsp
▸/book/index.gsp
▸/book/show.gsp
ANDROID DOMAIN CLASS
@BRWNGRLDEV
ANDROID DOMAIN CLASS
@BRWNGRLDEV
▸Book
ANDROID DOMAIN CLASS
@BRWNGRLDEV
▸Book
ANDROID DOMAIN CLASS
@BRWNGRLDEV
ANDROID DOMAIN CLASS
@BRWNGRLDEV
ANDROID DOMAIN CLASS
@BRWNGRLDEV
MVP
ANDROID DOMAIN CLASS
@BRWNGRLDEV
▸BookTest
▸BookPresenter
▸BookPresenterTest
▸BookView
▸BookActivity
▸BookActivityTest
▸activity_book.xml
▸activity_insert_update_book.xml
@BRWNGRLDEV
CONFIGURATION
@BRWNGRLDEV
GRAILS - BUILD.GRADLE
@BRWNGRLDEV
GRAILS - BUILD.GRADLE
@BRWNGRLDEV
ANDROID - BUILD.GRADLE
@BRWNGRLDEV
ANDROID - BUILD.GRADLE
@BRWNGRLDEV
ANDROID - BUILD.GRADLE
@BRWNGRLDEV
GRADLE COMMANDS
@BRWNGRLDEV
▸gradle tasks
▸gradle clean
▸gradle test
▸gradle assemble
GRADLE COMMANDS
@BRWNGRLDEV
▸gradle tasks
▸gradle clean
▸gradle test
▸gradle assemble
PROJECT STRUCTURE
@BRWNGRLDEV
▸Folder layout
▸Domain models
▸Gradle Configuration
@BRWNGRLDEV
USER INTERFACE
@BRWNGRLDEV
GRAILS UI
@BRWNGRLDEV
GRAILS GSP PAGE
@BRWNGRLDEV
GRAILS GSP PAGE
@BRWNGRLDEV
GRAILS GSP PAGE
@BRWNGRLDEV
GRAILS GSP PAGE
@BRWNGRLDEV
GRAILS GSP PAGE
@BRWNGRLDEV
<f:display bean=“book”/>
ANDROID UI
@BRWNGRLDEV
ANDROID UI
@BRWNGRLDEV
@BRWNGRLDEV
XML?!
ARE YOU KIDDING ME?!!!
@BRWNGRLDEV
XML?!
ARE YOU KIDDING ME?!!!
@BRWNGRLDEV
XML?!
ARE YOU KIDDING ME?!!!
@BRWNGRLDEV
XML?!
ARE YOU KIDDING ME?!!!
ANDROID LAYOUT GUI
@BRWNGRLDEV
ANDROID LAYOUT GUI
@BRWNGRLDEV
ANDROID LAYOUT GUI
@BRWNGRLDEV
ANDROID XML LAYOUT
@BRWNGRLDEV
ANDROID XML LAYOUT
@BRWNGRLDEV
ANDROID XML LAYOUT
@BRWNGRLDEV
ANDROID XML LAYOUT
@BRWNGRLDEV
STYLE & SIZE RESOURCES
@BRWNGRLDEV
STYLE & SIZE RESOURCES
@BRWNGRLDEV
STYLE & SIZE RESOURCES
@BRWNGRLDEV
STYLE & SIZE RESOURCES
@BRWNGRLDEV
STYLE & SIZE RESOURCES
@BRWNGRLDEV
▸colors
▸styles
▸strings
▸sizes
▸themes
STYLE & SIZE RESOURCES
@BRWNGRLDEV
strings, colors, sizes, etc.
https://www.flickr.com/photos/bionicteaching/14668480106
https://developer.android.com/training/basics/supporting-devices/screens.html
DEVELOPER DOCS
@BRWNGRLDEV
USER INTERFACE
@BRWNGRLDEV
▸GSP pages
▸XML layout
▸Resource folders
@BRWNGRLDEV
DEPENDENCY INJECTION
@BRWNGRLDEV
DEPENDENCY INJECTION
@BRWNGRLDEV
THE CLIENT DELEGATES TO EXTERNAL CODE
(THE INJECTOR) THE RESPONSIBILITY OF
PROVIDING ITS DEPENDENCIES.
https://en.wikipedia.org/wiki/Dependency_injection
GRAILS - DEPENDENCY INJECTION
@BRWNGRLDEV
GRAILS - DEPENDENCY INJECTION
@BRWNGRLDEV
GRAILS - DEPENDENCY INJECTION
@BRWNGRLDEV
GRAILS - DEPENDENCY INJECTION
@BRWNGRLDEV
ANDROID - SIMPLE APPROACH
@BRWNGRLDEV
public class Injector {
}
ANDROID - SIMPLE APPROACH
@BRWNGRLDEV
public class Injector {
private static BookService bookService;
}
ANDROID - SIMPLE APPROACH
@BRWNGRLDEV
public class Injector {
private static BookService bookService;
public static BookService provideBookService () {

if ( bookService == null ) {

bookService = new BookService();

}

return bookService;

}
}
ANDROID - SIMPLE APPROACH
@BRWNGRLDEV
public class Activity {
private BooksPresenter booksPresenter;
@Override

protected void onCreate (Bundle savedInstanceState) {

…
booksPresenter = new BooksPresenter( Injector.provideBookService() );
}
}
ANDROID - DAGGER
@BRWNGRLDEV
http://google.github.io/dagger/
ANDROID - DAGGER
@BRWNGRLDEV
public class BooksPresenter {
private final BookService bookService;
}
ANDROID - DAGGER
@BRWNGRLDEV
public class BooksPresenter {
private final BookService bookService;
@Inject
BooksPresenter(BookService bookService) {
this.bookService = bookService;
}
}
ANDROID - DAGGER
@BRWNGRLDEV
@Module
public class AppModule {
}
ANDROID - DAGGER
@BRWNGRLDEV
@Module
public class AppModule {
@Provides @Singleton
BookService provideBookService() {
return new BookService();
}
}
ANDROID - DAGGER
@BRWNGRLDEV
@Provides @Singleton
BookService provideBookService() {
return new BookService();
}
@Inject
BooksPresenter(BookService bookService) {
this.bookService = bookService;
}
DEPENDENCY INJECTION
@BRWNGRLDEV
▸Spring
▸Simple Injector
▸Dagger
@BRWNGRLDEV
PERSISTENCE
@BRWNGRLDEV
@BRWNGRLDEV
http://gorm.grails.org/latest/
@BRWNGRLDEV
GORM
def book = new Book(title: ‘Clean Code’)
book.save()
@BRWNGRLDEV
GORM
def book = new Book(title: ‘Clean Code’)
book.save()
def book = Book.findByTitle(‘Clean Code’)
println book
@BRWNGRLDEV
GORM
def book = new Book(title: ‘Clean Code’)
book.save()
def book = Book.findByTitle(‘Clean Code’)
println book
def book = Book.get(1)
book.delete()
https://developer.android.com/training/basics/data-storage/databases.html
ANDROID
@BRWNGRLDEV
https://developer.android.com/training/basics/data-storage/databases.html
ANDROID
@BRWNGRLDEV
SQLITE
@BRWNGRLDEV
SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLITE
@BRWNGRLDEV
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_NAME_TITLE, title);
SQLITE
@BRWNGRLDEV
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_NAME_TITLE, title);
db.insert( TABLE_NAME,
null,
values);
SQLITE VS. GORM
@BRWNGRLDEV
SQLiteDatabase db =
dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_NAME_TITLE, title);
db.insert( TABLE_NAME,
null,
values);
def book = new Book(title: ‘Clean Code’)
book.save()
REALM
@BRWNGRLDEV
http://realm.io
REALM
@BRWNGRLDEV
REALM
@BRWNGRLDEV
▸Easy to Set Up
REALM
@BRWNGRLDEV
▸Easy to Set Up
▸Faster than ORMs
REALM
@BRWNGRLDEV
▸Easy to Set Up
▸Faster than ORMs
▸Has a Fluent API
REALM - CREATING A RECORD
@BRWNGRLDEV
realm.executeTransaction( new Realm.Transaction()

{

@Override

public void execute (Realm realm)

{

Book book = realm.createObject(Book.class);
book.setTitle(“Clean Code");

}

} );
REALM - CREATING A RECORD
@BRWNGRLDEV
realm.executeTransaction( new Realm.Transaction()

{

@Override

public void execute (Realm realm)

{

Book book = realm.createObject(Book.class);
book.setTitle(“Clean Code");

}

} );
REALM - QUERY
@BRWNGRLDEV
RealmResults<Book> results = realm.where(Book.class)
.equalTo("title", “Clean Code")
.or()
.equalTo("title", “Clean Codez")
.findAll();
REALM - QUERY
@BRWNGRLDEV
RealmResults<Book> results = realm.where(Book.class)
.equalTo("title", “Clean Code")
.or()
.equalTo("title", “Clean Codez")
.findAll();
REALM - CHANGE LISTENERS
@BRWNGRLDEV
bookListener = new RealmChangeListener() {
@Override
public void onChange(Book book) {
// make changes
}};
REALM - CHANGE LISTENERS
@BRWNGRLDEV
bookListener = new RealmChangeListener() {
@Override
public void onChange(Book book) {
// make changes
}};
book = realm.where(Book.class).equalTo("id", 1).findFirst();
book.addChangeListener(bookListener);
PERSISTENCE
@BRWNGRLDEV
▸GORM
▸Sqlite
▸Realm
@BRWNGRLDEV
SUMMARY
@BRWNGRLDEV
SUMMARY
▸Project Structure
@BRWNGRLDEV
SUMMARY
▸Project Structure
▸User Interface
@BRWNGRLDEV
SUMMARY
▸Project Structure
▸User Interface
▸Dependency Injection
@BRWNGRLDEV
SUMMARY
▸Project Structure
▸User Interface
▸Dependency Injection
▸Persistence
@BRWNGRLDEV
KEY TAKEAWAY
@BRWNGRLDEV
KEY TAKEAWAY
@BRWNGRLDEV
ANDROID IS REALLY HARD!
KEY TAKEAWAY
@BRWNGRLDEV
ANDROID IS REALLY HARD!
FUN
THANKS!
@brwngrldev
+AnnyceDavis
www.adavis.info
@BRWNGRLDEV

More Related Content

Viewers also liked

Creating ASTTs The painful truth
Creating ASTTs The painful truthCreating ASTTs The painful truth
Creating ASTTs The painful truthMario García
 
Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016Alvaro Sanchez-Mariscal
 
Continuous Delivery As Code
Continuous Delivery As CodeContinuous Delivery As Code
Continuous Delivery As CodeAlex Soto
 
Reactive Streams and the Wide World of Groovy
Reactive Streams and the Wide World of GroovyReactive Streams and the Wide World of Groovy
Reactive Streams and the Wide World of GroovySteve Pember
 

Viewers also liked (6)

Creating ASTTs The painful truth
Creating ASTTs The painful truthCreating ASTTs The painful truth
Creating ASTTs The painful truth
 
Greach 2016 dockerize your grails
Greach 2016   dockerize your grailsGreach 2016   dockerize your grails
Greach 2016 dockerize your grails
 
Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016
 
Continuous Delivery As Code
Continuous Delivery As CodeContinuous Delivery As Code
Continuous Delivery As Code
 
Reactive Streams and the Wide World of Groovy
Reactive Streams and the Wide World of GroovyReactive Streams and the Wide World of Groovy
Reactive Streams and the Wide World of Groovy
 
Grooscript and Grails 3
Grooscript and Grails 3Grooscript and Grails 3
Grooscript and Grails 3
 

Similar to From Grails to Android: A Simple Journey

Vaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UIVaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UIPeter Lehto
 
Getting started with building your own standalone Gradle plugin
Getting started with building your own standalone Gradle pluginGetting started with building your own standalone Gradle plugin
Getting started with building your own standalone Gradle plugintobiaspreuss
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureC.T.Co
 
Creating Gradle Plugins
Creating Gradle PluginsCreating Gradle Plugins
Creating Gradle PluginsAnnyce Davis
 
Android architecture
Android architecture Android architecture
Android architecture Trong-An Bui
 
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015Suzzicks
 
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015MobileMoxie
 
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015MobileMoxie
 
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Suzzicks
 
[DEPRECATED]Gradle the android
[DEPRECATED]Gradle the android[DEPRECATED]Gradle the android
[DEPRECATED]Gradle the androidJun Liu
 
Native Android Development Practices
Native Android Development PracticesNative Android Development Practices
Native Android Development PracticesRoy Clarkson
 
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023Nicolas HAAN
 
Predictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and ReduxPredictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and ReduxFITC
 
Quick look at Design Patterns in Android Development
Quick look at Design Patterns in Android DevelopmentQuick look at Design Patterns in Android Development
Quick look at Design Patterns in Android DevelopmentConstantine Mars
 
Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.UA Mobile
 

Similar to From Grails to Android: A Simple Journey (20)

Vaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UIVaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UI
 
Getting started with building your own standalone Gradle plugin
Getting started with building your own standalone Gradle pluginGetting started with building your own standalone Gradle plugin
Getting started with building your own standalone Gradle plugin
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Creating Gradle Plugins
Creating Gradle PluginsCreating Gradle Plugins
Creating Gradle Plugins
 
Android architecture
Android architecture Android architecture
Android architecture
 
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
 
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
 
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
 
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
 
[DEPRECATED]Gradle the android
[DEPRECATED]Gradle the android[DEPRECATED]Gradle the android
[DEPRECATED]Gradle the android
 
Native Android Development Practices
Native Android Development PracticesNative Android Development Practices
Native Android Development Practices
 
From iOS to Android
From iOS to AndroidFrom iOS to Android
From iOS to Android
 
Ruby conf2012
Ruby conf2012Ruby conf2012
Ruby conf2012
 
OpenMIC March-2012.phonegap
OpenMIC March-2012.phonegapOpenMIC March-2012.phonegap
OpenMIC March-2012.phonegap
 
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023
 
Predictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and ReduxPredictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and Redux
 
Quick look at Design Patterns in Android Development
Quick look at Design Patterns in Android DevelopmentQuick look at Design Patterns in Android Development
Quick look at Design Patterns in Android Development
 
Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.
 
Coding Your Way to Java 12
Coding Your Way to Java 12Coding Your Way to Java 12
Coding Your Way to Java 12
 

More from Annyce Davis

Getting a Grip on GraphQL
Getting a Grip on GraphQLGetting a Grip on GraphQL
Getting a Grip on GraphQLAnnyce Davis
 
RxJava In Baby Steps
RxJava In Baby StepsRxJava In Baby Steps
RxJava In Baby StepsAnnyce Davis
 
No internet? No Problem!
No internet? No Problem!No internet? No Problem!
No internet? No Problem!Annyce Davis
 
First Do No Harm - 360|AnDev
First Do No Harm - 360|AnDevFirst Do No Harm - 360|AnDev
First Do No Harm - 360|AnDevAnnyce Davis
 
First Do No Harm - Droidcon Boston
First Do No Harm - Droidcon BostonFirst Do No Harm - Droidcon Boston
First Do No Harm - Droidcon BostonAnnyce Davis
 
Creating Gradle Plugins - Oredev
Creating Gradle Plugins - OredevCreating Gradle Plugins - Oredev
Creating Gradle Plugins - OredevAnnyce Davis
 
Developing Apps for Emerging Markets
Developing Apps for Emerging MarketsDeveloping Apps for Emerging Markets
Developing Apps for Emerging MarketsAnnyce Davis
 
Develop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConfDevelop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConfAnnyce Davis
 
Creating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf USCreating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf USAnnyce Davis
 
Google I/O 2016 Recap
Google I/O 2016 RecapGoogle I/O 2016 Recap
Google I/O 2016 RecapAnnyce Davis
 
Screen Robots: UI Tests in Espresso
Screen Robots: UI Tests in EspressoScreen Robots: UI Tests in Espresso
Screen Robots: UI Tests in EspressoAnnyce Davis
 
Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code AnalysisAnnyce Davis
 
Develop Maintainable Apps
Develop Maintainable AppsDevelop Maintainable Apps
Develop Maintainable AppsAnnyce Davis
 
Android Testing, Why So Hard?!
Android Testing, Why So Hard?!Android Testing, Why So Hard?!
Android Testing, Why So Hard?!Annyce Davis
 
Measuring Audience Engagement through Analytics
Measuring Audience Engagement through AnalyticsMeasuring Audience Engagement through Analytics
Measuring Audience Engagement through AnalyticsAnnyce Davis
 
DC Media Innovations Kick-Off Meetup
DC Media Innovations Kick-Off MeetupDC Media Innovations Kick-Off Meetup
DC Media Innovations Kick-Off MeetupAnnyce Davis
 

More from Annyce Davis (17)

Getting a Grip on GraphQL
Getting a Grip on GraphQLGetting a Grip on GraphQL
Getting a Grip on GraphQL
 
RxJava In Baby Steps
RxJava In Baby StepsRxJava In Baby Steps
RxJava In Baby Steps
 
No internet? No Problem!
No internet? No Problem!No internet? No Problem!
No internet? No Problem!
 
First Do No Harm - 360|AnDev
First Do No Harm - 360|AnDevFirst Do No Harm - 360|AnDev
First Do No Harm - 360|AnDev
 
First Do No Harm - Droidcon Boston
First Do No Harm - Droidcon BostonFirst Do No Harm - Droidcon Boston
First Do No Harm - Droidcon Boston
 
Creating Gradle Plugins - Oredev
Creating Gradle Plugins - OredevCreating Gradle Plugins - Oredev
Creating Gradle Plugins - Oredev
 
Developing Apps for Emerging Markets
Developing Apps for Emerging MarketsDeveloping Apps for Emerging Markets
Developing Apps for Emerging Markets
 
Develop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConfDevelop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConf
 
Creating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf USCreating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf US
 
Google I/O 2016 Recap
Google I/O 2016 RecapGoogle I/O 2016 Recap
Google I/O 2016 Recap
 
Say It With Video
Say It With VideoSay It With Video
Say It With Video
 
Screen Robots: UI Tests in Espresso
Screen Robots: UI Tests in EspressoScreen Robots: UI Tests in Espresso
Screen Robots: UI Tests in Espresso
 
Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
 
Develop Maintainable Apps
Develop Maintainable AppsDevelop Maintainable Apps
Develop Maintainable Apps
 
Android Testing, Why So Hard?!
Android Testing, Why So Hard?!Android Testing, Why So Hard?!
Android Testing, Why So Hard?!
 
Measuring Audience Engagement through Analytics
Measuring Audience Engagement through AnalyticsMeasuring Audience Engagement through Analytics
Measuring Audience Engagement through Analytics
 
DC Media Innovations Kick-Off Meetup
DC Media Innovations Kick-Off MeetupDC Media Innovations Kick-Off Meetup
DC Media Innovations Kick-Off Meetup
 

Recently uploaded

React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 

Recently uploaded (20)

React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 

From Grails to Android: A Simple Journey