Hacker Laws (AKA, Developer Laws)
Laws, Theories, Principles and Patterns that developers will find useful.
I just found out about Collings Guitars and can't believe how beautiful they are. All the electrics are amazing, but this CL Jazz in particular makes me one to get one just to hang on my wall.
Jeff McLeman Has Passed Away
Brent Simmons on Jeff McLeman:
It is my sad duty to report that Jeff McLeman — whose work you’ve used, even if you don’t know it — suffered injuries from a very bad fall, and soon after passed away as a result of those injuries.
Jeff was a long-time Seattle Xcoder, before recently moving away, and he was a beloved friend to me and many people.
Jeff was a bit of a walking encyclopedia on what it was like to work on operating systems and hardware from what seems forever ago, even though it must have only been 20 or 30 years. I saw him often when he lived in the Seattle area, always at Cyclops or Xcoders. Jeff always had crazy stories about older tech, and even the new stuff he was creating was a bit out there. Last I talked to him, he was building custom microcontrollers for a client, which were sending out radio signals for god knows what.
Jeff will be missed.
JetBrains Mono- Forget the Font How About That Site?
The folks over at JetBrains have made a new font for developers called "JetBrains Mono". It's a typeface that's supposedly good for code editing. I'm not a fan of the font, but the web page for this font is pretty amazing.
(Hat tip to Chris Liscio for the link).
Willamette Week on Panic in the Games Publishing Business
Sasser, 43, and Frank, 45, started Panic in the late '90s with a focus on Mac software. Four years ago, they branched out into game publishing with Firewatch, a game that puts players in control of a national parks employee working in a fire lookout tower in Wyoming.
This goose thing seemed the ideal follow-up.
It did quite a bit better than anyone could have predicted.
This was a fun article on Panic and their foray into games publishing (including a bit on Playdate, which is scheduled for later this year).
Ugly Gerry, a Gerymandered Font
Ugly Gerry is a font created via gerrymandered congressional districts. Gerrymandering pisses me off to no end, but this font is kind of cool.
Climbing.com: Climbing Washington's Moderates
I’ve always fantasized about climbing something big, and would love—like most of us—to top out El Capitan. But I’ve focused on sport climbing the past few years, and I’ve also had a difficult time progressing into higher grades. However, I’m solid on moderates. With 18 bolted pitches, none harder than 5.9, Flyboys was a route where I could have a real adventure at my current level—and top out something big.
I've yet to climb Flyboys, but I have done some of the others mentioned in the article. Not when wet though, that sounds horrible.
Margaret Hamilton Knows What's Up
Hamilton is famous for coining the term “software engineering,” but what often gets obscured in that one-sentence origin story is why she started using that term.
By framing software development as requiring the rigor and discipline associated with engineering, Hamilton was doing her best to protect her team’s coding from a “fail fast” approach encouraged by management at NASA. The desire to cut corners in the interest of speed devalued Hamilton’s more time-intensive and safety-minded efforts.
Project Zero Remote iPhone Exploitation
Samuel Groß from Google's Project Zero has a great writeup on a remote iOS exploit (which is fixed in the latest updates from Apple). I'm linking to part 2 of this writeup, because there is a ton of interesting technical information about how the exploit worked, which includes Objective-C tagged pointers and memory leaks in NSKeyedUnarchiver.
Memory leaks in system frameworks have always bugged me (most recently: FB7482388), but it had never crossed my mind they could be security vulnerabilities. It makes sense now that I think about it.
The Grouchy Chef Says He's Not Grouchy
The blue warehouse at 4433 Russell Road is where utilitarian meets authoritarian. The outside looks more menacing than fine dining. It’s marked by a Grouchy Chef cartoon of a frowning face and outstretched hands wielding a pan and spatula. The door is covered with handwritten warnings about what not to wear and where not to park and how not to act.
Inside, on polished floors, nine tables are immaculately set with fine china in an ambient lit dining room.
You forget it’s a warehouse — but not that the warden is watching.
I haven't been to The Grouchy Chef for a while now, but I've always loved it when I did. In the past Kirstin and I would go a couple of times a year and it's a great experience if you're not a fussy person. We've taken friends there when we were pretty sure they would enjoy it. We've not taken other friends there, because we know there would be problems.
When Kirstin was (very obviously) pregnant with Madeline, we went for dinner and I got a glass of wine with the meal. Chef made a bit of a fuss to make sure Kirstin wasn't having much, if any. This wasn't from a position of authority, or him being mean- you could tell he cared in his own way about the well being of everyone.
About 7–9 months later, after Madeline was born, we got Grandma to watch the kid and we went back with a couple of friends for a meal. Even though we would only go visit The Grouchy Chef a few times a year, he remembered us and that we were having a kid- and with very few words spoken, he gave us a complementary bottle of champagne.
Reverb.com: Kids Try Guitar Pedals for the First Time
A fun and slightly educational video where kids try and guess what the guitar effects will sound like. I laughed outloud when "Romantic Hallmark" was used to describe a specific pedal (and any guitarist will know exactly which one it is based on this description alone).
Maybe the most electrifying moment of the entire video is Gabe admitting that he doesn't like pizza. It was the equivalent of an elementary school mic drop.
Kids these days.
Renaud Forestié on Tweening Curves
Let's talk about tweening curves! These curves are amazing, I use them all the time and I've built myself a set of tools to access them everywhere. Here's a thread about CURVES.
WebAssembly Becomes a W3C Recommendation
At its core, WebAssembly is a virtual instruction set architecture that enables high-performance applications on the Web, and can be employed in many other environments. There are multiple implementations of WebAssembly, including browsers and stand-alone systems. WebAssembly can be used for applications like video and audio codecs, graphics and 3D, multi-media and games, cryptographic computations or portable language implementations.
December 6, 2019
A Retrobatch customer recently wrote in with a problem where it was crashing when processing a bunch of images overnight, seemingly from gobbling up all the available memory on the system. After a bit of questioning I've narrowed down at least one source of the problem- Core Graphics is leaking like a sieve when generating thumbnails from 16 bit per component tiff files.
I have a sample project which simply opens up an image source and then loads the thumbnail 500 times in a loop. It releases the thumbnail immediately so the system can reclaim the memory for other operations.
When run against an 8bpc tiff file, memory grows to around 75 megabytes. When run against a 16bpc image, memory spikes to almost 4 gigabytes, and the memory is never reclaimed.
Obviously most apps don't open up 16bpc tiff images 500 times in a row, but this is exactly what Retrobatch was designed in part to do.
Filed as FB7482388.
December 4, 2019
Andrew Bisharat writing for Outside Online: What ‘The New York Times’ Got Wrong About Climbing:
One of the more disparaging quotes from Pasternak is, “Keeping in mind the average American is significantly overweight, I would talk everyone I could out of rock climbing unless you are incredibly light, agile, fit and functional. There is a very small minority of this country that should be rock climbing.”
When I first read those lines in the original Times article, I had to stop reading. I couldn't believe they would have quoted such utterly backwards statements. It felt like a "fair and balanced / there's two sides to every story" angle, no matter what the truth might be. They've done great reporting on climbing in the past— why would they quote this?
It’s also plain wrong. Climbing is one of the best sports in the world, precisely because it’s open to every age, gender, and ability. The scene at any gym or crag is one populated by people from three to 70-plus years old—women, men, nonbinary—all climbing with each other, all building trust, connection, and friendships.
Climbing may not give you a butt like Kim Kardashian, but it’s a path to making anyone as strong as an ape. No matter your ability, you will gain strength (and flexibility) through climbing that will (eventually) allow you to lever your body up an impossible-looking wall, which is more impressive than vanity beach muscles. Deadlifts may be the perfect exercise, but climbing is way more fun, filled with amazing people, and ripe with opportunity to travel.
I took my mother to a climbing gym for the first time last year, which I think she was interested in (partly) because her granddaughter was having fun doing it as well. When she came to visit us again this past week I asked her if there was anything specific she wanted to do, and the first words out of her mouth were "climbing". So of course, we went indoor climbing again. She's 71 now, and had as much fun as my 7 year old daughter.
If you are going to be chasing the elite level climbing routes, of course you're going to need strength and fitness. And there's fun to be had in those chases— but that's not the only fun to be had. I find myself on "easy" routes all the time because the movement feels great and it puts a smile on my face. And the confidence you build as you progress in your ability to climb more difficult routes feels amazing. People think it's adrenaline we're addicted to, and that couldn't be further from the truth. It's the personal achievement and the feeling you get when you finally make it to the top of something you've been working on for weeks.
Anyway, take an intro class and give it a try. It's a good time.
What Order to List Typefaces in a Font?
Today I'm doing some minor bug fixes in Acorn, and I'm currently tweaking the order in which font typefaces show up in the text palette's typeface popup.
Currently to get a list of typefaces for a font, I use NSFontManager's
availableMembersOfFontFamily:, and just loop through those and add it to the menu. Now I'm thinking I should sort them alphabetically (as suggested from a customer). However I'm not 100% sure that's the right way to go.
Should the listing start with the thinest font variant, and move down to the boldest? Should the Regular style be placed at the top if there is one? Should italic variants interleave with everything? Is there already an algorithm out there that I'm aware of?
Am I thinking too hard on this?
Update: The docs for
-[NSFontManager availableMembersOfFontFamily:] say:
"The members of the family are arranged in the font panel order (narrowest to widest, lightest to boldest, plain to italic)"
Unfortunately, it looks like this is broken on MacOS 10.15.1. Running Acorn on 10.14 produces the order as described (and as seen below with Helvetica Neue). Looks like I was sent on a wild goose chase and I need to file a bug report to Apple instead.
Filed as FB7476430, with a sample project.
November 22, 2019
Inspired by Inessential's 20th birthday, I decided to dig in and see how hard it would be to import my old posts from gusmueller.com into my current blogging system. Thirteen hundred posts later, I think I've got a reasonable archive added in now, dating back to December of 2000.
Blogging back then for me was way different that it is now. I pretty much wrote about pointless little things that I knew only five or six people would see. I would make references that probably only a few people understood. There were no titles in the posts either, much like Micro.blog does today.
This was also when I would spin up a new MySQL database at the drop of a hat, and build a new blogging engine in Java or Python or whatever over a weekend, just for fun. And then of course all my blogging was in VoodooPad via a custom Lua plugin, and I eventually shipped it with the app.
Honestly, the old posts are kind of embarrassing. There are a few good ones that maybe shouldn't be lost to time, like "How to become an independent programmer in just 1068 days". Maybe my posts about how I'm craving some fried chicken at the moment should be. But you can see my post where I released my first piece of paid software (it didn't even make the $7 I was hoping for). And the post where I discover someone had put VoodooPad up on VersionTracker for me still cracks me up.
In the end, I decided I should spend a little bit of time bringing it all over, even if there are formatting problems (which I'm going to try clean up).
One More Birthday Till the Legal Drinking Begins
Today is my blog’s 20th birthday!
It started like this: at the time I was working at UserLand Software on a blogging app called Manila, and this was my own personal Manila blog. It’s gone through a few other engines since then. (These days it’s rendered — as a static site — by some Ruby scripts.)
20 years is no small feat. Congrats, Brent.
They Might Never Tell You It’s Broken
The problem, it turned out, was that MacOS had more strict requirements for keeping the stack pointer aligned. This wasn’t difficult to fix. The more important lesson, that I didn’t understand until that point, is that you can’t count on the people trying your project to quickly and reliably signal bugs to you. Most of the time, if it doesn’t work, they won’t report the problem. There are a few reasons why this might be.
November 5, 2019
A few months ago, some very nice folks from the App Store at Apple came up to my house and took a bunch of pictures. I worked a bit, we went rock climbing at the new Vertical World, and I even made some pizza.
The result is this cool little profile in the developer section: Meet the Developer: His Big Photo Op.
It was all a bit overwhelming, but fun at the same time.
(There's a version of the profile on the web, but it's a truncated version of what you can see in the App Store - which should auto-open if you visit that link).