Older blog entries for Pizza (starting at number 102)

One patch accepted, one more to go..

The fine folks behind Gutenprint accepted my patch to support the Canon Selphy ES series, but thanks to a boneheaded mistake on my part, what got committed didn't actually work. So there's a fixup patch pending.

The real fun, however, is the need to write a custom CUPS backend to properly spool data to the printer. I have a little helper app (es_print_assist.c) that batches the writes properly, but it dumbly waits instead of properly polling the printer for its status. CUPS is a lot more complicated to figure out than gutenprint, so further progress will be much slower.

Meanwhile, Photo Organizer 2.35 is coming along nicely; I'm at the point where I have to decide whether to go into -rc stabilization now, and save the next round of invasive changes for 2.36, or go ahead and make one or more of those changes now.

In particular, I want to be able to have PO auto-generate full-resolution JPEGs from the source RAW images. On the surface this is straightforward, but I want to implement this properly, by genericizing the "generate a down-scaled image and apply this set of transforms to it" code. This way additional sizes would be trivially easy to add, as would some of the changes I have in mind to make watermarking much more useful. Progress has been slow, but I'm almost done getting the low-level bits in place.

Anyway. Tons of stuff to do, never enough time..

Syndicated 2007-11-15 18:25:43 from Solomon Peachy

11 Nov 2007 (updated 11 Nov 2007 at 17:53 UTC) »

The joy of photo printers (and free software)

For some time now, I've wanted to pick up a compact photo printer to take with me on assignment, with the blessings of those I am taking photographs for. A little under two weeks ago, I finally did, purchasing a Canon SELPHY ES1.

It's a sweet little printer, using the old technique of dye-sublimation to create true continuious tone prints, rather than glorified halftoning that even the best inkjet printers use. Not only do the prints come out looking indistinguishable from what a photo lab would produce -- they're water- and smudge-proof.

I did my homework; apparently the majority of Canon's dyesub printers were supprted under Linux via the gutenprint drivers, but not the ES1 specifically. No big deal, it should just work. Even in the absence of direct Linux printing, I could print from the camera directly or shove a memory card into the printer. All in all, things should Just Work.

They didn't.

My first test involved taking a few converted-from-RAW JPEG images out of my archives, copying them to a CF card, and trying to print that. I got a rather crass Incompatible JPEG Format error message out of the printer. Interestingly my camera also errored out on those images, complaining that The image could not be displayed.. After some heavy digging it turns out the printer makes heavy use of the EXIF data, and if it's not present (or in many cases, simply modified!) the printer gives up. WTF? Why can't Canon document what it needs in a JPEG rather than just displaying a useless error message?

As I shoot RAW images, not being able to convert, crop, tweak, then print a random image via a CF card seriously sucked. So, I'll try Plan B: Print the images from the camera via the universal PictBridge interface.

No good.

Apparently my Nikon D200 camera can't print RAW images. WTF? Even if the camera could only print JPEGs, the NEFs have a full-res embedded JPEG image in the file that would print just fine. Sigh. Onto Plan C: Print directly from my laptop.

No good.

Apparently the SELPHY ES1 is incompatible with Canon's older dyesubs. To some extent I expected this, as it uses a different ribbon/dye pack, but that's mostly because the printer's physical engine is oriented differently -- and it's also why I bought this model over the others. Thanks to this incompatibility, I can't print from Linux either. Onto Plan D: Print from Windows. Surely that will work, right?

Sort of.

The printer worked just fine from Windows... but the prints were all quite dark. Too dark. After some digging, I found the driver's options panel and knocked the brightness up a few notches.. and while not perfect (yellow-ish color balance, mostly) the images were finally acceptable. But this would mean I'd need to boot into Windows to print, which really sucks as the rest of my RAW workflow is Linux-based.

Fortunately, the printer is USB-based, which means that thanks to a wonderful tool called Snoopy2, it's trivial to get a full dump of the entire communications chain between the printer and its driver. Armed with this dump, I could figure out the protocol and hack support into gutenprint.

After an initial learning curve, I succeeded. I was able to generate a binary dump indistinguishable from what Windows generated (except, of course, for the image data). So, cackling with glee, I proceeded to dump this out to the printer.

No good.

The device write() apparently blocked on the very first chunk of data. After much experimentation, I discovered that the logical chunks of data needed to be broken apart and written separately. The initialization sequence and the Yellow, Magenta, and Cyan image data all needed to have pauses between them (the printer sends a status message when it's ready) or the printer's USB interface locks up altogether. Sigh. So I split apart my dump file into its logical chunks, and dump them separately to the printer.


Not only did it print, but the brightness and color balance looked great. Yes, the images look much better than what their Windows driver manages to put out.

Ah, I love Free Software. When it doesn't JustWork(tm), you can fix it so it does.

All that remains is getting my patch

integrated into upstream gutenprint, and figuring out a way to intellently spool the printer data in a CUPS-compatible manner.

Oh, this was the first image I printed:

I took it last weekend at Paradise Beach. I have no idea who this guy is, but he was out kite-surfing on a windy but otherwise beautiful day.

Oh, as a footnote -- about a month before I ordered my ES1, Canon announced its successor models, the ES2 and ES20. Same basic specs, but when untethered the printers had fancier (and faster) feature sets. I needed a printer for next weekend (November 16-18) and nobody had a useful ETA on when they'd show up, so I bought the ES1 at a discount. On the 9th, four days after I received my ES1, everyone suddently got them in stock. Sigh.

Syndicated 2007-11-11 14:38:31 from Solomon Peachy

23 Sep 2007 (updated 11 Nov 2007 at 15:10 UTC) »

Photo Organizer 2.34 (finally) released!

To quote the press release:

The long-awaited version 2.34 of Photo Organizer is finally here. Nearly every facet of Photo Organizer has been enhanced in some way. The most visible improvement is the refactored UI that makes extensive use of CSS and supports multiple languages. Working with larger sets of images and especially clients is also considerably simpler, with the ability to tie folders and clients to datebook events. There are also many behind-the-scenes changes to improve reliability, facilitate future scalibility and of course, a massive pile of little features and tweaks.

You can find it at: po.shaftnet.org

Syndicated 2007-09-23 17:26:50 (Updated 2007-11-11 15:10:12) from Solomon Peachy

11 Jul 2007 (updated 11 Jul 2007 at 14:57 UTC) »
"But here's the key: for internal use, not just for showing other people our photos."
"We need something that combines 'we'd like to show people some photos' with 'we have a lot of photos we just store and annotate.'"

These phrases are exactly what I asked myself a few years ago. After some heavy digging around, I settled upon Photo Organizer. I started customizing it to my needs, and ended up contributing so much that I eventually was handed maintainership of the project.

http://po.shaftnet.org is the project's current home.

It's not all that you asked for, but it wants to be. It's database-driven (PostgreSQL), fundamentally multi-user, and is intended to be a photographer's primary image repository. It has decent access controls (beyond "public" and "private", that is) and pretty good tagging abilities. It has good export capabilities, is GPL'ed, and runs on your own server, so there's no danger of lock-in.

As an added bonus you can group together multiple versions of photos. Its filesystem layout makes it fairly easy to back up, but there's no automatic mechanism for doing so. (I use a nightly cron job that does a database dump and an rsync)

My personal installation runs off a server at home, and currently manages just shy of 30K photos taking up some 113 gigs.

Photo Organizer sounds like it is a fairly close match for your stated needs, and is improving continually as new itches come up. :)

linux-wlan-ng still lives!

After nearly three months since the last release, out comes linux-wlan-ng 0.2.7, with changes to support current Linux kernels, plus a few more bugfixes.

The project remains completely obselete, having been nearly completely eclipsed by the drivers in the linux kernel, but it continues to have a few differentiating features, the most significant of which is support for Prism 2/2.5/3 USB widgets.

It's funny; The very split-MAC architechure that linux-wlan-ng was derided for is the future of Linux wireless -- And the same problems are coming up in almost the same order, as are the same mistakes, and with them the inevitable conclusion that some of these problems are hard.

Sometimes I really dislike that I spend most of my time hacking on proprietary code -- linux-wlan and linux-wlan-ng were my employer's experiment with open-source code, and it almost put us out of business. If we can't get paid for support, and we can't get paid to write software, how exactly are we supposed to pay the bills?

Is the entire F/OSS "business model" subsidized by proprietary components?

Syndicated 2007-01-11 20:54:53 from Solomon Peachy

The sun came up, after all.

One of my life goals is to watch the sun come up from different place (or better yet, a different continent) every year, but the last couple of years I haven't had the money to travel anywhere, so I had to content myself with finding a different local vantage point this time around. Fortunately, that's pretty easy!

Today I almost missed it -- I set an alarm but forgot to turn it on -- but I managed to find a nice place to watch the sun come up, despite the objections of a few pelicans.

new year's day

They're right when they call this time magic light

Syndicated 2007-01-02 00:50:10 from Solomon Peachy

CSS hackery help!

Back in May, I inherited Photo Organizer, and since then, there have been four releases. Nothing earth-shattering, but a steady series of incremental improvements, usually in the form of feature backports from the "unstable" tree.

The single biggest feature of the "unstable" tree is the use of CSS for layout and other formatting, plus other changes necessary to support better theming and internationalization. The work is well advanced, but I'm running into a few walls.

First, I can't seem to figure out how to have truly marginless <button>s. I'm using graphical buttons for things like next/prev links, but try as I may, I end up with a small (~few pixels) margin around the embedded image. This doesn't matter for most of the buttons, but there is a subset used for navigation and this results in the navbar being unacceptaby wide.

The navigation buttons are being used as implicit <a href> tags, which raises the question "why not just use the tag then?" -- basically, I want everything using the same mechanism, if at all possible. As most of these buttons/links appear within multiple forms (and occasionally standalone) I can't use <input type="image"> tags because of their implicit submit on click. On the plus side their borders/margins can be disabled!

Second, I can't seem to figure out how to have a proper 'onmouseover' event when hovering over a button. The button normally pops up a little tooltip (via the title attritubte), but I want to pop up a thumbnail of the next/prev image when the mouse hovers over the button as well as the tooltip. I could probably hack something together via a hidden <div>, but I'm almost over my head as it is.

The goal of these buttons is to enable a pure-text interface, making it trivial to translate it into different languages -- and the crucial bit is that the rest of the code can't care what the UI looks like.

Hacking HTML/Javascript/CSS/DOM is a far cry from the kernel-land hackery I spend most of my time in. To say nothing of my continuing distaste of PHP!

Syndicated 2006-12-29 13:58:36 from Solomon Peachy

Sunsets and Rockets

While on a bit of a scouting trip, Crystal and I got sidetracked for many hours while we tromped around various parts of the Merritt Island National Wildlife Refuge and Canaveral National Seashore.

Much of the MINWR, and the southern end of CNS, butts up against NASA's facilities, so while you get this view in one direction...

Rocket motor test facility

...you get this in another. (Granted, it was an hour later).


As you can imagine, this stretch of road would be a great place to watch a rocket launch, but In The Interest Of National Security(tm) the powers that be close off this whole area to the public. Sigh.

Along one of the trails I spotted this Great Blue Heron. It's a slightly blurry thanks to my handholding a long zoom, but it's still purty nonetheless.

Great Blue Heron

It's nice to get out and away from a computer and software hax0ring. But more on that later.

Syndicated 2006-12-29 03:35:14 from Solomon Peachy

Monkey business

Sometimes it's all too easy.

Syndicated 2006-12-26 23:33:36 from Solomon Peachy

Hula Girls

In mid-November I drove to the Spirit of the Suwanee Music Park, outside the bustling metropolis of Live Oak, FL, for the Paralounge Drum gathering.

It's a fact of life that on any trip, you inevitably forget something. Last time I, I forgot shampoo. This time, I forgot my Djembe, so I resigned myself to walking around the park with my camera, taking nearly 1200 photos during the three-day event. Unusually, I ended up with more good photos than bad. I must be getting better!

This one is the best photo of the lot. It just exudes cuteness, and aside from the trash can visible in the background, is perfect:

Hula Girl

This one is another favorite. This young lady had a particular grace about her. It's hard to capture the essence of graceful motion in a still photograph, but I think it works here:

Hula Girl II

In other news, I'm going to try and do a picture-of-the-day from now on. Consider it an early new year's resolution or something.

Note to Advogato: Most posts won't have anything to do with Free Software -- and nanoblogger doesn't currently generate a separate feed for each category. Is there a way to filter? (Does anyone care)?

Syndicated 2006-12-25 13:52:02 from Solomon Peachy

93 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!