Publishing is Ready for Prime Time!

With the release of Shotwell 0.6 coming up, we’ve started the process of updating documentation. In addition to Shotwell’s familiar user documentation, which Allison has been diligently cranking away on to great effect, there’s also the Architecture Overview, a technical document that describes Shotwell’s underlying design. Of more interest to programmers than users, the Architecture Overview is the go-to document for understanding how all of Shotwell’s pieces fit together. Because I wrote a lot of the publishing subsystem, it fell to me to document it for the Architecture Overview. And as I was writing up my description of the publishing subsystem’s design earlier today, I realized something: publishing is ready for prime time.

What I mean by this is that if you’re a software developer and there’s a web service you’d like to publish photos to that’s not supported in Shotwell right now (SmugMug and Zooomr come to mind), then building support for it into Shotwell shouldn’t be too hard. There is one major caveat: the service you’re interested in supporting must provide a REST interface. But if that key requirement is met, you should be able to adapt the Shotwell publishing system to your needs in no time.

Adding new publishing services will get easier once we have a dynamically-loadable plug-in system in Shotwell (see ticket #182), but even today it’s straightforward. If you’re interested, start by scrolling through the “Photo Publishing” section of the Architecture Overview. Once you get a feeling for the classes the make up a typical web connector and how they interact, you’re not far from subclassing them for use with your own web service.

If you do end up building your own web connector in Shotwell, by all means send us a patch. Pending a code review, we’d love to include it in the next version of Shotwell!

Shotwell 0.5.0 released

Yorba has released Shotwell 0.5.0, a major update to our digital photo manager.  This release includes a host of new features, including:

* Photos can be tagged and organized by tag, creating a new tool for managing your photo collection
* Printing
* Photos can be published to Google’s Picasa Web Albums service
* Photo exposure date and time can be set and shifted
* Photos can be set as your desktop background directly from Shotwell
* Photo import runs in the background, making imports smoother and more fluid
* Publishing photos to web services is more responsive
* New or updated language support for French, Italian, German, Simplified Chinese, Bulgarian, Danish, Dutch, Estonian, Polish, and Portuguese.
* Other stability and performance improvements

We highly recommend that all Shotwell users upgrade.

Yorba would like to thank all of our bug testers and translators, without whom this release would not have been possible. We’d like to specially thank Martin Olsson, for his rigorous testing of Shotwell 0.5, and Kaj-Ivar van der Wijst, for his stylish redesign of the Yorba website.

We’d also like to think our friends at Red Hat for making Shotwell the default photo manager in Fedora 13 alpha!

You can download a source tarball from the Shotwell home page at:

or grab a binary for Ubuntu Karmic or Lucid via Yorba’s Launchpad PPA at:

Bowling as a metaphor for closing tickets

One of the features I’m proud of in Shotwell 0.4 is our undo/redo system.  (Kudos to Rob Powell for turning me on to the Command pattern.)  Thanks to abstractions in our primary data structures, it was easy to build a set of base Command classes that deal with these generic objects in generic ways.  That’s why our undoable crop command is only 13 lines of Vala code — and that includes the class boilerplate.

When Adam first spec’d Shotwell (wa-aaa-y back in February/March of last year), he generated a slew of tickets for features he knew we wanted eventually, but in no particular order of priority.  We knew we wanted undo but didn’t know when we’d add it (or even what would be undoable).

When I first attacked the problem in November, I pointed out that coding undo does not give you redo for free.  So, Adam created a separate redo ticket in case it had to go in later.

As it turned out, I implemented Redo alongside Undo.  I was elbow-deep in the code and I could see how to get redo implemented on all the various commands, and sometimes in generic ways.  (This is why crop’s so small.)

That was pretty satisfying, closing ticket #65 and #1001 in the same commit.  Now, some of those tickets in between aren’t for Shotwell, but certainly a lot of them are.  It felt like nailing the 7-10 split in bowling.  I’m a horrible bowler, and I only remember making that shot once.  Closing two tickets separated by 936 others is likewise satisfying.

JIm Nelson's blog + archives from Yorba Foundation's original blog