Version 1.4b6 of Qwicap is a trivial release, correcting a serious bug in a method, in the non-public API, which Qwicap doesn't even use. (Qwicap does use other methods in the same utility class, however, which is the only reason that this issue is relevant.) I've also tweaked the markup of the pages in the example applications such that Eclipse won't choke when trying to load them anymore. So, this release is a big yawn, but that's good news late in the beta process.
Wednesday, April 25, 2007
Jim Austin's article on high-dynamic range (HDR) photography, "HDR For the Love of Light", features my work "Hamilton Pool Panorama no. 2". Thanks for the kind words, Jim, and the excellent article. Anyone who wants an introduction to high dynamic range photography, or impressive examples of its use, will find that article worth a look.
Ironically, I recently discovered a problem in my panoramic workflow that has been muting the colors in my work for some time. Most of my panoramas, including that one, need to be recomputed to bring out the true quality of their color. I'm in the process of doing that in between work on my ongoing Spring panorama project at the Bamberger Ranch Preserve. Unfortunately, recomputing the panoramas, and then processing them as HDR, is very time consuming, so I don't expect to have everything fixed any time soon.
To elaborate on the problem, Apple's Aperture application, which I use for managing my photos (when it works, it's great; when it doesn't, it reminds me of Photoshop), has a preset export option labelled something like "Original Size, 16-bit TIFF". Because that was the only preset export option that suggests that it preserves all of the information in RAW originals, and because Aperture is designed for professional photographers, I naively assumed that it would also preserve the color space of the images. Not so. In fact, it converts the image to the sRGB color space, a big step down from the AdobeRGB color space of my originals. This isn't a bug, but I do think the name of that preset export option should be changed to something that makes its behavior explicit, like "Original Size, 16-bit TIFF, sRGB".
Once I noticed that problem and fixed it, I was bit by another. I needed a utility that would let me assign a color space to the non-color-managed 16-bit TIFF images produced by the software I use for assembling panoramas (PTMac). I tried doing it with Photoshop CS, but it launches so slowly that it created a strong incentive to find a lighter-weight tool for this job. (Aperture, frustratingly, provides no mechanism for assigning a color space to an image.) After a bit of Googling, I found an article in Apple's "Pro" area titled "Image Editing in ColorSync" which told me that Apple's "ColorSync Utility" was precisely what I was looking for. I started using it, and, for a while, I thought it was a great tool. Then I realized that when it saved my 16-bit TIFFs with their newly assigned color spaces, it was saving them as 8-bit TIFFs. Put simply, this "Pro" tool was automatically throwing away half of the data in my images without a single word of warning. I'm still dumbstruck by this behavior. And there's no way around it; while its "Save As" dialog offers an enticing pop-up menu that allows the image bit-depth to be specified, the only option it offers is 8-bit.
So, I'm back to Photoshop for my color-space assignment needs. (Sigh.) If anyone can suggest an alternative color-space assignment tool for Mac OS X, please do.
Thursday, April 19, 2007
Qwicap version 1.4b5 eliminates a case in
QwicapServlet in which
HttpServletResponse.sendError could throw an
IllegalArgumentException, because an
Auth2Scheme implementation had refused access to the web application, and had already caused the response to be committed (for instance, by redirecting the user to an authentication page).
QwicapServlet now invokes
sendError only when the response has not been committed. And that's as exciting as this release gets, which is good news, because it means the beta cycle is winding-down toward a true release.
For those unfamiliar with Qwicap, allow me to throw in the standard blurb:
Qwicap is a Java web application development API that discards the traditional hit-run-exit CGI model, automatically provides rich state, and supplies a powerful, extremely easy-to-use XML "templating" engine to avoid mixing code and content. It builds on Servlet, XHTML and CSS technologies.
Tuesday, April 17, 2007
My visits to the Bamberger Ranch continued this last Saturday. Conditions for photography were not favorable, with cloudy skies and high winds, but. if you don't show-up, you can't get lucky. I drove down before dawn, caught a few badly needed winks, and met up with David and Margaret in time for lunch. Margaret told me she'd found me another waterfall, and off we went in David's old pickup with Corey, the Bamberger's dog, enthusiastically riding along. (It's not that I'm obsessed with waterfalls, it's just that some of them are seasonal, and, this being the season, I want to catch them while I can.) After checking in with the visiting turkey hunters, we headed up a dirt road into High Lonesome. Soon after, we arrived at the tank shown above and began walking up the creek that feeds it—the dog leading the way from somewhere invisibly far ahead—to a very nice little waterfall and pool.
As Margaret and I chatted, I setup my pano rig at the edge of the pool, and began waiting for moments when the air was still and the sun was shining between the clouds. There weren't a lot of those, and, unaccustomed to the waiting and the boredom that are such a large part of multi-frame panoramic photography, Margaret and Corey went off to explore further upstream. Somewhere in there, I realized that, unaccustomed to the pleasant distractions of company on my photographic jaunts, I'd setup my pano rig incorrectly, thus rendering useless all of the would-be panoramas I'd shot so far. I reset the rig, and eventually managed to get enough plausible takes that I couldn't see spending any more time on that location. I strolled back to the tank, setup on the shore, and began waiting for the wind to die and the sun to shine. That spread of earth, water and sky had to have a good pano in it. And, eventually, it provided the one seen above. Happily, that was also the moment that Corey, the dog, caught up with me, and just happened to stand dead still while the three exposures of his segment of the pano clicked away. He is, therefore, immortalized in a very small way near the right-hand edge of the panorama. Good dog.
Margaret arrived shortly afterward, and we returned to the truck with no clear destination. Remarkably, she hadn't had her fill of panoramic boredom, so I asked her to take me to the overlook of Jacob's Ladder tank on which she'd drawn David for Water from Stone (page 46). I thought it would be interesting to capture the view from David's perspective. Quite apart from providing charming company, and commentary on the ranch and its flora and fauna, Margaret was indispensable as a guide. Without her, I'd've wasted a lot of time stumbling around on boulders looking for that vantage point, and I might never have been sure I'd found it. With her, it was a breeze. I setup my rig as far out on the edge of David's boulder as the tripod could go, and at a seated person's eye level. "Is that safe?" she asked. "Not completely, but it'll be worth it if this works."
Thus began the waiting for the wind and sun to cooperate at the same time. Corey scrambled deftly over the boulders, exploring countless scent trails with perfect dog dedication, while I waited and Margaret waited on me. I started the pano many times, but never captured more than half the segments before the wind would return. I had the suspense of waiting for the next lull to arrive, listening carefully for the sound of its approach on the surrounding hills. Margaret had to settle for watching me wait, and an occasional conversation. ("We could cut down that willow tree that's blocking the view." Nobody had ever offered to cut down a tree for me before. I politely declined—it seemed like too much generosity to accept—although I couldn't help but think from then on that it really would be a lot easier without that damn tree.) Good natured soul that she is, she held-out a lot longer than I would have managed to do before she headed back up the boulders to go for a walk with the dog.
I crouched on the boulder, next to the camera, waiting with the shutter release remote in my hand, feeling the breeze die down, watching the willow's limbs sway less and less, until they stopped, and the whole scene was still, and as I depressed the shutter release to capture the pano's first segment, heard the breeze rising up through the trees, rotated the camera for the next segment, and watched the willow's long, graceful branches begin to sway, and then all of the other trees following suit. Not that it was their fault; that damn willow had to be the ringleader.
And so I would begin the wait for the next lull with good light, telling myself that if it didn't come along in the next sixty seconds, I was going to break-down the rig, and go find Margaret. Well, make that, ninety seconds. Wait ... yes ... I can hear the next lull on the way .... No, not good enough. But if I go another sixty seconds without a lull, I'm definitely done. Make that ninety....
That went on for a while, but eventually I did give-up. If I'm very lucky, I captured half of a usable panorama at some point, but I doubt it. Up the boulders and down the hill to the dam, I found Margaret and Corey. The dog still seemed to be having a fine time, but I expect Margaret was relieved that I'd finally quit. She drove us back to the ranch house where we found David, and I learned to my surprise that I was joining them at a neighbor's party that night. The yearly "swamp angel" party, no less. That wouldn't have meant a thing to me a week earlier, but having spent the week reading Water from Stone, I felt as though I was following in Jeffrey Greene's footsteps - the new year's new stunned guest. "Swamp angel" isn't in the index, but it's in the book, and I'll leave it to Jeffrey to tell that story.
We headed over to the party with David at the wheel of his old pickup, the three of us sharing the big bench seat. I was offered the middle position, but suggested that Margaret would be the better choice, as she had years of experience snuggling up against David, whereas I'd need training. So Margaret took the middle, and I took the end. With it, I acquired the responsibility of opening the various ranch gates we'd come to, waiting for the truck to pass through, then securing the gates behind us. There's not a lot to that job, but having left the passenger side door open at the first gate we came to, I was duly chided by David for my lack of gate etiquette. I struggled to redeem myself the rest of the way to the party, and back again later. Enjoying the situation plenty, David told me that he'd had the Lord Mayor of London (retired) along on this same trip some years ago, and that he'd made the same mistake.
It was on the return journey that I, at last, managed to clear my name by successfully passing not one, but two, trucks through the gates on the way back to the main road. David finally allowed that, like my predecessor, the Lord Mayor, I'd learned my gate etiquette, and passed the exam. Let no one doubt that the mission of the Bamberger Ranch Preserve is education, or that it works.
Wednesday, April 11, 2007
Oh, stupid, stupid me. I screwed-up the
SecureRandom service provider implementation in Qwicap 1.4b3 by doing nothing more than setting the visibility modifier on my subclass of
SecureRandomSpi to "package", rather than
public. (As always, I was trying to keep as much out of the public API as possible.) Having just written and used nearly identical code in another project, and because I couldn't readily create a JUnit test for anything that depended on the environment provided by an application server, I put the code in without testing it, thereby compounding my mistake with a "what could go wrong?" attitude. Of course, when we actually came to use the one project that utilized that service provider this morning, exceptions were thrown, and time wasted.
That mistake has been corrected in the just-released version 1.4b4. Also corrected is a mistake in the Javadocs that explain how to get a
SecureRandom instance based on Qwicap's provider. Also, I found a way to create a JUnit test for the visibility-modifier induced bug, so I won't re-create it in the future.
SecureRandom service provider was a feature new to 1.4b3, I'm the only one who has had time to create any code that depends on it, so this bug won't affect any existing Qwicap users. Still, it's embarassing.
This is just a quick note to announce the release of Qwicap version 1.4b3. Download links, and the usual documentation and example applications, can be found on the Qwicap home page. This version of Qwicap fixes a bug introduced late in the 1.4b2 development cycle that can cause a
NullPointerException to be thrown when rejecting inputs supplied by certain form controls. It also makes Qwicap's internal Rule 30 pseudo-random number generator (PRNG) implementation (see also page 974) available through the "Provider" mechanism of the
java.security.Security class. Thus, it is now possible to create
SecureRandom instances which utilize Qwicap's PRNG implementation, and which are seeded from Qwicap's persistent, internal instance of that PRNG.
By the way, I'd hoped, by now, to be offering a write-up of the Qwicap 1.4 development process, discussing the feedback loop that was established with the developers who were using it at the time, and the additional adjustments that were made to it following a review of their completed code, but I write slowly, and it's still nowhere near complete.
Saturday, April 7, 2007
This is the final panorama from my visit to the Bamberger Ranch last Saturday. The sun was setting so fast, I wasn't sure I could make it work, but my desire for this shot came rushing back to me as I looked down at the scene. I struggled to lift a large oak limb off of the top of the dam, up out of the dark water, and to drag it to an inconspicuous location. It was hung-up exactly where the camera needed to be.
I'd seen the tank side of this shot in November as I was returning from a walk up the Aldo Leopold trail. I'd walked past the shot an hour earlier, heading in the opposite direction, and hadn't noticed it, but now it stood up and begged to be captured. The sun was setting then, too, and I raced to setup the pano rig and begin shooting before the shadows grew so long that the reflection on the water's mirror surface would be lost. I had just shot the first two segments of the panorama when a little breeze came-up and spread fine ripples across the mirror. The panorama was ruined, and the sun set soon after, ensuring that there would be no second chance.
The ranch had been in a drought for six years at that point, and the water level in the tank fell about three feet below the top of the dam. Fish still jumped in the tank, and frogs still found it worth their while to work the shallow pools and interconnecting trickles of the creek that feeds it. For six years of drought, the place was a paradise, and a testament to first-rate land stewardship. This spring finally brought the rains that ended the drought, refilled the aquifer, lake and tanks, and started all of the springs flowing again. And that brought me a better second chance than any I'd imagined; no fall color, but dark, deep, mirror water, and loud, roaring, rushing water in golden grass, new leaves flush with green, a flawless blue sky, and not a hint of a breeze. Perfect.
* * *
The panorama below is Jacob's Ladder tank as it appeared earlier that same November day, last year. The vantage point is different, of course; the dam, so prominent above, is just a small detail near the left edge. But like I said, for six years of drought, a paradise - with bald cypress in fall finery. I left this panorama and some other random photos of the ranch with Margaret on my next visit, as I usually do. I don't know if she does anything with them, but I leave them just the same. So, a month ago I was surprised to hear that she'd shown this one to David, and he'd decided to have a thousand of them printed, bookmark size, as promotional material for the foundation that he created to maintain the ranch in perpetuity. The occasion for the bookmark is the impending release of a book about David and the ranch, Water from Stone: The Story of Selah, Bamberger Ranch Preserve by Jeffrey Greene. I haven't been able to get hold of a copy of the book, so I can't give it any sort of review, except to say that I read Greene's first book, and was impressed, and I've come to know David, Margaret and the ranch increasingly well over the years, and the four of them should make an excellent combination.
David thanked me for the use of the pano as we worked our way through the cedar on Warbler trail, heading to the second of the waterfalls he showed me last Saturday. I told him I was gratified that he'd liked it enough to have it printed. "A thousand of them, huh?" I asked. "Oh, no," he told me. "Four thousand."
Thursday, April 5, 2007
As I headed out to shoot my first panorama of the day, there were three horses grazing this pasture. When I returned hours later, I was disappointed that they'd moved on, until I realized that there was no way that they, and most especially their continuously swishing tails, were going to hold still for my photos. As is, the most difficult part of getting this panorama was walking through the pasture without stepping on any of the rapidly growing wildflowers that were mixed in with the grass; something that I don't imagine troubled the horses one bit.
There's a story being told here, but I still don't know the language well enough to read more than fragments of it. On one side of the creek, ashe juniper dominates, on the other, oak. The oaks are growing out of a loose stone aggregate on top of finely layered limestone. The oaks are not remarkably old - forty years? - yet the stone in which they sprouted seems to have retreated, exposing half of their roots. Or has it? There are no major roots projecting out of the stone and into mid-air, as one would expect if the stone had rapidly crumbled away around them. But the stone is obviously being cut dramatically, and continuously, by the creek. Indeed, it appears that the creek bed is primarily composed of fragments of that stone. So, have the oaks really been undercut, and if so, how could the stone be cut away that fast without there being an equally dramatic statement written on the opposite bank? Is it there and I'm just missing it? Or have the oaks grown toward the edge of the ledge above the creek because the creek created a gap in the canopy that gave them access to light they couldn't get where they sprouted? A bit of both perhaps? But how fast is that stone being cut, anyway?
Wednesday, April 4, 2007
This is about 180 degrees of material extracted from a full 360 degree HDR panorama, and the composition may yet benefit from further cropping. It shows an unusually nice example of one of the many small tributaries that cuts its way down through the cedar-covered slopes to feed Upper Miller Creek. This particular one is well downstream from the falls shown yesterday. The best vantage point for the this sequence turned-out to be squarely in the middle of the creek, but with the water only a few inches deep at that point, it was no problem at all, except for the water's interactions with the grass growing amongst it; with eighteen images to shoot to complete the panorama, I really needed that grass to hold its pose. At least there was no wind.
For those not familiar with the term "cedar" as used in the American southwest, the trees in question are actually Juniperus ashei, variously known by common names like mountain juniper, mountain cedar, and ashe juniper, but everyone really just calls it "cedar", even though it is not a cedar, and they have been doing so for at least a century throughout the southwest. If memory serves, Aldo Leopold commented on this peculiar naming in his 1924 essay Grass, Brush, Timber and Fire in Southern Arizona, a time at which the name was already firmly established.
Tuesday, April 3, 2007
This is the panorama that required me to setup my equipment in just under four feet of water, with the top of the tripod just barely above the waves. I'd've gladly moved closer to the falls, but the bottom of the pool was dropping off too steeply to allow it. Because a number of prominent foreground elements were in continuous motion as they bobbed slightly in the current, I strongly suspected that this HDR pano would be unusable. However, I'm very pleasantly surprised. A small portion of the right side had to be cropped off, and small defects remain here and there, but the sense of the place, including the sheer volume of water moving through it, completely overwhelms the visual trivia of the defects.
Monday, April 2, 2007
This last Saturday, I returned to the Bamberger Ranch for the first time since catching some of the fall color in November (more on that will have to wait for a future post). It was beautiful as always, but strikingly different from how I've seen it for the last six or so years. When I saw the ranch for the first time about seven years ago, one of the things that struck me most was that everywhere I walked, there was the sound of running water in the background. But then Blanco county went into six years of drought, and even the Bamberger's famously wet ranch began to show signs of strain, the water in the creeks fell below the low water crossings, then were reduced to shallow pools connected by trickles, and the tank and lake levels began to decline. All the while, there was still enough spring water to supply the homes of the ranch staff and then some, and the whole place remained remarkably healthy and a pleasure to see, but it clearly wasn't at its best. On my visit in November, the level of water in some of the tanks was clearly three or four feet below normal. While greatly reduced in size, they were still able to supply the local flora and fauna, but they were obviously shadows of their former selves. Of course, it was a tribute to the ranch's land management practices that conditions weren't a great deal worse.
But all of that is over with for the time being. Rains this winter and spring have brought enough water to the ranch to refill the lakes and tanks, recharge the aquifers, and start all of the innumerable springs flowing again. Every creek rushes with water continuously, roaring at every little fall in their courses, and the low water crossings are impediments to vehicles once more.
After giving Margaret a hand with her Mac, I set off to start photographing the areas of the ranch that weren't reserved for turkey hunters. In view of the return of the water, I asked David whether he happened to have any waterfalls. He does, and I was surprised to have the privilege of a guided tour. We climbed into his truck and drove a short distance to two, separate falls. We parked and walked a few hundred feet to the first one. In the pool at its base, big tadpoles and small fish fled our approach.
I'm not sure I'm satisfied with this panorama, but it does accurately record the scene of that first waterfall, and everything around it. You may notice the wire cages on the bank; those are protecting young Texas madrone trees from the local herbivores. In twenty years, herbivores permitting, that little scene will have been transformed. But it's a beauty, to my eyes, even now.
From there, David took me a short distance back up the road, and we proceeded, with his enthusiastic dog leading the way, into a dense cedar break. David explained that he'd originally decided to leave the cedars there so that he'd be able to show people what the entire ranch looked like when he bought it, before his decades of land restoration work had transformed it. He added that sometime later, endangered golden-cheeked warblers were found to be nesting in it, and that further secured its future. (While every last warbler seems to have been killed-off by an intense hail storm earlier this year, he expects the species to return.)
After what seemed like a half mile, during which we crossed many small springs and seeps, we came to a water fall much larger than the first. It had four-levels, and the pool at its base was too deep for its bottom to be seen; a feature that the schools of small fish and large tadpoles put to good use when they caught sight of us. Cedar hugged its shores and leaned in all around it, but the scene was still an impressive sight, and worth fighting the cedar to see. Of course, these falls fed, and were fed by, a much larger creek than that at the first waterfall.
From there we headed back to his truck and returned to his house where he resumed his usual business, and I got into my truck to drive back to the falls to shoot my panoramas. The first of the falls, shown above, was easy. Finding the second one again, while pushing through the cedar burdened with a large backpack of photo gear, and carrying a tripod, was much more of a problem.
Once I found the falls again, the problem became getting a clear view of them through the cedar. The answer was simple enough, but I won't soon forget setting up my tripod and panoramic rig in chest deep water, with the little waves passing just below the top of the tripod. (Once again, having a waterproof camera backpack proved to be indispensable.) As I worked, the schools of tiny fish returned, and a large dragonfly nymph selected one of the crossbars of the tripod as its new hunting perch. I was surprised and amused by the way this tiny, aquatic nook of the natural world had decided to accept the intrusion of a big, wet monkey and its equipment. Well, most of it did; the tadpoles never did come around. Sensible creatures, frogs.
It remains to be seen how, or even if, that panorama, or any of the others I shot later that day, will turn out, but it was a pleasure and a privilege to see the ranch in this fine state once again, and to make the attempt at capturing it.
The wildflowers are only just getting started out there, by the way. Four-nerve daisies, Hymenoxys scaposa, were putting on most of the display, but there were signs everywhere of the real show that is in the making. I hope to return and capture some of that as this spring progresses.