"I’ve reached new heights of Nerd-dom," I proudly announced to my 12-year old daughter and her friends. They all laughed at me for saying such a thing, not foreseeing yet that nerdiness reaps large benefits after the high school nerd-penalties are paid. But I was undeterred. "I’ve managed to image the Seafood Watch wallet card issued by the Monterey Bay Aquarium (available in pdf) and upload it to my digital camera for display!"
I became aware of the Seafood Watch after reading the eye-opening Song for the Blue Ocean by Carl Safina, which lays out the magnitude of the challenges facing our oceans and fisheries. The book is part adventure, part science, part business, and full always of humanity and the stories of those in contact with the ocean in various capacities. The parts about salmon running the American River before Fulsom Dam was built (to which we owe our lake view) really brought home how broadly these issues affect us. This message was reinforced by a visit last year to the Monterey Bay Aquarium, which has a relatively new deep-sea tank with bluefin tuna (to which a large portion of Blue Ocean is devoted), and an informational video with a cameo by Carl Safina himself.
My daughter and her friends didn’t understand the myriad benefits, which I will proceed to enumerate in possibly far too much detail:
-
I save a few grams on my wallet weight and thickness.
-
I save a few grams of paper and ink (and the chemical processes that go into making it).
-
I save the publisher the cost of printing this information, while keeping all the benefits that the information dissemination provides.
-
I demonstrate the multi-purpose nature of any sufficiently capable digital device with a usable display.
The last point is really why I get nerd points. The Casio EX-Z750 2.5" display is large enough to be used for a lot of interesting purposes besides framing or previewing a snapshot. It’s at least 3 times the area of my cell phone’s display. An intuitive UI makes navigating, and zooming in on the Seafood Watch text to a readable size, a breeze. I already have plans to turn Geocaching pages into images so I can carry my camera as a guidebook instead of my laptop.
So I have to add a final benefit:
5. I have a reason to interest other nerds (through this blog) in the important work Seafood Watch does to raise the visibility of the degradation of a vital resource. Check them out!

My mom turned me onto this trick: take the eyepiece off an old camcorder and stick it on your digital camera. Voila, instant microscope! Between the magnification of the camera’s zoom, the eyepiece, and zooming in on the image, you can display the eyes of the spider on the viewfinder at at least 10x magnification. And the whole thing still fits in your pocket!
Of course, a more sophisticated solution can produce pretty amazing results!


After a lot of research and collecting advice, I finally purchased an ultra-compact digital camera!
Top ones in the running included the popular Canon SD500 and the Nikon 5900/7900. But the eventual winner was - The Casio Exlim EX-Z750! All of the candidates seemed to be of similar size, functionality and have similar fan bases. Side-by-side comparisons such as this one were not generally overwhelmingly conclusive (depending on a lot of personal preference). But the Casio has a couple of features that I fell in love with:
- A huge 2.5" LCD screen which covers the majority of the back of the camera. This is turning out to be even more useful than I ever thought! Not only does the larger screen make framing the shot easier, but it’s large enough to view the result (for instance, showing the image to friends) in a very useable way.
- The user interface is very intuitive, and includes a large collection of scene modes which promise to make those average photos (not worth taking the time to optimize the settings) much better. For instance, the white-board scene sets the exposure parameters quickly, and then provides the option to crop the result and remove the parallax - which is very useful but would generally be too time consuming to warrant the investment.
My ideal camera would have two missing features of the Casio though:
- No time lapse mode (why not? it’s just software).
- An option for both downloading to a PC and recharging the battery directly through USB (the cradle is very useful for the home base station, but a bit bulky to be convenient on the road).
The Climbing Roses picture is direct from the camera, using the "Flower" scene mode with no adjustments. I think it looks a bit better with a slight contrast adjustment (hit "Auto Contrast" in Picasa2).
[Update: 6/29/05 noticed that the above statement is not quite right - MSN Spaces resizes photos to 640 wide on upload, so I can't really claim it's right out of the camera...]

I was on the water by 6:30 for a solo kayak on this sparkling day. A slight headwind (10 mph) greeted me as I headed up-river directly into the sun. The first twenty minutes I paddled with one eye closed against the glare, the other eye keeping my track close to the left bank. Though the wildflower peak is a few weeks past there is still quite an array of different shades and styles of yellow near the waters edge.
I’m alone on the water this morning - not even a fisherman in sight. After some cat and mouse with some mallards, I surprise a coyote at waters edge. He slinks through the tall grass, at times only his oversized, pointed ears showing, and turns every few steps to assess me for a few seconds before moving farther away. After a minute he loses interest and lopes over a bank.
After our abnormally wet winter the water level is about as high as it ever gets. Most of the driftwood perched 40 feet up the canyon walls is now afloat. Up-river, the canyon narrows and the rocky outcrops become more regular. Since these outcrops are never drowned, they have an amazing palette of lichens and mosses. The trees grow close to the waters edge - mostly varieties of oak mixed with gray pines. Many pine seedlings have sprung up - there hasn’t been a fire in this area in years and I wonder if the lack of regular burning favors pines…
![y1pvjWKJ2F0t4nocwiawLtVnpGmYRv8QTf4T3AH2J141bWLqhBuV7sdLPQAlYW45c4A59gyFP6PYsc[1] y1pvjWKJ2F0t4nocwiawLtVnpGmYRv8QTf4T3AH2J141bWLqhBuV7sdLPQAlYW45c4A59gyFP6PYsc[1]](http://jonathanmarsh.net/wp-content/uploads/2009/04/y1pvjwkj2f0t4nocwiawltvnpgmyrv8qtf4t3ah2j141bwlqhbuv7sdlpqalyw45c4a59gyfp6pysc1-thumb1.jpg)
Once I reach the northward bend in the river I can detect a bit of current by the swirls on the smooth surface of the water, though the lake continues on for nearly another mile before turning to tumbling river. The water here is cloudier, as the silt from the last week of rain infiltrates the lake. I’m sheltered from the wind here within the confines of the canyon, and soon the sunshine is hidden by the high walls. Time to turn back.
On the way back I investigate some small coves on the south bank with streams bubbling gently into the lake - the first time I’ve seen these streams running. I paddle through the treetops - there’s one variety of tree that survives nicely despite being submerged for a few months.
I spy a red-tailed hawk landing on an oak branch on the cliff high above the water, and then notice a large nest in the nearby pine tree. It looks a bit messy from this angle, but I strongly suspect it belongs to the hawk. I hope there’s a family growing there. I’ll have to keep an eye on it - next time I’ll bring binoculars.
The return trip is sped by the tailwind, just flipping up the smallest of whitecaps, returning me to the naturalized lemon tree marking the site of the long-gone homestead at almost exactly an hour after my departure. According to my GPS record, I’ve travelled about 3.5 miles for the hour - a good speed taking my wildlife observation moments into account. I end the hour with a "passion for place" similar to Richard Nelson’s in The Island Within.

From a story on this week’s Weekend America:
Hot Dogs and Buns, Together at Last
For years, a dilemma has plagued hot dog lovers — what to do with the extra buns. Their prayers have been answered. Manufacturers have reached an historic truce vowing to sell hot dogs and buns in the same quantities — packs of 8. We talk to a hot dog vendor about the good news.
Strange little story - a Chicago hot-dog manufacturer exec got tired of hearing about the incompatibility between the typical number of hot dogs in a package and the typical number of buns in a package. The meat industry likes neat packages of one pound, which is typically 8 hot dogs. Bakers like dozens or a fraction thereof. You either run out of dogs, or buns. Finally the exec got fed up and started discussions with the bun makers to fix the problem. They’re promoting a universal convention of 8-packs. Most of the hot dogs I buy come in 10 packs, and the buns in 8 packs.
This kind of cooperation is often hailed by vendors in the IT industry, and I’m glad they didn’t have to found a consortium or promote government regulation to solve the problem. But the core problem here is not a lack of communication between hot dog vendors and bun bakers. It’s between those two industries and their customers.
Why is "8" the magic number? What’s wrong with 10, or 6? Each might have a specific consumer demand. The problem is not enough ranges of choices. If hot dogs are available in 6, 8, 10, or 16 packs, that seems like a good thing to me. The only problem is if the buns are not also available in a similar range of choices. Bun and hot dog makers should provide more variety, not less! I predict in the future customers will be asking these same vendors why they can’t find a 10-pack of hotdogs anywhere.

I heard a few snatches of NPR’s Talk of the Nation Science Friday program discussing the shortcomings of the USDA’s food pyramid. It highlights not only is the graphic representation as ugly and primitive as you’d expect in a third-rate Powerpoint presentation, but it is extremely uncommunicative of many of the nutritional recommendations it’s designed to communicate.
Contrast this with what you get when you provide requirements and let the designers figure out a set of coherent and effective solutions. The moral: hire top-flight designers and give them enough rope to allow them to amaze you with a single, coherent, consistent viewpoint. Know how to recognize such coherency when you see it, rather than hen-pecking a designer into a hodge-podge that is widely ridiculed instead of admired.
There are those who see parallels in the development of Web standards :-).

Well, serves me right. I noted there was a controversy around xml:base fixup in XInclude and then stepped right into the middle of that controversy. (How’d they even find me so quickly?) Dare Obasanjo defends the ability to suppress xml:base fixup, but notes that by disallowing xml:base fixup one must rely on other mechanisms (pre-processing relative URIs with XSLT, for instance) to ensure links remain intact. I agree, but let’s look at that approach more closely.
Seems to me there are several ways to use a fixup-suppression mechanism safely:
- First, you have to know whether there are any relative URIs in the document. If there aren’t, xml:base fixup is unnecessary, inconvenient, even harmful:
- A schema for the fragment, plus an assertion or at least assumption that all URIs are indicated using xs:anyURI or types derived from it. By inspecting the document in the light of such a schema, you can then determine which URIs are relative (Though you are unlikely to have such a schema in this use case, since we already know we’re validating post-inclusion.)
- Some other out-of-band assertion that there are no relative URIs.
- If there are identifiable relative URIs, you can deal with them in a number of ways:
- Absolutize them as Dare suggests (XSLT might work for this, though the string manipulations required by the absolutization algorithm are not XSLT’s strong point.)
- Decide to re-base them. That is, just leave them relative because you know that they will work correctly at the new base. This is reasonable in many circumstances (after all, what are relative URIs for).
- Ignore them. If you can handle the possibility that the links might be broken or lead to unexpected destinations (you might even be trying to exploit a security hole on purpose) just leave them alone.
I think this justifies my point, which is that one should disable xml:base fixup with care and only with specific knowledge about the included fragment unavailable to a generic XInclude processor.
Step 1 shows there are no generic mechanisms within the scope of XInclude that allow it to determine when xml:base fixup is harmful. I don’t have any problem with out-of-band information being used (thought a global processor option seems rather blunt) to make these assertions.
Step 2 implies that in the cases where you want to suppress xml:base for valid reasons, this can be best expressed as infoset pre-processing (modifying the [base URI] or the character information items comprising the URI). XInclude allows wide latitude in creation of the included infosets, and such manipulation seems perfectly allowable. The XInclude syntax is quite extensible so you could even add assertions about parameterizing the infoset creation on an element-by-element basis.
<xi:include href="MayContainRelativeURIs.xml" xix:changebase="true" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xix="http://example.com/XIncludeExtensions"/>
I’m glad to see Dare move from considering xml:base fixup "fundamentally broken" to "optimized for an edge case", but I still think that dropping the fixup completely as Dare implied would need to be classified as "fundamentally broken for the edge case", not simply "optimized for the common case." It is a judgement call whether passing XML Schema validation but breaking links is better than keeping links intact but failing XML Schema validation.
So my advice stated more clearly is: Don’t consider the user option to suppress xml:base fixup as a workaround to a fundamental flaw in XInclude - use it in conjunction with specific knowledge about relative URIs in the contents of the inclusion to re-base the content. It’s a new feature, not a workaround. A side-effect of such re-basing is that the output is smaller and easier to validate against schemas that don’t allow xml:base.

I was just doing a little research to answer a question about XML Base, a spec which I edited (and of whose minimal length I remain proud!) There is a current controversy about XInclude adding xml:base attributes whenever an inclusion is done. If your schema doesn’t allow those attributes to appear, you’re document won’t validate. This surprises some people, since the invalid attributes were added by a previous step in the processing chain (in this case XInclude), rather than by hand. As if that makes a difference to the validator!
Norm Walsh, after a false start, correctly points out this behavior was intentional. But he doesn’t go the next step to say that this behavior is vital! The reason xml:base attributes are inserted is to keep references and links from breaking. If the included content has a relative URI, and the xml:base attribute is omitted, the link will no longer resolve - or worse, it will resolve to the wrong thing. Can you say "security hole"?
Sure it’s inconvenient to fail validation when xml:base attributes are added, especially when there are no relative URIs in the included content (and thus the xml:base attributes are unnecessary.) But hey, if you wanted people or processes to add attributes to your content model, you should have allowed them in the schema! Validation over a closed content model is the first line of defense for many applications accepting XML content, and a backdoor way to add attributes (even ones dear to my heart like xml:base) is simply inconsistent with this.
For these reasons, I urge you first to allow sufficient extensibility in your content model, and second to consider carefully what you’re doing before using mechanisms to circumvent normal validation rules.

There seems to be a pretty substantial buzz among car customers right now, that I’ve not seen since the new Beetle. (Being aghast at the Humvee isn’t the kind of buzz I’m talking about.) It’s surrounding the Toyota Prius. I live in a fairly rural area, and one of the most conservative counties in California, yet in a county where I’d expect more pickups than beemers, I recently saw 5 Priuses (should that be Prii?) while driving my daughter to school!
Maybe I’m just tuned in since my brother bought one. The thing that really floors me is the presence of a power button that looks like it came directly off my Media Center. No longer should the driver (henceforth "user") be concerned with such mundane details as when to turn the engine on and off. The key just provides authentication, as emphasized by the availability (AIUI) of a wireless key system that detects the key (really the security token) in your pocket and allows you to start the car. Only thing that might be even cooler is the integrated Bluetooth…
The US automakers don’t seem tapped into this trend at all. They still seem to think circumventing milage minimums by pumping out SUVs is the way to sustainable revenues. Last week Ford and GM were put on notice that they were wrong. At least the blue half of this country, and I suspect lots of export markets, are willing to invest their automobile acquisition budget in a choice that reduces pump costs, unsightly and unhealthy smog, and reduces our dependence on foreign oil, and maybe even get a bit of value appreciation while they’re at it. They’re even more motivated to vote with their dollars since their election votes haven’t provided much of a visible return. Yet despite plenty of urging by the environmental community, Ford and GM seem to have ignored the inevitabilities of the long-term. More and more of those purchasing dollars will head straight to Japan. I suspect the next 15 years could be pretty rough as our automobile designers adapt.
Don’t hold your breath. Instead, get your Prius order in now, the waiting lists aren’t short.
[Update 2005-05-17 09:56: Dilbert parodies how out of step our automakers are.]

Nice to see some public visibility shining on the fruits of technical cooperation between Microsoft and Sun. My contacts with representatives from Sun at the W3C, luminaries like Norm Walsh, Marc Hadley, Tim Bray, Eduardo Gutentag, and Roberto Chinnici, have been one of fruitful cooperation (from my viewpoint anyway) for a long time now. If my sample of standards representatives are representative of the quality of all Sun employees, I wouldn’t discount their rather unfortunate stock price just yet.

Hard to believe that it’s been months since I had a spare moment to seek out a geocache. The last ones I logged were in Australia last summer (well, January, which was local summer!). But with an hour to fill before picking up Gen at swim practice last night, my nephew Denali and I spent some time at the Auburn Library Garden Theatre. A very clever cache indeed - in plain sight but camouflaged in such a way that you wouldn’t think twice about it unless you were looking for something slightly out of the ordinary. Can’t tell more - that would spoil it!
So far I’ve found 180 caches in California, Nevada, Oregon, Washington, North Carolina, Australia, Canada, England, and Thailand. I’m hoping to pick up at least one in a couple weeks when I go to Berlin.
It’s nice to see a world-wide activity that depends upon the total kindness of strangers you will likely never meet, to create, publish, and maintain the "game board."

I am very interested in the influences of globalization today (outsourcing rocks - more on that later). Over lunch I read a great commentary (even though it’s from a graduation speech) by Stephen T. Gray called Where the media end and you begin from the Christian Science Monitor [I think at some point soon the full text for this article will no longer be free]. It ties the pace of change in our world to the availability of information (media of all kinds). Some nuggets that attempt to distill the gist of the article:
"People will go right on doing what they’re doing - until they get new information."
"New information drives choices, and choices drive change."
"With so much more information - so many more choices - change will come faster. Add the rest of the world and it’s even more dramatic. Half of humanity lives in information conditions like those of [America] 100 years ago. Roughly a quarter lives in information conditions like those of [America] in the ’50s or ’60s. All of these people are trying desperately to catch up, realizing that better information is the path to better lives. As they do, change will accelerate in their world - and ours."
I’d add to the last bit that the three quarters of the world mentioned above doesn’t need to desparately seek better information conditions to make them available - those conditions will find them soon enough.
"Billions of people can’t get enough information to develop their native abilities. In this century, those reserves of ability will be tapped as never before. … This will spur the fastest advance in human freedoms and quality of life in history."
Awesome.

As part of my duties as chair of the W3C Web Services Description Working Group I maintain a list of the Last Call issues against our spec. In an attempt to bring some software development methodology to the task of resolving those issues, I keep a graph of our status: how many issues are open, which are editorial, which have been closed, and which resolutions have been communicated back to the commenter.
![y1pdydSoBT9m0NS2EX6G8X5GqFTlT39HlXW_n3Y3sGubcgDWfiQ_dfE6r0Wmadl-IvNTwsdkknB8hU[1] y1pdydSoBT9m0NS2EX6G8X5GqFTlT39HlXW_n3Y3sGubcgDWfiQ_dfE6r0Wmadl-IvNTwsdkknB8hU[1]](http://jonathanmarsh.net/wp-content/uploads/2009/04/y1pdydsobt9m0ns2ex6g8x5gqftlt39hlxw-n3y3sgubcgdwfiq-dfe6r0wmadlivntwsdkknb8hu1-thumb1.jpg)
I keep this data in Microsoft Excel, which makes it simple to create the graph, but keeping data in the spreadsheet in sync with the data in the issues list sometimes proves challenging. Yesterday I added a new column to my data (which resolutions have been communicated back to the commenter) to help me judge whether this task will converge on the appropriate schedule. But I didn’t have historical data to work with, as I didn’t see a need to track this data in the spreadsheet until, well, yesterday.
I found the simplest way to extract time-based data was to use the CVS archive which is specifically designed to track changes to a document (and the data within it) over time. CVS gives me a good way to look back at each revision of the issues list and extract whatever the data I need, and associate a date with that data. All I needed to do was walk the CVS history to get a huge pile of dated data.
As an XSLT junkie, I of course found a way to do this within a single transformation. I modified my stylesheet to iterate through a list of specified versions of the issues list XML, extract each version individually from the CVS archive, calculate the totals of each of the classes of issues, and display them in an HTML table that can be copied directly into Excel for graphing.
The data I run the stylesheet over has a list of CVS versions I want to analyze:
<z:data xmlns:z="http://tempuri.org/microsoft.com/jmarsh"> <z:revision>1.69</z:revision> <z:revision>1.68</z:revision> </z:data>
It talkes a while to run (esp. without broadband), so I didn’t do the whole history in one go, though I don’t see why that wouldn’t work too. The XSLT that performs the extraction, run over each <z:revision> looks like this:
<xsl:for-each select="//z:data/z:revision"> <xsl:variable name="issues" select="document(concat (’http://jigedit.w3.org/…/CVS/issues.xml/’, .))"/> </xsl:for-each>
After appropriate totaling, I get a table with all the data I need to generate the graph.
Date Total Active Active (editorial) Closed Responded To 1.69 2005/04/26 214 25 15 115 59 1.68 2005/04/18 212 53 15 85 59
Not even wanting to run some sort of a build script to accomplish this (my Apple Computer days give me a pathological dislike of command lines), I just use the XML/XSLT browsing features in Microsoft Internet Explorer to kick off the transformation. I even did a self-styling trick that allows me to view the data by dropping the stylesheet itself into a browser window so I don’t have to keep two files together.
<?xml:stylesheet type="text/xsl" href="issues-totals.xsl"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:z="http://tempuri.org/microsoft.com/jmarsh" xmlns:i="http://www.w3.org/2003/10/issues"> <z:data> <z:revision>1.69</z:revision> <z:revision>1.68</z:revision> </z:data> <xsl:template match="/"> <xsl:apply-templates select="*/z:data"/> …
The bigger picture: It is becoming clear to me that one workable strategy to avoid information overload is simply to capture as much data as possible, and once you know what you want to look for you can run queries on the data. Hindsight is a wonderful thing! If you end up not needing the data, you only waste a few pennies of hard disk space. In this case, it’s not even my hard drive.
I’m sure I’ll expand on this theme over time as it can be applied to a lot of interesting product and user interface ideas.

Last time I was in New York City I was pretty aware of being out of my element. Walking down the street I’d look at the passersby but felt I had zero capacity to judge who was someone to steer clear of, who was harmless, which alleys should be avoided, whether to make eye contact with a panhandler, etc. I felt like I had to be on my guard all the time, and even so I would be prone to what locals might call stupid mistakes. Having no sixth sense about your environment can be fairly exhausting!
However, I also realized many city natives would have similar problems in my natural environment - living at the end of a long dirt road with no neighbors in sight (well ok, there are two, each a couple of miles away as the crow flies), but they don’t bother me much. I have no problem with the lack of streetlights (moon and stars are better anyway), howling of coyotes rather than taxicabs, knowing which rocks might be attractive for a rattler, which foliage is poison oak, how to round up an escaped pony, or deal with a deer carcass. A city person might feel the need to be constantly alert in my environment, just as I now feel in the city.
Anyway, what brought this on tonight was the presence of a baby rattlesnake in the kitchen. (Only about 18", no buttons yet.) Cute little guy, eh? Just part of living in the country - no big deal. But worth trying out the photo upload feature :-).

Well, at last I’ve had a few moments to set up a blog. Expect an occasional post on XML and Web services standards, technology and product design (or un-design), life at the end of a long dirt road, and an occasional political rant. The opinions expressed here are mine and mine alone, and I reserve the right to disavow them. I hope to grow out of many of my opinions as quickly as possible :-). Enjoy!

|
|