

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 23, 2019 • 35min
367: 10x Evilgineers
Mike rekindles his youthful love affair with Emacs and we debate what makes a "10x engineer".
Plus the latest Play store revolt and some of your feedback.Links:Feedback on Coder Radio 366 — As a C++ developer working on a large, primarily OO codebase, I’ve been writing ever more C++ as “just a pipeline of data transformations.” As you guys mentioned, you can get a lot of benefit even in an OO situation from wrapping a functional “core” up in an object “package.”Functional Core, Imperative Shell — In this screencast we look at one method for crossing this divide. We review a Twitter client whose core is functional: managing tweets, syncing timelines to incoming Twitter API data, remembering cursor positions within the tweet list, and rendering tweets to text for display. This functional core is surrounded by a shell of imperative code: it manipulates stdin, stdout, the database, and the network, all based on values produced by the functional core.
Postmodern immutable data structures — We are presenting Immer, a C++ library implementing modern and efficient data immutable data structures.
Mike on Twitter — So when I just was getting started I was an #emacs user but had that beaten out of me. I’m thinking of looking back at it on #macOS and #Linux under GNOME any recommendations?Spacemacs: Emacs advanced Kit focused on Evil — Spacemacs is a new way to experience Emacs -- a sophisticated and polished set-up focused on ergonomics, mnemonics and consistency.Tinder Bypasses Google Play, Revolt Against App Store Fee — Tinder joined a growing backlash against app store taxes by bypassing Google Play in a move that could shake up the billion-dollar industry dominated by Google and Apple Inc.
EmacsWiki: Evil — Evil is an extensible vi layer for Emacs. It provides Vim features like Visual selection and text objects.A personal story about 10× development — The "×ness" of any developer does not exist in a vacuum but depends on many organizational things. The most obvious one is tooling.Shekhar Kirani on Twitter — 10x engineers. Founders if you ever come across this rare breed of engineers, grab them. If you have a 10x engineer as part of your first few engineers, you increase the odds of your startup success significantly.The mythical 10x programmer - — The following is a list of qualities that I believe make the most difference in programmers productivity.
rubocop — RuboCop is a Ruby static code analyzer and code formatter. Out of the box it will enforce many of the guidelines outlined in the community Ruby Style Guide.

Jul 16, 2019 • 39min
366: Functional First
It’s a Coder Radio special as Mike and Wes dive into functional programming in the real world and share their tips for applying FP techniques in any language.Links:Porting Redis to WebAssembly with Clang/WASI — In this post, we share our experience of porting an existing open-source software package — the data structure server Redis — to WebAssembly. While this is not the first time that Redis has been ported to Wasm (see this port by Sergey Rublev), it is the first time to our knowledge that the obtained port can be run deterministically.Solving Problems the Clojure Way - Rafal Dittwald — 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.The Value of Values with Rich Hickey — In this keynote speech from JaxConf 2012, Rich Hickey, creator of Clojure and founder of Datomic gives an awesome analysis of the changing way we think about values.Clojure Made Simple by Rich Hickey — In the seven years following its initial release, Clojure has become a popular alternative language on the JVM, seeing production use at financial firms, major retailers, analytics companies, and startups large and small. It has done so while remaining decidedly alternative—eschewing object orientation for functional programming, C-derived syntax for code-as-data, static typing for dynamic typing, REPL-driven development, and so on. Underpinning these differences is a commitment to the principle that we should be building our systems out of fundamentally simpler materials. This session looks at what makes Clojure different and why.Effective Programs: 10 Years of Clojure by Rich Hickeysparklemotion/mechanize — Mechanize is a ruby library that makes automated web interaction easy.How to write idempotent Bash scripts — It happens a lot, you write a bash script and half way it exits due an error. You fix the error in your system and run the script again. But half of the steps in your scripts fail immediately because they were already applied to your system. To build resilient systems you need to write software that is idempotent.

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