The Shape of Everything.
A website mostly about Mac stuff, written by Gus Mueller
Hibari is a Twitter client by Victoria Wang, and it supports my favorite scripting language, JSTalk:

[[JSTalk application:'Hibari'] tweet:'Hello World!'];
There are more examples in its advanced section of the user guide.
As we're raising Madeline, who is now a little over six weeks old, I'm finding that in a way it feels like I'm trying to ship some software. Frustration, happiness, OMG we're sooooo close to getting her to sleep past four hours (aka, we're soooooo close to making this usable).

But the most familiar feeling that I'm getting between the two experiences is this: each day is a step forward, and in the end work and patience is going to win the day.
Apple just came out with a neat app for the Mac today named iBooks Author. It does exactly what its title suggests, and that is to help you put together books for the iOS iBooks app. It's neat and it's free! And in a way, it feels like Keynote and Pages just had a kid.

A lot of people (including myself) were hoping Apple would come out with an ePub authoring tool today. The hope was there would finally be a usable tool for authoring and generating ePub files. Those ePub files could be uploaded to Apple's iBook Store, Amazon Kindle, or even your own store for sale. Or even make them downloadable off your website for free. Read them on your Kindle, iPad, iPhone, etc.


Random Thought #1:
I guess when I see it laid out like that, it's obvious why iBooks Author has the restrictions it does. Why make a tool which could then be used to make great products to be used on competitor's platforms?


Random Thought #2:
Apple releasing iBooks Author makes it easier for indie devs to jump into the arena now. Apple has shown us what their vision is, and if you don't like it- tough. You can use another app.

And that means indie devs can now make that app without being worried that Apple will pull the rug out from under them. (And believe me- the indie guys who would like to do this frequently worry about such things).


Random Thought #3:
It's not scriptable in any meaningful way. If you want to drive it with AppleScript to make your iBook, you're out of luck.


Bonus Crazy Thought:
I really hope Xcode doesn't ship with the same restrictions some day. "Binaries created through Xcode can only be sold through the App Store, and you can't charge more than $15.99".

I don't see it happening, but at the same time such a move wouldn't surprise me. They wrote Xcode after all, it's free, and Apple can do what it wants with it. Go somewhere else if you don't agree.
Brett Terpstra: Running a website with VoodooPad Pro.

"VoodooPad is a powerful note-collecting, wikifying, productivity machine. With the right scripts, you can make just about anything happen, at least within the realm of text, images and web pages. VoodooPad has a built in web server, and can export your notebook as a full website, with links intact. I like the web export the best, because it gives me a crazy amount of control over the output. To that end, I built a website using nothing but VoodooPad, hopped up on some custom scripts."

Brett shows how to combine Python (for multi markdown support), VP's Event Scripts (to make a site map), a custom web export template, and post processing scripts to create the exact website he wants.
It has been a while since I've written about what Flying Meat is up to, so here's a little look back at 2011, a peek at what might be in store for 2012, and general things I've been thinking about lately.

Acorn
First up of course is the release of our updated image editor, Acorn 3. The attention Acorn 3 got was unprecedented for Flying Meat. Never before has our web server been so challenged to keep up with requests until that moment. It was extremely gratifying to see so many people start using Acorn so seriously, and ditching their current image editing software for it.

Layer styles, multi-stop gradients, quickmask, instant alpha, much improved PSD support (which I wrote myself from the ground up), and more. And things just kept on getting better. Acorn is up to version 3.2 now with big speed improvements when working with 15MP+ images, bezier curve improvements, color profile support, native 10.7 goodies like auto-save, versions, and full screen support.

And of course, more updates and improvements will be coming. I absolutely love working on Acorn; there are just so many different aspects to it that it never gets boring to work on.


VoodooPad
Work on VoodooPad 5 has been going on for quite some time now, though it is taking a lot longer to finish up than I had hoped. I sure it'll be worth it in the end. Without going into too much detail, I'm going to talk about one of my favorite big new features:

I killed WebDAV syncing in VoodooPad 5, and replaced it with nothing and it is awesome now.

Ok, that's a bit dramatic. I did replace the sync code with something else but first let me explain quickly why WebDAV syncing is gone in VP5. Apple is killing/killed MobileMe, and with it they killed the WebDAV server which VoodooPad syncing was designed to work with. That's why I've ripped out the WebDAV code.

I should have seen this coming. Honestly, it's not like I didn't know that iTools wait I mean .Mac oops no I meant MobileMe wait it's called iCloud now wouldn't be long for this world. I've come to the conclusion that relying on Apple for any sort of syncing solution or general hosting of your data is probably a bad idea. I really hope I'm wrong, but at least this explains one of the reasons I didn't rush out and add support for iCloud right away in VoodooPad. I want iCloud to succeed. I just don't want to devote a bunch of time building on a syncing solution that's going to be gone shortly.

VoodooPad was born January 16th, 2003. That means that it'll be 9 years old in a few weeks. There are still people out there happily using version 2.0 which came out in 2004. So that means I'm going to need a syncing solution that will be around for at least 5 years. Who can do that? What's the solution?

Well, the solution I've come up with is to ignore syncing and instead redesign VoodooPad's document file format so that it can survive a 3rd party syncing app changing things behind it's back when VoodooPad is running. And I'm so much happier for it now, and I think my customers will be too.

Do you want to put your document in a Dropbox folder and have it sync to multiple computers at the same time, without having to remember to close it? Oh, and have a page automatically update in front of your eyes as it's edited on another machine? Sure, why not? What about if you put it in a source control repository which is shared among multiple people? Can it handle that now? Yes! And VP5 can even tell you which machine a page was last updated on, and by whom.

It's pretty rad. I think stepping back and looking at the syncing problem a different way has been really good for VoodooPad 5. And of course these changes aren't limited to a specific syncing solution. If you want to use your own home-grown app, it'll probably work with VoodooPad 5. All it needs to do is look at a tree of files and make sure the most recently edited one is pushed out to the other machines. This obviously meshes with some of the things that iCloud does as well, but that code hasn't been written yet so I can't make promises at this time.

Kirstin (my wife) and I have been writing the documentation for VP5 in VoodooPad itself. Which used to be a bit of a challenge before these syncing / file format changes. Now we just put a VP document inside a shared Dropbox folder, and edit away. It's a special kind of magic, and I think it'll really open up VoodooPad to a bunch of new users.



FlySketch

FlySketch gets an honorable mention, if only because of a very heated discussion with an App Store representative when I was trying to push an update out.

There's not much to FlySketch. It does what it does and it does it pretty well. I'm happy it still makes a tiny bit of money, but I think the market for this type of utility is dwindling in the face of free alternatives.


JSTalk

On its website I describe JSTalk as "a scripting language for Mac OS X built on top of JavaScript, with a bridge to Apple's Cocoa libraries. You can use it to communicate with other applications just like AppleScript does". And it still does that, but where I've really found it useful this past year is in driving automated testing and building prototypes.

I was a guest lecturer this past summer at UW's iOS and Mac App Dev class, where I talked about automated testing and how I use JSTalk. At some point the instructor, Chris Parrish, mentioned that JSTalk was my "secret sauce". At the time I thought it was kind of funny, but the more I think about it the more I think he might be right. It's amazing how reliant I've become on a tool that I made for a completely different reason than I ended up using it for.

I also like to describe JSTalk as a research project of mine. Developing it has been a great way to explore the Objective-C runtime, and how the stack works (JSTalk uses libffi for parts of the bridge). I've also had a separate branch for a while now where I've been slowly rewriting the bridge that it uses. If I ever get serious about it and finish it, I think I might release it under a different name; something like "CocoaScript" since that makes more sense.


Mac App Store

I love the App Store both as a customer and for Flying Meat's bottom line. I worry about the future though, specifically with sandboxing and upgrades.

I really wish Apple had required sandboxing for applications on day 1 of the App Store. As it is now, I can see that a bunch of applications are never going to be able to be updated or if they are, some of their functionality will have to be stripped out. Acorn isn't affected very much by sandboxing, but VoodooPad certainly is. We'll just have to wait and see what Apple can do to help us out.

My other worry is on paid upgrades, or the lack of having them in the App Store. There seems to be an implicit assumption that by purchasing something in the App Store, all upgrades will be free in the future. But in the long term this isn't a sustainable way to run a business, or at least the type of business that I want Flying Meat to be. I want to write deep, usable applications that have a shelf life of more than a few months. It can take years for an update to come out (hello VoodooPad 5!) and while the warm fuzzy feeling when folks love your application more is great, it doesn't really feel the same as being able to make a living off your work.

Historically for Flying Meat (and most indie Mac companies) the majority of revenue comes in through upgrades and new releases. The App Store doesn't provide this path, so you have to publish a brand new app to have people pay for your work. Recently Adobe took this route with the Elements 8 to 9 upgrade and as far as I can tell, people didn't freak out too much. Time will tell what the best solution is, but for now I just have to remember to stay flexible on this front.


Madeline Kay

On December 9th at 9:41 am, the entire staff of Flying Meat (aka, Kirstin and I) were proud to become parents of the world's newest Mueller. Or as I tweeted a little while later, mueller++. (And I believe this makes Flying Meat an official "Mom and Pop Shop" now).

Being a parent is an interesting and awesome experience so far. The last three weeks seems like one very long night, full of energy and excitement and sleep deprivation.

She's a great kid, and I explain to her patiently about what copy on write is all about, the benefits of a compiled vs. interpreted vs. dynamic language, and I read her a little bit of Advanced Mac OS X Programming every day, but honestly I think she doesn't quite understand pointers yet. Which is fine, because she's too young to get a worker's permit anyway.
Oleg Andreev: Gitbox is 1 year old.

"I was amazed that something I designed, wrote, productized and marketed was actually appreciated by consumers. I even appreciate that keygens were released within a week after each new version release."

I've tried a handful of Git clients, and Gitbox is my favorite. And it's currently on sale for a quarter of the usual price. You'd be crazy not to at least try the demo.
The fine folks at Rogue Amoeba have a new app out called Piezo:

"Using Piezo, you can record from almost any app on your Mac. Whether it’s web streams in Safari or music from services like Spotify and Rdio, you can record it with Piezo. Just select the desired source and press record to capture its audio."

You can read more about Piezo on their blog as well. Piezo looks awesome, and it's even in the App Store!
Devin Coldewey: In Defense of the Stylus.

"With a stylus you can make quick and precise movements of a number of sizes. Ever wonder why nobody writes longhand with their finger? By amplifying small but precise movements that can be done rapidly, handwriting was made possible in the first place, as well as things like detailed drawings and paintings. Even if you’re drawing in the dirt, you do it with a stick."
In my post yesterday, I showed some icons I made in Acorn and offered a download of the source file. Today I thought I could explain how two of the icons were made, since just looking at some pixels doesn't really show everything. I'm using Acorn 3.2 in this tutorial. See yesterday's post on how to grab version 3.2 if you'd like to follow along.

If you're following along in Acorn, make sure to uncheck the "Auto-select layers" option under the move tool palette. Also make sure that "Snap to pixels" is turned on in the shape palette. This will make life easier for the purposes of this demo.

For the first example I'm going to use the pause icon. This is a relatively simple icon. Below you can see two views of it, one at actual size and one blown up to 800%. You can use the shortcut keys command-1 or command-4 to switch between the two zoom levels easily.

pause icon

So what is really shown here? Well, first go ahead and chop off half the image since it's really just one element multiplied by two:

pause icon

And then after that, what is left? It looks like 40 carefully placed pixels. But it's not. It's really just two vector shapes on a shape layer.

pause icon

On the left there is a 1x8 rectangle, which has a gradient fill from white with 60% opacity, down to white with 0% opacity. The stroke is set to 0px. Also note that I've changed the background color since white on white turns out to not be very interesting.

Note: check out Acorn's documentation on the gradient tool for making your own custom gradients.

pause icon

On the right is a 2x8 rectangle, which also has a gradient fill of 76% white down to 61% white. Both ends of the gradient are 100% opaque. Why 76% and 61%? No reason, it's just what I picked out when moving some sliders around. You'll also notice that it has a 1 pixel stroke of some sort of dark blueish green color. This color is used in Acorn's layers list selection highlight, in case you are curious.

And finally - what about the corners? How were those made? It's just a 1 pixel corner radius.

pause rect palette

Acorn's shape palette for the second shape.

And that's it. Put the highlight on top of the pause icon, copy and paste it, and tada:

pause icon

A total of four shape elements to make up the icon.

...

Ok, so picking the pause button is a bit easy. How about a more complex example, like the little cloud icon:

cloud

The cloud icon is a collection of 8 different shapes. Two round rectangles, four ovals, and two bezier paths. You could do it with just 3 complex bezier shapes, but I found it easier to break it up into simple shapes.

Start with the general shape of things. If you look closely, it's a round rectangle (with a 2 pixel radius) on the bottom, and two ovals above that:

cloud construction

Same funky blue color on the edges as the pause button and a 25% white fill.

Since Acorn 3.2 doesn't have a "unite" tool to combine multiple vector shapes into one, you will use a little trick to make a single smooth gradient over the cloud.

Select the three shapes, and choose the Layer ▸ New Layer with Selection menu item. You could have also chosen the Duplicate Layer menu item, but then you wouldn't have been exposed to the awesome New Layer with Selection command.

You'll now have two layers of exactly the same thing.

Note: You might have noticed that the borders got a bit darker when you made a copy of the shapes. Why? The edges of the shapes are antialiased making them slightly transparent in this case. When the edges are drawn on top of each other there will be less combined transparency, making the edges look darker. Math!

Moving on. Hopefully you saved your gradient from the previous shape. If you did not, go back and save it (as described in the docs), and then apply it to your copied shapes:

cloud construction

Things currently look decidedly unawesome. What's going on? Why duplicate this guy? You can apply a gradient smoothly over multiple shapes, but the strokes will get in the way. Make sure those shapes are selected, visit the shape palette, and turn the strokes off by setting the stroke value to 0px.

Note: Selections are saved on the undo stack. If you accidentally deselect a group of shapes that you didn't mean to, just hit command-z to undo the deselection.

cloud construction

Whoa, things suddenly look much better! On the left is the layer without any selections, and on the right is the layer with the 3 shapes selected. Since the gradient goes smoothly across all 3 shapes, you'd think it was a single shape.

It's time to add some highlights to the clouds.

Hit the 'd' button on your keyboard, which will reset your colors to black and white, and press 'x' to swap them. White will be used for the highlights. Next, choose the Layer ▸ New Shape Layer menu item. This allows the highlights to be drawn on their own layer. Hit the 'p' button which will select the Pen tool which helps make bezier curves. Finally, make sure you've got the stroke set to 1px and the fill unchecked.

Then just add a little curve to the top like this:

cloud construction

Ok, that's a little unfair. Making precise bezier curves is tricky business (and that's a whole other tutorial). I did however create a quick little movie showing that exact curve being created: Cloud Highlights.mov. (When you see the cursor inverted in the movie, that means the mouse is pressed).

Here's the play by play:

1) Click and drag out your beginning point, moving the handle horizontally to the left. This will define the direction your curve will go out. Release the mouse when you are done.
2) Move the mouse (and notice how you'll get a little preview of the curve) down and to the left to where you want to end the highlight.
3) Double click to end the curve.
4) If you're not happy with the positioning, switch to the move tool (the 'v' key) and you can select individual points, and use the keyboard to move them around.

Piece of cake.

Next make the second highlight, which is down and to the right. To make it easier this time select the first highlight with the move tool, holding down the option key, and dragging away from it. This will make a copy of the first highlight. Adjust the endpoints of the curve to make it a little smaller.

And last, but not least- hit the '5' button on your keyboard. This is a shortcut to set the opacity of the current layer to 50%. If you hit '5' twice in rapid succession, the layer will turn to 55% opacity. Hit '3' and it'll turn to 30% opacity. You get the idea. (Since you don't have a 10 key, pressing '0' will change it to 100% opaque, which is the default for new layers).

cloud construction

And there's the final cloud. You can download the acorn file for this guy right here.

Now, just looking at these shapes on white backgrounds isn't all that impressive. Often times you'll want to put your icons in the environment they are going to eventually end up in to get a real feel for them. Since I just did these for fun, they aren't meant to end up anywhere specific. But, here's how you can add some background gradients or layer styles to liven things up a bit:

cloud construction

Use a radial gradient as the background.

cloud construction

Make a layer style with a red drop shadow to make it spooky.

cloud construction

Take all your hard work and make it pointless with a monotone layer style, but add a white drop shadow and a dark inner shadow layer style at the same time, to give it an embossed look.

cloud construction

Or just let them be.
I've submitted Acorn 3.2 to the App Store, so the ball is currently in Apple's court for getting that update out. If you bought Acorn directly from FM (or maybe you're just impatient) you can download it from the latest builds page.



Earlier today I was working out some bugs with the vector tools, and ended up making these little icons in Acorn (version 3.2):

tiny icons


Ovals, rects, bezier paths, and gradient fills. It's fun what you can do with some simple vector tools. Here's the original acorn file if you'd like to peek at it.
I've put up an official beta of Acorn 3.2 on the latest builds page. This release is mostly about bug fixes, including some crashers that have been plaguing Acorn for a while now (check out the whole list here).

Acorn 3.2 is also quite a bit faster if you're working with big images (and by big, I mean 10 megapixels or more). In my tests I'm finding these improvements:

Cropping is up to 2.5x faster.
Applying filters is up to 9x faster.
Performing multiple rotates in a row is up to 6x faster.
Auto Levels is 8x faster.

And the larger your image is, the bigger the difference in performance you'll see.

For the curious, I tested on 3 machines- a 2006 Mac Pro (MacPro2,1), 2011 11" MBA (MacBookAir4,1), and a 2010 iMac (iMac10,1).

I really want to get this out soon, so make sure to check it out and send any bugs you encounter to support@flyingmeat.com.
Tom Green on Flash to HTML5:

'''Rather than become an Adobe apologist – which they sort of expected – I told them . “Welcome to your new careers. If you can’t deal with this sort of change on a regular basis … there’s the door. Go get a refund and go drive a beer truck.” It was a great opportunity for me to review all that had been going on, what happened,and what it means for them.

The thrust was technology changes and you either embrace change or get out of the way. Change is a fact of life in our business and, as a teacher, it is a fact of life for me.'''

I shouldn't have to mention it, but I will. This obviously applies to so much more than Flash.