Archive for July, 2007

RapidAlbum 1.0B5

Thursday, July 19th, 2007

I just put RapidAlbum 1.0B5 up for download

This is primarily a bug-fix release, with two really stupid bugs fixed (and quite a few less stupid ones too).

  • RapidAlbum now generates unstyled photo pages correctly. The documentation for the RapidWeaver API was, um, non-existant for this stuff and I goofed in my interpretation of it. The end result was that if a photo page was a couple of levels deep in the page hierarchy, the css includes and breadcrumbs were AFU. It now does the right thing.

  • My brain took a holiday and I managed to remove a very important line of code in the image scaler setup which meant that photo pages that relied on the scaler would get thumbnail sized images. Doh! Fixed.

There’s also a bunch of small bugfixes as I start to tackle the mountain of small, but annoying, bugs I know about in RapidAlbum…

Workflow 3.0

Friday, July 13th, 2007


At the start of 2006, I posted about the workflow I was using for processing images. As you can imagine, it’s changed significantly over the last 18 months as tools like Lightroom, Aperture, Bridge and Photoshop CS3 have appeared. As folks still seem to look at the Workflow 2.0 post I wrote, I thought it was time to update with what I was currently doing.


RapidAlbum 1.0B4

Wednesday, July 11th, 2007

I just pushed RapidAlbum 1.0B4 up for download.

RapidAlbum 1.0B4

The big addition for this beta release is the ability to generate an RSS2.0 feed from an album. This is the first step to building an integrated photo album/blog tool, which would be really very nice. Next step? Smart albums that know how to aggregate other albums on the site based on some selection criteria…

Subclassing NSMutableDictionary

Wednesday, July 11th, 2007

Although I haven’t posted much, if anything, on Cocoa programming I thought I’d post a bit more over the next few months. I’ve been coding in Cocoa for quite a few years now and it is, by far, the most productive application coding environment I’ve ever worked in. Unfortunately, the scope of Cocoa is huge and, if it wasn’t for other Cocoa programmers posting hints, notes and tips, I’d still be scratching my head about topics like drag-and-drop weirdness with NSTokenField bindings (more on this in a later post).

So this is to try to repay the favor to other coders who’ve struggled with the same things I have. And where better to start than one of the uglier problems that many programmers run in to; subclassing class clusters. The Cocoa designers, in their infinite wisdom, decided to make a few of the core Cocoa classes based on a class cluster and not concrete. This makes them awkward to try to subclass as you have to work out all of the primitive methods and provide support for them in the subclass.

Most folks end up giving up in disgust and wrapping things like NSMutableDictionary. However, once in a while, you really, really, really need to subclass it. In my case, I wanted a basic class that I could use in RapidAlbum that would call a delegate when an object in the dictionary was added or changed (so that I could flag a page export). However, I really wanted a dictionary interface as I wanted to be able to leverage all the existing NSDictionary methods (like dictionaryFromDictionary:) as the whole point is to avoid writing more code.

The trick here is to catch setObject:forKey: and removeObject:forKey: and add a delegate call. Note that if you could easily register a wildcard key-value observer for a container class that tracked all key/object changes in the class, then this would be unnecessary. That’s an expletive-laden rant for another day.

There’s a few pointers out there as to how to subclass NSMutableDictionary but nothing that really covers all of it. So, without further ado, here’s the approach I took.


RapidAlbum 1.0B3

Tuesday, July 3rd, 2007

I just pushed RapidAlbum 1.0B3 up for download. I did push up the 1.0B2 release yesterday but I spotted a few stupid bugs in it last night whilst I was updating my own website and decided it’d make more sense to cut a new release.

As it’s often hard to get a feel for what’s possible with a plugin, especially one that’s as essentially customizable as RapidAlbum, I’ve also put a page of examples up to illustrate the sort of layout you can achieve.