The Shape of Everything
A website mostly about Mac stuff, written by Gus Mueller
» Acorn
» Retrobatch
» Twitter
» Mastodon
» Instagram
» Github
» Maybe Pizza?
» Archives
» Feed
» Micro feed
The Amazing Short Guitar Sounds of Kortney Sweikert on Instagram

I stumbled across Kortney Sweikert's Instagram page about a week ago, and I can't stop going back to it. It's a collection of original songs as well as a bunch of covers, just her on the guitar. Sometimes with loops for background. What she's chosen to share are incredibly short clips of these songs, plucked right out of the middle.

Here's the thing. Anyone can learn guitar, and after a number of years of practice you too will be able to play these songs. I've been playing for 27 years myself.

But you won't be able to play like her. What she has is an incredibly rare gift, which I'm sure has been honed to perfection over many years- but it's a gift nonetheless. She's shaping the notes around each other, hitting each tone at just the right moment, and blending everything together in a way that should be impossible. The sounds aren't just more than the sum of their parts, it's an order of magnitude more than the parts. The music is made out of the atmosphere.

I'm guessing most people won't be able to hear it. Maybe it's something you only pick up on after years of really listening to music. But- it's like the difference between Olly Moss and your average digital artist. This feels like Robert Johnson level playing.

Anyway, here are a few of my favorite clips:

"Just play."

"The Rain Song - Led Zeppelin pt.2"

"Never Going Back Again"

"2am 🌖"

March 31, 2020

I've just typed the magic commands* and let the servers do their thing and now Retrobatch 1.4 is loose on the world.

There's a couple of interesting new features in this update I'd like to call out. First up is JavaScript expressions in Retrobatch Pro. Various nodes in Retrobatch which allow you to set the size or length of a value (such as the Crop, Border, Gradient, Adjust Margin nodes) now have an option of running a little snippet of JavaScript code to figure out the value. This is a super powerful feature, which you can read about in our JavaScript Expressions documentation

Let's say you have some images of varying sizes, which are all at 480 x 380 or smaller, and you want them to expand to meet that size. But- you only want it to grow evenly on either side of the image, but you want to keep a baseline so only transparent area is added to the top of the image, and the bottom stays in the same spot. This little picture of the new Adjust Margins node shows how this can be done:

Yes, this is an oddball (and very real) case- but there's a billion of these little oddball cases out there. With the new JavaScript expressions support, these small but hard to do scenarios are now super easy.

And yes, all of the JavaScript support in Retrobatch now sits atop FMJS, which any developer can use to build similar support into their apps.

What else is new?

File numbers with leading zeros for the Write node. You can add (and it's case sensitive) $FileNumber04$ in the File name: field of the Write node to have the file number of your image written out as part of the name, with a padding of up to 4 zeros. If you'd like to pad that number to 6, you would enter $FileNumber06$, and so on.

The Mask to Alpha node got a new "invert colors" option. Normally Mask to Alpha will convert the black areas of your image to transparent, and the white to opaque (with gray somewhere inbetween). With the new Invert Colors option, Mask to Alpha will now convert the white areas of your image to transparent, and keep the black opaque. This is great if you are scanning in line drawings from your own artwork, and want to make the backgrounds transparent.

This request comes up a lot in Acorn as well. Previously you'd have to add an Invert Colors node (or filter for Acorn), then the Mask to Alpha, and then Invert Colors again. Now it's just a checkbox in Mask to Alpha, which is super easy. I've also added an update to the same filter in Acorn for the next release. You can grab a preview of it from here.

And finally for my short list, you can now make a droplet which doesn't take any files. Why is this useful? Well, imagine you have a workflow that reads an image from the clipboard, resizes it to a specific width, and then writes it back to the clipboard. Now you can make a little droplet to do just this. Just a double click from the Finder (or a single click from the Dock) and your workflow is run.

The full release notes for Retrobatch 1.4 are available in the usual place.

* ./bin/ -e 1.4

March 28, 2020

We've been officially quarantining for 15 days now, but there were a couple of days in early March where we kept Madeline out of school because it looked like my wife Kirstin might have caught something. It cleared up quickly though, so back to second grade Madeline went. For a week anyway. Then school was called off till April 27th.

I've been baking more bread and posting pictures of pizza to Instagram. I've also been writing a little more frequently on my pizza blog and I have more things I'm working on for that site as well. (If you were wondering why all my pizza posts stopped years ago, well they didn't stop they just moved).

It's a bit odd, because I usually make extra bread loaves for my neighbors but I haven't really been doing that because of coronavirus and I'm scared I'd pass it on. Maybe I'm infected and I'm just asymptomatic? I was a bit dizzy a few days ago, which is a common symptom. But I've had dizziness prior to the outbreak as well. And there's lots of pollen in the air too. Who knows.

Kirstin works as a PT at Providence hospital, in the building where the U.S.'s first COVID-19 case was treated. She's still going into work, where they ration masks. And we live in Snohomish county, where the first U.S. outbreak occurred. Madeline had a bad cold for a little over a week, but she's all better now. Was it just the cold? Who knows. We've got no tests.

I've been messaging with friends in St. Louis, where I grew up. I get the impression that parts of the city are taking it very seriously, and some parts aren't at all. That doesn't bode well. Italy didn't take it seriously at first and as I write this, they just passed the 10k mark of confirmed deaths from coronavirus. New York is being hit super hard right now as well. Things are going to get way worse.

Dog walks are still happening in the gulch if it's not too windy. There's hardly anyone else in there thankfully, just a few locals. I bought Madeline the Zelda Breath of the Wild guide, which she pours over. It's something she really enjoys reading and the game is super fun for her- she mostly plays as a tourist visiting the different towns and stables and finding horses and exploring. She typically does the same in Minecraft, but Zelda is the new hotness right now.

Our favorite climbing gym laid everyone off. We're friends with everyone there, so it's sad not to see them anymore and know they are all out of jobs. The other local climbing gym claims they will be open on April 6th. I think they are tad optimistic about that. A couple of my favorite restaurants were doing take out, which we took advantage of while we could, but they've shut down at this point. Boeing's big factory up here closed and that was a big hit to the local restaurants.

Things are still happening for Flying Meat. I was already working from home so that's not a change (I gave up the office years ago). Having Madeline at home and getting work done is a bit of a challenge, but I'm finishing up Retrobatch 1.4 and still trying to figure out which new features will make it to Acorn 6.6. I'm also hacking away on little side projects as usual. Destiny still continues in the evenings.

We'll see what the next week brings. But if you're doing the math, it doesn't look like things are going to improve anytime soon.

March 25, 2020

This is a quick developer PSA. MacOS 10.15.4 was just released, and there was a minor change in the way NSAttributedString's -initWithHTML:options:documentAttributes method works. Previously (10.15.3 and earlier) if you passed a HTML snippet using HelveticaNeue with a size of 20, the minimum line height for the attributed string was set to 25 (and if you passed 40 for the font size, you'd get 49). With 10.15.4 the minimum line height is now set to 0. I'm actually in favor of this change, but if you were expecting certain layouts to happen based on the previous defaults, things might look different for you.

How did this happen? I'm guessing something in WebKit probably changed, which AppKit probably uses to convert the HTML to an attributed string. Why did this happen? Beats me.

You can test it out on your Mac using Python.

/r/Data Is Beautiful

This is a captivating and horrific subreddit to watch in these early days of COVID-19. The charts comparing the rate of growth in Italy vs. other locations are ones I look out for. Two days ago, 793 Italians lost their lives to COVID-19 (we're still waiting on numbers from yesterday). If the trajectories stay the same for the US, and the hospitals here become overwhelmed, we'll be hitting similar numbers.

I also find this animation showing trajectories of coronavirus cases for countries fascinating. In the US, we've utterly failed at slowing the spread, and are making things worse by not acting faster.

March 19, 2020

I love hearing how folks are using Retrobatch in so many different ways, but today I though it'd be fun to share how I'm using a quick little workflow to watch some apple seeds I planted grow.

Wee little apple trees

Every morning I'll take a picture of my apple tree seedlings via my iPhone and and add it to album named "Apple Tree". Later on that day I open up and run a Retrobatch workflow that looks like this:

Wee little workflow

First, there's the Photos Library node, which I have configured to bring in the pictures via the Photos app (which were sync via iCloud). Then I feed that to the Scale node, because I don't need giant tiles of these plants. Next up is the little date watermark. I use the standard "Capture Date" token with a little offset from the corner, but if I wanted to change that up to something custom I could:

Watermark options

Then comes the image grid, which is currently set to 3 x 15 so there's plenty of room for the image to grow. And finally the write node.

And it just now occurs to me that it'd be also cool to make an animated gif of this, so let's do that as well:

Wee little animated workflow

And there we have it. A little workflow that makes a grid I can look at to see the progress of my little apple trees, and for bonus points an animated gif.

You can download a free trial of Retrobatch right from our website if you'd like to do something similar.

Ben Thompson on Zero Trust Information

Sure, the implication of the Internet making everyone a publisher is that there is far more misinformation on an absolute basis, but that also suggests there is far more valuable information that was not previously available:

[visit post to see chart - gus]

It is hard to think of a better example than the last two months and the spread of COVID-19. From January on there has been extensive information about SARS-CoV-2 and COVID-19 shared on Twitter in particular, including supporting blog posts, and links to medical papers published at astounding speed. In addition multiple experts including epidemiologists and public health officials have been offering up their opinions directly.

March 3, 2020

A few months ago while watching climbing competition videos on YouTube with the family, I finally broke down and began the 30 day free trial of YouTube Premium.

I now wish I had done it years ago.

Removing ads instantly changed my YouTube viewing habits. What was previously a pit of frustration waiting for horrible little clips to play turned into a wonderful experience of listening to Stevie Ray Vaughan concerts in the background, devouring guitar lessons, enjoying the funk covers of Scary Pockets, and more.

It made such a difference in the way I experienced YouTube, I can't imagine ever letting my subscription lapse. And in fact while I knew that YouTube was super important, its value just increased ten times over for me and I would easily put YT at the top of the list of the most important sites on the internet. Sure, there are horrible videos in there, but there are also so many important cultural videos that were previously inaccessible before. Not to mention instructional videos which are helping me out as well (as I try and finish rebuilding my deck).

Let me talk a little about the Stevie Ray videos mentioned above. I knew in the abstract these concerts were out there (and I probably have all the audio bootlegs of them), but if I had wanted to watch to them on YouTube I was interrupted by ads and would of course stop the video. Ads annoy me.

Now I can just let it play uninterrupted and if I hear something I could learn on my guitar I'll rewind the video and usually see exactly what Stevie is doing. Because of this I've had a number of aha moments, such as when I discovered Stevie using a quick slide on the intro to Ain't Gone 'n' Give Up On Love. I had no idea, I had always thought it was a bend. I'm now trying to introduce that technique into my own guitar playing.

There's a ton of little instances like that on YouTube. Did you know that John Mayer occasionally does impromptu guitar lessons on Instagram Live? Fans of his will record the streams and archive them on YT (because Mayer tends to delete them from Instagram right away). What a wonder it would be if Jimi Hendrix was still around and doing the same. And because of the algorithms that suggest new videos for me, I'm discovering great new guitarists all the time.

I could go on and on about the cool little things I've discovered, but if you haven't already tried YouTube Premium, you really should. The wealth of instructional videos and music on there is just incredible.

March 2, 2020

From Wikipedia's entry on AppleScript:

Whereas Apple events are a way to send messages into applications, AppleScript is a particular language designed to send Apple events. In keeping with the objective of ease-of-use for beginners, the AppleScript language is designed on the natural language metaphor, just as the graphical user interface is designed on the desktop metaphor.

If you wanted to write an AppleScript to open my app Acorn, it would look like this:

tell application "Acorn" to open

If you then wanted to tell Acorn to quit, it would look like this:

tell application "Acorn" to quit

If you invoke Siri and say "tell application Acorn to open" then Acorn will open up which is pretty awesome. If you use the latter command, Siri will respond:

To close an app, press Command - Q on your keyboard. If that doesn't work, open the  menu and chose Force Quit.

The very first AppleScript command I baked into Acorn goes as follows:

tell application "Acorn" to taunt

The command is still there today, and if I ask the same to Siri literally nothing happens. Siri just goes away and pretends I didn't ask it anything. But should it?

It seems to me that as an interface to Siri commands, something along the lines of AppleScript would be a pretty good fit. What if developers could mark commands in our AppleScript interfaces to be exposed to Siri?

I realize Apple is doing its best to make sure AppleScript just fades away, but this seems to be a pretty big missed opportunity on their part.

ES-335s Sure Are Pretty Right After Birth

Watch a Gibson ES-335 being made from the first laminates and then handed off to Marty Schwartz, that lucky bastard.

February 25, 2020

Larry Tesler recently passed, and Chris Espinosa has a nice thread on Twitter about one of his contributions to the Mac, which was a heuristic for inserting a space before or after a pasted section of text. This was a little piece of magic that I unknowingly benifited from for decades, until I was working on code editing support for one of my projects and I needed to override this behavior.

Larry's heuristic lives on in the Cocoa frameworks via the property smartInsertDeleteEnabled in NSTextView. There's actually a handful of methods related to it, which you can find by searching for "smart" in the NSTextView headers or documentation.

Via DF

Hacker Laws (AKA, Developer Laws)

Laws, Theories, Principles and Patterns that developers will find useful.

Collings Guitars

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 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

Fast Company:

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.