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

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 

Recently uploaded (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 

From Grails to Android: A Simple Journey