View Details
In the final episode of Fatal Error, Chris and Soroush go through some follow-up, then recap the news from WWDC.
-
- Why did they even hire Chris??
- Swift Unwrapped
- Ghost Animoji has a tongue! (h/t @parrots)
- Platforms State of the Union
- CodeRunner
- Steve S Smith Marzipan Thread
- Jake Marsh on Intents
- UNNotificationContent.threadIdentifier
- One of many articles on SMS hijacking via SS7 (search the Web for “SS7 SMS Hijack” for more)
- YubiKey
- Social engineering SMS code
- Chromium Touch ID second factor (Tweet)
- Published after we recorded the episode: The Pixelbook’s power button can double as a U2F security key
Thank you for your support!
Tweets & photos from the live show at WWDC:
- From @_ivancr
- From @_jessetipton
- From @jbradforddillon
- From @freak4pc
View Details
In the final episode of Fatal Error, Chris and Soroush go through some follow-up, then recap the news from WWDC.
Tweets & photos from the live show at WWDC:
- From @_ivancr
- From @_jessetipton
- From @jbradforddillon
- From @freak4pc
View Details
This week, Chris and Soroush talk about null, the billion dollar mistake. They talk about its past, its present and maybe even its future. Nice!
enum Brain {
case small
case medium
case large
case galaxy
case universe
}
* Liskov Substitution Principle
* Null References: The Billion Dollar Mistake
* Python on Google App Engine
* PEP 484: Type Hints
* The Definitive Reference To Why Maybe Is Better Than Null
* That One Optional Property
* The algebra(and calculus!) of algebraic data types
* Point-Free episode 4: Algebraic Data Types
* Optional definition
* SubEthaEdit
View Details
In recent episodes, we've alluded to a possible Very Special 70th Episode.
Everything came together for that episode, and we're happy to announce that we're gonna do a live show at WWDC. We're spending the last of our Patreon money to fly ourselves out there, and we've booked a small venue for the show.
Because WWDC is wall to wall with podcasts (Monday is ATP, Tuesday is The Talk Show, and Wednesday is the Relay festival), we're going to do our show late Tuesday evening after The Talk Show.
We have 40 spots available. It's free for anyone who's subscribed to our Patreon (at the $5+ level) as of June 1.
If you want to come, subscribe to our Patreon, leave a comment on this Patreon post, and we'll put you on the list. If it turns out you can't come, reply to your own comment on that post and we'll free up your spot.
View Details
This week, Chris and Soroush talk about something engineers are stereotypically bad at: negotiating.
In particular, we really recommend setting aside half an hour to read the first link in the show notes:
- Patrick McKenzie: Salary Negotiation: Make More Money, Be More Valued
- Stephanie Hurlburt: “Just a PSA, I know of many people (Exact #? Hm. Over a hundred?) who are programmers making high six figures a year. …”
View Details
This week, Chris and Soroush talk about something engineers are stereotypically bad at: negotiating.
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
Soroush and Chris share some sad news, talk about Soroush's first official Swift Evolution proposal, and a post about giving presentations by Dave DeLong.
- Soroush’s pitch:
count(where:) on Sequence
- E66: Sequence and Collection and Iterator, Oh My
- Harlan Haskins & Robert Widmann - Becoming An Effective Contributor to Swift
- How to Read the Swift Standard Library Source
- Soroush’s Swift PR
- Soroush’s Swift Evolution proposal PR
- Swift Unwrapped: 56: SE-206 Hashable Enhancements
- Chris Lattner’s comment on Soroush’s pitch
- E60: Soroush in the Standard Library
- Soroush’s Lazy dropLast implementation
- Dave DeLong: You should give that presentation
- Productivity Strategies: Exploration vs Exploitation
- Multi-armed bandit experiments
View Details
- Soroush’s Sequence and Collection talk from Playgrounds last year
- [Pitch] Remove the single-pass requirement on Sequence
- Cryptographically secure pseudorandom number generator
- Ben cohen / @airspeedswift
- Ben’s thread on Twitter
- Dave Abraham’s Github repo
- AnySequence / type erasers
- The Fencepost Problem
- Soroush’s Galaxy Brain meme
- sequence(first:next:)
- Nate Cook / @nnnnnnnn
- Soroush’s pull request for the count(where:)implementation
- Soroush’s pull request for the count(where:)proposal
View Details
Soroush and Chris talk about Sequences, Collections, and Swift Evolution drama.
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
- Your Calendrical Fallacy Is...
- iOS 11.2.6 DateFormatter.date returns nil for cities that observe Brasília Summer Time
- Pub quiz question,"How many time zones are there"
- I was still explaining to my fellow pub attendees about the complexities of time zones by the time the answer came around
- Where is the extra 75 seconds coming from?
- I think a great interview question is“how do you compute the length of a string?” If the candidate responds by asking“what do you mean by‘length’ and what do you mean by‘string’?” they pass — @txsector
- Big-O Notation
- Ole Begemann: Strings in Swift 4 (explains how family emoji are composed of person emoji + joiners)
- Ligatures in Unicode (Wikipedia)
- Accidentally Quadratic
- Soroush: Safety in Swift
- Spoiler: Soroush’s Word Ladder Solution
Backspacing emoji composed of multiple codepoints in Google Docs:
View Details
This week, Chris and Soroush review what inheritance in OOP is good for … and the problems it brings with it. Also: an update on the lights in Soroush’s bathroom.
- Chris’s Alexa Aircraft Radar skill
- Apoptosis
- Episode 50: Internet of Things
- Wemo Mini Smart Plug
- Sylvania HomeKit Bulbs
- Philips Tap Switch
- Hue Labs Toggle Behavior
- Why inheritance never made any sense
- Chris: Cocoa’s mutable-subclass pattern is an antipattern
- Chris: Multiple Inheritance vs. Traits or Protocol Extensions
- Ruby Forwardable module (def_delegator and def_delegators)
- Objective-C forwardingTargetForSelector:
- Multiple Inheritance in C++ and the Diamond Problem
- The Ghost of Swift Bugs Future
- Slava Pestov’s Twitter thread
View Details
This week, Chris and Soroush review what inheritance in OOP is good for … and the problems it brings with it. Also: an update on the lights in Soroush’s bathroom.
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
This week, after a brief detour into the subject of pizza, Soroush and Chris discuss how they’d go about the broad goal of “improving an app.”
- Artichoke Basille’s Pizza
- New York's Artichoke Basille Pizza: Why The Controversy?
- Ann Arbor vs Detroit
- Ypsilanti, MI
- Detroit-style pizza
- Billy Bishop Toronto City Airport
- Villanova, PA
- Code audit - Wikipedia
- SwiftLint
- SwiftFormat
- Swift Enums Are'Sum' Types. That Makes Them Very Interesting
- Yak Shaving Defined
- Bikeshedding
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
This week, Chris and Soroush discuss Soroush’s efforts to implement BigDecimal in Swift, recap Teki Con, and take a detour into evolutionary biology.
- Teki Con
- talks
- krzysztof zablocki
- michael ayers
- dave delong
- Fatal Error Episode 2: View Models
- Model-View-Controller
- Applications Programming in Smalltalk-80™: How to use Model-View-Controller (MVC)
- Lexicographical order
- Georgia Aquarium
- Whale Shark
- Convergent evolution
- BigInt in the Swift Git repository
- Prototypes in the Swift Git repository
- Swift Advanced Operators (Overflow Operators)
- addingReportingOverflow
- dividingFullWidth
- Matt Gallagher - Cocoa With Love: Partial functions in Swift, Part 2: Catching precondition failures
- Matthew Green: On the NSA (see the first footnote)
- the cryptopals crypto challenges
- khanlou/BigDecimal on GitHub
- Decimal Degrees
- Wide Area Augmentation System and Local Area Augmentation System
View Details
This week, Chris and Soroush discuss Soroush’s efforts to implement BigDecimal in Swift, recap Teki Con, and take a detour into evolutionary biology.
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
This week, Soroush and Chris get ready for Dynamic Callable and Dynamic Member Lookup by thinking through how you could use them to mock objects for testing. Plus: more Booleans, national parks, and chat about testing in general.
-
Pragma Conference 2017- Soroush Khanlou- You Deserve Nice Things
- Teki Con
- SE-0199: Adding toggle to Bool
- Episode 59: Why did they even hire Chris??
- Mutating and Nonmutating Functions
- Google Image Search: Gates of the Arctic National Park
- Dynamic Callable & Dynamic Member Lookup
- Martin Fowler: Mocks Aren't Stubs
- Roy Williams: Tautology Tests
- @whatjasdevreads on Twitter
- Gist by Soroush: How to generate a hex string for push notifications
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
This week, Soroush talks Chris through his efforts to make an improvement to the Swift standard library.
- dropLast
- dropLast Implementation
- Soroush’s lazyDropLast Gist
- Ole Begemann: How to Read the Swift Standard Library Source
- Umberto Raimondi: A Short Swift GYB Tutorial
- Wikipedia: Circular Buffer
- Runtime: Command+F for the win!
View Details
This week, Soroush talks Chris through his efforts to make an improvement to the Swift standard library.
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
This week, Chris and Soroush talk about impostor syndrome, starting a new job, team dynamics and rockstar developers. Then: toggling booleans and the Law of Demeter!
- “No Feigning Surprise”- Recurse Center
- Fear, Uncertainty, and Doubt- CocoaLove 2014
- Impostor Syndrome
- The Inner JSON Effect
- Bus Factor
- Salary Negotiation: Make More Money, Be More Valued
- “’You miss 100% of the shots you don’t take’”- Wayne Gretzky”- Michael Scott
- "Every great developer you know got there by solving problems they were unqualified to solve until they actually did it."- Patrick McKenzie
- “People sometimes ask me how I learned the crazy stuff I like to do. This is how.”
- SE-0199– Adding toggle to Bool
- Law of Demeter
- You Deserve Nice Things
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
This week’s episode turns into a grab bag of nerdy topics: home automation, Raspberry Pis, music, time, and also MoviePass.
- MoviePass
- Recode: MoviePass sounds too good to be true. Is it?
- E50: Internet of Things
- Home Assistant
- Wemo
- Wemo Bridge
- handyPrint
- Raspberry Pi
- Software-Defined Radio
- ADS-B
- Aircraft Radar Alexa Skill
- Chris’s alarm clock (Amazon link)
- Raspberry Pi FM transmitter project
- OwnTracks
- Weasley Clock
- Amazon owns my Echo; I’m just feeding it
- Mycroft
- Google Images: Anguilla
- NTP
View Details
This week’s episode turns into a grab bag of nerdy topics: home automation, Raspberry Pis, music, time, and also MoviePass.
View Details
This week, Chris and Soroush discuss the world of independent Cocoa conferences, then debate Chris Lattner’s recently-accepted dynamic member lookup proposal.
- The end of the conference era
- Release Notes
- Strange Loop
- Cocoa Love
- Cingleton
- GitHub: Lascorbe/CocoaConferences
- NSScreencast
- Destroy All Software Screencasts
- Point-Free
- Swift Talk
- Teki Con
- SwiftFest
- Soroush Khanlou- You Deserve Nice Things
- XOXO Festival
- SE-0195: Introduce User-defined"Dynamic Member Lookup" Types
- SE-0195 Review Thread
- TensorFlow
- Proposal draft: Introduce User-defined Dynamically"callable" Types
- Sourcery
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
Chris and Soroush talk about boring startuppy administrative code, web frameworks in shell languages, before moving on to Vapor 3 and Swift 4.1. Conditional conformance is going to be huge. Huge! They close out the show talking about running your own little Heroku.
- Chris’s startup
- Django
- Pyramid
- Cuba
- LOL Bash
- Bash on Balls
- What’s new in Vapor 3
- What’s new in Swift 4.1
- Swift Unwrapped on conditional conformance
- Welp, Swift 4.1’s biggest features, conditional conformance and automatic Equatable synthesis, won’t actually work together
- Swift Blog post on conditional conformance
- Dokku
View Details
Chris and Soroush talk about boring startuppy administrative code, web frameworks in shell languages, before moving on to Vapor 3 and Swift 4.1. Conditional conformance is going to be huge. Huge! They close out the show talking about running your own little Heroku.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
After an update on Chris's bread project, Soroush tells Chris about Firebase Cloud Functions, and we discuss deduplicating some report-generation code in Soroush's current project.
- Saltie's Focaccia
- Chris’s bread
- Censys
- Episode 44: Grab Bag
- Firebase Analytics
- Firebase Realtime Database
- Firebase Storage
- Firebase Cloud Functions
- AWS Lambda
- Parse(Wikipedia)
- ES7 Async/Await
- Babel
- toLocaleDateString()
- React Native
- Superdistribution- Brad Cox
- Chris Lattner: Concurrency in Swift: One approach
- Mozilla Hacks: Why WebAssembly is Faster Than asm.js
- JavaScriptCore
- Certificate Transparency
View Details
Chris and Soroush chat about the new Swift Forums, Soroush’s recent Swift Evolution pitch, and recent enum-related Evolution proposals. (Plus, an update on Chris’s MacBook keyboard and Soroush’s server.)
- Space Gray iMac Pro
- alias ggit
- Let’s Encrypt
- Chris: Deploying Let’s Encrypt with Nginx on Ubuntu 16.04
- Why Comcast injecting messages into web traffic is dangerous
- Security Tip: Disallow Root SSH Logins
- How To Disable Password Authentication for SSH
- How To Protect SSH with Fail2Ban on Ubuntu 14.04
- How to Install and Configure Postfix as a Send-Only SMTP Server on Ubuntu 16.04
- Jekyll
- Working Copy: Git on iOS
- Soroush’s [Pitch] Remove the single-pass requirement on Sequence
- Swift Sequence docs: “The Sequence protocol makes no requirement on conforming types regarding whether they will be destructively consumed by iteration. As a consequence, don’t assume that multiple for-in loops on a sequence will either resume iteration or restart from the beginning.”
- SE-0192: Non-Exhaustive Enums
- SE-0194: Derived Collection of Enum Cases
- Sourcery
- Enum+CaseCountable.swift
View Details
Chris and Soroush chat about the new Swift Forums, Soroush’s recent Swift Evolution pitch, and recent enum-related Evolution proposals. (Plus, an update on Chris’s MacBook keyboard and Soroush’s server.)
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
In this episode, Chris asks Soroush about his experience diving into Android development.
- Android 101 for iOS Developers
- lyft/scoop: “micro framework for building view based modular Android applications.”
- Soroush’s $99 testing phone
- Java 8 lambdas/closures
- Kotlin
- Ruby’s tap method
- then microframework for Swift
- Brandon Williams and Lisa Luo— Anything you can do, I can do better
- Android Layouts
- UIStackView vs LinearLayout
- Android SupportLibraries
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
After a brief discussion about cryptocurrency, Chris and Soroush discuss the CPU vulnerabilites that made news recently: Meltdown and Spectre.
- Kodak Debuts Bitcoin Miner as Blockchain Pivot Juices Stock Price
- Coinbase
- Dogecoin Market Cap Hits $1 Billion, to Its Creator’s Dismay
- Chris’s Meltdown & Spectre reading list
- Wired: A Critical Intel Flaw Breaks Basic Security for Most Computers
- Google Project Zero: Reading privileged memory with a side-channel
- Meltdown and Spectre
- Ad blockers
- iMore: Best ad blockers for iOS
- Better
- Adblock Plus
- uBlock Origin
- NoScript
- Apple: About the security content of macOS High Sierra 10.13.2, Security Update 2017-002 Sierra, and Security Update 2017-005 El Capitan
- Mitigations for Chrome and Firefox
- A Timing Attack In Action
- Coding Rules (cryptocoding.net)
Some more advanced & background reading on Meltdown and Spectre:
- In-Order vs. Out-of-Order Execution (PDF)
- Branch Prediction (PDF)
- A brief history of branch prediction
- CPU Cache (Wikipedia)
- Understanding Cache Attacks (PDF)
- Memory Protection (Wikipedia)
- Spectre mitigation approach from Google: Retpoline: a software construct for preventing branch-target-injection
Comment from Chris after the show was posted:
Hi, all! I really struggled through my first Spectre explanation in this episode, but if you skip ahead to about 21:20 I think our discussion gets easier to follow. — Chris
View Details
After a brief discussion about cryptocurrency, Chris and Soroush discuss the CPU vulnerabilites that made news recently: Meltdown and Spectre.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
A few minutes of bonus discussion from after we finished recording E51. Topics include banking & credit card security, and Twitter lists.
View Details
We’re back! Chris and Soroush kick off this season with a more freeform podcast format, discuss baking bread, and follow up on Soroush’s Notes.app-centric productivity system.
- NYT Tartine Sourdough Bread Recipe
- NYT No-Knead Bread Recipe
- Bread Debugging Page
- Professional Baking by Wayne Gisslen
- Folding Bread Proofer and Yogurt Maker
- Tartine Bread by Chad Robertson
- Things
- OmniFocus
- New features in Apple Notes on iOS 11 (including scanning and folders)
- Bear
- NSUserActivity
- nvALT
- Chris’s“Archive nvALT Note” AppleScript
- Lifehacker, Oct. 2005: The Kinkless GTD System
- Twitter thread: @mb: OH:“Notes is OmniFocus”
- GTD Weekly Reviews
- Ask Ubuntu: How to harden an SSH server?
- Secure Secure Shell
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
Chris, Soroush, and Soroush’s girlfriend Taylor talk about the Internet of Things.
- Sonos
- Wemo Light Switches
- Wemo Plugs
- Eero 3-pack
- fast.com speed test
- homeassistant
- Thread about Wemo connection issues
- Raspberry Pi
- Homebridge
- Smart House
- An escalator can never break, it can only become stairs. You would never see an ”Escalator Temporarily Out Of Order” sign, just ”Escalator Temporarily Stairs. Sorry for the convenience. We apologize for the fact that you can still get up there.”
- Running terminal commands at startup with launchd
- “When you’re house sitting for millennials and ask how the lights work”
- “Like, 90% of infomercial style products were designed by/for disabled people, but you wouldn’t know that, because there is no viable market for them. THey have to be marketted and sold to abled people just so that any money can be made of off them and so the people who actually need them will have access.”
- The less than reliable Netgear Orbi
- The more reliable Ubiquiti router
- Powerline Networking
View Details
Chris, Soroush, and Soroush’s girlfriend Taylor talk about the Internet of Things.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Soroush interviews Chris about his experience writing Python at work over the past couple of months.
Chris was wrong about something! Python is not pass-by-reference; see Is Python call-by-value or call-by-reference? Neither.
- Pyramid Web Framework
- Google App Engine
- Python 2 or Python 3
- Unicode in Python 2
- Uncle Bob- The Dark Path
- Our episode on Tests and Types(Patreon-only)
- “if you ignore uncle bob's terrible opinions on women, you can fully appreciate how terrible his opinions on software are” — @pasiphae_goals
- mypy: “an experimental optional static type checker for Python”
- Truth Value Testing in Python (2.7)
- Soroush: Falsiness in Swift
- Python Anti-Patterns: Using a mutable default value as an argument
- Python List Comprehensions
- Stack Overflow discussion: Python List Comprehension vs Map
- Python Lambda Functions
- Is Python call-by-value or call-by-reference? Neither (Chris was wrong about this!)
- PEP-8: Style Guide for Python Code
- PEP-20: The Zen of Python
- PEP-0: list of all PEPs
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
This week, Chris and Soroush chat about productivity tools and techniques.
- Getting Things Done (GTD)
- Omnifocus
- Things 3
- Bear
- Notes App: The Ultimate Guide
- AnyList - Grocery list/recipe organizer
- Using AnyList with Amazon Alexa
- IFTTT
- Instapaper
- Pinboard
- Next Episode
View Details
This week, Chris and Soroush chat about productivity tools and techniques.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Soroush interviews Chris about his experience at this year’s Strange Loop conference.
- Strange Loop
- Strange Loop Schedule (currently showing the 2017 schedule)
- Alex Miller
- "Just-So Stories For AI: Explaining Black-Box Predictions" By Sam Ritchie
- Decision Tree Learning
- Random Forest
- ""It Me": Under The Hood Of Web Authentication" By Yan Zhu, Garrett Robinson
- Lito Nikolai
- "Level Up Your Concurrency Skills With Rust" By David Sullins
- Swift Ownership Manifesto
- City Museum
- "To Serve The People: Public Interest Technologists" By Matt Mitchell
- "Redux: Architecting And Scaling A New Web App At The Ny Times" By Juan Carlos Montemayor Elosua
- "The Holy Grail Of Systems Analysis: From What To Where To Why" By Daniel Spoonhower
- "Biomaterials As Ui" By Ruthie Nachmany
Talks Chris hasn’t watched yet, but wants to
- "Keeping Time In Real Systems" By Kavya Joshi
- "Stop Rate Limiting! Capacity Management Done Right" By Jon Moore
- "Dependent Types In Haskell" By Stephanie Weirich
- "Observability For Emerging Infra: What Got You Here Won't Get You There" By Charity Majors
- "The Security of Classic Game Consoles" by Kevin Shekleton
- "Key to the City: Writing Code to Induce Social Change" by Jurnell Cockhren
- "The Future is Now" by Rachel White
- "Experimental Creative Writing with the Vectorized Word" by Allison Parrish
- "Antics, drift, and chaos" by Lorin Hochstein
- "Lazy Defenses: Using Scaled TTLs to Keep Your Cache Correct" by Bonnie Eisenman
- "Promise and Pitfalls of Persistent Memory" by Rob Dickinson
Pre-Show
- Chris’s Aircraft Radar Alexa skill
- Selfridge Air National Guard Base
- Yankee Air Museum(Ypsilanti, MI)
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
This week, Soroush and Chris talk about what it’s like to write Objective-C after a few years of Swift.
- Run Loops
- Episode 34: Promises … in Objective-C
- ObjC Lightweight Generics
- NSNumber
- Chris’s as_ macros
- List comprehensions
- Key-Value Coding Programming Guide
- Chris: Cocoa’s mutable-subclass pattern is an antipattern
- The Responder Chain
- Understanding Event Handling, Responders, and the Responder Chain
- Event Architecture
- The Future of Status Board
- Soroush: Why I don’t write Swift
- Soroush: Reflections on six months of Swift
View Details
This week, Soroush and Chris talk about what it’s like to write Objective-C after a few years of Swift.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Chris and Soroush continue their discussion of the future of concurrency in Swift by considering how Erlang achieves fault isolation with actors.
- Concurrency in Swift: One approach
- Previously: Episode 42: Actors
- Erlang and Elixir
- Erlang Hot Code Swapping
- Concurrent and Distributed Programming with Erlang and Elixir: Part 1
- Errors and Processes
- Who Supervises The Supervisors?
- Fault Tolerance doesn't come out of the box
- Concurrency in Erlang & Scala: The Actor Model
- Alan Kay
- Smalltalk
- Heart of Smalltalk
- Smalltalk in One Page
- What is OTP?(Learn You Some Erlang)
Get a new Fatal Error episode every week by becoming a supporter at patreon.com/fatalerror.
View Details
Soroush has a new mic
Thanks to you, Patreon supporters, for buying us new mics!
Chris is making an Alexa Skill
- FlightAware
- ADS-B Exchange
- Cheap ADS-B Aircraft Radar (this isn’t Chris’s exact setup, but it’s similar)
- What it’s like to build an Alexa skill - and how you can do it yourself
- Build your First Alexa Skill
- Fact Skill Tutorial: Build an Alexa Skill in 6 Steps
- AWS Lambda
- Creating a Deployment Package (Node.js)
- Speech Synthesis Markup Language (SSML) Reference
- Chris’s ADS-B posts:
- Monitoring aircraft via ADS-B on OS X
- Quick ADS-B monitoring on OS X
Soroush is using Sourcery
- Sourcery
- Sourcery in Practice
- Kyle Fuller: GitHub @kylef, Twitter @kylefuller
- Stencil
- SwiftTemplate
- Commit from Krunoslav Zaher: “Swift templates proof of concept”
- Equality.swifttemplate
Chris helped a friend who’s making a Swift CLI program
dyld: Library not loaded: @rpath/libswiftAppKit.dylib
Referenced from: /Users/friend/Library/Developer/Xcode/DerivedData/application-gqcotuckdopephaodrgawgaxuzwr/Build/Products/Debug/CSwiftV/CSwiftV.framework/Versions/A/CSwiftV
Reason: image not found
If my advice turns out to have been helpful, I’ll publish it verbatim in a blog post. In the meantime, here are some relevant links I sent this friend:
- CocoaPods 0.36 - Framework and Swift Support
- What are Frameworks?
- Bundle Structures
- Swift.org - ABI Dashboard
- Swift.org - Package Manager
- Building a command line tool using the Swift Package Manager
- How to build a custom Swift framework and how is it related to the SPM?
- Getting Started with Swift Package Manager
- An Introduction to the Swift Package Manager
- SO question: OSX Command Line Tool with Swift Cocoa Library, Library not loaded
- SO answer about dynamic frameworks in a CLI tool
- SO question: Setting up a Framework on macOS Command Line apps - Reason: image not found
- kylef/Commander README: frameworks and rpath
- JP Simard on Twitter: “the app’s rpath should point to the frameworks’ parent locations”
- realm-cocoa-converter: “A library that provides the ability to import/export Realm files from a variety of data container formats.”
View Details
This week, Chris and Soroush discuss a few different topics including Sourcery, building an Alexa skill, and Swift CLI programs.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Jason Brennan joins Chris and Soroush to discuss his new project, Beach.
- Jason Brennan (@jasonbrennan)
- Beach landing page
- Alan Kay https://en.m.wikipedia.org/wiki/Alan_Kay
- HyperCard.org
- Guerrillas in the Myst (WIRED, 1994)
- Emergent Behavior
- Turtles, Termites and Traffic Jams by Mitchel Resnick
- HSL
- Apple Reinvents Textbooks with iBooks 2 for iPad (2012)
- iBooks Author
- Hopscotch
- A LEGO Mindstorms program
- Bret Victor: Stop Drawing Dead Fish
- Sketch
- Jason’s fork of Prototope
- Swift Playgrounds
- “I think I’m more excited by people’s shitty versions of things(sketches, prototypes, etc) than the finished, polished thing” — @jasonbrennan
- Brian Lee O’Malley on Instagram
- On the Beach
- Thread from Jason: “Teachers have to worry about‘how to graduate from Scratch to text languages’ because there’s nothing else to graduate to”
View Details
Chris and Soroush go a little crazy talking about this week’s Apple event.
View Details
Chris and Soroush discuss the Actor model from Chris Lattner’s concurrency manifesto.
- Concurrency Manifesto, part 2: Actors
- Actor model (Wikipedia)
- ActorKit: “A lightweight actor framework in Objective-C”
- Ownership Manifesto
- What are move semantics, exactly?
- Go FAQ: Why is there no type inheritance?
- Object Oriented Inheritance in Go
- Under the hood of Futures & Promises in Swift
- Episode 30: Server-Side Swift
- Episode 33: Server-Side Swift in Practice
Note from Chris: I failed to realize this while we were recording, but move semantics should also allow passing a non-ValueSemantical reference type into an actor method — if ownership of some parameter moves to the actor method and previous references become invalid, the actor knows it can use that reference type without anyone else touching it. That’s another way the alternate ownership model pairs elegantly with this actor pattern!
View Details
Chris and Soroush discuss the Actor model from Chris Lattner's concurrency manifesto.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
- Karlie Kloss
- Xcode 9’s new editor is written in Swift (WWDC 2017 Initial Impressions)
- swift-evolution mailing list
- swift-evolution GitHub repository
- Kelvin’s proposal to improve Swift’s pointer types
- Andy Trick on Twitter
- Swift 5: start your engines announced the new evolution process changes
- Soroush’s guard-catch proposal (see also Episode 37: Soroush’s Swift Evolution Proposal)
- Chris Lattner: “Because proposals must be implemented before review, the core team is pre-reviewing proposals to provide guidance of whether they are conceptually plausible for inclusion in swift. This is to avoid the problem of someone spending a bunch of time implementing something, then the core team saying ‘no, that's a bad idea’”
- David Hart: “To be clear: proposals need an implementation but its not important who implements it. The core team has also implied that they might help pair proposal authors with implementors, so I wouldn't worry about that part.”
- [swift-evolution][RFC] Definitive Initialization and Incompatibilities with Fixed-size Arrays
- [swift-evolution] Plan to move swift-evolution and swift-usersmailing lists to Discourse
- kelvin13 · GitHub
- noise: Generate and combine commonly used procedural noises and distributions, in pure Swift
- maxpng: A pure swift PNG decoder and encoder for accessing the raw pixel data of a PNG file
- Unified libc import
- March 2016 (Brian Gesiak): [swift-evolution][Draft] Unify"import Darwin/Glibc" to simply"Libc"
- August 2017 (Kelvin): [swift-evolution] pitch: Unified libc import(again)
- SwiftGL/Image
- Readings on procedural noise
- Noise Functions and Map Generation (the end of this post includes a bunch of other interesting links)
- Textbooks: Texturing and Modeling, A Procedural Approach; GPU Gems
- Atom with Swift: swift-language-89; linter-swiftc
View Details
- Chris Lattner: Concurrency in Swift: One possible approach
- Chris Lattner: Concrete proposal for async/await in Swift
- Your steadfast hosts were mistaken about the existence of an Erica Sadun post. It was the topic of an as-yet-unpresented talk that she’s writing. We’ll link it here if and when she gives the talk.
- Coroutines
- Continuation-passing style
- Soroush: Async Await
- Episode 16: Swifty Error Handling
- antitypical/Result: Rob Rix’s Result microframework
View Details
This week, Chris and Soroush chat about async/await in Swift!
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
This week, Soroush and Chris revisit their first iOS apps.
- 360|iDev
- Andrew Sardone
- cdzombak/CAENLabStatus-iOS
- Initial commits
- "I’m an asshole”
- CDZTableViewSplitDelegate.m was used so that a separate, reusable object could handle the parallax scrolling effect used on maps in the app.
- DZCLabStatusHelper.m
- Screenshots
- Arizona Daylight Saving Time
- Episode 6: Singletons
- Transitioning to ARC Release Notes
Added August 23: Chris also gave a Git intro talk for a student group in 2012. That talk is archived here: Collaborating with Git.
View Details
-
15: Not Invented Here
-
34: Promises … in Objective-C
- Soroush’s OAuth Signature Generator
- BAKMultipartRequestBuilder
- Michael Jurewitz: “You never go full Brichter”
- Letterpress: Word Game
- Will Shipley: My “Doom” 20th Anniversary Stories
View Details
This week, Chris and Soroush revisit the topic of third-party dependencies. Should you bring them into your project? Why or why not?
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
- Richy Adem, Caleb Davenport, Erica Sadun, Tim Vermeulen
- swift-evolution pull request #734: Add a proposal for guard-catch
- The proposal: Introducing guard-catch
- swift-evolution discussion: [Pitch] Guard/Catch
- Chris Lattner’s comment on let/catch
- The “monads are like burritos” joke
- Brent Yorgey: Abstraction, intuition, and the“monad tutorial fallacy”
- Mark Dominus: Monads Are Like Burritos
- Ben Cohen(airspeedswift)
- Open PR since April 8: removeAll Proposal
- Swift Evolution Process
View Details
- 360iDev
- Talks by Soroush & Chris
- Soroush: Many Controllers Make Light Work
- Chris: DRYing up duplicate code
- WWDC Scholarships
- Announcing try! Swift NYC Diversity Scholarships
- Strange Loop
- Talk at Strange Loop: Spreadsheets for developers
- On the Turing Completeness of Microsoft PowerPoint (SIGOBVIK)
- Fatal Error episode 19: Playgrounds Conference
- Fatal Error episode 21: try! Swift Tokyo
View Details
This week, Chris and Soroush discuss speaking at conferences, attending them, and coming up with ideas for blog posts.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter.
This week, Chris and Soroush talk about Swift's ownership manifesto.
- Ownership Manifesto
- Swift Ownership Manifesto TL;DR
- The Rust Programming Language: What is Ownership?
- Also: References and Borrowing
- Pony is an open-source, object-oriented, actor-model, capabilities-secure, high performance programming language.
- Safely Sharing Data: Reference Capabilities in Pony
View Details
This week, Chris and Soroush discuss Soroush’s latest project, which among other things involves porting his Swift Promises library to Objective-C.
- Soroush’s Swift promise library
- Gist of Soroush’s Objective-C promise library
- Fucking Block Syntax
- Episode 4: Promises
- Episode 15: Not Invented Here
- BAPromise
- CocoaPods, Carthage
- Bitcode
- Android Support Library
- Tiny Swift Idioms in Objective-C
We didn’t discuss this in the episode, but it’s relevant: One Weird Trick to Lose Size
View Details
This week, Chris and Soroush discuss Soroush's latest project, which among other things involves porting his Swift Promises library to Objective-C.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
Chris and Soroush dive deep on server-side Swift.
- Fatal Error Episode 30: Server-Side Swift
- Beacon
- Ashley Nelson-Hornstein
- Vapor
- Foundation’s base64 encoding bug on Linux
- Vapor Slack
- Monorepos
- Dan Luu on Monorepos
- David R. MacIver on Monrepos
- git-subtree
- Kitura
- Errors on the server on Soroush’s blog
- github.com/khanlou/Promise
- Fatal Error 4. Promises
- Fatal Error 5. Reactive Programming
- Proposal to unify Swift.String Index types
View Details
- Chris’s new job
- cloc lines of code counting tool
- Atom
- go-plus: An Improved Go Experience For The Atom Editor
- go-debug: A go debugger for atom using delve.
- Tweet by supermoof: when you start a new programming job you have to walk right up to the biggest function in the yard and refactor it in front of everyone
- Episode 18: Code Review
- Chris’s group on GitHub:
- https://github.com/zmap
- https://github.com/censys
Chris’s initial techniques for new codebases:
- Try the app first, to figure out its capabilities
- Document the weird things you find along the way
- Open up the main file and explore
- Project wide search
View Details
This week, Chris and Soroush discuss techniques for getting started in an unfamiliar codebase.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
We wanted to apologize for the audio quality and room echo from this episode. We’re still figuring out our in-person recording setup, and we had a mishap with some of our audio equipment.
- Swift on the Server framework options:
- Vapor
- Kitura
- Zewo
- Perfect
- Frank
- Sadly limited Vapor documentation
- Vapor’s ORM - Fluent
- kqueue - the BSD interface that Dispatch is based on
- Swifter - Twitter API client in Swift
- Vapor toolbox - the CLI tool for working with Vapor
- Docker
- Sourcery for codegen
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
- Chris’s new job
- Beacon
- Ashley Nelson-Hornstein
- String Processing for Swift 4
- Swift Strings: Unicode discusses extended grapheme clusters
- SE-0180: String Index Overhaul (under review until June 28)
- SE-0168: Multiline String Literals
- SE-0165: Dictionary & Set Enhancements
- Erica Sadun: The surprising awesomeness of Grouped Dictionaries
- SE-0169: Improve Interaction Between private Declarations and Extensions
- SE-0143: Conditional conformances
- SE-0166: Swift Archival & Serialization
- Ben Scheirman: Ultimate Guide to JSON Parsing with Swift 4
- SE-0161: Better Key-Value Coding for Swift
- Expanding User-Defined Runtime Attributes in Xcode with Objective-C
- Kuery: A type-safe Core Data query API using Swift 4's Smart KeyPaths
- SR-5220: Expose API to retrieve string representation of KeyPath
- What’s New in Xcode 9
- What’s New in Swift 4
View Details
This is the last non-Patreon-exclusive episode of our second season. Episode 30 will appear on our Patreon page next week, then we’ll take a 6-week break and Episode 31 will be posted here on July 3. Thank you for listening!
Protocol 'XYZ' can only be used as a generic constraint because it has Self or associated type requirements. Oh no, what now?
- Alexis Gallagher: Protocols with Associated Types
- Gwendolyn Weston: Keep Calm and Type Erase On
- Mislav Javor: Swift Enums Are "sum" Types. That Makes Them Very Interesting
- Brandon Williams’ Few But Ripe blog, for learning about sum and product types, among other mathematical concepts
- The example from Soroush of using generic constraints to sidestep this issue — Gist
- Bill Venners: Abstract Type Members versus Generic Type Parameters in Scala
- Swift: Generics Manifesto
- Russ Bishop's Swift Associated Types series
- Chris Eidhof: Type Erasers in Swift
View Details
- String Processing for Swift 4 (aka “The String Manifesto”)
- Chris: String is not a sufficient type: how using your type system can help you make better software
- Primitive Obsession in Ruby
- Primitive Obsession in Swift
- An adventure with a memory leak in Node
- Soroush: My Least Favorite Thing About Swift
- NSHipster’s NSRegularExpression article discusses NSRange and Swift
- Swift String Pattern-matching Prototype
View Details
This week, Chris and Soroush talk about Swift's String Manifesto.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Get a new Fatal Error episode every week by becoming aPatreon supporter!
This week, Soroush and Chris talk about why they'd basically never use Core Data.
- Mike Ash comment on Hacker News (copied below)
- Cache Me If You Can: Soroush's post on why not to use Core Data as a cache
- Ruby Midwest 2011 - Keynote: Architecture the Lost Years by Robert Martin
- Caleb Davenport: Ditching Core Data (and using YapDatabase)
- ACID Guarantees
Mike Ash:
The short and easy answer is no, never.
Core Data is just not a good technology. People on the other side of this debate will say that there's an appropriate time for everything, but nothing makes sense for everything, so you have to choose based on your needs. This is half true. It misses the fact that some things are just plain bad and are never better than the alternatives in any situation, and IMO Core Data is in this category.
There are several fundamental problems with it.
First, the API is awful. If you want decent model objects in memory you either have to do a bunch of manual work, or use a third-party tool like mogenerator. Even then, the result is a massive soup of mutable objects with no intelligence. The structure of the API encourages passing the entire context around everywhere, which basically turns all of these objects into global variables. Look no further than popular Core Data wrapper APIs to see how bad this can get. For example, ObjectiveRecord[1] adds class methods for looking up objects using a predicate. Modularity? Separation of concerns? Perish the thought.
Second, it ties your on-disk representation to your in-memory representation way too strongly, and this makes it more difficult to choose appropriate structures for either one, and more difficult to make changes to either one.
Third, it locks you into the technology something fierce. Core Data is so different from everything else that once you build your model layer on it, you're just about stuck there forever. You can move away, but it's a ton of work that reaches into every corner of your app. Other solutions, like serializing to a property list or SQLite, simply require a translation layer that you can switch out more or less at will.
Fourth, it's unbelievably slow. Literally unbelievable, as in I tell people about it and they don't believe me. It's too slow for a large number of records. It's fast enough for a very small number of records, but at that level it provides no advantage over using property lists and just loading everything into memory. At the large scale, you don't want to load everything into memory so you need a better scheme, but then you need something like SQLite so you can avoid the slowness and gain more control. Core Data is really only workable when your quantity of data is in a happy medium, which exists roughly within the range of 1097 to 1143 records. (Warning: previous numbers made up.) Since you can almost never guarantee that your data will live in that happy medium and not exceed it, Core Data is a bad choice.
I understand why its proponents advocate for it. It's shiny. Apple pushes it hard, and people tend to like what Apple tells them to like. It gives the illusion of making things easy. It does make certain simple things easy. The problem is that making easy things easier is not a virtue. Making difficult things easier is what counts, and Core Data fails at that.
[1] https://github.com/mneorr/ObjectiveRecord
View Details
This week, Chris and Soroush talk about how they persist data in their apps.
- YapDatabase
- YapDatabase Extensions
- YapDatabase R-Tree Index for Fast Geospatial Queries
- ValueCoding: Swift protocols for encoding/decoding value types, which can be used with YapDatabase
- How FriendFeed uses MySQL to store schema-less data
- PostgreSQL 9.6 Documentation: JSON Types
- Realm
- Core Data
- mogenerator
- NSPersistentContainer - Apple’s simple core data stack class
- Appropriate Uses for SQLite
- EGODatabase
- FMDB
- FCModel
View Details
This week, Chris and Soroush talk about how they persist data in their apps.
Listen to the whole episode — and get access to the entire Fatal Error back catalog — at patreon.com/fatalerror.
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
This week, Soroush and Chris have two very special guests. Erica Gutierrez and Sara Ahmad were part of last year's summer class at Flatiron School. Since then, they've had a lot of trouble landing junior positions at tech firms. Sara and Erica share their frustrations with the hiring and interviewing process over the last year.
- Flatiron School
- try! Swift meetup in Queens
- Vapor – Swift server
- Swift Access Specifiers
- Rebecca Slatkin's technical interview prep guide (Google doc)
View Details
This week, Soroush and Chris work through their feelings about the ongoing debate about fileprivate and access control in Swift.
- SE-0159: Fix Private Access Levels
- SE-0025: Scoped Access Level
- Zachary Drayer
- Access Control and protected: Apple Swift blog post about protected
- C++: friend declaration
- Swift Needs a Scope Keyword: Jared Sinclair on scopes in Swift
Note: we’re still working out our recording setup for in-person recordings. Audio quality will be better next time we’re recording from the same place.
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
This week, Chris and Soroush try to compare Objective C and Swift, but end up talking about metaprogramming a lot.
- “Metaprogramming” isn’t a scary word (not even in Objective-C) by Soroush
- Mantle - JSON mapping
- JTObjectMapping - more JSON mapping
- InstantCocoa - Soroush's Rails-esque iOS framework
- Method Dispatch in Swift - good overview of the different kinds of function dispatch in Swift
- The Ghost of Swift Bugs Future - Overview of static dispatch with protocol with default implementations
View Details
- Soroush: That One Optional Property
- Massive View Controller
- Sandi Metz: Nothing is Something (RailsConf 2015)
- Finite State Machine (Wikipedia)
- StatefulViewController
- Soroush: a state machine where invalid transitions can’t compile
- A gentle introduction to dependent types
- Less gently: Dependent Types at Work
- D Oisín Kidney: In which I Misunderstand Dependent Types
- Validated
- Andy Matuschak: A composable pattern for pure state machines with effects
- Functional core, imperative shell is from Boundaries by Gary Bernhardt
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
- try! Swift Tokyo
- NatashaTheRobot (@natashatherobot)
- Fatal Error Episode 19: Playgrounds Conference
- Nate Cook (@nnnnnnnn)
- Relevant article: Unsafe Swift: Using Pointers And Interacting With C
- Laura Ragone (@lauraggle)
- Inclusive-Color: Color Blindness Simulation for UIColor
- Kyle Fuller (@kylefuller)
- Frank is a library for quickly writing web applications in Swift
- Agnes Vasarhelyi (@vasarhelyia)
- Brandon Williams (@mbrandonw)
- ReactiveSwift and ReactiveCocoa
- Sommer Panage (@Sommer)
- antitypical/Result: Swift type modelling the success/failure of arbitrary operations.
View Details
- Simple Made Easy by Rich Hickey
- “Rich Hickey emphasizes simplicity’s virtues over easiness’, showing that while many choose easiness they may end up with complexity, and the better way is to choose easiness along the simplicity path.”
- Talk Transcript, with slides
- Fatal Error episode 7: The Single Responsibility Principle
- Fatal Error episode 15: Not Invented Here
Some examples we mention:
- Object-Relational Mapping vs Key-value Database
- CocoaPods vs. Carthage
Slides mentioned in this post:
- Development Speed
- Simplicity Made Easy
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
This week, Soroush was in Melbourne, Australia for the Playgrounds conference. In this episode, Chris interviews him about the conference, his talk, and other talks he found interesting.
- Playgrounds Conference
- Soroush's slides: Everything You Ever Wanted To Know About Sequence And Collection
- A Beginner's Guide to Big O Notation
- Big-O Cheat Sheet
- Swift sequence & collection types:
- Sequence
- Collection
- BidirectionalCollection
- RandomAccessCollection
- MutableCollection
- RangeReplaceableCollection
- IteratorProtocol
- Stack Overflow: MutableCollection vs RangeReplaceableCollection
- Doubly-Linked List
- Matt Comi, Stagehand
- Stack Overflow answer on pathfinding algorithms, with links to additional reading
- Ray Tracing
- Matt Gallagher: Cocoa With Love
- Mersenne primes
- UnsafeMutableBufferPointer
- Swift optimization tip: Use unchecked integer arithmetic when you can prove that overflow cannot occur
- Tamar Nachmany
- Jason Brennan
- Samuel Giddins
- Chris: String is not a sufficient type
- Chris Eidhof
- Harlan Haskins
- Kaleidoscope
View Details
- The Joel Test: 12 Steps To Better Code
- On Code Review
- GitHub: Pull Request Reviews
- BitBucket: Working with Pull Requests
- Phabricator
- Danger CI
- Reference with examples of some things Danger can do
- SwiftLint
- Twitter Jokes about Code Review: 1, 2
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
This week, Chris and Soroush discuss different approaches to testing your network layer.
OHHTTPStubs
- Testing NSURLSession with Swift
- An Easy Way To Stub NSURLSession
- Soroush: Request Behaviors
- Waiting in XCTest
View Details
- Representing and Throwing Errors in Swift
- Cocoa with Love: Values and errors, part 1: ‘Result’ in Swift
- antitypical/Result
- Sunset Lake Software: Swift 2 Error Handling in Practice
- Soroush: Decoding JSON
- [swift-evolution] throws as returning a Result
- Joe Fabisevich on Twitter: “Food for thought when considering Swift’s un-typed errors. Do types end up mattering much?”
- Java Exception Handling
- Olivier Halligon — Asynchronous error handling
- Swift Asserts: the missing manual reviews fatalError and the other ways for your code to fail at runtime
- Never: “The return type of functions that do not return normally; a type with no values.”
- Railway Oriented Programming
- Scott Wlaschin - Railway Oriented Programming — error handling in functional languages
Additional Reading (not covered in the show)
- Swift Error Handling and Objective-C Interop In Depth
- Partial functions in Swift, Part 1: Avoidance
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
Caleb and Sam from Runtime join Chris and Soroush to talk about "Not Invented Here" and how we approach project dependencies.
- Wikipedia: Not Invented Here
- soffes/mixpanel: Sam's Unofficial Swift Mixpanel client
- NPM's Left Pad
- CocoaPods: Quality Indexes
- Swift Package Manager
- Float Label
- Github
- Gif of the animation
- antitypical/Result
- jonkykong/SideMenu
- SVProgressHUD
Your hosts:
- Sam on Twitter
- Caleb on Twitter
- Chris on Twitter
- Soroush on Twitter
View Details
Chris and Soroush discuss Uncle Bob’s controversial blog post about languages with type systems that he finds too strict.
- Uncle Bob’s original post: The Dark Path
- The Kotlin Programming Language
- SwiftCheck: property testing in Swift
- Fox: property testing for ObjC
- Proof in Functions
- Null References: The Billion Dollar Mistake
- Chris Eidhof’s response: Types vs TDD
- Uncle Bob’s follow up: Types and Tests
- Soroush’s post from a few years ago: Test and Types
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
The Law of Demeter (also known as the Principle of Least Knowledge) shows up occasionally in code reviews and discussions of object-oriented programming practices. But what does it actually mean, and why should we use it?
- Law of Demeter
- Set the settings set
- Easy Namespacing in Swift
- AVFoundation Programming Guide: Playback
[[[[[playerItem tracks] objectAtIndex:0] assetTrack] asset] duration];
- The Paperboy, The Wallet, and The Law Of Demeter
View Details
- Xcode 8 Release Notes: “Xcode 8.2 is the last release that will support Swift 2.3.”
- SE-0069: Mutability and Foundation Value Types
- Swift.org Migration Guide
- SE-0121: Remove Optional Comparison Operators
- Stack Overflow thread on NSURL changes in Swift 3
- Soroush: Emptiness
- Validated: “A Swift μ-Library for Somewhat Dependent Types”
- FileURL.swift
- PathKit: “Effortless path operations in Swift”
- Swift 3 Access Controls
- SE-0047: Defaulting non-Void functions so they warn on unused results
- SwiftLint Vertical Whitespace Rule
- Your Delegation Methods Might Not Be Called In Swift 3
- Stack Overflow: NSKeyedArchiver does not work in Swift 3
- Intro to git bisect from thoughtbot
View Details
Get a new Fatal Error episode every week by becoming a Patreon supporter!
To kick off this season of Fatal Error, Chris and Soroush discuss code generation in Swift: what, why, and how?
- SourceKitten
- Sourcery
- mogenerator
- CaseCountable, for counting the number of cases on enum
- swift-protobuf
- Swift Standard Library
- CollectionAlgorithms.swift.gyb (an example .gyb template)
- gyb.py (the Generate Your Boilerplate tool)
- Ole Begemann: How to Read the Swift Standard Library Source
- SwiftGen
- Coordinators
View Details
Chris and Soroush spent the last 18 weeks discussing the things they think are important to consider in building software. In the final episode of Fatal Error Season 1, they make the case for why it's important to think about these concepts — and just as crucially, how to use technical debt effectively.
- Judicious Use of Shitty Code
- Technical Debt 101
- Soroush: State Negotiations
- Cyclomatic Complexity
- Keeping Your Classes Shorter Than 250 Lines
- Chris's Pinboard on technical debt
View Details
Today on Fatal Error: a crash course on a bunch of useful concepts for testing iOS apps in Swift.
- Automated Tests as Documentation
- Code Coverage in Xcode
- Danger CI & Fastlane
- View Models: see episodes 2 and 3
- Dependency Injection
- Mocking Classes You Don't Own
- Protocol-Oriented Programming in Swift (WWDC 2015)
- Don't mock what you don't own
- Screenshot testing: Facebook's SnapshotTestCase; objc.io article
- Working Effectively with Legacy Code by Michael Feathers
- Testing, for people who hate testing
- OHHTTPStubs
- OCMock
Other links Chris likes, which we didn't discuss in this episode:
- 5 Questions Every Unit Test Must Answer
- Mocks Aren't Stubs
- When is it safe to introduce test doubles?
- Test Isolation is about Avoiding Mocks
- Chris's Pinboard on Testing
View Details
Soroush tells Chris about some of his takeaways from Eric Evans's book, Domain-Driven Design, and they discuss how we can apply some of its lessons in our day-to-day thinking about iOS development.
- Soroush's post on programming books: Resources For New Programmers
- Domain-Driven Design: Tackling Complexity in the Heart of Software, by Eric Evans
- Entity vs Value Object: the ultimate list of differences
- Value vs Entity Objects in Domain Driven Design
- Soroush: The Value of Value Objects
- The Swift blog: Value and Reference Types
- Tiny Types
- Soroush's post on enumerations
- Facade Pattern
- DDD: Aggregate
- Strategy Pattern
- Domain Driven Design and Development in Practice
- Episode 3: View Models, Again
- Episode 6: Singletons
- Cells
View Details
A responsibility is an axis of change — a potential motivation for change.
- SRP is the S in SOLID
- Book chapter about SRP from Uncle Bob
- via Uncle Bob's Principles of Object-Oriented Design
- Single Responsibility Principle: A Recipe for Great Code
- SRP in Ruby
- Off-topic: Falsehoods Programmers Believe About Names
- A Controller By Any Other Name (Soroush)
- Episode 2: View Models
View Details
Singletons get a bad rap. Why? Should you use them in your application? And if you've inherited several of them, what should you do?
- Singleton Pattern
- A Controller by Any Other Name (Soroush)
- The Sin in Singleton (Ben Sandofsky)
- singletons.info (Chris's blog posts and other links about singletons)
- Real World Singleton Design
- Singletons in Cocoa applications
- Quick followup on singletons
- Using
static let to create singletons in Swift
- Using
static let is thread-safe
- Avoiding Singleton Abuse (Stephen Poletto)
View Details
This week, Chris and Soroush finally get to the topic they've been waiting for since they started the podcast: reactive programming. Chris gives a high level intro, and they dive into Q&A.
- How Chris and Soroush met
- Soroush: “Reactive Cocoa”
- Chris: “Objective-C”
- Chris: “The Value of ReactiveCocoa”
- Soroush: “In Defense of Clarity”
- Then, beers.
- RxMarbles
- RACMarbles, which is RxMarbles with RAC terminology!
- A General Theory of Reactivity
- Accidental vs. Essential Complexity (Paper PDF)
- Reactive tooling for iOS/macOS
- ReactiveCocoa
- RxSwift
- ReactiveKit (née Bond)
- Interstellar
- The ReactiveCocoa repository contains excellent documentation for the framework and reactive concepts in general
- Design Guidelines
- Framework Overview
- Basic Operators
- Redux
- The introduction to Reactive Programming you've been missing
- ReactiveCocoa Concepts for Asynchronous Libraries
- NSBlock
The Spatial/Temporal/Singular/Plural table from A General Theory of Reactivity.
View Details
This week, our boys talk about promises: where do they come from, and what they are good for?
- Soroush's post about the experience of writing a Promise class
- Soroush's follow-up post about how easy it is to build cool things with promises
- The JavaScript A+/Promise spec
- WWDC video for improved GCD in Swift 3
- Chris Lattner's retrospective on Swift 3
- “First class concurrency: Actors, async/await, atomicity, memory model, and related topics.”
- “Lifetimes” in Rust
- Async and Await in C#
- Common iOS Promise libraries
- PromiseKit
- BrightFutures
- FutureKit
- SwiftTask
UView+Promises from PromiseKit
- Soroush's Promise library
View Details
After recording Episode 2, Soroush remembered some other questions about View Models. In this special episode, your hosts answer even more View Model questions.
- Separate Read Model from Write Model to Support Complex Forms
- MVC on Wikipedia
- How MVC works in Smalltalk
- HATEOAS
- “A hypermedia-driven site provides information to navigate the site's REST interfaces dynamically by including hypermedia links with the responses.”
- ReactiveCocoa Actions
- The Action type
- This issue provides an example of a view model exposing an Action
View Details
In our second episode, we discuss view models.
Chris starts with a bold definition of what they are, and more importantly, what they aren't. Soroush raises some concerns he's had with view models, and Chris explains his approach. Finally, we touch on how reactive programming is related to view models.
- Soroush's post: MVVM is not very good
- Ash Furrow's response: MVVM is exceptionally ok
- The Facade Pattern
- Canonical MVVM, by Rogelio Gudino, delves into the backstory of how MVVM got started at Microsoft
- Caleb Davenport and Sam Soffes discuss view models for empty states on runtime.fm
- Sources and Sinks
- The ReactiveViewModel README has an excellent description of MVVM architecture and its benefits
- ReactiveCocoa and MVVM, an Introduction, from Bob Spryn, walks through theory and examples of the MVVM architecture, using ReactiveCocoa for bindings
- MVVM in Swift reviews Artsy's experience in transitioning to MVVM in Swift
- C-41 from Ash Furrow is an OSS application demonstrating MVVM
- On Pinboard, Chris has collected a lot of other useful MVVM links
View Details
In our first episode, we talk coordinators. What are they? How do you use them? How did they come to be? How do they relate to storyboards? Your intrepid hosts answer these questions and more.
- Soroush's original blog post The Coordinator
- Soroush's talk on Coordinators at NSSpain
- The blog post version of the talk: Coordinators Redux
- Post on using coordinators with storyboards and follow up