First Do No Harm - Droidcon Boston

110

Transcript of First Do No Harm - Droidcon Boston

Page 1: First Do No Harm - Droidcon Boston
Page 2: First Do No Harm - Droidcon Boston

7 to 9 years

@brwngrldev

Page 3: First Do No Harm - Droidcon Boston

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@brwngrldev

Page 4: First Do No Harm - Droidcon Boston

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 5: First Do No Harm - Droidcon Boston
Page 6: First Do No Harm - Droidcon Boston
Page 7: First Do No Harm - Droidcon Boston
Page 8: First Do No Harm - Droidcon Boston
Page 9: First Do No Harm - Droidcon Boston
Page 10: First Do No Harm - Droidcon Boston

How can I become

an Android

Developer?@brwngrldev

Page 11: First Do No Harm - Droidcon Boston

How can I become a

great Android

Developer?@brwngrldev

Page 12: First Do No Harm - Droidcon Boston
Page 13: First Do No Harm - Droidcon Boston
Page 14: First Do No Harm - Droidcon Boston
Page 15: First Do No Harm - Droidcon Boston

Newsletters

Page 16: First Do No Harm - Droidcon Boston

Podcasts

Page 17: First Do No Harm - Droidcon Boston

Online Courses• At your own pace

• All aspects of development

• Different perspectives

Page 18: First Do No Harm - Droidcon Boston

Online Courses - Udacity

Page 19: First Do No Harm - Droidcon Boston

Online Courses - Caster.IO

Page 20: First Do No Harm - Droidcon Boston

“If you associate

with eagles, you will

learn how to soar…”

- Ojo Michael E.

Page 21: First Do No Harm - Droidcon Boston

Conferences• Hear from the Experts

• Grow your Network

• Learn new Techniques

Page 22: First Do No Harm - Droidcon Boston

Conferences

Page 23: First Do No Harm - Droidcon Boston

Open Source

• Countless Examples

• Learn by Doing

• Design Patterns in Action

Page 24: First Do No Harm - Droidcon Boston

Open Source

@brwngrldev

Page 25: First Do No Harm - Droidcon Boston

Open Source

@brwngrldev

Page 26: First Do No Harm - Droidcon Boston

Open Source

Page 27: First Do No Harm - Droidcon Boston

Study• Newsletters

• Podcasts

• Online Courses

• Conferences

• Open Source@brwngrldev

Page 28: First Do No Harm - Droidcon Boston
Page 29: First Do No Harm - Droidcon Boston
Page 30: First Do No Harm - Droidcon Boston

Prevention• Static Code Analysis

• Code Reviews

• Leak Canary

• Automated Testing

• API Testing@brwngrldev

Page 31: First Do No Harm - Droidcon Boston

Static Code Analysis

Lint

Checkstyle

FindBugs

PMD

@brwngrldev

Page 32: First Do No Harm - Droidcon Boston

Static Code Analysis

0

40

80

120

160

Checkstyle FindBugs PMD Error Prone Lint

@brwngrldev

Page 33: First Do No Harm - Droidcon Boston

Static Code Analysis - FindBugs

Page 34: First Do No Harm - Droidcon Boston

Static Code Analysis - FindBugs

Page 35: First Do No Harm - Droidcon Boston

Code Reviews

Page 36: First Do No Harm - Droidcon Boston

Code Reviews

Page 37: First Do No Harm - Droidcon Boston

Code Reviews

Page 38: First Do No Harm - Droidcon Boston

Code Reviews• Catch Issues

• Gain Exposure to New Ideas

• Promotes Consistent Design

• Ensures Maintainability

Page 39: First Do No Harm - Droidcon Boston

Code Reviews

Page 40: First Do No Harm - Droidcon Boston

Leak Canary

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

@brwngrldev

Page 41: First Do No Harm - Droidcon Boston

Leak Canary

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

@brwngrldev

Page 42: First Do No Harm - Droidcon Boston

Leak Canary

@brwngrldev

Page 43: First Do No Harm - Droidcon Boston

Architecture

Page 44: First Do No Harm - Droidcon Boston

Architecture

Foo Foo Bar

Baz

Page 45: First Do No Harm - Droidcon Boston

MVP + Dagger

@brwngrldev

Page 46: First Do No Harm - Droidcon Boston

Clean Architecture

@brwngrldev

Page 47: First Do No Harm - Droidcon Boston

Automated Testing

https://martinfowler.com/bliki/TestPyramid.html

Page 48: First Do No Harm - Droidcon Boston

@brwngrldev

Page 49: First Do No Harm - Droidcon Boston

Continuous Integration

@brwngrldev

Page 50: First Do No Harm - Droidcon Boston

API Testing

Page 51: First Do No Harm - Droidcon Boston

API Testing - Postman

Page 52: First Do No Harm - Droidcon Boston

API Testing - Postman

1.Send Requests

2.Receive Response

3.Run Test Scripts

Page 53: First Do No Harm - Droidcon Boston

Sending Requests

Page 54: First Do No Harm - Droidcon Boston

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

Page 55: First Do No Harm - Droidcon Boston

Test - Status Code

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

@brwngrldev

Page 56: First Do No Harm - Droidcon Boston

Test - Schema

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

var jsonData = JSON.parse(responseBody);

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

@brwngrldev

Page 57: First Do No Harm - Droidcon Boston

IT GETS

BETTER@brwngrldev

Page 58: First Do No Harm - Droidcon Boston

Test - Schema

@brwngrldev

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

Page 59: First Do No Harm - Droidcon Boston

Test - Schema

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

@brwngrldev

Page 60: First Do No Harm - Droidcon Boston

API Testing

Page 61: First Do No Harm - Droidcon Boston

Set Up Monitors

Page 62: First Do No Harm - Droidcon Boston

Prevention• Static Code Analysis

• Code Reviews

• Leak Canary

• Automated Testing

• API Testing@brwngrldev

Page 63: First Do No Harm - Droidcon Boston
Page 64: First Do No Harm - Droidcon Boston

74 year oldstomach pain

34 year oldstomach pain

@brwngrldev

Page 65: First Do No Harm - Droidcon Boston

@brwngrldev

Page 66: First Do No Harm - Droidcon Boston
Page 67: First Do No Harm - Droidcon Boston
Page 68: First Do No Harm - Droidcon Boston

LET’S

SHARE@brwngrldev

Page 69: First Do No Harm - Droidcon Boston

Code Outside

InsideEmulator

Page 70: First Do No Harm - Droidcon Boston

CODE

@brwngrldev

Page 71: First Do No Harm - Droidcon Boston

@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

Page 72: First Do No Harm - Droidcon Boston

Logcat/Pidcat

Page 73: First Do No Harm - Droidcon Boston
Page 74: First Do No Harm - Droidcon Boston

Log Events

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

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

Page 75: First Do No Harm - Droidcon Boston

Crashlytics

Page 76: First Do No Harm - Droidcon Boston

OUTSIDE

@brwngrldev

Page 77: First Do No Harm - Droidcon Boston

Crashlytics

Page 78: First Do No Harm - Droidcon Boston

Crashlytics

Page 79: First Do No Harm - Droidcon Boston

Classy Shark

Page 80: First Do No Harm - Droidcon Boston

Classy Shark

Page 81: First Do No Harm - Droidcon Boston

Battery Historian

Page 82: First Do No Harm - Droidcon Boston

Battery Historian

Page 83: First Do No Harm - Droidcon Boston

Battery Historian

Page 84: First Do No Harm - Droidcon Boston

…Battery Citizen

Page 85: First Do No Harm - Droidcon Boston

mitmproxy

https://mitmproxy.org/doc/howmitmproxy.html

Page 86: First Do No Harm - Droidcon Boston

mitmproxy

https://mitmproxy.org/doc/howmitmproxy.html

Page 87: First Do No Harm - Droidcon Boston

mitmproxy

brew install python3

pip3 install mitmproxy

mitmproxy --host

@brwngrldev

Page 88: First Do No Harm - Droidcon Boston

mitmproxy

Page 89: First Do No Harm - Droidcon Boston

mitmproxy

Page 90: First Do No Harm - Droidcon Boston

Systrace

Page 91: First Do No Harm - Droidcon Boston

Systrace

Alerts Pane

Page 92: First Do No Harm - Droidcon Boston

Systrace

Alert Detail

Page 93: First Do No Harm - Droidcon Boston

INSIDE

@brwngrldev

Page 94: First Do No Harm - Droidcon Boston

Apk Analyzer

Page 95: First Do No Harm - Droidcon Boston

Android Profiler

Page 96: First Do No Harm - Droidcon Boston

Android Profiler

Page 97: First Do No Harm - Droidcon Boston

Android Profiler

Page 98: First Do No Harm - Droidcon Boston
Page 99: First Do No Harm - Droidcon Boston

Android Profiler

http://tools.android.com/tech-docs/android-profiler

Page 100: First Do No Harm - Droidcon Boston

EMULATOR

@brwngrldev

Page 101: First Do No Harm - Droidcon Boston

Android Options:

GPU Overdraw

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

(1x) (4x or more)

Page 102: First Do No Harm - Droidcon Boston

Android Options:

GPU Overdraw

@brwngrldev

Page 103: First Do No Harm - Droidcon Boston

Android Options:

Profile GPU Rendering

16 milliseconds

@brwngrldev

Page 104: First Do No Harm - Droidcon Boston

Android Options:

Profile GPU Rendering

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

Page 105: First Do No Harm - Droidcon Boston

Diagnosis

Page 106: First Do No Harm - Droidcon Boston
Page 107: First Do No Harm - Droidcon Boston
Page 108: First Do No Harm - Droidcon Boston

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 109: First Do No Harm - Droidcon Boston

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 110: First Do No Harm - Droidcon Boston

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

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

• http://docs.mitmproxy.org/en/latest/mitmproxy.html -mitmproxy

• 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