From Grails to Android: A Simple Journey

Annyce Davis
Annyce DavisAndroid Google Developer Expert, Online Instructor, Conference Speaker at Off Grid Electric
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
1 of 126

Recommended

React Nativeの光と闇 by
React Nativeの光と闇React Nativeの光と闇
React Nativeの光と闇Yukiya Nakagawa
9.2K views93 slides
Android Lollipop - Webinar vom 11.12.2014 by
Android Lollipop - Webinar vom 11.12.2014Android Lollipop - Webinar vom 11.12.2014
Android Lollipop - Webinar vom 11.12.2014inovex GmbH
1.6K views27 slides
Android app material design from dev's perspective by
Android app material design from dev's perspectiveAndroid app material design from dev's perspective
Android app material design from dev's perspectiveDeSmart Agile Software House
3.7K views34 slides
Atomic Designは「マルチ」で真価を発揮する by
Atomic Designは「マルチ」で真価を発揮するAtomic Designは「マルチ」で真価を発揮する
Atomic Designは「マルチ」で真価を発揮するYukiya Nakagawa
2.4K views72 slides
Angular js by
Angular jsAngular js
Angular jsParmarAnisha
323 views33 slides
ButterKnife by
ButterKnifeButterKnife
ButterKnifeHimanshu Dudhat
495 views16 slides

More Related Content

Viewers also liked

Creating ASTTs The painful truth by
Creating ASTTs The painful truthCreating ASTTs The painful truth
Creating ASTTs The painful truthMario García
1.3K views170 slides
Greach 2016 dockerize your grails by
Greach 2016   dockerize your grailsGreach 2016   dockerize your grails
Greach 2016 dockerize your grailsIván López Martín
1.8K views31 slides
Mastering Grails 3 Plugins - Greach 2016 by
Mastering Grails 3 Plugins - Greach 2016Mastering Grails 3 Plugins - Greach 2016
Mastering Grails 3 Plugins - Greach 2016Alvaro Sanchez-Mariscal
2.4K views46 slides
Continuous Delivery As Code by
Continuous Delivery As CodeContinuous Delivery As Code
Continuous Delivery As CodeAlex Soto
1.5K views103 slides
Reactive Streams and the Wide World of Groovy by
Reactive Streams and the Wide World of GroovyReactive Streams and the Wide World of Groovy
Reactive Streams and the Wide World of GroovySteve Pember
1K views90 slides
Grooscript and Grails 3 by
Grooscript and Grails 3Grooscript and Grails 3
Grooscript and Grails 3Jorge Franco Leza
1.1K views21 slides

Viewers also liked(6)

Creating ASTTs The painful truth by Mario García
Creating ASTTs The painful truthCreating ASTTs The painful truth
Creating ASTTs The painful truth
Mario García1.3K views
Continuous Delivery As Code by Alex Soto
Continuous Delivery As CodeContinuous Delivery As Code
Continuous Delivery As Code
Alex Soto1.5K views
Reactive Streams and the Wide World of Groovy by Steve Pember
Reactive Streams and the Wide World of GroovyReactive Streams and the Wide World of Groovy
Reactive Streams and the Wide World of Groovy
Steve Pember1K views

Similar to From Grails to Android: A Simple Journey

Vaadin DevDay 2017 - DI your UI by
Vaadin DevDay 2017 - DI your UIVaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UIPeter Lehto
654 views105 slides
Getting started with building your own standalone Gradle plugin by
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
690 views41 slides
Overview of Android Infrastructure by
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
5.5K views95 slides
Overview of Android Infrastructure by
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureC.T.Co
424 views95 slides
Creating Gradle Plugins by
Creating Gradle PluginsCreating Gradle Plugins
Creating Gradle PluginsAnnyce Davis
1.2K views36 slides
Android architecture by
Android architecture Android architecture
Android architecture Trong-An Bui
731 views42 slides

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

Vaadin DevDay 2017 - DI your UI by Peter Lehto
Vaadin DevDay 2017 - DI your UIVaadin DevDay 2017 - DI your UI
Vaadin DevDay 2017 - DI your UI
Peter Lehto654 views
Getting started with building your own standalone Gradle plugin by tobiaspreuss
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
tobiaspreuss690 views
Overview of Android Infrastructure by Alexey Buzdin
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
Alexey Buzdin5.5K views
Overview of Android Infrastructure by C.T.Co
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
C.T.Co424 views
Creating Gradle Plugins by Annyce Davis
Creating Gradle PluginsCreating Gradle Plugins
Creating Gradle Plugins
Annyce Davis1.2K views
Android architecture by Trong-An Bui
Android architecture Android architecture
Android architecture
Trong-An Bui731 views
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015 by Suzzicks
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
Suzzicks1.3K views
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015 by MobileMoxie
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
MobileMoxie631 views
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015 by MobileMoxie
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
MobileMoxie784 views
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015 by Suzzicks
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
Suzzicks1.1K views
[DEPRECATED]Gradle the android by Jun Liu
[DEPRECATED]Gradle the android[DEPRECATED]Gradle the android
[DEPRECATED]Gradle the android
Jun Liu629 views
Native Android Development Practices by Roy Clarkson
Native Android Development PracticesNative Android Development Practices
Native Android Development Practices
Roy Clarkson1.5K views
Quash boring task using Custom Gradle Plugin by lakshmikanthD2
Quash boring task using Custom Gradle PluginQuash boring task using Custom Gradle Plugin
Quash boring task using Custom Gradle Plugin
lakshmikanthD240 views
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023 by Nicolas HAAN
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
Nicolas HAAN18 views
Predictable Web Apps with Angular and Redux by FITC
Predictable Web Apps with Angular and ReduxPredictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and Redux
FITC722 views
Quick look at Design Patterns in Android Development by Constantine Mars
Quick look at Design Patterns in Android DevelopmentQuick look at Design Patterns in Android Development
Quick look at Design Patterns in Android Development
Constantine Mars114 views
Refactoring Wunderlist. UA Mobile 2016. by UA Mobile
Refactoring Wunderlist. UA Mobile 2016.Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.
UA Mobile562 views

More from Annyce Davis

Getting a Grip on GraphQL by
Getting a Grip on GraphQLGetting a Grip on GraphQL
Getting a Grip on GraphQLAnnyce Davis
302 views131 slides
RxJava In Baby Steps by
RxJava In Baby StepsRxJava In Baby Steps
RxJava In Baby StepsAnnyce Davis
9.8K views159 slides
No internet? No Problem! by
No internet? No Problem!No internet? No Problem!
No internet? No Problem!Annyce Davis
1.3K views83 slides
First Do No Harm - 360|AnDev by
First Do No Harm - 360|AnDevFirst Do No Harm - 360|AnDev
First Do No Harm - 360|AnDevAnnyce Davis
525 views97 slides
First Do No Harm - Droidcon Boston by
First Do No Harm - Droidcon BostonFirst Do No Harm - Droidcon Boston
First Do No Harm - Droidcon BostonAnnyce Davis
5.7K views110 slides
Creating Gradle Plugins - Oredev by
Creating Gradle Plugins - OredevCreating Gradle Plugins - Oredev
Creating Gradle Plugins - OredevAnnyce Davis
587 views77 slides

More from Annyce Davis(17)

Getting a Grip on GraphQL by Annyce Davis
Getting a Grip on GraphQLGetting a Grip on GraphQL
Getting a Grip on GraphQL
Annyce Davis302 views
RxJava In Baby Steps by Annyce Davis
RxJava In Baby StepsRxJava In Baby Steps
RxJava In Baby Steps
Annyce Davis9.8K views
No internet? No Problem! by Annyce Davis
No internet? No Problem!No internet? No Problem!
No internet? No Problem!
Annyce Davis1.3K views
First Do No Harm - 360|AnDev by Annyce Davis
First Do No Harm - 360|AnDevFirst Do No Harm - 360|AnDev
First Do No Harm - 360|AnDev
Annyce Davis525 views
First Do No Harm - Droidcon Boston by Annyce Davis
First Do No Harm - Droidcon BostonFirst Do No Harm - Droidcon Boston
First Do No Harm - Droidcon Boston
Annyce Davis5.7K views
Creating Gradle Plugins - Oredev by Annyce Davis
Creating Gradle Plugins - OredevCreating Gradle Plugins - Oredev
Creating Gradle Plugins - Oredev
Annyce Davis587 views
Developing Apps for Emerging Markets by Annyce Davis
Developing Apps for Emerging MarketsDeveloping Apps for Emerging Markets
Developing Apps for Emerging Markets
Annyce Davis1.6K views
Develop Maintainable Apps - edUiConf by Annyce Davis
Develop Maintainable Apps - edUiConfDevelop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConf
Annyce Davis539 views
Creating Gradle Plugins - GR8Conf US by Annyce Davis
Creating Gradle Plugins - GR8Conf USCreating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf US
Annyce Davis709 views
Google I/O 2016 Recap by Annyce Davis
Google I/O 2016 RecapGoogle I/O 2016 Recap
Google I/O 2016 Recap
Annyce Davis292 views
Screen Robots: UI Tests in Espresso by Annyce Davis
Screen Robots: UI Tests in EspressoScreen Robots: UI Tests in Espresso
Screen Robots: UI Tests in Espresso
Annyce Davis619 views
Static Code Analysis by Annyce Davis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
Annyce Davis3.4K views
Develop Maintainable Apps by Annyce Davis
Develop Maintainable AppsDevelop Maintainable Apps
Develop Maintainable Apps
Annyce Davis9.4K views
Android Testing, Why So Hard?! by Annyce Davis
Android Testing, Why So Hard?!Android Testing, Why So Hard?!
Android Testing, Why So Hard?!
Annyce Davis2K views
Measuring Audience Engagement through Analytics by Annyce Davis
Measuring Audience Engagement through AnalyticsMeasuring Audience Engagement through Analytics
Measuring Audience Engagement through Analytics
Annyce Davis635 views
DC Media Innovations Kick-Off Meetup by Annyce Davis
DC Media Innovations Kick-Off MeetupDC Media Innovations Kick-Off Meetup
DC Media Innovations Kick-Off Meetup
Annyce Davis449 views

Recently uploaded

HarshithAkkapelli_Presentation.pdf by
HarshithAkkapelli_Presentation.pdfHarshithAkkapelli_Presentation.pdf
HarshithAkkapelli_Presentation.pdfharshithakkapelli
11 views16 slides
Roadmap y Novedades de producto by
Roadmap y Novedades de productoRoadmap y Novedades de producto
Roadmap y Novedades de productoNeo4j
43 views33 slides
DSD-INT 2023 Baseline studies for Strategic Coastal protection for Long Islan... by
DSD-INT 2023 Baseline studies for Strategic Coastal protection for Long Islan...DSD-INT 2023 Baseline studies for Strategic Coastal protection for Long Islan...
DSD-INT 2023 Baseline studies for Strategic Coastal protection for Long Islan...Deltares
10 views30 slides
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge... by
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...Deltares
16 views12 slides
A first look at MariaDB 11.x features and ideas on how to use them by
A first look at MariaDB 11.x features and ideas on how to use themA first look at MariaDB 11.x features and ideas on how to use them
A first look at MariaDB 11.x features and ideas on how to use themFederico Razzoli
44 views36 slides
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t... by
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...Deltares
9 views26 slides

Recently uploaded(20)

Roadmap y Novedades de producto by Neo4j
Roadmap y Novedades de productoRoadmap y Novedades de producto
Roadmap y Novedades de producto
Neo4j43 views
DSD-INT 2023 Baseline studies for Strategic Coastal protection for Long Islan... by Deltares
DSD-INT 2023 Baseline studies for Strategic Coastal protection for Long Islan...DSD-INT 2023 Baseline studies for Strategic Coastal protection for Long Islan...
DSD-INT 2023 Baseline studies for Strategic Coastal protection for Long Islan...
Deltares10 views
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge... by Deltares
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...
Deltares16 views
A first look at MariaDB 11.x features and ideas on how to use them by Federico Razzoli
A first look at MariaDB 11.x features and ideas on how to use themA first look at MariaDB 11.x features and ideas on how to use them
A first look at MariaDB 11.x features and ideas on how to use them
Federico Razzoli44 views
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t... by Deltares
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...
DSD-INT 2023 Thermobaricity in 3D DCSM-FM - taking pressure into account in t...
Deltares9 views
Geospatial Synergy: Amplifying Efficiency with FME & Esri ft. Peak Guest Spea... by Safe Software
Geospatial Synergy: Amplifying Efficiency with FME & Esri ft. Peak Guest Spea...Geospatial Synergy: Amplifying Efficiency with FME & Esri ft. Peak Guest Spea...
Geospatial Synergy: Amplifying Efficiency with FME & Esri ft. Peak Guest Spea...
Safe Software391 views
Software evolution understanding: Automatic extraction of software identifier... by Ra'Fat Al-Msie'deen
Software evolution understanding: Automatic extraction of software identifier...Software evolution understanding: Automatic extraction of software identifier...
Software evolution understanding: Automatic extraction of software identifier...
What Can Employee Monitoring Software Do?​ by wAnywhere
What Can Employee Monitoring Software Do?​What Can Employee Monitoring Software Do?​
What Can Employee Monitoring Software Do?​
wAnywhere18 views
Copilot Prompting Toolkit_All Resources.pdf by Riccardo Zamana
Copilot Prompting Toolkit_All Resources.pdfCopilot Prompting Toolkit_All Resources.pdf
Copilot Prompting Toolkit_All Resources.pdf
Riccardo Zamana6 views
Upgrading Incident Management with Icinga - Icinga Camp Milan 2023 by Icinga
Upgrading Incident Management with Icinga - Icinga Camp Milan 2023Upgrading Incident Management with Icinga - Icinga Camp Milan 2023
Upgrading Incident Management with Icinga - Icinga Camp Milan 2023
Icinga36 views
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra... by Marc Müller
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra....NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
Marc Müller35 views
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema by Deltares
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - GeertsemaDSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
Deltares12 views
DSD-INT 2023 SFINCS Modelling in the U.S. Pacific Northwest - Parker by Deltares
DSD-INT 2023 SFINCS Modelling in the U.S. Pacific Northwest - ParkerDSD-INT 2023 SFINCS Modelling in the U.S. Pacific Northwest - Parker
DSD-INT 2023 SFINCS Modelling in the U.S. Pacific Northwest - Parker
Deltares8 views
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ... by Donato Onofri
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...
Donato Onofri643 views
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx by animuscrm
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
animuscrm11 views
Elevate your SAP landscape's efficiency and performance with HCL Workload Aut... by HCLSoftware
Elevate your SAP landscape's efficiency and performance with HCL Workload Aut...Elevate your SAP landscape's efficiency and performance with HCL Workload Aut...
Elevate your SAP landscape's efficiency and performance with HCL Workload Aut...
HCLSoftware6 views
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -... by Deltares
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -...DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -...
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -...
Deltares6 views

From Grails to Android: A Simple Journey