

Coder Radio
The Mad Botter
A weekly talk show taking a pragmatic look at the art and business of Software Development and the world of technology.
Episodes
Mentioned books

Jul 9, 2019 • 38min
365: Objectively Old
Wes turns back the clock and explores the message passing mania of writing Objective-C without a Mac, and we wax-poetic about programming language history.
Plus Mike gets real about the Windows Subsystem for Linux, and our take on the new MacBook keyboard leak.Links:Apple is reportedly giving up on its controversial MacBook keyboard - The Verge — Apple is planning to ditch the controversial butterfly keyboard used in its MacBooks since 2015, according to a new report from analyst Ming-Chi Kuo. 9to5Mac notes that Apple will reportedly move to a new scissor-switch design, which will use glass fiber to reinforce its keys. According to Kuo’s report, the first laptop to get the new keyboard will be a new MacBook Air model due out this year, followed by a new MacBook Pro in 2020. Objective-C - History - Wikipedia — After acquiring NeXT in 1996, Apple Computer used OpenStep in its then-new operating system, Mac OS X. This included Objective-C, NeXT's Objective-C-based developer tool, Project Builder, and its interface design tool, Interface Builder, both now merged into one application, Xcode. Most of Apple's current Cocoa API is based on OpenStep interface objects and is the most significant Objective-C environment being used for active development.A Short History of Objective-C — While most programmers discovered Objective-C only during the iPhone app revolution, Objective-C has been around for over 30 years. Objective-C has been the foundation of Apple’s desktop operating system, Mac OS X, since its debut in 2001, and was also the basis for NEXTSTEP — OS X’s immediate ancestor — created by Steve Jobs’ NeXT Computer Inc. However, Objective-C was created neither by Apple nor NeXT. Its origin was a small Connecticut startup in the early 1980s called Stepstone.GNUstep — GNUstep is a mature Framework, suited both for advanced GUI desktop applications as well as server applications. The framework closely follows Apple's Cocoa (formerly NeXT's OpenStep) APIs but is portable to a variety of platforms and architectures.
GNUstep: Fun with Objective-C — Objective-C is a language based upon C, with a few additions that make it a complete, object-oriented language. Why do I think Objective-C is fun? Precisely because of this emphasis on simplicityBeginners Guide to Objective-C ProgrammingInstalling and Using GNUstep and Objective-C on Linux - Techotopia — The basics of Objective-C are supported by the GNU compiler collection. In order to utilize the full power of Objective-C together with the Cocoa /openStep environments on Linux, and to work with many of the examples covered in this book, it is necessary to install gcc, the gcc Objective-C support package and the GNUstep environment.
Objective-C Compiler and Runtime FAQ - GNUstepWiki — The history of Objective-C in GCC is somewhat complicated. Originally, NeXT was forced to release the original Objective-C front end in order to comply with the GPL. This code was not quite compatible with the GNU runtime and so it was modified. NeXT did not adopt these modifications and so each release of GCC by NeXT, and then Apple, contained changes that needed back-porting to the main branch of GCC.
For a long time, GCC was the only compiler that worked with GNUstep. Unfortunately, the GCC team has not invested much effort in Objective-C in the last few years and it currently lags behind Apple's version by a significant amount.

Jul 2, 2019 • 49min
364: Gabbing About Go
Mike and Wes burrow into the concurrent world of Go and debate where it makes sense and where it may not.
Plus gradual typing for Ruby, a new solution for Python packaging, and the real story behind Jony Ive's exit.Links:Goroutines - Concurrency in Golang — Goroutines are functions or methods that run concurrently with other functions or methods. Goroutines can be thought of as light weight threads. The cost of creating a Goroutine is tiny when compared to a thread. Why build concurrency on the ideas of CSP? — One of the most successful models for providing high-level linguistic support for concurrency comes from Hoare's Communicating Sequential Processes, or CSP. Occam and Erlang are two well known languages that stem from CSP. Go's concurrency primitives derive from a different part of the family tree whose main contribution is the powerful notion of channels as first class objects.Jony Ive ‘dispirited’ by Tim Cook’s lack of interest in product design — To many, Jony Ive’s announced departure from Apple last week felt very sudden. But a narrative is forming to suggest that he’s been slowly exiting for years as the company shifted priorities from product design to operations.CSP PaperA Tour of Go — These example programs demonstrate different aspects of Go. The programs in the tour are meant to be starting points for your own experimentation.
GoLand: A Clever IDE to Go by JetBrains — GoLand is cross-platform IDE built specially for Go developers.Google I/O 2013 - Advanced Go Concurrency Patterns — Concurrency is the key to designing high performance network services. This talk expands on last year's popular Go Concurrency Patterns talk to dive deeper into Go's concurrency primitives, and see how tricky concurrency problems can be solved gracefully with simple Go code.Michael Dominick on Twitter — Ok, so this is cool I have a fully working #rails dev environment up under #Windows usign #WSL and @PengwinLinux. Using @code for the editor. So far so good!Pengwin by Whitewater Foundry — Pengwin is a Linux environment for Windows 10 built on work by Microsoft Research and the Debian project.Open-sourcing Sorbet — Sorbet is a fast, powerful type checker designed for Ruby. It scales to codebases with millions of lines of code and can be adopted incrementally.Sorbetting a gem, or the story of the first adoption — After reading about Brandon's first impression (highly recommend to check it out), I decided to give Sorbet a try and integrate it into one of my gems. Gradual typing of Ruby at Scale — This talk shares experience of Stripe successfully been building a typechecker for internal use, including core design decisions made in early days of the project and how they withstood reality of production use
Building Standalone Python Applications with PyOxidizer — PyOxidizer's marquee feature is that it can produce a single file executable containing a fully-featured Python interpreter, its extensions, standard library, and your application's modules and resources. In other words, you can have a single .exe providing your application. Packaging Your Code — The Hitchhiker's Guide to PythonAn Overview of Packaging for Pythonpex — pex is a library for generating .pex (Python EXecutable) files which are executable Python environments in the spirit of virtualenvs.shiv — shiv is a command line utility for building fully self-contained Python zipapps as outlined in PEP 441, but with all their dependencies included!

Jun 25, 2019 • 43min
363: Find Your Off-Ramp
We take on the issues of burnout, work communication culture, and keeping everything in balance.
Plus Wes asks 'Why Not Kotlin' and breaks down where it fits in his toolbox.Links:Kotlin overview — Kotlin is an open-source, statically-typed programming language that supports both object-oriented and functional programming. Kotlin provides similar syntax and concepts from other languages, including C#, Java, and Scala, among many others. Kotlin does not aim to be unique—instead, it draws inspiration from decades of language development. It exists in variants that target the JVM (Kotlin/JVM), JavaScript (Kotlin/JS), and native code (Kotlin/Native).Kotlin/Native — Kotlin/Native is a technology for compiling Kotlin code to native binaries, which can run without a virtual machine. It is an LLVM based backend for the Kotlin compiler and native implementation of the Kotlin standard library.
Kotlin for JavaScript — Kotlin provides the ability to target JavaScript. It does so by transpiling Kotlin to JavaScript. The current implementation targets ECMAScript 5.1 but there are plans to eventually target ECMAScript 2015 as well.
My favorite examples of functional programming in Kotlin — One of the great things about Kotlin is that it supports functional programming. Let’s see and discuss some simple but expressive functions written in Kotlin.
Arrow: Functional companion to Kotlin's Standard Library — Arrow aims to provide a lingua franca of interfaces and abstractions across Kotlin libraries. For this, it includes the most popular data types, type classes and abstractions such as Option, Try, Either, IO, Functor, Applicative, Monad to empower users to write pure FP apps and libraries built atop higher order abstractions.
Awesome Kotlin Resources — The ultimate resource list for your most loved coding language.
awesome-kotlin — A curated list of awesome Kotlin frameworks, libraries, documents and other resourcesReddit Co-Founder Alexis Ohanian Warns Always-On Work Culture Creating ‘Broken’ People - WSJ — “I’ve spoken out quite a bit about things like ‘hustle porn,’ and this ceremony of showing off on social [media] about how hard you’re working,” said Mr. Ohanian, who previously co-founded online discussion forum Reddit. “Y’all see it on Instagram and you certainly see it in the startup community, and it becomes really toxic.”Thread by @mwseibel — I’ve noticed that many people compete in games they don’t understand because they are modeling the behavior of people around them. Most common is the competition for wealth as a proxy for happiness.Understanding Burnout Meetup — You may not know it yet, but IT is not easy. Breakdowns in people, processes, and technology leads to frustrating times for all of us. As it spirals out of control, we often meet the final boss: burnout.
Linux Academy is Hiring!

Jun 18, 2019 • 56min
362: It Crashes Better
It's a Coder three-way as Chris checks-in with an eGPU update, and Mike shares his adventures with ReasonML.
Plus the state of linux application packaging, and Chris' ultimate mobile workflow.Links:Brydge Keyboard for iPad ProReason Homepage — Reason lets you write simple, fast and quality type safe code while leveraging both the JavaScript & OCaml ecosystems.
What & Why · Reason — Reason can almost be considered as a solidly statically typed, faster and simpler cousin of JavaScript, minus the historical crufts, plus the features of ES2030 you can use today, and with access to both the JS and the OCaml ecosystem!
BuckleScript · Write safer and simpler code in OCaml & Reason, compile to JavaScript. — BuckleScript is backed by OCaml. Decades of type system research and compiler engineering.
Null, Undefined & Option · Reason — Reason itself doesn't have the notion of null or undefined. This is a great thing, as it wipes out an entire category of bugs. No more undefined is not a function, and cannot access foo of undefined!
Variant! · Reason — Behold, the crown jewel of Reason data structures!
Most data structures in most languages are about "this and that". A variant allows us to express "this or that".Ken Wheeler - ReasonML is Serious BusinessSyntax Cheatsheet · Reason — We've worked very hard to make Reason look like JS while preserving OCaml's great semantics & types. Hope you enjoy it!
OCaml Homepage — OCaml is an industrial strength programming language supporting functional, imperative and object-oriented styles.ReasonReact · All your ReactJS knowledge, codified. — It's Just Reason. We leverage the existing type system to create a library that types just right. Plus lightweight, first-class support for the ReactJS community idioms you've been using.ReasonML - React as first intended — ReasonML is the new tech that Facebook is using to develop React applications and promoting as a futuristic version of JavaScript Create your first snap | Ubuntu tutorials — The snapcraft tool is the preferred way to build snaps. It reads a simple, declarative file and runs the build for us.Creating a snap - Snap documentation — A snap can be created from apps you’ve already built and zipped, or from your preferred programming language or framework.
Snapcraft Summit, Montreal 2019 - Day 1, 2 & 3Similar projects · AppImage/AppImageKit Wiki — This page compares various similar systems to AppImage. Of course, each system was built toward its own specific objectives. This page is intended to illustrate the points that were important in the AppImage design, and similarities as well as differences to other systems.
Flathub—An app store and build service for Linux — Welcome to Flathub, the home of hundreds of apps which can be easily installed on any Linux distribution. Browse the apps online, from your app center or the command line.Mantiz Venus MZ-02 External Graphic Enclosure — Connects Full High Full Length 120" Width 2.5 PCIE Desktop Power GPU to computer WITH an Intel Certified Thunderbolt 3 port.The Mad Botter INC on Twitter — Congratulations @ChinKyler on winning our #FOSS #Earthday competition and with it a @system76 #GalagoPro. Keep hacking and keep it #Linux!
Linux Academy is hiring! — Linux academy is looking for full stack Node.JS+Angular and Ruby on Rails developers. Come join the team!

Jun 11, 2019 • 36min
361: ZEEEE Shell!
Apple is shaking up the foundations of UI development with SwiftUI and raising developer eyebrows with a new default shell on MacOS.
Plus feedback with a FOSS dilemma and an update on our 7 languages challenge.Links:Feedback: Lance’s FOSS Quandary — I was working on an open source project for school that we (4 members) submitted. Myself and another did 98% of the work the others contributed to the documentation (outside of the codebase). Class is over now for many months and nobody has touched the code but one other member and I wish to keep it going.Feedback: Developer, have money for a new Mac Pro? Buy these instead. — The recently unveiled Mac Pro is no doubt a gorgeous machine, engineered for a very particular group of people. While it will likely be a great machine for those who live and breathe within Finalcut and work with ProRes files, it’s overkill for a good developer machine.Apple makes fancy zsh default in forthcoming macOS 'Catalina' — "zsh is highly compatible with the Bourne shell (sh) and mostly compatible with bash, with some differences," Apple explained in a support document posted on Monday in conjunction with the announcement of macOS Catalina, which ships this fall.
Oh My Zsh - a delightful & open source framework for Z-Shell — Oh My Zsh is a delightful, open source, community-driven framework for managing your Zsh configuration. It comes bundled with thousands of helpful functions, helpers, plugins, themes, and a few things that make you shout... “Oh My ZSH!”Zsh · macOS Setup Guidezsh-apple-touchbar: Make your touchbar more powerful.Mike's Blog: Converting to SwiftUI Steps[0] — SwiftUI is the next paradigm in iOS and macOS user interface development. However, if you’re like me you already have Xcode projects that are using the now legacy storyboard technology. Luckily, it possible to update your existing projects to use SwiftUI and the process is very straightforward.Mike's Blog: Converting to SwiftUI Steps[1] — Continuing my journey into SwiftUI, I am taking a look at re-using existing UIViews and UIViewControllers in SwiftUI. The primary advantage here is not having to rewrite your existing code from scratch, however, it’s probably best to create any new views in SwiftUI directly rather than UIView.
SwiftUI for React Native Developers — Developers with React Native experience may notice some similarities to the philosophies Apple has imbued into their new UI framework. Utilizing structs as immutable value types for view modeling, a declarative syntax, and with their new async event library Combine, a reactive architecture.SwiftUI - Apple Developer — SwiftUI is an innovative, exceptionally simple way to build user interfaces across all Apple platforms with the power of Swift.

Jun 4, 2019 • 46min
360: Swift Kick In The UI
We react to Apple's big news at WWDC, check in with Mike's explorations of Elixir, and talk some TypeScript.
Plus Mike's battles with fan noise, and why he's doubling down on the eGPU lifestyle.Links:Thelio Fan Noise Hack - Mike's Blog — I’ve had a System 76 Thelio for a little over four months now and a consistent issue that I’ve been experiencing is persistent fan noise even when the machine is idle.Advent of Code 2015Elixir — Elixir leverages the Erlang VM, known for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.
Mike on Twitter — Someone tell @wespayne that I hate him ;) He introduced me to @elixirlang and it's like fast #Ruby. I think I might be hooked. Totally failed to get anything done though lolElixir vs. Ruby and Phoenix vs. Rails: Detailed Comparison and Use Cases — If you are facing the Elixir vs. Ruby/Phoenix vs. Rails dilemma, the best way to decide is to cater to the needs of your project. In fact, it is even possible to use both technologies in one project by choosing which of them works best for each individual feature. For example, you can implement chats with Elixir Phoenix, and the rest of the code can be written in Ruby on Rails.
TypeScript - JavaScript that scales. — TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
Why TypeScript · TypeScript Deep Dive — Types have proven ability to enhance code quality and understandability. However, types have a way of being unnecessarily ceremonious. TypeScript is very particular about keeping the barrier to entry as low as possible. Basic Types · TypeScript HandbookTypeScript Playgroundmicrosoft/TypeScript-New-Handbook — Incubation repository for the new TypeScript handbook.Introduction - fp-ts — fp-ts provides developers with popular patterns and reliable abstractions from typed functional languages in TypeScript.
Purify — Functional programming library for TypeScriptpiotrwitek/utility-types — Collection of utility types, complementing TypeScript built-in mapped types and aliases (think "lodash" for static types).
Solving Problems the Clojure Way - Rafal Dittwald — After overcoming a fear of brackets, the next challenge for would-be Clojurians is less superficial: to stop writing Java (or Javascript, or Haskell...) with Clojure's syntax, and actually start "thinking" in Clojure. It is said that Clojure is a "functional" programming language; there's also talk of "data-driven" programming. What are these things? Are they any good? Why are they good? In this talk, Rafal attempts to distill the particular blend of functional and data-driven programming that makes up "idiomatic Clojure", clarify what it looks like in practise (with real-world examples), and reflect on how Clojure's conventions came to be and how they continue to evolve.

May 28, 2019 • 44min
359: 7 Languages
Wes is back and Mike's got a few surprises in store, including a new view on Electron, a hot take on titles, and a programming challenge for the both of them.
Plus when it's okay to lie to the compiler, what GitHub's Sponsors program means for open source, and your feedback.Links:Coder Radio 343: Say My Functional Name — Mike breaks down the drama around nullable reference types in C# 8.0, and we debate what it means for the future of the language.
Coder Radio 358 Feedback — In the discussion of Marzipan and Electron I think the answer is WKWebView, which just arrived in macOS 10.10.
Show Content Poll — What Do You Want More of on #CoderRadio @CoderRadioShow this is your chance to give me some feedback for the next few months!
Why Computer Programmers Should Stop Calling Themselves Engineers — The respectability of engineering, a feature built over many decades of closely controlled, education- and apprenticeship-oriented certification, becomes reinterpreted as a fast-and-loose commitment to craftwork as business.About GitHub Sponsors — Anyone with a GitHub account can sponsor anyone with a sponsored developer profile through a recurring monthly payment. You can choose from multiple sponsorship tiers, with monthly payment amounts and benefits that are set by the sponsored developer.Lying to the compiler | Jon Skeet's coding blog — I’m lying to the compiler to get it to stop it emitting a warning. The reason is that in the case where the value is null, it won’t matter that it’s null.Programming Language Tourism | Bushido Codes — I am attracted to this book precisely because it is impractical. You don’t gain mastery of any programming languages. Rather, you get the chance to explore and complete a series of coding katas to expand your mind about the art of programming. Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages by Bruce A. Tate | The Pragmatic Bookshelf — You should learn a programming language every year, as recommended by The Pragmatic Programmer. But if one per year is good, how about Seven Languages in Seven Weeks? In this book you’ll get a hands-on tour of Clojure, Haskell, Io, Prolog, Scala, Erlang, and Ruby.Uno Platform — The only platform for building native mobile, desktop and WebAssembly with C#, XAML from single codebase. Open source and professionally supported.Uno.QuickStart — This repository is a basic sample for an Uno application which cross-targets UWP, iOS, Android and WebAssembly.

May 21, 2019 • 47min
358: Batteries are Leaking
A strong argument against Python’s batteries included model exposes some bigger problems the community is struggling with. We chat about all of it.
Plus lessons learned six years after a project, a new tool, and some feedback.Links:Home Page - ABC-Deploy — ABC-Update is an easy to use tool that sets you in control of MS Update operations.On logic in a Rails app, revisited 6 years later — My argument was that Rails is just an UI layer, and business logic should be put in domain objects instead of keeping somewhere in Model, View or Controller.Python Software FoundationBatteries Included, But They're Leaking — Amber Brown of the Twisted project shared her criticisms of the Python standard library.Twisted: Event-driven networking engine written in Python. — Twisted is an event-based framework for internet applications

May 14, 2019 • 48min
357: 3 OSes 1 GPU
Microsoft catches Mike’s eye with WSL 2, Google gets everyone's attention with their new push for Kotlin, and we get a full eGPU report.Links:QA Feedback from Lewis — I thought I was going to be in a big rush to get out of the basement and up to a developer position, but after listening to the show I really feel like my contribution to this team is going to be important and necessary from the get go.Request: Subreddit recommendations — Anyone know any linux and/or programming subs aren't full of mindless circlejerking? Most seem to be afflicted with mindless circlejerking, free software extremism and other indiscretions.Feedback on Tools for Docs — One idea is a mind map tool (like Freeplane). This can provide a free-form way to show at a high level how all the parts link together, and attach as much details as needed Kotlin is now Google’s preferred language for Android app development — “Android development will become increasingly Kotlin-first,” Google writes in today’s announcement. “Many new Jetpack APIs and features will be offered first in Kotlin. If you’re starting a new project, you should write it in Kotlin; code written in Kotlin often mean much less code for you–less code to type, test, and maintain.”Flutter and Chrome OS: Better Together — Flutter initially focused on providing a UI toolkit for building apps for mobile devices, which typically feature touch input and small screens. However, we’ve been building keyboard and mouse support into Flutter since before our 1.0 release last December. And today, we’re pleased to announce that Flutter for Chrome OS is now stronger with scroll wheel support, hover management, and better keyboard event support.How Windows and Chrome quietly made 2019 the year of Linux on the desktop — The cleverly named Windows Subsystem for Linux 2, announced at Microsoft’s Build event this week, shakes things up by shipping a full Linux kernel (version 4.19) within Windows itself as a lightweight virtual machine. Doing so should supercharge performance for developers who use the tool.Ubuntu 19.04 – Easy-to-use setup script for your EGPU — I have created a script which automatically detects your (E)GPUs and creates the needed X-Server configuration files.
You won't have to mess around with finding the correct BUS-IDs and convert them from dec to hex or anything like that, the script takes care of it.Linux Action News 105 — RHEL 8 is released, we report from the ground of the big announcement, Microsoft announces WSL 2 with a real Linux kernel at the core, and details on their new open source terminal.

May 8, 2019 • 35min
356: Fear, Uncertainty, and .NET
.NET 5 has been announced and brings a new unified future to the platform. We dig in to Microsoft's plans and speculate about what they might mean for F#.
Plus the value of manual testing, Visual Studio Code Remote, and Conway's Game of Life in Rust.Links:Feedback: Testing as a CareerFeedback: Keeping up with Documentationruby/rdoc — RDoc produces HTML and command-line documentation for Ruby projects.Javadoc — Javadoc is a documentation generator created by Sun Microsystems for the Java language for generating API documentation in HTML format from Java source code. Literate programming — Literate programming is a programming paradigm introduced by Donald Knuth in which a program is given as an explanation of the program logic in a natural language, such as English, interspersed with snippets of macros and traditional source code, from which a compilable source code can be generated.Literate Programming — Writing a literate program is a lot more work than writing a normal program. After all, who ever documents their programs in the first place!? Moreover, who documents them in a pedagogical style that is easy to understand? And finally, who ever provides commentary on the theory and design issues behind the code as they write the documentation?A tutorial that implements Conway's Game of Life in Rust and WebAssembly. — This tutorial is for anyone who already has basic Rust and JavaScript experience, and wants to learn how to use Rust, WebAssembly, and JavaScript together.
JupiterBroadcasting/Talks — Public repository of crew talks, slides, and additional resources.
Visual Studio Code Remote Development — Visual Studio Code Remote Development allows you to use a container, remote machine, or the Windows Subsystem for Linux (WSL) as a full-featured development environment. Remote Development - Visual Studio MarketplaceIntroducing .NET 5 — There will be just one .NET going forward, and you will be able to use it to target Windows, Linux, macOS, iOS, Android, tvOS, watchOS and WebAssembly and more.The Friday Stream — Our crew from all over the world share stories, make new friends, and give each other a hard time live.


