Sinopse
The Fragmented Podcast is a podcast for Android Developers hosted by Donn Felker and Kaushik Gopal. Our goal is to help you become a better Android Developer. We chat about topics such as Testing, Dependency Injection, Android Patterns and Practices, useful libraries and much more. We will also be interviewing some of the top Android Developers out there. Subscribe now and join us on the journey of being an Android Developer.
Episódios
-
152: Should I Rewrite My App? with Jeroen Mols
11/02/2019 Duração: 58minAfter you've been working on an app for sometime, the most common quandry one runs into is the need to rewrite the app. We've all been there, there's technical debt, we've improved our understanding, the tools have become better, we've become better. So should you go back and just rewrite the whole app? Jeroen walks us through his thinking. Shownotes The big Rewrite - Jeroen's talk Droidcon Italy Slides for the talk with notes Philips Hue Philips Hue API Resources The big rewrite - Chad Fowler The big rewrite - Jo Van Eyck Paying technical depth - Jeroen Moons Things you should never do - Joel Spolsky Write awesome unit tests - Jeroen Mols Pro Android Studio - refactoring - Jeroen Mols Why We Decided to Rewrite Uber’s Driver App - Nandhini Ramaswamy and Adam Gluck How to Ship an App Rewrite Without Risking Your Entire Business - James Barr, and Zeyu Li Sponsors
-
151: Evolving Android architectures (Part 2)
04/02/2019 Duração: 57minIn this episode, we continue our discussion from episode 148 on evolving android architectures. We collected some of the questions from the community and try to answer them. Shownotes Listen to the recap in episode 148 LCE: Modeling Data Loading in RxJava Rx example pull from db then network (from KG's presentation) Donn's caster.io episode on the amb operator Akshay's episode on Arch components (specifically Live Data) Jose's cheatseet on Activity lifecycle KG's example of using this architecture Sponsors
-
150: Learning Kotlin - Returns, Jumps & Labels
21/01/2019 Duração: 19minShownotes Kotlin Returns and Jumps Documentation Code data class Customer(val isPlatinum: Boolean) fun main() { val customer = Customer(false) println("Number of points customer has: ${calculatePoints(customer)}") // Break out of the loop once we're over 25 for (i in 1..100) { if (i > 25) { break } else { println(i) } } // Skip all even numbers for (i in 1..100) { if (i % 2 == 0) { continue } else { println(i) } } // Break out of the outer loop (which breaks out of the inner too) using a label donn@ for (i in 1..100) { for (j in 100..200) { if (j > 150) break@donn // This will break out of the inner loop and outer loop else println("i: $i, j: $j") } } // Continue processing the next outer loop value when a condition is met. donn@ for (i in 1..100) { for (j in 100..200) {
-
149: Learning Kotlin: inline classes and Type driven design
15/01/2019 Duração: 24minIn this quick fragment, Kaushik talks about the new Kotlin 1.3 experimental feature "inline classes" and how it helps with Type driven design. Shownotes Kotlin releases 1.3 Fragmented episode #116 - inline, noinline & crossinline Think strong types and simple values typealias.com blog Type driven design resources Type drive approach to Functional design - Michael Feathers Type driven design in Elm blog.ploeh - Type driven design Kotlin KEEP KEEP proposal - inline classes KEEP discussion vs typealias Fragmented Ep #122 - typealiases inline classes vs typealiases How to represent money in programming Kotlin experimental Jake Wharton - inline classes make great database ids Sponsors
-
148: Evolving Android architectures (Part 1)
07/01/2019 Duração: 58minIn this episode, Donn and Kaushik talk about the state of android architectures and how they've stared to evolve. Kaushik recently worked on a project of coming up with an evolved version of an MVVM architecture, very similar to what the Android community now calls MVI. Special request: if you have follow up questions or clarifications or things you'd like to see specifically with respect to this dicussion, hit us up on the Discord #fragmented-podcast channel with your thoughts and we'll make sure to address them in future parts! Shownotes MBLT-Dev talk by KG : Unidirectional state flow patterns - a refactoring story github sample repo with this pattern Salient features of the pattern: I. Screens are driven by a single ViewModel II. Screens listen to a single Observable exposed from the ViewModel III. Screens listen to a single Observable exposed from the ViewModel IV. Events are sent into the VM through a single function processInputs V. Break(ing) the Chain VI. Testing strategy Inspiration The state of m
-
147: Disposing RxJava 2 Streams with AutoDispose
31/12/2018 Duração: 15minIn this short fragment episode, Donn explains how you can clean up your RxJava 2 streams and ensure no memory leaks are occurring by using the AutoDispose library from Uber. Shownotes AutoDispose Library Tool to help migrate to RxJava 2 CatchUp Library Code Samples Java myObservable .map(...) .as(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this))) .subscribe(...) Kotlin myObservable .map(...) .autoDisposable(AndroidLifcycleScopeProvider.from(this)) .subscribe(...) With Scope Event Provided myObservable .map(...) .autoDisposable(AndroidLifcycleScopeProvider.from(this, Lifecycle.Event.ON_DESTROY)) .subscribe(...) Testing // File: CustomerService.kt class CustomerService @Inject constructor(...) { lateinit var scopeProvider: ScopeProvider } // Usage in Fragment/Activity/etc val service = CustomerService(...).apply { scopeProvider = AndroidLifecycleScopeProvider.from(this) } // Usage in Test val service = CustomerService(...).apply { scopeProvider = TestScopeProvider.create()
-
146: 3 Things Every Android Developer Needs to Know
24/12/2018 Duração: 27minDependency Injection Constructor_setter_method injection Service Locators or other DI frameworks Common Frameworks 1. Dagger 2. Koin 3. Kodein 4. ToothPick How to test Functional / System Integration Unit Tools: jUnit Espresso Spek Keep it simple simple KISS principle KISS principle - Wikipedia Examples Code Duplication “Extract this into a method” Lets create a framework for this Kaushik’s - 3x rule if something is duplicated 3 or more times, think about extracting it 3/6 Rule - In 6 months, will I be able to understand this in under 3 minutes? Contact @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)
-
145: Tracking Network Requests With x-Request-ID
18/12/2018 Duração: 11minIn this short fragment, Kaushik explains how you can trace network requests from your app by adding a special header. Easily trace an HTTP request all the way from a client to your backend web process. Shownotes What is the X-Request-ID HTTP Request IDs improve visibility across the application stack How HTTP headers work Where does the X- come from? Sponsors
-
144: Developer Productivity Tools
10/12/2018 Duração: 01h20minIn this episode, Donn and Kaushik talk about productivity tools for developers. As developers, what are some additional tools and utilities that really up your game. If you wanted to see how they tweak their development environments and workstations in general, this is a good episode to listen. Also introducing a Fragmented Discord Chat server! Shownotes Fragmented Discord Chat Server Productivity tools Keyboard Maestro Keyboard Maestro - Mac (Referral code with 20% discount) Sample macros: Demo: Better auto pairing with BBEdit and Keyboard Maestro Demo: Autocopy text from one program to another AutoHotkey - Windows (Windows equivalent of sorts) DuckDuckGo Bang Syntax Muzzle App Window management tools: Divvy Spectacle Magnet Moom Phoenix VSCode Night owl theme OhMyZsh Spaceship prompt Auto Suggestions Fish Shell Kap - Screen recording tools Sip - Color Management Sponsors
-
143: Real world testing thoughts
03/12/2018 Duração: 27minIn this mini fragment, Donn and Kaushik share some thoughts on real world testing with Android development - a favorite topic of theirs. Kaushik recently ran into a case where an espresso test fails because the UI stops performing. It's an interesting discussion on figuring out what matters when you write your tests. They dive into strategies and techniques around testing. What makes a good test, what should you be testing? They then talk about why Hermetic testing is pretty hard on mobile and ideas around a simple solution that could be provided out of the box. They then round it up talking about TDD and it's role in today's world. Shownotes Espresso Testing lists (onData) Espress test swipe action What is the fold Hermetic Servers testing MockWebServer WireMock Sponsors
-
142: Indie development on Android and iOS with Matt Logan
19/11/2018 Duração: 58minIn this episode, we talk to our friend Matt Logan. Matt took some time off and worked on an indie app called Sessions. He built this for both Android and iOS. In this episode we talk to him about his experience building apps on both platforms, techniques, advice and other good stuff. Shownotes Sessions Android iOS Strava Chris Lacy - Action Launcher Indie Hacker's podcast Fragmented Ep #64 - Garbage Collection (Android) vs Reference Counting (iOS) Matt's blog post on code sharing Sponsors Instabug NeverCode Blog post on developing apps 20% faster Contact @fragmentedcast @_mattlogan @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)
-
141: Impostor Syndrome
12/11/2018 Duração: 34minIn this mini fragment, Donn and KG talk about Impostor syndrome. Most of us developers are plagued by this. Does this feeling ever go away? How do we deal with this? Listen to this short episode to find out more. Shownotes Karl the Fog (wikipedia page) @KarlTheFog Matt's twitter post on background process limit 0 #135 - You can't learn everything I’m willing to look foolish, if it means I’ll learn something. Larry page 1996- Java thread #76: Taming the activity lifecycle with Kristin Marsicano Jose Alcérreca's lifecycle cheatsheet bookmark Sponsors Instabug - Thousands of companies including Lyft, eBay and T-Mobile rely on Instabug to receive comprehensive bug reports from users and testers, helping them iterate faster and enhance their app quality. Signup now, integrate the SDK for free, and get a special Instabug t-shirt. Nevercode -Develop apps 20% faster with the leading CI/CD partner for iOS, Android, Cordova, Ionic, React Native & Flutter projects. Blog post on developing apps 20% faster Con
-
140: ProGuard with Jeb Ware
05/11/2018 Duração: 58minWe all know of ProGuard, we want to use it and like it. But let's face it proGuard ain't pretty. In this episode we have Jeb walk us through the magic of ProGuard. We talk to Jeb Ware of American Express. Jeb works as an Android developer and has given some great talks on ProGuard. He walks us through what ProGuard is, how it works, advancements with R8 and more. By the end of this episode, you should have a new found appreciation for proGuard and bravely approach adding proGuard to your projects. Shownotes How ProGuard works - Jeb at Droidcon Boston ProGuard Manual D8/R8 announcement R8 issue tracker Sponsors American Express Jobs - American Express is hiring Android developers! Contact @fragmentedcast or our Youtube channel @jebstuart @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)
-
139: Static code analysis with Manu Sridharan
24/10/2018 Duração: 39minIn this episode, Donn and Kaushik talk to Uber's Manu Sridharan on static code analysis. Manu's a badass who did his PhD on the subject! He explains how static code analysis works, how Uber leverages these tools in their app development pipeline and how we can use such tools to build high quality Android apps. Note from Manu: I found the story I was thinking about: Reed Hastings founded the company that built the Purify tool for debugging memory errors in C programs before founding Netflix. But, that's actually not a static analysis tool; it does dynamic analysis by adding extra metadata at runtime. As far as the history of lint goes, from Wikipedia looks like Kaushik's guess was exactly right as to why it's called lint. Looks like the name goes back to the late 1970s. Misc ErrorProne Improve your code with Android lint checks checkstyle RxThreadEffectChecker The Checker framework NullAway - Uber Infer - Facebook Infer: RacerD - Facebook Contact @fragmentedcast (on Twitter) or our Youtube channel @rakingl
-
138: Decompress - kotlin scripting
15/10/2018 Duração: 23minIn this mini fragment, Donn asks KG about a recent hackathon side project that he worked on with Kotlin scripting. We go into kotlin scripting (using kscript), pros cons, setting it up and more. We've added links some interesting resources, so you want to make sure you check out the shownotes for this one, so you too can explore kotlin scripting and see if it's a fit for you. Shownotes Existing solutions for poll/vote tabulation polleverywhere.com surveymonkey.com polldaddy.com Misc kscript by holgerbrandl blog post on the hackathon vote tabulation script what the csv output from google forms looks like github repo for script - with installation instructions Highly recommended - Talking kotlin episode on kscript // slick kotlin usage override fun onCreate(savedInstanceState: Bundle?) = super.onCreate(savedInstanceState).also { setContentView(R.layout.activity_something) // ... } Sponsors American Express Jobs - American Express is hiring Android developers! Contact
-
137: Decompress KISS DRY testing
04/10/2018 Duração: 45minIn this episode, DF and KG decompress. They start off talking about ideas around KISS vs DRY in software engineering. They move on then to talk about a dear topic - functional vs unit testing and then dive into some of the woes of having a testing infrastructure spun up. Also announcing our youtube channel ! Fragmented's Youtube channel Sponsors American Express Jobs - American Express is hiring Android developers! Contact @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe
-
136: Kotlin Extension Functions
24/09/2018 Duração: 21minIn this fragment episode, Donn talks about Kotlin extension functions. He discusses what they are, how to build them, why they're useful, how to organize them, visibility and how to call them Java and much more. Show Notes Kotlin Extension Functions Docs Calling Extension Functions from Java Kotlin KTX View Functions import android.view.View fun View.gone() { this.visibility = View.GONE } fun View.visible() { this.visibility = View.VISIBLE } Contact @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe
-
135: You Can't Learn Everything
17/09/2018 Duração: 08minDonn's on a roll again this week and talks to us about his experience having developed Android for a while. In the early days of Android development, as app developers we felt like we had a decent grasp of everything you needed to know to pump out decent apps. But with the time, and the latest updates, that has become a tricky thing. This is a good problem to have for the ecosystem but it can make it seem very daunting for developers, both new and old. Donn gives his 2 cents on this subject. Download Contact @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe
-
134: Get Effective Help with an SSCCE
06/08/2018 Duração: 21minIn this episode, Donn talks about how you can get effective help with your coding problems with an SSCCE - a Simple, Self-Contained, Correct (Compilable), Example. Using an SSCCE provides others with a quick, concise way to examine the problem without extraneous libraries, UI toolkits and various other parts of your application that do not matter to the problem at hand. Donn breaks down each component of the SSCCE so you can wrap your head around what you need to get help quickly. Links SSCCE.org Sponsors Instabug - Instabug is the simplest yet most comprehensive bug reporting and In-app feedback SDK. Contact @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe
-
133: Dependency Injection and Service Locators in a Kotlin world with Danny Preussler
23/07/2018 Duração: 01h10minA hotly debated topic at the moment is the use of a library like Dagger for dependency injection in the world of Kotlin. In this episode, we talk to Danny Preussler. Danny's a pro who's been around from the Java 1.0 days! He helps trace the history of dependency injection in Java all the way to today, in a Kotlin world where there exists alternatives like Koin and Kodine. We dive into how some of these use a Service Loader/Locator pattern and the subtle differences with dependency injection. Listen on for an action packed episode. Show Notes Danny's slides (DI in a Kotlin world) talk Koin Toothpick how to pronounce reified Service Locators vs Dependency Injection Your application is aware it's using a Service Locator, but your application should be totally un-aware that it's using a Dependency Injection Container. SO post on the difference between DI & SL pattern Martin Fowler's post on DI, IOC, SL Caster.IO (paid) course by DF on setting up testing with Dagger 2 and Espresso Mark Seeman on Service L