first do no harm - 360|andev

97
@brwngrldev

Upload: annyce-davis

Post on 21-Jan-2018

270 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: First Do No Harm - 360|AnDev

@brwngrldev

Page 2: First Do No Harm - 360|AnDev

What’s Involved:• Major in Math/Science

• Take the MCAT

• Go to Medical School

• Take the USMLE Step 1

• Do Rotations

• Take the USMLE Step 2

• Complete Internship

• Do Residency

• Take the USMLE Step 3

• Take the Board Exams

• Do a Fellowship

@brwngrldev

Page 3: First Do No Harm - 360|AnDev
Page 4: First Do No Harm - 360|AnDev

@brwngrldev

Page 5: First Do No Harm - 360|AnDev

@brwngrldev

Page 6: First Do No Harm - 360|AnDev

How can I become

an Android

Developer?@brwngrldev

Page 7: First Do No Harm - 360|AnDev

How can I become a

great Android

Developer?@brwngrldev

Page 8: First Do No Harm - 360|AnDev

@brwngrldev

Page 9: First Do No Harm - 360|AnDev

@brwngrldev

Page 10: First Do No Harm - 360|AnDev

Newsletters

@brwngrldev

Page 11: First Do No Harm - 360|AnDev

Podcasts

@brwngrldev

Page 12: First Do No Harm - 360|AnDev

Online Courses• At your own pace

• All aspects of development

• Different perspectives

@brwngrldev

Page 13: First Do No Harm - 360|AnDev

Online Courses - Udacity

@brwngrldev

Page 14: First Do No Harm - 360|AnDev

Online Courses - Caster.IO

@brwngrldev

Page 15: First Do No Harm - 360|AnDev

“…associate with

eagles, you will learn

how to soar…” - Ojo Michael E.

@brwngrldev

Page 16: First Do No Harm - 360|AnDev

Conferences

• Hear from the Experts

• Grow your Network

• Learn new Techniques

@brwngrldev

Page 17: First Do No Harm - 360|AnDev

Conferences

Page 18: First Do No Harm - 360|AnDev

Open Source

• Countless Examples

• Learn by Doing

• Design Patterns in Action

@brwngrldev

Page 19: First Do No Harm - 360|AnDev

Open Source

@brwngrldev

Page 20: First Do No Harm - 360|AnDev

Open Source

@brwngrldev

Page 21: First Do No Harm - 360|AnDev

Study• Newsletters

• Podcasts

• Online Courses

• Conferences

• Open Source@brwngrldev

Page 22: First Do No Harm - 360|AnDev

@brwngrldev

Page 23: First Do No Harm - 360|AnDev

@brwngrldev

Page 24: First Do No Harm - 360|AnDev

Prevention

• Static Code Analysis

• Code Reviews

• Leak Canary

• Testing

@brwngrldev

Page 25: First Do No Harm - 360|AnDev

Static Code Analysis

Lint

Checkstyle

FindBugs

PMD

@brwngrldev

Page 26: First Do No Harm - 360|AnDev

Static Code Analysis

0

40

80

120

160

Checkstyle FindBugs PMD Error Prone Lint

@brwngrldev

Page 27: First Do No Harm - 360|AnDev

Static Code Analysis - FindBugs

@brwngrldev

Page 28: First Do No Harm - 360|AnDev

Static Code Analysis - FindBugs

@brwngrldev

Page 29: First Do No Harm - 360|AnDev

Code Reviews

@brwngrldev

Page 30: First Do No Harm - 360|AnDev

Code Reviews

@brwngrldev

Page 31: First Do No Harm - 360|AnDev

Code Reviews

@brwngrldev

Page 32: First Do No Harm - 360|AnDev

Code Reviews

Here’s my awesome code!! Cool, looks like line 54 could cause an NPE though.

@brwngrldev

Page 33: First Do No Harm - 360|AnDev

Code Reviews

Here’s my awesome code!

Oh yeah, you’re right. Will fix!

! Cool, looks like line 54 could cause an NPE though.

@brwngrldev

Page 34: First Do No Harm - 360|AnDev

Code Reviews

Here’s my awesome code!

Oh yeah, you’re right. Will fix!

Thanks for not `let`ting me forget that! 😂

! Cool, looks like line 54 could cause an NPE though.

Instead of an `if` here, a `let` would be better.

@brwngrldev

Page 35: First Do No Harm - 360|AnDev

Code Reviews

@brwngrldev

Page 36: First Do No Harm - 360|AnDev

Leak Canary

debugCompile “…:leakcanary-android:$leak” releaseCompile “…:leakcanary-android-no-op:$leak” testCompile “…:leakcanary-android-no-op:$leak”

@brwngrldev

Page 37: First Do No Harm - 360|AnDev

Leak Canary

private BooksAdapter booksAdapter; @Bind(R.id.recyclerView) RecyclerView recyclerView; private static Toolbar toolbar; private BooksPresenter booksPresenter;

@brwngrldev

Page 38: First Do No Harm - 360|AnDev

Leak Canary

@brwngrldev

Page 39: First Do No Harm - 360|AnDev

Architecture

@brwngrldev

Page 40: First Do No Harm - 360|AnDev

Architecture

Foo Foo Bar

Baz

@brwngrldev

Page 41: First Do No Harm - 360|AnDev

MVP + Dagger

@brwngrldev

Page 42: First Do No Harm - 360|AnDev

MVP + Dagger

@brwngrldev

EVENT BUS/RXJAVA

DATABASE

REPOSITORY

REPOSITORY

ACTIVITY

FRAGMENT

PRESENTER

PRESENTER

SERVICE

Page 43: First Do No Harm - 360|AnDev

API Testing

Page 44: First Do No Harm - 360|AnDev

API Testing - Postman

@brwngrldev

Page 45: First Do No Harm - 360|AnDev

API Testing - Postman

1.Send Requests

2.Receive Response

3.Run Test Scripts

@brwngrldev

Page 46: First Do No Harm - 360|AnDev

Sending Requests

@brwngrldev

Page 47: First Do No Harm - 360|AnDev

API Response[ { "userId": 1, "id": 1, "title": "sunt aut facere repellat", "body": "quia et suscipit\nsuscipit recusandae" }, { "userId": 1, "id": 2, "title": "qui est esse", "body": "est rerum tempore vitae\nsequi sint" } ]

https://jsonplaceholder.typicode.com@brwngrldev

Page 48: First Do No Harm - 360|AnDev

Test - Status Code

tests["Status code is 200"] = responseCode.code === 200;

@brwngrldev

Page 49: First Do No Harm - 360|AnDev

Test - Schema

var schema = { "type": [“array”, “null”] };

var jsonData = JSON.parse(responseBody);

tests["Valid Schema"] = tv4.validate(jsonData, schema);

@brwngrldev

Page 50: First Do No Harm - 360|AnDev

IT GETS

BETTER@brwngrldev

Page 51: First Do No Harm - 360|AnDev

Test - Schema

@brwngrldev

{ "userId": 1, "id": 1, "title": "sunt aut facere repellat provident", "body": "quia et suscipit\nsuscipit recusandae" }

Page 52: First Do No Harm - 360|AnDev

Test - Schema

var postSchema = { "type" : "object", "properties" : { "userId": { "type" : "integer" }, "id": { "type" : "integer" }, "title": { "type" : "string" }, "body" : { "type" : "string" } }};

@brwngrldev

Page 53: First Do No Harm - 360|AnDev

API Testing

@brwngrldev

Page 54: First Do No Harm - 360|AnDev

Set Up Monitors

@brwngrldev

Page 55: First Do No Harm - 360|AnDev

Prevention

• Static Code Analysis

• Code Reviews

• Leak Canary

• Testing

@brwngrldev

Page 56: First Do No Harm - 360|AnDev

@brwngrldev

Page 57: First Do No Harm - 360|AnDev

74 year oldstomach pain

34 year oldstomach pain

@brwngrldev

Page 58: First Do No Harm - 360|AnDev

@brwngrldev

Page 59: First Do No Harm - 360|AnDev

@brwngrldev

Page 60: First Do No Harm - 360|AnDev

@brwngrldev

Page 61: First Do No Harm - 360|AnDev

LET’S

SHARE@brwngrldev

Page 62: First Do No Harm - 360|AnDev

Code Outside

InsideEmulator

Page 63: First Do No Harm - 360|AnDev

CODE

@brwngrldev

Page 64: First Do No Harm - 360|AnDev

@Overridepublic void onFailure(Call<Book> call, Throwable t) { bus.post(new BookLoadingErrorEvent(id));

Timber.e(t, "Unable to load the book data from API.");}

Write Logs

@brwngrldev

Page 65: First Do No Harm - 360|AnDev

Logcat/Pidcat

@brwngrldev

Page 66: First Do No Harm - 360|AnDev

@brwngrldev

Page 67: First Do No Harm - 360|AnDev

Log Events

public void trackEvent(String event) { analytics.track(event);

if (Fabric.isInitialized()) { Crashlytics.log(event); }}

@brwngrldev

Page 68: First Do No Harm - 360|AnDev

Crashlytics

@brwngrldev

Page 69: First Do No Harm - 360|AnDev

OUTSIDE

@brwngrldev

Page 70: First Do No Harm - 360|AnDev

Crashlytics

@brwngrldev

Page 71: First Do No Harm - 360|AnDev

Crashlytics

@brwngrldev

Page 72: First Do No Harm - 360|AnDev

Classy Shark

@brwngrldev

Page 73: First Do No Harm - 360|AnDev

Classy Shark

@brwngrldev

Page 74: First Do No Harm - 360|AnDev

Battery Historian

@brwngrldev

Page 75: First Do No Harm - 360|AnDev

Battery Historian

@brwngrldev

Page 76: First Do No Harm - 360|AnDev

Battery Historian

@brwngrldev

Page 77: First Do No Harm - 360|AnDev

@brwngrldev

Page 78: First Do No Harm - 360|AnDev

Systrace

@brwngrldev

Page 79: First Do No Harm - 360|AnDev

Systrace

Alerts Pane

@brwngrldev

Page 80: First Do No Harm - 360|AnDev

Systrace

Alert Detail

@brwngrldev

Page 81: First Do No Harm - 360|AnDev

INSIDE

@brwngrldev

Page 82: First Do No Harm - 360|AnDev

Apk Analyzer

@brwngrldev

Page 83: First Do No Harm - 360|AnDev

Android Profiler

@brwngrldev

Page 84: First Do No Harm - 360|AnDev

Android Profiler: Memory

@brwngrldev

Page 85: First Do No Harm - 360|AnDev

Android Profiler: CPU

@brwngrldev

Page 86: First Do No Harm - 360|AnDev

@brwngrldev

Page 87: First Do No Harm - 360|AnDev

Android Profiler: Network

@brwngrldev

Page 88: First Do No Harm - 360|AnDev

EMULATOR

@brwngrldev

Page 89: First Do No Harm - 360|AnDev

Android Options:

GPU Overdraw

blue -> green -> light red -> dark red

(1x) (4x or more)

@brwngrldev

Page 90: First Do No Harm - 360|AnDev

Android Options:

GPU Overdraw

@brwngrldev

blue -> green -> light red -> dark red

(1x) (4x or more)

Page 91: First Do No Harm - 360|AnDev

Android Options:

Profile GPU Rendering

16 milliseconds

@brwngrldev

Page 92: First Do No Harm - 360|AnDev

Android Options:

Profile GPU Rendering

https://developer.android.com/studio/profile/dev-options-rendering.html@brwngrldev

Page 93: First Do No Harm - 360|AnDev

@brwngrldev

Page 94: First Do No Harm - 360|AnDev

@brwngrldev

Page 95: First Do No Harm - 360|AnDev

Resources• http://www.kotlinweekly.net - Kotlin Weekly

• http://androidweekly.net - Android Weekly

• https://www.androiddevdigest.com - Android Dev Digest

• http://www.adavis.info/2015/07/android-devs-listen-up.html - Podcasts

• https://www.udacity.com - Udacity

• https://caster.io - Caster.IO

• http://androidstudygroup.github.io/conferences - Android Conferences

Page 96: First Do No Harm - 360|AnDev

Resources• http://findbugs.sourceforge.net - FindBugs

• https://github.com/square/leakcanary - Leak Canary

• https://www.getpostman.com - Postman

• https://github.com/JakeWharton/timber - Timber

• https://github.com/JakeWharton/pidcat - Pidcat

• https://fabric.io/kits/android/crashlytics - Crashlytics

• https://www.lynda.com/trial/AnnyceDavis - Lynda.com

Page 97: First Do No Harm - 360|AnDev

Resources

• https://github.com/google/android-classyshark - ClassyShark

• https://github.com/google/battery-historian - Battery Historian

• https://developer.android.com/studio/profile/systrace.html - Systrace

• https://developer.android.com/studio/build/apk-analyzer.html - APK Analyzer

• http://www.adavis.info/2015/03/android-overdraw-what-is-it-and-why.html - Overdraw

• https://developer.android.com/studio/profile/dev-options-rendering.html - GPU Rendering