The Shape of Everything
A website mostly about Mac stuff, written by Gus Mueller
Jul 30, 2014

Acorn 4.5 is out, so start your update engines and grab the new bits.

There's nothing earth shattering about this release, but I'm irrationally proud of it and I think it basically comes down to two new things in it that I really like.

The selection marquee has been tweaked a bit, and rotates through various colors and draws smoother making it 200% more awesome. I love it.

The other one is when you paste in dimensions such as "1256x408" into the width field of the new image window, Acorn will recognize that you probably want an image with a height of 408, and will automatically set that value for you. It's a small time saver, but it makes using Acorn even more pleasant.

There's lots of other stuff in Acorn 4.5, including detailed release notes.

Jul 28, 2014

There's been a lot of talk lately about how it's harder for folks to go and stay indie, or even make any money on the app store anymore (see Brent's post, Jared Sinclair's, Luc's post, various folks leaving indie life for , etc - I know you've seen them).

I'm in my tenth year as a full time indie dev (so I can claim to have a bit of perspective). And I think that yes, it is much harder these days to go indie.

Why though?

I think it comes down to a handful of reasons, but the major one is that we have more potential customers than ever, but we also have more developers than ever.

This creates an environment where the majority of customers are using price as a filter for which apps to choose from. This in turn fuels a race to the bottom, and then it never comes up from there.

It worked for a time. If you can quadruple the number of purchases by halving your price- well, that's obviously more money. But when you start out at $.99, where are you left to go? Customers get used to it, and then expect it. They can point to developers who have gone this route and are rolling in the dough. It's an easy sell. But that's a lottery game and those huge hits are generally an anomaly.

Sales are now fueled by one day release surges, and then it tapers off into nothing.

What can be done to fix this?

I'm really not sure. But I can tell you what I've been doing, and what I will continue doing going forward.

My basic strategy is to make a useful quality product, and sell it at a fair and sustainable price. If your app is quality, it will find customers. And then those customers will tell their friends, and the news sites will notice it. And since you're charging a fair price a virtuous circle will form.

If you are just starting out, this might take years (maybe even exactly 1,068 days). It's a long road of hard work, pain, joy, and just showing up every day. Eventually you will get lucky and gain some traction- but it's not luck alone that is the key to success. You need to recognize opportunities as they come along and grab them. And just as equally important- you need to recognize time sinks and stupid ideas that come along as well. There will be more of the latter.

Tyler Hall has a wonderful post today: A Candid Look at the Financial Side of Building Mac Apps on Your Own:

"Well, for starters, it takes a lot of patience. My sales didn’t appear overnight. It took five years for me to gain semi-stable financial independence. That’s something that I worry most iOS developers with indie dreams don’t appreciate. I’m not singling out Jared, but I think the “gold rush” mentality of the App Store leads many people to expect either instant success or epic failure. They lose sight that there might be a middle ground where you can grow your business slowly over time into something substantial."

I've always tried to set my expectations appropriately. I've looked towards those who came before me in indie-land and attempted to learn from them. I'm happy with Flying Meat being a mom and pop indie shop, and I want to keep it small. I try to make my customers happy within reasonable bounds, and they in turn support my for efforts. It takes time, patience, and lots of hard work.

This has worked so far, but I always have a plan B and C the back of my head if my ideas don't pan out. Expect failure, but don't let it get you down. Learn from it, and most importantly- enjoy it. Your company might grow and gain more customers, but it never gets easier. But you do tend to get better as time goes on.

Jul 8, 2014

The Acorn 4.5 betas have been going on for a while, and I'm pretty close to pushing out a final release. So now is a great time for some final testing and a chance to play with some new features before your neighbors.

You can grab the new bits on the Acorn latest builds page, and if you find any problems - won't you please let us know by sending an email to

So what's new? Well, you can read the full release notes for all the details, but the highlights include new presets, new AppleScript commands, full screen for Raw import, web export improvements, precision mode for the eraser, new shortcuts for common things, and Acorn can now open up .pict files. Yes, that last one was a real requested feature. I'm here to please.

There's also a handful of changes, as well as the usual list of bug fixes. And speaking of bug fixes- Project Oak is at 48% of the way there. I might not reach 100% by 2015, but I'm steadily making progress.

Jun 30, 2014

Tony Schwartz in The New York Times: Sleep as a Competitive Advantage

"More than ever, I’m convinced that sufficient sleep is a uniquely powerful fuel for sustainable performance. Among all the behavioral changes we help our clients make in their lives, none have a greater impact on how they feel and perform than getting more sleep. It’s also true that the greater the performance demand, the greater the need for rest and renewal. Instead, most of us do just the opposite: as demand increases, we simply hunker down, push harder, for longer."

I have handful of "Incredibly Obvious Software Development Secrets" (hat tip to Steve Kalkwarf), and getting enough quality sleep is right there at the top of the list. I've also found that the quality of the mattress you sleep on makes a huge difference, so be sure to get the best mattress you can afford.

May 15, 2014

It's time for another progress report.

Acorn Stuff
Acorn 4.4 betas are up. Not too much in the way of hot new features, but there's some good changes and fixes in there. Live updating of blend modes as you scroll through the list is awesome, and the same trick now works with the font popup for text. It's now super easy to quickly preview what new fonts would look like with your text.

I expect to ship this version soon, so make sure to write us ( if you find anything wrong.

I've also been working on a new compositing engine for Acorn. I was originally going to ship it in 4.4 but it still has some kinks in it to work out so it's going to wait until 4.5 or maybe later. It's showing lots of promise though. If you have lots of layer styles and/or layers, drawing is crazy faster. The basic trick behind the new code is to do some pretty aggressive caching. However, I might have pushed things to be a little too aggressive.

Project Oak now stands at 35% complete. This is lower than the last time I gave an update. Why's that? I've filed a bunch of bugs against the new compositing engine but Acorn has also gotten an influx of new users thanks to the recent sale (see below), and along with that are a lot more eyeballs scrutinizing Acorn. And combining that with the amount of time I've had to take off when moving - well, it was bound to slip backwards at some point.

Flying Meat's 11 1/2 Anniversary Sale
A month or so ago we put Acorn on sale for $14.99 in celebration of FM being around for over 4197 days. The super sale is over now though, but if you were signed up for our newsletter you would have known right away!

My original plan was to sell it at this price for two days. Kirstin convinced me to push it out 14 days instead, to give people more time to try it. So that's what we did. Acorn is still on sale right now, down to $29.99 from $49.99, which is our normal upgrade price. I'm not sure how long I'll keep it at this price, but it's sticking there for now.

WWDC is coming
Are you going to be in SF for Apple's annual developer conference? So am I! If you see me, make sure to say hi. And free FM stickers for anyone sporting a Flying Meat t-shirt.

Hello again from Mukilteo, WA
We're done moving and the old house sold. Most everything is unpacked but we still have lots of work to do. It stalled work a bit, but that was expected. Onward.

Mar 26, 2014

Wow, over a month since the last progress report. I'm a slacker!

Hello from Mukilteo, WA
OK, I haven't been slacking, we've actually been in the process of purchasing and then moving into a new home. We hope to put the old house on the market real soon now.

Flying Meat's new home base (where we sleep that is) has relocated from South Everett to Mukilteo, WA.

We've still got the office in downtown Everett, and the commute is the same (hurray). But what we get from the move is a nice view and a good school for the little girl to walk to when she gets older.

But what about the pizza oven‽

Everyone I've told seems very concerned about this. I'm sad to announce that Dante (my pizza oven) is staying behind to be loved by the new owners. I'm afraid that trying to move it would destroy it (it weighs over 2 tons) and besides, this is a great excuse to get another one later on this year (I've got some ideas for improvements). In the meantime it's back to indoor oven cooking, and I'm sure I'll be getting more use out of Marvin as well.

Check your QuickLook plugins
I have managed to get a little bit of work done though, mostly in the way of bug fixes for Acorn. One interesting one was in Acorn's QuickLook plugin.

This particular bug came to me when a customer was having big stalls (and sometimes fails) when loading previews of Acorn via QuickLook. The customer was working with 18mp / 500 megabyte Acorn files, and they were taking forever to load. Acorn saves a composite of all the layers in an image as part of it's file format (for quick rendering via QuickLook), so I was surprised that it wasn't speedy. But when profiling the plugin, I noticed that there was a lot of time spent flushing an image in a PDF context. After a bit of snooping I discovered when drawing in a QuickLook context, you can ask the system to make a PDF context or a bitmap context depending on your needs.

Apparently, I made a bad decision a long time ago.

Acorn was using a PDF context, which isn't especially great for bitmap formats (which is what the preview is stored as). I changed things around so that QuickLook made a bitmap context for rendering (by one of the parameters in QLPreviewRequestCreateContext) and this made things go way faster.

I'm not sure why I originally chose the PDF context. Acorn used to be vector only, so it's possible that's why I made PDF context decision many years ago. Anyway— things are better for the next release of Acorn (which will be version 4.4. Grab a latest build if you'd like to play with it).

I also took the opportunity to make one other change for previews— and that was adding a thumbnail composite to .acorn files (if the image is above 256x256 pixels). In the case of RAW files (which are usually huge), it was pretty dumb for Acorn to load up a 18MP image to render into a 128x128 square. So now the thumbnails show up super fast if there's the thumbnail cache. This is only for files saved in Acorn 4.4, otherwise it'll fall back to the full image composite.

FMDB stuff
In the 2014.02.15 progress report, I mentioned that I needed to bring back some wait loops for handing locks on the database.

I wasn't really looking forward to this changes since it added complexity to FMDB that I honestly thought SQLite should be doing for me. Then I discovered sqlite3_busy_handler, which is a built in function to SQLite, and which lets me do away with the retry loops.


This new code is on a branch ("busyloopback") and I'll be bringing it over to mainline after I've used it for a while in Acorn.

Cocoa Script
I put up a dev build of the current sources here: Eventually I'll do things like setup a real website and such - but I've got boxes to unpack and things to fix right now.

Feb 25, 2014

Another week or so, another post on what I've been up to.

Acorn 4.3 is out
We pushed out Acorn 4.3 yesterday for direct customers, and then 4.3.1 a few hours after that. (App Store versions will be coming soon).

Acorn 4.3 has a bunch of bug fixes, and new RAW import features (along with speed improvements). The release notes are available as usual.

Why so quick release of 4.3.1? I belatedly noticed a regression when fixing a brush bug. If you used a tablet and had pressure sensitivity turned off, the first dab of your brush stroke would be clipped incorrectly. This made for a funky looking brush stroke.

It was a super easy low risk fix, so I pushed it out quickly.

Work on Acorn 4.4 continues, and I'll begin pushing up betas of that soon enough. I managed to squash some memory leaks when driving Acorn with Cocoa Script, as well as some misc bug fixes (Project Oak now stands at 42% done). No new big features yet.

I also played around with Cocoa Script "shaders" for shape graphics in Acorn. This won't ship in 4.4 (or maybe ever?), but it was fun to code up and might be something awesome some day. How it works is a little hard to explain, but I'll try. Basically, instead of a rectangle having just a stroke and a fill when it draws, it will call a snippet of Cocoa Script code in place of the normal drawing routines. That snippet of code then has access to a bunch of libraries, and can do whatever it wants in the context it is drawing into. The following example draws a rectangle with a gradient, draws a border around it, and also draws a lighter border on the inside of the shape.

Click to embiggen.

Normally you'd need at least two different shapes in Acorn to draw something like this. This is future stuff certainly, and probably doesn't even make sense in Acorn. But the programmer in me thinks it is kind of neat.

FMDB Stuff
Guilherme Mogames wrote a tutorial for using FMDB with SQLCipher. This comes up every once in a while on the FMDB mailing list, so it's nice to see someone publish this.

Other Stuff
I've been playing with Nanoblocks recently. They are essentially teeny tiny legos- so small in fact that it's sometimes wise to use needle nose pliers to work with them. It's a nice relaxing change from coding all day. It's also nice to see Ohio Art is still around.

My new Mac Pro finally arrived as! What a game changer this is— everything is buttery smooth and fast, and being able to run OS X in VMware without any annoying lags is worth it alone. It makes testing Acorn on clean builds of 10.8 and 10.9 pain free. I love it, and recommend that everyone get their own. Maybe if it becomes mass market, that'll drive the price down?


Anyway, till next time.

Feb 17, 2014

Worlds development blog ▸ Drawing as a programmer:

"I started sketching again. At first I did it after job hours, in my spare time, but then I noticed that, after acquiring some basic knack, I can draw simple sketches quickly, so I tried to have drawing breaks when I got stuck with a new coding problem in my head. And to my surprise, my productivity rose."

See, I'm not crazy (about this anyway).

Feb 15, 2014

Acorn Stuff
Acorn 4.3 has entered beta status. You can download it from the latest builds page, and of course read the release notes.

There's some good new features (mostly RAW import stuff), as well as a bunch of bug fixes and a few minor changes.

I've also already started on 4.4, which is going to focus mostly on bug fixes as well (hello Project Oak!). I'm also hoping to get in some performance improvements that I originally wanted to do for 4.2.

Speaking of Project Oak— I'm 42% of the way there. I got to close a bunch of bugs since the last report, mostly because some bugs had already been fixed but I hadn't ever closed the issue. And there were a few things that were categorized as bugs, but were really feature requests.

Which brings up an interesting question- what is a bug? From Acorn's POV, a bug is something that is supposed to work but doesn't. Things like drawing artifacts showing up when you move a bezier curve, or maybe merging layers causing things to be flipped around. Those are bugs. But things like "doesn't open PSD CMKY layers" or "can't left align multiple bitmap layers" aren't.

Sure, there are things that Acorn really should be doing, but that's not a bug. A bug is something that doesn't work correctly.

Other Acorn Stuff
Wim Lewis from the OmniGroup started a little project for converting Acorn files to SVG. Which is awesome, and hopefully I'll use that someday to kickstart SVG support directly in Acorn.

When I discovered that SQLite had its own code path for timing out when the database is busy, I ripped out FMDB's version and deleted the while loops that would make things pause and retry the query. Which was a mistake— FMDB still needs the loop to retry. So I'm working on bringing that back.

I had a little internal crisis with this though. How does FMDB break out of that loop if the database is perpetually locked (such as from another process)? Well, I think I'll end up adding a timeout variable which will be an NSTimeInterval, and check that in the loop for breaking out.

And then what about NSError? Yea, that's going to have to be done as well- you can read about ideas for it in a GitHub thread.

I have no idea what this API is going to look like. I just know that I don't want it to be ugly, and that's going to be hard to do. This will all probably be done in a version 3.0 (and it will most likely be backwards compatible as well).

A Random Acorn Tip
Did you know you can enable Acorn's precision brush mode (aka, 3x slowdown in mouse movement) temporary by clicking down on the mouse, and then pressing the space bar immediately after that? It's pretty awesome if you need precise brush strokes with the trackpad or mouse.

Feb 14, 2014

busblog: if uber wanted to make a commercial they shoulda filmed tonight

"it was 11pm and i was basically home and i had made $50 and my car smelled of young swedish college girls."

I've been a fan of Tony Pierce since forever, but since he's been making a little bit of money on the side as an Uber driver… well I've been loving his blog two million and one point four percent more.