Top posts of 2020
Jan 3, 2021, 2:42 PM
Earlier this year, I decided to re-implement analytics for my site after discovering a viable privacy-aware (and open-source!) alternative to the user-hostile spyware garbage that we call Google Analytics. I have really enjoyed using...
A list of books I read in 2020
Dec 31, 2020, 12:40 AM
Continuing my (still somewhat recent) tradition, here are the books I read in 2020. You can find previous years under the #reading-list tag. I really thought I was going to be able to read a lot more this year, but fuck this pandemic and...
Resources for learning about compilers and LLVM
Dec 28, 2020, 5:23 PM
Today I cleaned up my various projects and todo’s in OmniFocus. I am always collecting links and resources for potential project ideas, or for general learning. Sometimes, however, it is best to acknowledge that I will likely never have...
The different types of self in Swift
Dec 28, 2020, 4:39 PM
As a brief follow-up to my previous post, I thought it would be helpful to enumerate the various types of “self” in Swift. It is an overloaded term. As we’ve seen, it can be quite confusing.
What type is self in a Swift self-executing anonymous closure used to initialize a stored property?
Dec 22, 2020, 9:24 PM
The answer might surprise you
Obscure bridgeOS crash
Dec 22, 2020, 6:33 PM
This is a first for me. I returned to my MacBook after leaving it for a couple of hours, and it was shutdown even though I left it powered on. The machine was idle. I didn’t have any specific tasks running. I figured it might have been a...
The largest strike in history
Dec 21, 2020, 12:09 AM
Last month, the largest strike in history occurred in India, breaking the record for the second time.
Useful Danger rules for Bitrise
Dec 20, 2020, 11:28 PM
This is a quick follow-up to my previous post. The client project I’m working on is also using Bitrise for CI, which I must say is quite good. If you are looking for a hosted CI service I would highly recommend checking them out.
Running multiple instances of Danger
Dec 15, 2020, 2:53 PM
For a client project that I’ve been working on, I recently integrated Danger to automate pull requests for the team. I initially setup a single Dangerfile to run on CI, but soon after we had the need to split it up in order to run danger...
How to fix Ruby/Bundler error 'No such file or directory' on NearlyFreeSpeech.net
Nov 29, 2020, 1:03 AM
Part of the joy of having a ‘bare bones’ DIY host is that sometimes you have to figure shit out on your own. I am not a great web developer, nor a Ruby expert. But, I learn more each time something breaks — you know, Type II fun. Most...
Radical readings for the Tech Worker
Nov 26, 2020, 4:30 PM
After reading my recent satire piece, a good friend of mine (and tech worker) asked if I had a list of books or other resources to learn more about labor history and capitalism in the United States, and how the tech industry operates in...
Seasons Greetings from your CEO at TECH COMPANY
Nov 24, 2020, 1:28 PM
An email from your boss's boss's boss
Swift Unwrapped with Jordan Rose
Oct 12, 2020, 4:41 PM
In today’s episode of Swift Unwrapped, JP and I had Jordan Rose on the show to discuss his recent blog posts on implementing the Swift runtime in Swift.
Swift deinit is (sometimes) not called for throwing or failable initializers
Oct 8, 2020, 3:35 PM
I was never a fan of failable initializers in Swift. I do not think this is the correct place to fail and return nil most of the time. Of course, there are exceptions where a failable initializer is appropriate. But there is another...
Don't forget the keyboards
Sep 16, 2020, 2:21 AM
Why is Apple acting like an Asshole?
Sep 15, 2020, 9:12 PM
Today Apple announced at their media event that the final public release of iOS 14 ships tomorrow, which came as quite a shock to all third-party developers.
Aug 30, 2020, 9:41 PM
I’m currently reading Marquis Bey’s Anarcho-Blackness: Notes Toward a Black Anarchism. These are some reflections on and excerpts from the fourth chapter, titled Unpropertied. This post comes against the backdrop of continued protests and...
zsh could not find CocoaPods
Aug 26, 2020, 7:03 PM
Out of nowhere today, when I tried to run pod install on my machine, it could not be found. Uh… what?
GitHub Tip: watching releases
Jul 30, 2020, 2:47 PM
A while ago, GitHub added a new option for “watching” repositories, the setting that determines which events on a project trigger a notification for you.
How to fix the incomprehensible tabs in Xcode 12
Jul 24, 2020, 6:25 PM
Update: This post was originally written during Xcode 12 beta 3, but has been updated to reflect the final release of Xcode 12.
Xcode 12 was released and it includes a change to how tabs and navigation work. In Xcode 12, the tabs have...
Xcode 12 drops support for iOS 8 and how to fix deployment target warnings in CocoaPods
Jul 20, 2020, 6:06 PM
The release notes for Xcode 12 beta state that the release “supports on-device debugging for iOS 9 and later, tvOS 9 and later, and watchOS 2 and later.” I am not sure if that means support for building and deploying for iOS 8 is...
Time Machine error 45
Jul 17, 2020, 4:54 PM
This is a brief follow-up to the post I wrote about Time Machine failing on macOS Catalina.
Swift globals and static members are atomic and lazily computed
Jul 16, 2020, 3:14 PM
While debugging some code the other day, I wanted to verify the behavior of global variables and static members in Swift. I vaguely remembered from the early days of Swift, that static let members and global constants were atomic and...
The best Touch Bar configuration for people who hate the Touch Bar: Or, how I finally upgraded my 6-year-old MacBook
Jul 9, 2020, 1:38 AM
I like to keep my devices for a long time — as long as possible, actually. I do not need (nor want) a new iPhone and MacBook every year, or even every other year. (Or more!) Putting Apple’s issues aside, the company is quite good at...
Quickly switching between Xcodes
Jul 7, 2020, 11:16 PM
I try to have only one Xcode installed at a time for simplicity and tidiness. But such a setup is rare as we often must manage stable releases and beta versions simultaneously.
Swift tip: marking unused required initializers as unavailable
May 20, 2020, 12:30 PM
Swift’s strict initialization rules are great. They help prevent an entire category of bugs that were especially common in Objective-C. However, when working with Objective-C frameworks, particularly UIKit, these rules can be frustrating.
Who do they protect?
May 17, 2020, 7:37 PM
An essay on police brutality in America
May 16, 2020, 10:21 PM
The other day Slack went down and I tweeted to express my dissatisfaction and sarcastically comment that non-native apps are the future. I should have known it would get as much attention as a tweet about Elon Musk. People argued about the...
Simple, private, and open source analytics with GoatCounter
May 8, 2020, 5:24 PM
I removed Google Analytics on this site over two years ago. It was doing more harm than good. I did not want to jeopardize readers’ privacy. I did not want to be part of the bullshit web. I did not want to contribute to Google’s massive...
Approved for GitHub sponsors
Apr 16, 2020, 12:26 PM
I am happy to share that I was just approved for GitHub sponsors. You can now support my open source work and GitHub will match contributions for the first year.
Updating permalinks and adding redirects for Jekyll sites
Apr 15, 2020, 2:40 PM
A fews days ago I changed the permalink structure on my site. I think everything went smoothly, because it looks like no one noticed, which is exactly what you want to happen with a potentially breaking change like that.
Apr 14, 2020, 7:29 PM
Today I am deprecating my open source library, JSQDataSourcesKit. I have already marked the CocoaPod as deprecated and archived the repo on GitHub. I will not be taking additional contributions.