The Shape of Everything
A website mostly about Mac stuff, written by Gus Mueller
» Acorn
» Twitter
» Pizza Lab
» Code
» Archive
July 26, 2016

Nicholas Howard: OS X's Interface Decline.

"No one threatened to storm Cupertino with weapons if Apple failed to revamp the look of their operating system. Nor, even, did the average users of OS X cry out for the changes. The people who cried out for the changes were designers."

There's some points in here that I disagree with, but there are many more points that I feel are spot on.

July 25, 2016

I've been working on the next update to Acorn, version 5.5, and I've got a build ready for folks to try out. I'm calling it beta 2. Hello, it's nice to meat you.

Color improvements are the focus Acorn 5.5. The biggest change is a new color loupe tool for Acorn which will allow you to seamlessly select colors from the canvas as well as anywhere on your display (and correctly match your display's color to the selected color profile of your image).

This is super important as displays with a wider-than-sRGB-gammut (such as the recent iMacs) are starting to show up on our desktops. For instance, if you have an iMac with the Display P3 profile set and you're working on an sRGB image, selecting a color from anywhere on your display will correctly match it to your image. Colors are hard, but Acorn is making it so you don't even have to think about it.

You can bring up the color loupe tool by pressing the option key when using Acorn's various drawing tools, or by pressing Control-C when you have an image open.

And besides supporting wide color gamuts, Acorn 5 has always supported deep images (16 bits per component), which is going to be increasingly important this fall when Sierra ships with deep color support in AppKit, and if you're paying attention to the tea leaves for iOS…

New dither filters, shape processor improvements, and various Quality of Life things are in Acorn 5.5b2 as well.

The full (and constantly updating) beta release notes for Acorn are available as well. Grab Acorn 5.5b2 here.

July 20, 2016

Scott Berkun: Why Software Sucks (And What To Do About It).

There's too many great things to quote from this essay (from 2005!), so I won't pull any. Just read the whole thing.

July 12, 2016

I've got three slightly unrelated articles I wanted to share:

Friday illustrated: Evolving as an artist and overcoming art block, with Lois van Baarle (Loish).

NYT: Think Less, Think Better.

NYT: Closest Thing to a Wonder Drug? Try Exercise.

July 1, 2016

Dean Jackson on the WebKit blog:

"The past few years have seen a dramatic improvement in display technology. First it was the upgrade to higher-resolution screens, starting with mobile devices and then desktops and laptops. Web developers had to understand high-DPI and know how to implement page designs that used this extra resolution. The next revolutionary improvement in displays is happening now: better color reproduction. Here I’ll explain what that means, and how you, the Web developer, can detect such displays and provide a better experience for your users."

This writeup is an incredibly great explanation of wide gamut issues with a touch on deep color as well. If you are a developer who uses color in any way, you're going to want to read this. Wide gamut displays are already here.

And of course, Acorn has had support for displaying both wide gamut and deep color images since last fall with the release of OS X 10.11 (I'm pretty sure Acorn was the first 3rd party Mac app to do so).

Do you have a late 2014 iMac (Retina 5K)? Then you've got deep color support. And if you have a late 2015 iMac (Retina 5K) you've got both deep color and wide gamut (via Display P3) support.

June 11, 2016

Listening to ATP this morning got me thinking about the recent subscription announcements for the App Stores. During the discussion, John mentioned charging a fee once per year vs. once per month, which led my brain to play out the following things.

What if Acorn did charge $29.99 a year? Would that be awesome? It would certainly fix the problem where folks don't have to pay for the next major upgrade and it's also very similar to what Sketch 4.0 is planning on doing. It also fixes the problem where someone purchases Acorn 5 the day before Acorn 6 comes out, and misses out on a grace period that doesn't currently exist on the App Store (though direct purchases get this automatically because we can just send out an email with a new license).

Yes, this could be awesome. But wait. I also have customers that aren't able to upgrade to the next major version of the OS for any number of reasons, and what if Acorn 6 was 10.12+ only? Does that mean folks still on 10.10 or 10.11 are paying a yearly fee even though they will no longer get any feature upgrades?

This breaks my heart. At Flying Meat we've traditionally had the philosophy that we sell something, and if you like it you can give us some money for it and use it for as long as you'd like. Subscriptions will probably break that. So unless the App Store provides a way for apps with expired subscriptions to keep on working, I don't think it'd be a good fit for Acorn. Also that sounds like paid upgrades (I really miss paid upgrades).

Of course, I could always try the subscription route via the App Store, and then keep direct sales just the way they are today- i.e., you buy something and you get something to use for as long as you'd like. But then I worry that might lead to more customer confusion.

Maybe I'll let other folks try this stuff out first.

June 7, 2016

Buried in the Dictation section of the Accessibility System Pref pane, behind the "Dictation Commands…" button is a checkbox with the label "Enable advanced commands".

When turned on, it lets you add your own commands which can perform specific actions like opening a URL, a file from the Finder, pasting text, or even running an Automator workflow.

Accessibility Prefs

This is pretty neat, and enables me to run shell scripts or even make a new build of Acorn when I ask it. We're almost there.

June 7, 2016

What I'm guessing will happen

  • An Amazon Echo like product, but it'll be tied to Siri and it'll have a sweet SDK. Maybe we'll have one under our seats?
  • Mac OS X rebrand to macOS 12.
  • Siri availablitly on OS X. Finally. Maybe always on as well? I've got an Amazon Echo and absolutely love it, so having the ability to drive my Mac with voice commands would be super awesome.
  • Probably a new 5k display, since the current displays are crazy old.
  • New Mac Pros announced, which can drive the new 5k display. However I'm not terribly excited about this, as I wasn't happy with the 2013 Pros (I actually sold mine a little while back. I'm on an iMac 5k now).
  • Xcode 8.

What I want to happen, probably but won't

  • I really want the rebrand of Mac OS X to be "Mac OS". That capital letter and the space mean a lot to me. If I can't have that, MacOS will do.
  • A Mac OS upgrade which is about bug fixes and minor features. Maybe even moving to an 18 month upgrade cycle instead of a yearly one.
  • New Macs with ARM processors in them, with dev kits in a month or so. This WWDC can be all about the transition to ARM, so Mac OS won't get a ton of new features.
  • Some awesome new features for Swift that haven't been made public yet.
  • An upgrade to OpenCL. Unfortunately, It seems that Apple has moved on. If I can't have that, how about Metal on the CPU? (Why CPU? Well, some things like flood fill are faster in Acorn when the memory is local to it).

Other stuff I Predict

  • I'll see a lot of old friends, and hopefully make some new ones.
  • A lot of pizza will be eaten.
  • I'm going to be exhausted by the end of the week.
May 16, 2016

Acorn 5.4 was released for direct customers today. This is a feature update, which includes new color profile goodies. The full release notes are available for the details.

But the most amazing holy **** moment happened with this release. I built and submitted it for the App Store this morning.

And then seven hours later it was approved.

Don't forget to go give it five stars on the MAS.

May 16, 2016

Brent Simmons has had some good posts lately on the (lack of) dynamic nature of Swift: The Tension of Swift, A Hypothetical Responder Chain Written in Swift, The Case for Dynamic-Swift Optimism. Manton Reece also has a good take, and Daniel Jalkut is optimistic as always.

Being able to write dynamic, responder chain-like code in Swift or Objective-C (or whatever) is extremely important to me. And if I had to give one reason why it would be this: Dynamic code is less code, and less code means fewer bugs and maintenance.

Here's a simple example. Acorn's canvas class has a neat bit of code where it overrides methodSignatureForSelector:, respondsToSelector:, and forwardInvocation: so that it can either act on a given message or pass that along to the currently selected layer(s). It's 44 lines of code including comments, which I wrote once years ago.

With that in place, I can add a new menu item named "Add Layer Mask" with an action of addLayerMask: and a target of nil. Then in the layer class (or subclass if it's only specific to a bitmap or shape layer) I add a single method named addLayerMask:, and I'm pretty much done after writing the code to do the real work.

When the menu is shown via pull down (or contextual menu, etc.) the responder chain is queried, the frontmost canvas asks the currently selected layers if it responds to this method, and then things go on smoothly as you'd expect from there. Menu items are dynamically enabled or disabled, and then actions are called to perform the method when the menu is selected.

What I didn't add was a giant switch statement like we did in the bad old days of classic Mac OS programming. What I didn't add was glue code in various locations setting up targets and actions at runtime that would have to be massaged and updated whenever I changed something. I'm not checking a list of selectors and casting classes around to make the right calls.

Would a switch statement be faster? Probably. I bet you could shave off nanoseconds. But it's simply not worth it in my opinion.

Other people would disagree of course. But I try to pick my battles wisely.

Would I write dynamic code to do the actual processing of images? Of course not, only an insane person would. Would I use dynamic code for any performance critical path in my application? Again, only crazy people.

Dynamic code lets me cut down on clutter, glue code, and unnecessary boiler plate. It lets me focus on what makes Acorn great and lets me worry about what parts need to be fast and safe. I think making Swift more dynamic, where appropriate, would be a huge boon to app developers everywhere.