
Fragmented - AI Developer Podcast
269 episodes — Page 3 of 6

Ep 169169: Testing and JUnit 5 with Marcel Schnelle
Marcel Schnelle joins Donn in this episode to talk about how to get your application under test and some steps to go from scared to confident in your testing process. The second half of the show they dive in deep to JUnit 5 and its new features. JUnit 5 is backwards compatible with JUnit 4 and offers a slew of new features and extensibility points which make the framework much more appealing going forward. We're convinced you'll enjoy this episode and leave wanting to get your app under test - even more than it already is. Enjoy. Shownotes Caster.IO JUnit 5 Course JUnit 5 Android Plugin JUnit5 User Guide Danny Preussler: The next gen of testing - Droidcon NYC 2018 (YouTube) Marc Philipp: JUnit 5 Extensions - Joker 2017 (YouTube) Spek Framework Testing for Kotlin Get ahold of Marcel: Marcel Schnelle Twitter Marcel Schnelle Website Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 168168: Learning Kotlin: Lambda Expressions Part 2
In this episode, Donn continues his talks about Kotlin Lambda Expressions. He explains how you can use lambda expressions as function parameters and as return types for functions. This is a very dense episode - if you get lost look at the code snippets below or view on them on fragmentedpodcast.com class LogReader { fun processFile(file: File, processLine: (String) -> Unit = {}) { file.forEachLine { println("Number of Chars: ${it.length}") processLine(it) println("Line Done Processing") } } fun processFileWithHandlers(file: File, logHandler: LogHandler) { file.forEachLine { println("Start of Processing") logHandler.handleLine().forEach { handler -> handler(it) } println("Line Done Processing") } } } interface LogHandler { fun handleLine(): List<(String) -> Unit> } val reader = LogReader() val textFile = File("/Users/donnfelker/scratch/lorem.txt") // Process with single lambda reader.processFile(textFile, { println("First 10 Chars: ${it.substring(0..9)}") }) val logHandler = object : LogHandler { override fun handleLine(): List<(String) -> Unit> { return listOf<(String) -> Unit>( { line -> println("${line.substring(0, 1)}") }, { line -> println("${line.substring(2, 4)}") }, { line -> println("${line.substring(5, 10)}") } ) } } // Process with multipe handlers via the logHandler reader.processFileWithHandlers(textFile, logHandler) Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 167167: Clean Architecture with Joe Birch
Donn sits down with Buffer Android Lead, Joe Birch. Joe is a GDE for Android, Google Actions, Flutter and Google Pay. In this episode Donn and Joe talk about Clean Architecture, what it is, and why you might want to use it. They break down the concept of what Clean Architecture is in a manner that is easy for even a beginner to understand. Enjoy. Shownotes Caster.IO Course [Uncle Bob Clean Arch]https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html Buffer Clean Architecture BoilerPlate Chord Assist Guitar Get ahold of Joe: Joe Birch Twitter Joe Birch Instagram Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 166166: Cross platform development talk with Jesse Wilson
Kaushik decides to hit record on a skype call he has with friend of the show Jesse Wilson. They start off by discussing building features across different platforms today. Jesse talks about a clever mechanism of using javascript to change logic on the fly across the Square cash app, that's worked out pretty well. They then go on to discussing how one can try and converge across platforms in terms of business logic, architecture, naming etc. They then wind it down by discussing the state of Flutter, Kotlin multiplatform and reaching the promised land. Enjoy. Shownotes objc.io Kevin Galligan Alec Strong Egor Andreevich Sponsors 🙏 Instabug Instabug completely takes care of your beta testing and user feedback process so you can debug, fix, and improve your app quality faster. They're giving Fragmented listeners a special bonus when you go to instabug.com/fragmented - Signup for free, install the SDK, and you will get Instabug's brand new t-shirt Contact @jessewilson @chrismlacy @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 165165: Learning Kotlin: Lambda Expressions Part 1
In this episode, Donn talks about Kotlin Lambda Expressions. He explains the syntax and how to build a couple of simple lambda expressions with and without type inference and declaration. We wrap up with a small example of passing a small lambda with multiple values to a function. See the show notes below for more info. This is part 1 of a multi-part series on Lambda Expressions in Kotlin. The basic syntax of a lambda expression: val myLambda : Type = { argumentList -> codeBody } The codeBody is the only section that is not optional. Double lambda expression (doubles an integer) with type inference val double = { number: Int -> number * 2 } val result = double(4) // result = 8 now Double string multi-line lambda with type inference. val doubleString = { number: Int -> // codebody val doubleResult = number * 2 doubleResult.toString() // Kotlin knows this will return a string } Type declaration in a lambda val myLambda: (String, Int) -> String = { str, int -> "$str - ${int.toString()}" // "Donn - 32" } val result = myLambda("Donn", 32) // result = "Donn - 32" Preview of next week … passing a lambda to a function fun doWork(name: String, favoriteNumber: Int, someLambda: (String, Int) -> String) { // Do some processing, this is a contrived example val repeatedString = "$name$name" val result = someLambda(repeatedString, favoriteNumber) println(result) } // Usage doWork("Donn", 32) { str, int -> val someNewValue = "$str is my parameter and so is $int" someNewValue.length.toString() // this is returned } // '37' is printed via println // Or use it like this, the lambda code body is what can change, this is where the power is at doWork("Donn", 32) { name, count -> var result = "" for(i in 1..count) { result += "$name" } result // this is returned } // loops over and concatinates "Donn" until the favorite number (aka count) is met. // Output looks like: "DonnDonnDonnDonnDonnDonn..." and so on...

Ep 164164: Learning Kotlin: Sealed Classes
In this episode, you'll learn all about Kotlin Sealed classes. Donn walks you through what they are, how to create them, how to use data classes, objects and regular classes to create a restricted type hierarchy. Kotlin Sealed Classes Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 163163: Parallelize Your Espresso Tests with Flank w/ Matt Runo
In this episode, Donn talks to Matt Runo about the Flank project. Using Flank you can run your Espresso test suite in parallel on Firebase Test Lab (FTL). This allows you to lower your feedback loop time and increase developer productivity and throughput. You'll learn all about Flank, how it works and how to get started in this episode. Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 162162: Catching up on Google IO 2019
Shownotes Digital trends: Comparing Pixel 2, 3 and 3A Google Activity tracking Google Activity tracking Controls Flutter for Web New navigation paradigm in Android Q What's new in Android Deveopment Tools - Torr's IO talk Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram) Sponsors 🙏 Instabug - Instabug is an SDK that completely takes care of your beta testing and user feedback process so you can debug, fix, and improve your app quality faster. Go to instabug.com/fragmented, signup, install the SDK, and you will get their brand new t-shirt and a 14-day free trial.

Ep 161161: Machine Learning on Android with ML Kit and TensorFlow with Dan Jarvis
In this show, Donn talks with Dan Jarvis about Machine Learning on Android with ML Kit and Tensor flow. They dive deep into what ML (Machine Learning) is, what you need to know as a developer and how to apply those things to build ML applications on Android. They tal about what you can do on Android in regards to ML, model training and running the models on the device. You may be wondering if you should include the model in your app or if it should live on a server, that's discused as well and the reasons for it. They wrap up the show with some examples of what you could build and some great resources to get you started. Enjoy Shownotes What Can Machine Learning Do? ML Kit ML Kit Demo Video ML Kit Quickstart Image Labeling Example Custom Models How Does Prisma Work? Cucumber Example Tensorflow Demo Apps Inside AI Newsletter TensorFlow Lite TensorFlow Lite (TF Dev Summit '19) - [VIDEO] Custom On-Device ML Models with Learn2Compress Microcontoller Support Face Generation DroidCon NYC Applied Tensorflow iN Android Apps Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Contact Dan Jarvis on LinkedIn, Medium or GitHub Donn Felker - @donnfelker (Twitter) and donnfelker (Instagram) Kaushik Gopal - @kaushikgopal (Twitter) and kaushikgopal (Instagram) Fragmented on Twitter: @fragmentedcast Our YouTube channel Join thousands of other developers on our free chat server. Ask questions, answer questions, be part of the community at our The Fragmented Discord chat

Ep 161160: Increase App Engagement with Android Q
With the release of Android Q we now have the settings panel and all its glory. This panel, while most likely overlooked as a minor feature, is actually a diamond in the rough. Why? Simply because it's going to lower the abandonment rate of your app and increase the engagement of your app at the same time. Donn talks about this in depth in this episode. Enjoy. Shownotes Android Q Features Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 160159: Improve Your App with the Android Material Components (feat. Cameron Ketcham & Connie Shi)
In this show, Donn and Kaushik talk to Cameron Ketcham and Connie Shi from the Android Material Components team at Google. The Android Material Components are material designed components that you can easily drop into your application with just a few small tweaks. You get a bunch of fully built out material components, from the Android Material team at Google. From Chips, to Cards, to Buttons and much much more ... the goal is to enable you to build your application faster when using these components. Donn and Kaushik talk to Cameraon and Connie about the components and how to use them in this episode. Enjoy Shownotes Material.io Website Android Material Components Material Components GitHub Tasks App Developer Tutorials AndroidDev Summit Talk Material Theme Editor Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Contact Cameron and Connit at - GitHub Issues, StackOverflow Donn Felker - @donnfelker (Twitter) and donnfelker (Instagram) Kaushik Gopal - @kaushikgopal (Twitter) and kaushikgopal (Instagram) Fragmented on Twitter: @fragmentedcast Our YouTube channel Join thousands of other developers on our free chat server. Ask questions, answer questions, be part of the community at our The Fragmented Discord chat

Ep 159158: Building High Performance Audio on Android
In this show, Donn and Kaushik talk to Don Turner about how to build high-performance audio apps on Android. We dive deep into history of audio on Android, some of the problems that the platform faced. Then look into the tools that we now have to solve those problems so that developers like you can build killer audio apps. Enjoy. Shownotes Android Midi Oboe Intro to Oboe (Video) Google IO 2019 Talk Sponsors 🙏 sentry.io Contact Don Turner - @donturner Donn Felker - @donnfelker (Twitter) and donnfelker (Instagram) Kaushik Gopal - @kaushikgopal (Twitter) and kaushikgopal (Instagram) Fragmented on Twitter: @fragmentedcast Our YouTube channel Join thousands of other developers on our free chat server. Ask questions, answer questions, be part of the community at our The Fragmented Discord chat

Ep 157157: Effective Java Item# 20 - Prefer interfaces to abstract classes
In this episode, Donn talks about Item #20 in the Effective Java book (third series) by Joshua Bloch. He discusses why you should think about using interfaces over abstract classes, how they can add mixin like behavior to retrofit existing classes with new behavior, default methods, skeleton implementations and more. Enjoy. Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 156156: Increase App Engagement with Android Q
With the release of Android Q we now have the settings panel and all its glory. This panel, while most likely overlooked as a minor feature, is actually a diamond in the rough. Why? Simply because it's going to lower the abandonment rate of your app and increase the engagement of your app at the same time. Donn talks about this in depth in this episode. Enjoy. Shownotes Android Q Features Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 155155: Naming conventions for RxJava Observables
The Android community has come to use Rx pretty heavily but surprisingly there hasn't been any one convention that's won, when it comes to how we name our functions that return Observables. getUser(), user(), userUpdates() ? In this mini-episode dutifully does the yak-shaving for you and discusses what some options are and what the community has been gravitating towards. Enjoy. Shownotes yak-shaving Upday's convention: Florina's tweet Upday's blog post - Reactive Frustrations 1 Options // option 1 fun getUser(): Single // yuck // option 2 fun user(): Observable // but what does this mean? // option 3 fun user(): Single fun userUpdates(): Observable // or fun userStream(): Observable // this is looking good // option 4 (upday style) fun userOnce(): Single fun userStream(): Observable fun userOnceAndStream(): Observable Stay tuned for a future episode, where we discuss more details and more complicated cases to handle (like emitting a list of user, policies for fetching the first user as quickly as possible etc.). Also #FinishNotation. Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 154154: Developer Growth: Start Writing
Growing as a developer is important for you, your career and your future. One of the best ways to grow your career is to start writing. Donn recommends starting a blog or contributing to a blog. The process of writing will expose your weak points in your comprehension of a topic. Refining your communication skills through writing and putting thoughts out into the universe via a blog will broaden your skills as a developer. Ultimately, writing is about communication and communication is the cornerstone of success in much of anything. In this episode, Donn walks you through why you should start writing to help you grow as a developer. Enjoy. Sponsors 🙏 sentry.io - Your code is broken. Let’s fix it together - https://sentry.io/for/android/ Instabug -They're giving a special offer for all listeners, go to instabug.com/fragmented, signup, install the SDK, and you will get a free Instabug t-shirt and a 14-day free trial. Contact Discord chat or @fragmentedcast or [our Youtube channel][10] @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 153153: How to be an indie Android developer with Chris Lacy
Listen to all star Indie developer and friend of the show Chris Lacy. Chris Lacy created the beloved Action Launcher - arguably one of the best Launcher apps on Android. In this epiisode, he talks to us about what it's like being an indie developer, starting on Action Launcher and of course his newest creation - ActionDash. Enjoy. Shownotes TweetLanes Action Launcher On selling Link Bubble Brave browser ActionDash Introducing ActionDash Download on the play store Slick graph library MPAndroidChart Action Launcher is hiring! Sponsors 🙏 sentry.io Nevercode Nevercode - CI/CD for Android, iOS, React Native & Ionic Try Codemagic Join Flutter CI/CD Slack Community Contact @chrismlacy or work with him or leave a 5 star reviews on ActionDash :) Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 152152: Should I Rewrite My App? with Jeroen Mols
After 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 🙏 sentry.io Contact @molsjeroen or his blog or his speakerdeck Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 151151: Evolving Android architectures (Part 2)
In 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 🙏 sentry.io Nevercode Try Codemagic - CI/CD for Flutter apps by Nevercode Join Flutter CI/CD Slack Community Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 150150: Learning Kotlin - Returns, Jumps & Labels
Shownotes 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) { if (j > 150) continue@donn // This will break out of the inner loop and outer loop else println("i: $i, j: $j") } } // returns with label example1() example2() println("I'm done processing!") } fun calculatePoints(customer: Customer): Int { if (customer.isPlatinum) { return 100000 } else { return 10 } } fun example1() { listOf(1, 2, 3, 4, 5, 6, 7, 8, 9).forEach { if (it > 7) { return } else { println(it) } } println("This wont print :( because return exited the bar() function") } fun example2() { listOf(1, 2, 3, 4, 5, 6, 7, 8, 9).forEach bin@ { if (it > 7) { return@bin } else { println(it) } } println("This will print! :) return exited the forEach!") } Sponsors 🙏 Nevercode Nevercode is taking Flutter revolution extremely serious and is prepared to offer kick-ass CI/CD for Flutter projects with codemagic.io. Check it out and get started at https://codemagic.io/ Sentry.io Sentry tells you about errors in your code before your customers have a chance to encounter them. Check them out at: https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 149149: Learning Kotlin: inline classes and Type driven design
In 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 🙏 Nevercode Nevercode is taking Flutter revolution extremely serious and is prepared to offer kick-ass CI/CD for Flutter projects with codemagic.io. Check it out and get started at https://codemagic.io/ Sentry.io Sentry tells you about errors in your code before your customers have a chance to encounter them. Check them out at: https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 148148: Evolving Android architectures (Part 1)
In 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 managing state with RxJava MVI patterns with Hannes Dorfmann MVRx Sponsors 🙏 Nevercode Nevercode is taking Flutter revolution extremely serious and is prepared to offer kick-ass CI/CD for Flutter projects with codemagic.io. Check it out and get started at https://codemagic.io/ Sentry.io Sentry tells you about errors in your code before your customers have a chance to encounter them. Check them out at: https://sentry.io/for/android/ Contact Discord chat or @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 147147: Disposing RxJava 2 Streams with AutoDispose
In 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() } Contact @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram) Fragmented Chat

Ep 146146: 3 Things Every Android Developer Needs to Know
Dependency 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)

Ep 145145: Tracking Network Requests With x-Request-ID
In 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 🙏 codemagic.io by NeverCode Join their Flutter Community here Contact @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 144144: Developer Productivity Tools
In 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 🙏 codemagic.io by nevercode Join their Flutter Community here Contact @fragmentedcast or our Youtube channel @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 143143: Real world testing thoughts
In 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 🙏 American Express Jobs - American Express is hiring Android developers! NeverCode Blog post on developing apps 20% faster Contact @fragmentedcast or our Youtube channel @jebstuart @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 142142: Indie development on Android and iOS with Matt Logan
In 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)

Ep 141141: Impostor Syndrome
In 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 Contact @fragmentedcast @preusslerberlin @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 140140: ProGuard with Jeb Ware
We 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)

Ep 139139: Static code analysis with Manu Sridharan
In 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 @rakingleaves @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 138138: Decompress - kotlin scripting
In 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 Youtube channel @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe

Ep 137137: Decompress KISS DRY testing
In 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

Ep 136136: Kotlin Extension Functions
In 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

Ep 135135: You Can't Learn Everything
Donn'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

Ep 134134: Get Effective Help with an SSCCE
In 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

Ep 133133: Dependency Injection and Service Locators in a Kotlin world with Danny Preussler
A 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 Locators being an anti-pattern Sponsors Bitrise - Bitrise is your mobile continuous integration and delivery for your whole team, with dozens of integrations for your favorite services. Contact @fragmentedcast @preusslerberlin @donnfelker and donnfelker (on Instagram) @kaushikgopal and kaushikgopal (on Instagram)

Ep 132132: Dealing with Money in programming
In this mini fragment Kaushik talks about dealing with the Money object. With money we need decimals, but the obvious solution of using a float or double may not work as advertised. Listen to this episode to find out why and how you can go about dealing with this. Show Notes The infamous Short - Ep029: All about the infamous 65,536 dex method count IEEE_754 float storage format How binary fractions work Problematic snippet 1: println(1.03-0.42) # prints 0.6100000000000001 Problematic snippet 2: var x = 0F (1..100).forEach { i -> x += 0.01F } println(x) # 0.99999934 vs 1 Sponsors Bitrise - Bitrise is your mobile continuous integration and delivery for your whole team, with dozens of integrations for your favorite services. Contact @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe

Ep 131131: ARCore with Yulia Kaleda
We live in a time of booming AR (and VR). We wanted to talk to someone who’s worked with it and would know a thing or two about the subject. Then we found Yuliya – also known as the walking wizard of ARCore. In this episode, she teaches Kaush and Donn about ARCore, the differences between AR/VR, the fundamental building blocks of ARCore, some of the newer concepts introduced like Sceneform. An action packed episode to say the least. Listen on ! Show Notes ep 79 - How do i get started with VR Apps Tango shutting down ARCore ARKit Cloud Anchors: Share AR experiences ARCore - Geometry detection Sceneform - 3d view rendering Resources Google ARCore github Yuliya's blog post Yuliya's talk Sponsors Bitrise - Bitrise is your mobile continuous integration and delivery for your whole team, with dozens of integrations for your favorite services. Contact @yuliyakaleda @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe

Ep 130130: Sunsetting ReactNative at AirBnb with Gabriel Peal - Part 2
In this episode, we resume our conversation with Airbnb's Gabriel Peal. If you haven't listened to part 1, you really really should go back and do that. In that episode, we kicked it off by first trying to understand the goals and the story behind why React Native was chosen as the code sharing technology/tool. After two years, 220 screens, and 120,000 lines of javascript, Gabriel tells us why they're moving away from React Native. Show Notes The post that kicked it all off Flow - static type checker for Javascript Babel -Javascript compiler Heisenbugs Bugsnag RecyclerView : UICollectionView Facebook blot post: State of React Native 2018 Kotlin Extensions Kotlin Delegated properties Epoxy Contact @gpeal8 [twitter.com] @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe

Ep 129129: Sunsetting ReactNative at Airbnb with Gabriel Peal - Part 1
If you haven't heard, Airbnb has decided to move away from React Native. Friend of the show Gabriel Peal wrote an in-depth series of blog posts about this. We had so many questions around this that we asked him to come on the show and he graciously accepted to answer some of our questions. It's always a pleasure listening to his insights and this episode is no exception! Listen on: Show Notes React Native The post that kicked off this show Spike Brehm Leland Richardson Building a visual language - DLS Yoga library - cross layout engine YogaLayout - Android Sponsors Bitrise - Bitrise is your mobile continuous integration and delivery for your whole team, with dozens of integrations for your favorite services. Contact @gpeal8 [twitter.com] @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe

Ep 128128: gRPC on Android with Sam Bobra
In today's episode, we are joined by Sam Bobra - engineering manager @VSCO, android fangirl and gRPC magician (some would go so far as to say evangelist !) to talk about gRPC on Android. Super informative episode! Show Notes VSCO Sam's DroidconSF 2017 - Thinking Beyond the REST API: gRPC for Android Microservices Go (programming language) Implementation Protocol Buffers protobuf-gradle-plugin Reactive gRPC Differences between gRPC & graphQL Misc codegen grpc-Java codegen grpc-Lite codegen Wire Curling: grpcurl envoy Sponsors Bitrise.io Virtual Device Testing: full integration with Firebase Test Lab, run emulators quickly and reliably Contact @samwritescode [twitter.com] @fragmentedcast [twitter.com] @ryanjsalva @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe

Ep 127127: Audio playback on Android with Caren Chang
In today's episode, we sit down with Caren Chang from June to talk about audio engineering for Android. More specifically, how stoves can use audio to send notifications. Show Notes Caren's "Learning Kotlin in Action" summary blog post series June Oven June Oven Video Apis Audio Latency MediaPlayer SoundPool ExoPlayer Resources Droidcon Boston Caster.IO - ExoPlayer course Sponsors Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding. Contact @calren24 @fragmentedcast [twitter.com] @ryanjsalva @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe

Ep 126126: GraphQL and Apollo with GDE Mike Nakhimovich (Part 2)
In this episode, we continue with Part 2 of this GraphQL series. If you haven't listed to episode 125 already, it might make sense to first listen to that one cause we go into the basics of GraphQL. In this episode, we dive into the specifics of Apollo and how Mike went about creating a GraphQL client for Android. Let's get on with Part 2. Show Notes GraphQL GraphQL specification Apollo Apollo Android - GraphQL Client for Android Resources droidcon NYC 2017 - GraphQL on Android is here! Sponsors Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding. Contact @friendlymikhail @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe

Ep 125125: GraphQL and Apollo with GDE Mike Nakhimovich (Part 1)
In this episode, we talk about GraphQL. Friend and GDE Mike Nakhimovich helped create the library Apollo for Android, which is the defacto official GraphQL client for Android. In this first part of two, we take a step back and first try to understand what GraphQL is, why one would use it, how Mike set out to create and contribute Apollo for Android and his journey and satisfaction with open sourcing it when he worked at the New York Times. If you've ever been interested in GraphQL, this is a good show to get you up to speed. Download directly Show notes GraphQL Sample GraphQL servers Github explorer Star Wars api GraphQLCMS visualization Shopify GraphQL Explorer Resources React, Relay and GraphQL: Under the hood of the Times website redesign The New York Times - Now on Apollo Sponsors Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding. Contact @friendlymikhail @fragmentedcast [twitter.com] @donnfelker and 📷 donnfelker @kaushikgopal and 📷 kaushikgopal

Ep 124124: IO 2018 first impressions with Android Dialogs & Pocket Casts teams
In this episode of Fragmented, Kaushik talks to Chiuki & Huyen from Android Dialogs and Russell & Philip from Pocket Casts. Fresh after IO we huddled in a room to talk about our first impressions and what we thought were some of the highlights for us Android developers. Hope you enjoy the show! (if you want to see a behind the scenes crossover special, make sure to subscribe to Android Dialogs!) Show Notes Android Dialogs Chiuki @chiuki Huyen Tue Dao @queencodemonkey Android Dialogs on YouTube Pocket Casts Russell Ivanovic @rustyshelf Phil of PocketCasts @geekygecko Pocket Casts Wall Street Journal - Public Radio organizations buy Pocket Casts io2018 stuff Google I/O 2018: What's new in Android Google Duplex announcement at Google IO Android Jetpack (intro video) Android Jetpack: manage UI navigation with Navigation Controller (Google I/O '18) Material theming Material Theme Editor (Sketch plugin) Video 1: Guide to the new material.io website Video 2: Build great Material Design products across platforms Android App Bundles (iOS App thinning) Android Jetpack: sweetening Kotlin development with Android KTX (Google I/O '18) Android Slices: build interactive results for Google Search (Google I/O '18) Getting started with App Actions (Google I/O '18) Google is working on bringing Android Studio to Chrome OS Sponsors Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding. Contact @fragmentedcast [twitter.com] @donnfelker and 📷 donnfelker @kaushikgopal and 📷 kaushikgopal

Ep 123123: Android Micro Frustrations
With good -most of the time- also comes the bad. In this episode, Kaushik and Donn chat about the small annoying things about being an Android developer, or more aptly - "Micro Frustrations". We usually cover the new, latest, greatest and awesome developments. But it helps to step back and also point out the things that are broken and the 1000 cuts so to speak. Sit back and enjoy this hearty rant! Shownotes F**k you Android layout complaints Kotlin Android Extensions Anko layouts (slightly different from Kotlin Android extensions) Android Studio 3.1 Stable - Build successful but can't resolve error Navigation & System bar frustrations: How do I ge the height and width of the android navigation bar If you're looking for a solution to just hide system bar (and not the navigation bar) go to our main shownotes page to see the code. Sponsors Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding. Contact @fragmentedcast [twitter.com] @donnfelker and 📷 donnfelker @kaushikgopal and 📷 kaushikgopal

Ep 122122: Learning Kotlin - typealias
In this episode of learning kotlin, we look at the typealias keyword. The typealias keyword allows you to provide alternate names for existing types and and function types. Learn how, why and when you can use it in this episode Show Notes Kotlin Inline functions Sponsors Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding. Contact @fragmentedcast [twitter.com] @donnfelker and 📷 donnfelker @kaushikgopal and 📷 kaushikgopal

Ep 121121: Functional Programming with Kotlin Arrow team - 2
In this episode of Fragmented, we wrap up another 2 part series. We dive into the details of the Arrow library with this one. Arrow is a library in Kotlin that helps bring many of the functional paradigms of programming to your daily development. We talk to the team about how it all started, the history of the library, why we even need arrow, how Arrow is structured, some of the pitfalls, and in the end some resources on getting us started with Arrow. Show Notes Arrow library Raul: Announcing Arrow for Kotlin Jorge: Caster.io course - FP in Kotlin with Arrrow Jorge: Kotlin Conf - Architectures Using Functional Programming Concepts Paco: Arrow as a companion to Kotlin Paco: Simple dependency injection in Kotlin (part 1) Mario: Book on FP Arrow Library eco system: Ank, Kollect, Helios Misc Arrow V 0.7.0 - now available Higher Kinded types KEEP - Type classes and Higher Kinded Types proposal Kotlin Arrow docs Get help on Arrrow KotlinLang slack channel #arrow Gitter: Arrow Sponsors Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding. Contact Paco (website) Raúλ Raja Jorge Castillo Mario Arias (in spirit) Arrow KT @fragmentedcast [twitter.com] @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe

Ep 120120: Functional Programming with Kotlin Arrow team - 1
In this episode of Fragmented, we kick off another 2 part series. This time it's with the Kotlin Arrow team! In the first part, we talk to Jorge, Raul and Paco about Functional programming in general, some core FP concepts, do we already use functional programming today, what are pure functions, do I need to know complicated math to do FP, Immutability, Referential transparency and so much more. These are all pretty daunting words, but the Arrow team break it down and make it really simple for us to understand. Show Notes Kotlin Arrow team Paco (website) Raúλ Raja Jorge Castillo Mario Arias (in spirit) Misc Arrow KT 47 degrees Jorge's caster.io course Blogs & Presentations on FP - Arrow docs Raul's presentation on Functional programming patterns Sponsors Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding. Contact @fragmentedcast [twitter.com] Paco Raúλ Raja Jorge Castillo Mario Arias (in spirit) @donnfelker and +DonnFelker @kaushikgopal and +KaushikGopalIsMe