Friday, January 06, 2006
Thursday, January 05, 2006
The technical barriers are daunting. Outlook doesn't seem to have been designed for this kind of plugin at all. Such a plugin might have to use undocumented APIs even to work at all, and then naturally have lots of code to handle changes in those APIs from release to release. Some embryonic work is in progress at OpenConnector if anybody wants to jump right in, or I can put people in touch with each other so email me. At this point, amongst the group of people I've been talking to, we're not even convinced we have a decent approach outlined (so input from MAPI experts is particularly welcome) let alone how much work it would be. But we're starting to talk.
Monday, December 26, 2005
Friday, December 23, 2005
Still, I agree with Tom that despite all these forces against opening up APIs,
there are even stronger forces for having APIs -- competitive advantage. Some company hoping to compete at lower cost will provide the API and try to make up the revenue in other ways or simply survive with less ad revenue. If the service is more valuable with the API people will move to that service. I hope that in a year or few, people won't stand for a calendar Web site that doesn't let them use a standard API to have direct access to their own calendar data.
Wednesday, December 21, 2005
6. "I Will Follow You", by Ricky Nelson
"I will follow you5. "I will Follow", by U2
Follow you wherever you may go
There isn't an ocean too deep
A mountain so high it can keep me away"
If you walkaway, walkaway4. "The Power of Love", by Air Supply
I walkaway, walkaway...I will follow
Even though there may be times3. "I'll Drive All night" by Celine Dion
It seems I'm far away
Never wonder where I am
'Cause I am always by your side
So just remember -2. "Nothing Can Keep Me From You" by Kiss
I'm gonna make you mine
I'm gonna drive all night
till the morning light
I'm gonna roll till dawn
with the windows down
and the radio on
You know I'd drive all night
just to hold you tight
Wherever you are, that's where I'm gonna be1. "I'll Be Watching You" by Sting
No matter how far, you'll never be that far from me
Some how I would find you, move heaven and earth to be by your side
Oh, I'd walk, this world to walk, beside you
Every breath you take0. Christmas Bonus Stalker Song:
And every move you make
Every bond you break
Every step you take
I'll be watching you
He sees you when you're sleeping
He knows when you're awake
He knows if you've been bad or good
So be good for goodness sake!
O! You better watch out!
You better not cry.
Better not pout, I'm telling you why.
Santa Claus is coming to town.
Tuesday, December 13, 2005
To jump to an RFC: rfc xxxx
e.g. 'rfc 2822' (don't forget space)
Internet-Draft Database Search: (shows list with filename substring match): ids keyword
e.g. 'ids dusseault' to find draft-dusseault-caldav-08, but not draft-ietf-webdav-rfc2518bis because 'dusseault' isn't in the title of that oneTo jump to a WG charter: wg wgname
e.g. 'wg imapext'Now Dan Gurney has extended the 'rfc' command so you can use text as well as numbers. You don't have to remember that iTIP is RFC2447, just type 'rfc itip' in the yubnub.org interface, and see results. Thanks Dan!
BTW I personally setup yubnub to work on the address line or search box in Firefox so I don't even go to yubnub before typing my command. One less step on the way to what I need!
Sunday, November 27, 2005
Also if you saw the Butterfly Quilt for Ally, posted earlier on the gallery, well everybody loves it and wants to be my niece too. I don't have an opinion from my real niece (she's only one year old, after all, and extraordinarily easily bored) but her parents love the quilt. Whoo hoo!
Saturday, November 26, 2005
The SIMPLE WG has been working on some HTTP extensions and using XML in order to allow instant messaging clients to interoperably edit buddy lists (stored on the IM server) and other configuration data. Special functionality to modify/retrieve XML stored on an HTTP server is rampant these days, so it seemed like a good idea to consider general mechanisms, rather than only design mechanisms limited to SIMPLE use cases. So Jari Urpalainen has been working on a general XML diff, or patch algorithm -- like Unix diff files, only specialized for XML (operations that can add or remove branches from the XML tree structure, rather than operations on lines as in text diffs).
Once the SIMPLE WG was potentially working on such general mechanisms, it seemed like a good idea to hold a BOF (Birds Of a Feather) meeting to see if there were general use cases and find or identify other potential IETF participants. Some places where we thought we'd see interest:
- WebDAV allows authors to collaborate on documents stored on HTTP servers. Sometimes these documents are quite large and it would be useful to be able to upload changes without sending the entire file again. In fact, Adobe engineers have talked to me about this -- some of their WebDAV functionality is intentionally designed to limit the number of times large files are exchanged between client and server, so that the user isn't constantly waiting for slow uploads or downloads. Obviously an XML patch format only works if the document is in XML, but some Adobe tools do support XML formats (e.g. InDesign). Another piece to this puzzle is the HTTP PATCH operation I've proposed, an idea I intend to come back to shortly particularly if I get any help (hint, hint).
- The NETCONF WG is pursuing ways to interoperably configure network devices and has also settled on using XML and HTTP. They've got very similar problems of wanting to make small changes to large data sets.
- Large Web pages in XHTML could be edited using an XML diff format to upload only changes.
- Large Web pages in XHTML could be downloaded faster using RFC3229 and an XML diff format. A text diff is used today but an XML diff format could be even more efficient, particularly for...
- Blog feeds. Today, a blog feed can be a large XML file, in Atom or RSS format. Today, if the ETag or Last-Modified timestamp of the blog feed changes, the newsreader client downloads the entire file. Similarly, to add a single new post to the feed, blog editing tools may have to upload a new feed file (unless the server does this magically somehow). This is really just a special case of the general "large files being shared" case, but since blogging generates so much traffic it seemed worth mentioning.
to form a separate effort. So the work proceeds on the SIMPLE mailing list. Still, I plan to keep up with Jari's work and possibly help him generalize it further -- for example, we may add the ability to make changes to text values of XML elements without replacing the entire text value.
Note that there exist other XML diff formats, but none of them are standardized. Microsoft's got one, the W3C has tackled this both for rdf and more generally (though the W3C didn't have any guidance for the IETF when we asked about this BOF), and it's been the subject of several theses: treepatch, diffxml and a survey.
Tuesday, November 15, 2005
The BOF I attended last week, however, was much more focused: it was about whether or not the IETF should charter a group to work on a specific experimental solution for internationalizing email addresses as outlined in several draft documents. That solution focuses on SMTP, so that "consenting adults" in an environment that wants to do i18n addresses may do so, and SMTP agents have a reasonable way to deal with these addresses when communicating to the wider world. It's a somewhat transitional approach, acknowledging that existing Mail User Agents (MUAs) and Mail Transport Agents (MTAs) won't immediately be able to handle these.
The discussion was mostly abour risks and unknowns. Some of the risks:
- It's not known how (and when, and by whom) IMAP would be updated to handle i18n addresses, and how clean that could be.
- It's not known how POP would be updated to handle i18n addresses (Chris Newman stepped into the line of fire here)
- It could be difficult to manage VCards, iCalendar objects, and Web pages where mailto URLs and email addresses appear. Some of these support i18n, some don't; even ones that do may have incompatible representations.
- Although i18n addresses are supposed to remain within these groups of consenting adults and be transformed before transmission to non-i18n MTAs, it's not known to what extent these would actually leak out.
- When these do leak out, the user experience of email users with non-i18n MUAs could be unsatisfactory.
- There will probably be serious difficulties when non-i18n MUAs are used to try address mail with i18n addresses -- it's possible that sometimes only an i18n address is known and the user can't figure out how to enter it or isn't allowed to by their software.
Normally the IETF is rather risk averse when there are so many unknowns, particularly when 'Net fragmentation might occur. In the past the IETF has gone around and around trying to get more certainty before even chartering a working group. This time, however, since there have been so many discussions and stalled related efforts before, the attendees took a leap into the unknown and approved the working group -- unanimously, I believe. Imagine Admiral Farragut's sailors taking a "hum" and deciding together to damn the torpedoes.
Tuesday, November 01, 2005
Although it's been pointed out to me that doing jello shots at parties is more of a twenty-something activity than thirty-something, I don't care. I never did jello shots before so dammit, at our party this past weekend, I was determined to do jello shots.
The ostensible excuse was the Hallowe'en theme: orange jello shots with black "eye of newt" in the bottom. I used black tapioca pearls, the kind that are served in "pearl tea" which I love. I found packages of dried black pearls in an Asian grocery store and this worked well.
1 large package orange jello
2 c. boiling water
1 c. mandarin vodka (or other clear liquor)
1 c. cold water
1 pkg tapioca pearls (five servings)
Boil tapioca pearls -- I found it took longer than the advertised 5 minutes. Drain and rinse and distribute into little paper Dixie cups (I used about 20 but these were smallish shots). Mix boiling water and jello powder to dissolve then add liquor and cold water. Pour mixture into cups and put into the fridge for about an hour.
The paper cups are important because you have to squish the jello shot out into your mouth. Leaving the jello solid too long before serving means that the pearls get harder so don't prepare too far in advance.
Friday, October 14, 2005
- The CALSIFY WG met at the last IETF for the first time. We found authors to revise the iCalendar suite of standards (RFC2445, 2446 and 2447). We're meeting in November in Vancouver to discuss progress and open issues on these.
- The CalDAV proposal for standardizing calendar access (personal, group or public calendars) is going very well. We're very close to a draft we can last-call at the IETF. I'm proud to say that OSAF's Chandler and Cosmo both do some CalDAV and can test basic interoperability with other clients and servers like Sunbird and Oracle's server. I'm demoing some of this at Educause next week.
- We're starting to think about what extra metadata is needed to do public event calendars well -- for example, good location information. There's a technical committee within CalConnect talking about this, including EVDB/Eventful people.
- Another new CalConnect committee is discussing the application (and perhaps in some cases, adaptation) of these standards for use on mobile devices.
Sunday, October 09, 2005
Thursday, September 15, 2005
Reasonable people adapt themselves to the world. Unreasonable people attempt to adapt the world to themselves. All progress, therefore, depends on unreasonable people.
George Bernard Shaw
Monday, August 29, 2005
Thursday, August 04, 2005
Philippe also pointed to this blog commenting on OSCon, CalDAV and various calendar product and server providers.
Monday, August 01, 2005
- 1 day in 7e, up Eiffel Tower to see whole city, then walk around Invalides and École Militaire (would have been even nicer to go into Army Museum)
- 1 day bike tour of Giverny and Monet's garden, being restored and regrown the way Monet grew it in order to paint it. Interior of Monet's house also fantastic due to the dozens of Japanese prints that influenced his aesthetic.
- 1 day Louvre to focus on the grand gallery, 19th centure and famous works of art I hadn't seen yet. Favourites include Ingrès and David's portraits of women.
- 1 day Centre George Pompidou, include main collection and special expositions (this time: Africa Remix)
- 1 day Versailles, include Grand and Petit Trianon as well as main buildings by going for the day pass
- 1 day Musée D'Orsay -- no, make that two, there's so much to see here and I really wanted to go slowly due to my interest in the impressionists and symbolists
- 1 day seeing the Galliera de Mode (not very big) and, inspired, go clothes shopping
- See the end of the Tour de France -- bonus!
- Pop into Musée Cluny for medieval textiles, tapestries, roman baths, stained glass and other cool stuff
- Every day: tiny cups of espresso at street-side cafés, baguettes, cheese, olives, pastries, and sometimes crêpes, ice cream, mussels, frites, duck, foie gras, prosciutto and rocket (roquette) salad
What I still wish I could do:
- Musée Marmottan has still more Monet works (than can be seen at Giverny or Musée d'Orsay) and it's on Bois de Boulogne which features in so many history fact and fiction books
- Rivoli Museums
- Musical Instrument museum
- Chartres
- Orangerie museum in Tuileries, Tuileries gardens themselves
- Grand Palais and Petit Palais
- More time browsing books and shops on left bank
Tuesday, July 12, 2005
Have you ever heard project managers talk like this?
We decided to take a different tack with the rollout project, after we ran afoul of the ordering processes. Julie was swamped with acquisitions paperwork and helping Sam learn the ropes, so we deep-sixed the new hardware. Office scuttlebutt is that the boss wants to cut expenditures so it's easier to go with the flow on that one. The OS upgrade project had a minor hitch, but that project is on deck now -- all we have to do is tie up the loose ends and it'll be all sewn up. That will put us on an even keel for the rollout and if nobody rocks the boat the support team will stick with us until the bitter end.
Although this is fictional I've heard all these colloquialisms in the office, and probably only recognize them as nautical because of an interest in etymology and a couple years of sailing. A non-sailor or person for whom English wasn't their native language might have a hard time seeing where these come from (and thus, how to use them properly). Herewith, a guide.
To take a different tack is a change in direction while sailing. Tacking itself means to progress by changing directions frequently, like zigzagging. This is necessary to make progress into the wind: a boat can sail quite fast when it's pointed nearly into the wind, but it can't make progress directly into the wind. Thus the boat zigzags so that the wind comes over the port side first, then starboard, then port. Don't replace with the word "tact" as Michael Rubin did.
To run afoul is to hit a snag, a complication, particularly in laws, regulations, contracts or processes. On a sailing boat a fouled rope is one which is caught up in another rope or another piece of equipment. Fouled ropes can cause quite a tangle if sailors keep doing what they're doing.
Swamped is quite suggestive, as a swamped boat is literally filled with too much water. A swamped boat is not only heavier but also sits lower in the water and presents much more drag on the water, so no wonder a swamped boat moves so slowly.
Learning the ropes is exactly what a sailor does on a new ship. Sailing ships have very individualistic rigging, often the result of years of modifications and jury rigs.
Deep sixing is burying something in six fathoms of water (a fathom is six feet), deep enough for it to be gone.
Scuttlebutt was the term for ship-board gossip. A butt is a cask of a certain size. A scuttle is a small hatch on deck. Thus, the scuttlebutt is a butt lashed onto the deck near the scuttle. Often this butt contained fresh drinking water. How a propos that today this might also be called "water cooler talk".
Go with the flow is simple -- it can apply to the flow of a river but also to the tides. Leaving harbour when the flow (the tide) leaves is much easier than going against the tide.
Hitch is a specific kind of knot tied in the middle of a rope. When winching a rope, winding it or running it through a cleat, a hitch would temporarily stop progress. However, it's not as bad as a fouled line.
On deck meant something physically on the deck of the boat, the exterior top surface where people stand. This probably migrated first to baseball where the batter going next is said to be on deck.
Tying up the loose ends meant to literally clean up the long ends of lines (ropes) hanging off a rigging once it was rigged. Loose ends were dangerous on ship, causing fouled lines and getting in the way of sailors moving around. Naturally this was always the last step in rigging, part of doing the job well.
All sewn up probably refers to the shroud around a corpse prepared for burial at sea. A corpse ought to be weighted down by something like a cannonball. The cleanest way of doing this was to put the cannonball and the corpse together in a piece of sturdy sailcloth and sew up the edges. After being sewn up there was nothing left to do before burial.
Even keel is a ship's position. The keel is the center bottom line of the boat from front to back. A ship with an uneven keel, dipping into the water more at either bow or stern, was probably badly loaded. An uneven keel meant that the ship wouldn't sail as efficiently because it would not present an optimal profile for water resistance. More generally it simply means going smoothly, steadily, without waves rocking the boat.
Rock the boat is too simple to need much explanation...
Bitter end is a very specific end of a line (rope) -- the end that goes around the bitt, a kind of deck post. I guess sailors would be told to pull on or coil the rope until they reached the bitter end.
(Sources: take another tack, deep six, scuttlebutt, all sewn up; also other pages on same sites)
Saturday, June 25, 2005
IMG_3437.JPG
This posting has also been a test of the flickr photo-blogging tools. They're impressively easy to use, at least with a blogger blog.
Wednesday, June 22, 2005
I tried to explain that the laws are not what Bob Blakley calls "desiderata" - things that we would like to see. They are the objective characteristics of an enduring identity system at Internet scale.
Oh, but how often we turn out to be wrong about these seemingly objective characteristics. Kim's Law 5 on Pluralism of Operators and Technologies understands that there will be more than just one identity authority, but wishfully states that there must be one "encapsulating protocol (a way of agreeing on and transporting things)". This reminds me of a heated BOF three years ago at the IETF for a WG I ended up being heavily involved in, chartered to take the Jabber protocol and standardize it as XMPP. At the time there was already another IETF WG doing instant messaging, and a friend of mine got up at the microphone, objecting to the formation of the WG, clearly quite upset, saying:
But you can't have two instant messaging protocols! That's like -- that's -- that's like having two IPs!
Of course the irony is that the IPv6 WG was probably right down the hall working out how to co-exist with IPv4 during an extended, possibly interminable transition period. And today we have both XMPP and SIMPLE and gateways between instant messaging protocols -- not just two, but probably more like eight (including MSN, AOL and other pre-existing systems). Much as we'd like computer systems to be simple, considerations of backward compatibility and competition between aesthetic models, among other things, keep things exciting.
Monday, June 20, 2005
Monday, May 30, 2005
Well, I'm encouraged to hear I might be wrong. It seems this is a common myth, and that other well-off countries have similar weight profiles, as explained by Paul Campos in a TCS interview (I keep reading TCS for exactly this kind of myth-busting material though many articles are more boring). I wish the article provided links supporting the claims, because there were a few quite interesting tidbits from the article:
- The CDC had previously estimated 400,000 deaths from obesity in 2004 but has recently had to revise that figure significantly downward (following CDC links, I see the surgeon general now says an "estimated 300,000 deaths[/year] may be attributable to obesity").
- The classification of "overweight" in children is defined as the heaviest 15% of children for a particular age cohort. That would mean nearly a million children are labelled overweight because they're defined that way. According to that methodology, 15% of children in a third-world, famine-wracked country would also be overweight. I can't find evidence at CDC of this methodology but there was a study showing that 16% of teens had been found to be overweight [*].
- There's no strong evidence that Type 2 diabetes -- one of the diseases justifying the labeling of obesity as an epidemic -- has increased, let alone having increased due to weight factors.
- The governor of Arkansas has written legislation proposing that body weight index be part of kids' report cards. If I were in Arkansas I would write him personally to indicate my disgust at such misguided and potentially harmful interference in the family.
One nasty statistic I picked up myself from the surgeon general's note is that "Overweight adolescents have a 70% chance of becoming overweight or obese adults". Yikes, oh no! But combine that with the claim that 60% of adults are overweight or obese, and a sensible person will see that so-called overweight adolescents would have only a slightly higher (if measurable) tendency than non-overweight adolescents to become overweight adults. Sigh.
Wednesday, May 25, 2005
Wednesday, May 11, 2005
I got some satisfaction, however, when they asked me why I was cancelling their card. "Because of the automated voice assistance system", I said -- and this was typed in without comment by the operator. I only felt the teensiest bit bad for lying.
Sunday, April 17, 2005
To put it bluntly, a knitting conference can be hostile to men. The interaction style is touchy-feely -- women walk right up to strangers and fondle their knitted garments, invading personal space. Although some have said that men aren't discouraged from attending and in fact receive positive attention for being there, this can be of the form of "How nice it is to have men attending", "Is this knitting book for your mother?" (ref) and "I'm sure your wife will love this yarn.
All the instructors at knitting conferences are female, and one wonders if the mostly-female program committee could have something to do with that. In the expos or markets, one finds patterns for shawls, purses and female garments. Although some of the market vendors are male, they are clearly there as "booth bunnies", to attract women to look at the yarn. Some of the male vendors are even pressured to wear demeaning and ridiculous knitted vests.
What can we do about it? Well, we can be more equal in our language, for a start. Articles like this, although mentioning a few knitting men, are given titles like "The yarn is flying as more women discover the joys of knitting." Vendors like Habu textiles are taking a step in the right direction, offering stainless steel yarn, which is sure to appeal to men. Joe, a male knitter, has some other great ideas, such as making the act of knitting into more of a competition.
Saturday, April 16, 2005
The once beautiful Bale’s and other buildings have long since fell into a state of disrepair. It was as if the villagers had ‘locked-on’ to the ring of the till from the tourist dollar. This was more than evident when I had a short but sharp conversation with one of the souvenir sellers:
Tourist: I was here 18 years ago and I am surprised at the change in the village.
Seller: (Abrupt tone) What’s wrong with the village?. Now I have a motorbike. We have TV and electricity and... a phone!
It was my point precisely! Too many cultures in this world are decimated by the tourist dollar. Not only that, the intrusion of the modern world has an overall affect upon the social, religious and political aspects of that society. So much so that it literally forces the entire socio-cultural structure to undergo a metamorphosis in order for adaptation. Having said that, tourism is good for the state of the economy in any country. However, when it has a serious affect on the core culture of that country, then it becomes disadvantageous.
Much as I'd love to visit other countries and have them be all picturesque and unique, I can't begrudge a Balinese his motorbike, TV, electricity and phone. I wouldn't give up my conveniences to live in the style of my grandmother, nor would I appreciate pressure to maintain the religion of my ancestors. A tourist like this one would have to stop being a tourist (being one of those intrusions), go back to the country of his own ancestors, give up his own conveniences etc. for me to take those sentiments seriously.
Tuesday, April 12, 2005
Saturday, April 09, 2005
Ekr points out that the question "Who's your favorite philosopher" does not have an analogue in all fields. In highly technical fields, you wouldn't ask "Who's your favorite cryptographer" or "Who's your favorite biologist". OTOH it's common for musicians to talk about their favorite pianist or favorite composer, for painters to have a favorite painter, and for writers to be asked about their favorite writer (it's a formula interview question particularly for writers). So I guess that means that in not only asking the question but insisting on it as a valid or important question, David Brooks is implying that philosophers are like artists, their work subject to aesthetic judgements, preferences and stylistic likes and dislikes. I'm not sure that's what he intended in bringing attention to the question.
Wednesday, March 30, 2005
- Ted pointed me to Mosuki, and I hope to meet some of the creators shortly. It's more oriented towards personal calendars than the other sites but it does allow you to share.
- I met Brian Dear a few months ago and heard about EVDB. Now that it's announced, I can talk to others about it too. Scraping sites for event and venue information sounds like a really valuable service.
- Kragen Sitaker showed me a del.icio.us-like calendar site that seemed pretty cool. Rather than try to scrape every page, his demo let the user pick certain text, send it to the demo site and it would turn that text into an event (pulling out date, time and location if it could) on your calendar.
- Brian posts about Upcoming, a public events site with feeds to let you know about event categories you're interested in, and a way to add events you want to your personal calendar. It has a HTTP/iCalendar interface that allows users to synch into iCal. According to del.icio.us, upcoming is the biggest new thing with hundreds of bookmarks.
- So far, Trumba's newly announced OneCalendar gets a rather less enthusiastic response. Trumba consists of several ex-Visio guys according to their press release, and like EVDB they have high-powered investors so expect some noise. Already you can synch with Outlook which has got to be a highly desired feature.
- Of course, we are working on some of the same stuff too, only with a federated server approach. When you share your calendar with Chandler you can share it on any WebDAV or CalDAV server (see also recent article). We're working on a WebUI for such shared calendars so that the calendar owner or their friends can view the shared calendar or individual events just by going to the URL in the browser. We may do tagging just like everybody else, too.
I wonder what Yahoo, Google and Microsoft are going to do in this space? Yahoo has more of the world's calendar info than any other site at this moment, because of its excellent support for group calendars. What will Yahoo do with that data? If it does not expand its features soon, possibly allowing users to synch up calendar data on the site with their client software, Yahoo will soon see its calendar data decay and vanish. As for the two gorillas, I really don't have any idea whether they will buy, innovate, or crush.
Sunday, March 20, 2005
Thursday, March 17, 2005
The application I had in mind (Chandler) does more synchronization than browsing over HTTP/WebDAV. For example, if the user decides to work offline, and while offline moves a bunch of resources from one collection to another, then goes online again, Chandler would have to issue one MOVE request for each moved resource. With pipelining, Chandler could theoretically fire each request off and wait to start seeing the responses come back in order over the same connection. The only thing limiting throughput is the bandwidth and MOVE requests and responses don't take up that much. Without pipelining, Chandler has to wait for each response before sending the next request. Now this work is limited by latency, multiplied by the number of resources being moved.
Still, I don't consider this proof that pipelining would be useful. It would be great to see more data one of these days -- assuming, of course, that there really is a performance problem in the first place.
Tuesday, March 15, 2005
Thursday, March 03, 2005
Tuesday, March 01, 2005
Monday, February 14, 2005
- the Catenate proposal, used to allow clients to more efficiently work on draft messages stored on an IMAP server
- URLAUTH, which lets one user show an attachment to another user without sending them the whole attachment (basically I give you authorization to view my copy on my server)
- Server-to-server requirements for email event notification systems -- intended to allow voice mail and email servers from different vendors work together more smoothly
- The BURL draft, allowing clients to forward an email without downloading and uploading it again as email systems currently require.
Sunday, February 13, 2005
The "gallery" at the Stitches conference is very ad-hoc -- it's on the backs of the attendees. Here's a few pics of people I saw.
Tuesday, February 01, 2005
The reward theory has been debunked somewhat in Cialdini's book Influence,
the Power of Persuasion. Some brief reasons to doubt the reward theory:
- Even consistently negative publicity encourages copycat suicides
- Copycat suicide demographics are surprisingly similar to the original suicide (e.g. 35-year old women don't tend to see Kurt Cobain's suicide as one to copy no matter how much glory is supplied)
- Deaths which are not publicized as suicides but which might have been (car and plane accidents) provoke a rash of similar deaths even though there's no glorifying of suicide.
Dorothy Parker seems to have intuitively understood this. I recently read Bobbed Hair and Bathtub Gin, a look at literary culture in the Twenties by examining the lives of Dorothy Parker, Edna St. Vincent Millay, Edna Ferber and Zelda Fitzgerald. Dorothy attempted suicide several times in her life, each time via a different approach, and damaged her own health and reputation. In her short story "Big Blonde", Dorothy wrote:
There was no settled, shocked moment when she first thought of killing herself; it seemed to her as if the idea had always been with her. She pounced upon all the accounts of suicides in the newspapers. There was an epidemic of self-killings -- or maybe it was just that she searched for the stories of them so eagerly that she found many. To read of them roused reassurance in her; she felt a cozy solidarity with the big company of the voluntary dead.The subtlety of the copycat suicide effect probably means there's no easy solution. It doesn't work to have the media to portray suicides negatively -- that doesn't prevent the social proof phenomenon and may even strengthen it. We probably don't want to instruct the media to entirely suppress news of suicides. Even if we did that, there's still fiction and possibly other art (music lyrics?) -- and even if we censor art there's still deaths-which-might-have-been-suicides.
Despite these subtleties, most journalism codes around discussing suicide in the media focus on the glorification aspect. E.g.
a licensee must not broadcast a program which depicts suicide favourably or as a means of achieving a desired result (ref)
The WHO report from 2000 also talks of glorification and acceptance of suicide as an understandable response, but it goes even further, stating that "certain types of coverage may help to prevent imitation of the suicidal behaviour" (p 6). However, I've not yet seen evidence of that, and I worry that is merely wishful thinking. If Cialdini's model is closer to being correct then the very type of coverage that the WHO report suggests may do more to encourage copycat suicides by mourning the deceased, providing details of their life and families, and providing "risk indicators and warning signs" which can trigger the role model effect.
Update: I've never updated a Wikipedia page before, but this seemed a good time to try. I added the paragraph on Cialdini's social proof model.
Monday, January 31, 2005
Here's the facts: California is adding an electronics recycling fee, which retailers apply based on size of display, from $6 to $10 per display. This includes laptops, monitors and TVs.
Morning Edition added the factoid that California pays recyclers $0.48 per pound to process the displays, to chew them up and sorting the resulting bits into plastic, glass, etc. From this factoid and the fee rates, Morning Edition concluded that the tax would certainly not pay for disposal. They gave an example of a 53 lb monitor, which would be taxed at $10 at time of purchase but would cost $25.44 to recycle.
With the information provided so far in the program, I could see immediately several flaws in their argument. First, not all monitors are that heavy. People buy 5-10 pound laptops, pay $6 or $8 fee at purchase time, and those only cost $2.40 to $4.80 to dispose of. Second, there's time-value of money: the $10 paid for the 53 lb monitor is paid years before that monitor has to be recycled, and if the state saved that money it could accrue interest.
Even if you say that this year's recycle fee income should cover this year's disposal costs (rather than allocate the fee to one item over its life) it's entirely possible that the program does pay for display recycling. It works if people buy more lightweight displays (for which they overpay on the recycle fee) than heavy displays (for which they underpay). At the same time, it also works if people buy more displays per year than they dispose of -- also a reasonable possibility.
This kind of thing in the media bothers me more and more. It makes me think "How stupid do they think I am?"
Tuesday, January 11, 2005
Tuesday, December 14, 2004
- Petter Hesselberg wrote Min Konfekt in Norwegian and provided an English gloss of that
- Mark Irons wrote Little Mole
- Craig Clark wrote Precious Girl
- David Short wrote Sweet Jeannou
- Melanie Mitchell wrote To my sweet (or in her more wordy version, "To be a joy forever to my sweet")
- Enno de Witt wrote Teder Wicht in Dutch (gloss, anyone?)
- Kat Walsh wrote Sweetest Rose.
Rather than provide my own translation, I wondered what Babelfish would provide. To get a decent approximation I had to remove line breaks (format as a paragraph), replace abbreviations with fully-spelled-out words, and modernize a couple words. My input:
Ma mignonne, je vous donne le bon jour; Le séjour, ce est prison. Guérison recouvrez, puis ouvrez votre porte et que on sorte vite, car Clément le vous commande. Va, friande de ta bouche, qui se couche en danger pour manger confitures; si tu dures trop malade couleur fade tu prendras et perdras le embonpoint. Dieu te donne santé bonne, ma mignonne.
Babelfish spit out (with me re-adding the line breaks as with the original):
My nice,
I give you
the good day;
The stay,
it is prison.
Cure
cover,
then open
your door
and that one left
quickly,
because Clément
orders you.
Goes, fond of delicacies
of your mouth,
which lies down
in danger
to eat
jams;
if you hard
too sick
insipid color
you will take
and lose
the plumpness.
God gives you
good health,
my nice.
Not too bad, really, though I had to trick Babelfish to get it to be even that good.
Sunday, December 12, 2004
Don't drive like a jerk,
Or be late paying fees,
Steal Post-Its from work
Or share mp3s,
Santa Claus is coming to town.
He's making a list,
Of those who can't fly,
With guys who made jokes,
In the security line,
Santa Claus is coming to town.
He knows if you've been cheating,
On your taxes or your wife,
He knows if you've been smoking pot,
Three strikes and you're in for life.
Anyway, happy holiday season.
Wednesday, December 08, 2004
Monday, December 06, 2004
Tuesday, November 30, 2004
Monday, November 29, 2004
- Model-driven architecture is rigid, at least with the tools as we know them today.
- RDF has a simple basic model but leads to very complex structures, as Adam Bosworth explains.
- Pictures express complex relationships relatively readably, like the picture in this paper. Unfortunately we need to translate the pictures into text in order to use these in software and network protocols.
- The more complex your picture is, the more unreadable your text is.
- Text has to be relatively flat to be readable.
- References in data formats are like "goto" jumps in programming -- you lose context.
- Maybe if data modelers put a little more thought into flattening their models we'd find them easier to use? This may make the models seem less "rich" but "KISS" is good too.
The "relatively flat" observation seems to hold at least some validity in data formats, programs and even books. Experienced programmers, with the help of good indenting, can see quickly that they're within an 'else' statement inside a loop inside another loop inside an 'if' statement, but even experienced programmers screw this up sometimes (and even more experienced programmers flatten out the code by delegating some reasonable piece off to another method). Books are better if there's no more than three (maybe four) layers -- chapter, section, sub-section, and even this much organization requires human-readable text to link from one section to another and summarize what a bunch of sections are going to say.
Thursday, November 25, 2004
Tuesday, November 16, 2004
Friday, November 12, 2004
Being aware of bias is something I agree with, but I do worry about blinkered views of the world. Too many people reading some highly biased source will simply not read any opposing source, or do so with only mockery in mind. We've got plenty of polarization, thank-you. So my preferred model is journalists who say "Here is my natural bias, and here is me being as unbiased as I can be in covering this topic, through rigorous reasoning and discourse with others who disagree with me."
Sunday, November 07, 2004
- A description of the model
- Implementation requirements
- Examples of protocol usage
- Definitions/schemas
The model
The model is key for first-time readers and for people who need to know something shallow about the protocol. There are different kinds of models that are important for protocols, and some of them are described (and examples given) in one of Ekr's works-in-progress:
- The protocol messaging model. Do messages have headers and bodies, or do they have XML element containers? Does the server respond to messages in the same connection? In a fixed order? Can the server originate messages?
- The protocol state machine. Are there different states (e.g. pre-handshake, pre-authentication, and main state)?
- The protocol's data model. What data types are there and what relationship do they have to each other -- folders and messages and flags (IMAP), or collections, resources and properties (WebDAV)?
- The addressing model, which is almost part of the data model. In SIMPLE you can address other people whereas in XMPP you can address not only human actors but specific software instances running on behalf of those humans. And not to be speciesist, non-humans as well.
The model is important not just for first-time readers and shallow users but also later on for deep users who want to extend the protocol. HTTP has been extended in many ways by people unfamiliar with the way the model is supposed to work. For example, HTTP normally uses the Content-Type to declare the type of the message body, just as one would expect from a concept borrowed from MIME and a messaging system. However, one extension to HTTP (now part of HTTP 1.1 or RFC2616) breaks that model by applying an encoding to the body and that encoding is specified in a different header. So if that feature is used the Content-Type no longer strictly works that way. RFC 3229 moves further away from the MIME-like model as it extends HTTP -- it defines an alternative model, where the Content-Type refers to the type of the resource that is addressed. So now of course there's a schism in the HTTP community about which is the best model to proceed with, to the point of having academic papers written about the alternative models. More clarity about the model in the first place would have helped not only first-time readers of the HTTP spec but also might have helped have fewer problems with these extensions.
Finally, a clear model helps implementors remember and understand each of the requirements. Humans have trouble fitting a bald list of requirements into some memorable pattern, so give implementors a mental model (or several) and they'll do so much faster, with less confusion and mistakes.
Requirements
The requirements are deeply important, as much so as the model. At the IETF we place so much importance on the wording of requirements that we have a whole standard describing the wording of requirements. Why?
First, models can be interpreted differently by different people. This can happen very easily. IMAPv4 was originally defined in RFC 1730 and there was a lot of text about the model, particularly the different states. However a lot of people implemented the details differently and RFC2060 had to get more specific. Finally, RFC 3501 revised RFC 2060, and most of the changes made in RFC3501 were simply clarifying what the consequences of the model were for various cases -- because implementors made different assumptions, came to different conclusions, and argued persistently about the validity of their incompatible conclusions. Chris Newman explained this to me today when the topic of models + requirements came up, and he should know -- he authored/edited RFC 3501.
Second, a model explains how things fit together, whereas requirements explain what an implementation must do. Implementors are human and operating under different pressures, so it is easy for implementors to read a lot of flexibility into the model and the examples. Clients want to believe that servers will do things similarly (makes their logic easier) so they tend to assume that is the case. So when things are flexible, they must be explained to be so, to encourage client implementors to account for differences. E.g. RFC 3501 says
"Server implementations are permitted to "hide" otherwise accessible mailboxes from the wildcard characters, by preventing certain characters or names from matching a wildcard in certain situations."When things aren't flexible, the document needs to say so so that implementors aren't given any wiggle room or room for confusion. In RFC3501 we see
The STATUS command MUST NOT be used as a "check for new messages in the selected mailbox" operationThis text is much stronger than saying that the "STATUS command requests the status of the indicated mailbox" (that sentence is also in RFC3051). It's even stronger than saying that the STATUS command isn't intended as a way to check for new messages. (It might be even clearer to say that "client implementations MUST NOT use the STATUS command..." but this is good enough.) IETF standards-writers and implementors have learned painfully that they need to use well-defined terms in attention-getting ALL CAPS in order to get implementors not to misunderstand wilfully or accidentally, whether something is a requirement.
A few more reasons why requirements are needed:
- Requirements often add more detail than the model should hold. Since the model should be high-level and readably concise, it can't be expected to define all behaviors.
- Sometimes requirements are examples of the conclusions that somebody would draw if they fully understood the model and all its implications. These have to be complete, however, not only selected examples, because no two people have the same full understanding of the model and all its implications. The requirements help people go back to the model and understand it the same way.
- Human readers need repetition in order to understand things. Sometimes the requirements restate the model in a different form, and that's fine. When essay writers want their audience to understand they say what they're going to say, say it, then say what they said. We can make our standards more interoperable by balancing that approach with our typical engineering love of elegance through avoiding redundancy. Humans aren't computers, so the engineering avoidance of redundancy in code isn't fully applicable to human-readable text.
Examples are, thankfully, better understood. It's pretty rare to see a protocol go to RFC without a few good examples. Readers expect and demand them (more so than the model or requirements) because we know from reading many kinds of technical documents how useful examples are. I hope I don't need to justify this too much, in fact I find I need to do the opposite and remind people that examples do not replace requirements or models. Implementors need examples to understand the requirements and models but they can easily draw conclusions from examples that are counter to the requirements and don't fit in the model. When a specification has an inconsistency between a requirement and an example, trust most developers to implement to match the example, not the requirement.
Definitions/Schemas
Definitions and schemas also tend not to need much justification in a techie crowd. We're attracted by the idea of having absolute certainty about what's valid by trusting a program to compare an example to a definition or schema and validate it. So once again, I have a caveat to offer rather than a justification: make sure that definitions or schemas are put in context very carefully. Can an implementor use the schema to validate incoming XML and reject anything that doesn't match the schema? Probably not, or else it would be impossible to extend the protocol. Early WebDAV implementors built XML schema validators into their servers and rejected client requests that extended the protocol in minor ways that should have been compatible, so I'm taking this lesson from actual experience.
I certainly can't say that when I'm a protocol author, I succeed in doing all of this. But after eight years reviewing and implementing good and bad protocol specifications, I'm beginning to see what works.
Comments welcome.
Thursday, November 04, 2004
If it's hard to grok this completely abstractly, an IMAP client/server are good to mentally plug in. There are so many different IMAP clients and servers and they all have different APIs, storage models, and internal data models. By "data model" I mean data structures or object models, including caching and relationships between things. So if your Java code instantiates a MailMessage object which has a link to a EmailAddress instance for the 'From' field, that's all part of the internal model. The protocol's data model is similar: in IMAP there are folders and mail messages, mail messages have headers, one of which is the From header, and so on.
So I intended this diagram to convey a whole lot of stuff.
The protocol is the most inflexible part of this system. If you've got any interoperability at all with your protocol, even between unsynchronized releases of client and server, then your protocol is the most fixed element in the system. People constantly use new clients to talk to old servers, and old clients to talk to new servers, which means that even when new clients talk to new servers you're likely using an old protocol. Since your protocol is the hardest thing to change, both its syntax and its data model, it had better be extensible, basic and support many usage models.
The internal data model is the most flexible part of this system. APIs and protocols must continue to be supported across releases. Storage formats are easier to change than APIs but often require upgrade steps. Thus, the internal model is actually the easiest thing to change. Doesn't that mean that it's less important to get that right, because it can be tweaked and refactored to do new things or benefit from new knowledge? Yet many architects focus deeply on the internal model, spending much more time getting it right than the API or the protocol.
Client, server and protocol data models and content models diverge. Many architects design a networked system that starts with the same data model on the client and server and thus naturally they want the same data model expressed in the protocol. But these diverge naturally, sometimes even before Server 1.0 and Client 1.0 ship. For example the implementors of Server 1.0 discover that they need to cache certain strings together for scalability and subtly the data model on the server begins to change. Be aware from the beginning that this will happen. It's not a bad thing. It may even be a good thing to allow the server to be fast and the client to innovate on features.
Practice information hiding at the dotted lines. These are the places to really focus on modularization. Many software developers already understand that your API shouldn't be tied directly through to your storage model and this principle can easily be extended to the protocol modules. I've written bad code that tied too much to the protocol so I'm guilty of that one myself. It seems that unless there's a good reason, the protocol implementation shouldn't be tied directly to the storage model (the implementation should instead retain the freedom to change how things are stored without rewriting everything). It might not be so bad to tie the protocol to the API, i.e., by implementing the protocol logic using only the API. That way, any internal changes that leave the API unchanged, also leave the protocol unchanged. But that isn't always the best choice -- sometimes the protocol support needs access to internals and you don't want to complicate the API too much just to make the protocol fast.
Corollary: Use the best technology and architecture choice for each component independently. Because your client model will diverge from your protocol model and that one from the server model, data model consistency is not a good reason to use the exact same table structure or even the same database software on the client and server. (There may be other good reasons like expertise). Don't try to create the same indexes; the client and the server data access patterns will also diverge if they're even the same to begin with. Don't try to recreate the same caches. Send your server and client teams to different countries to work, maybe! That way the protocol becomes one of the most important ways they client and server teams communicate and they can make fewer hidden assumptions about how the code on the other side works (but they will make some anyway which will bite you in the ass).
Standard protocols and proprietary protocols aren't much different. If the protocol data model and client and server protocol naturally diverge, then even if your system starts out with highly similar models by implementing a proprietary protocol, that advantage erodes and becomes a disadvantage, hindering extensibility. OTOH if you start out implementing a standard protocol and enforcing good separation between the data models, this is a good long-term strategy. You know from the start that there will be translation between the data models -- every protocol message that comes in will have to result in objects or data structures being instantiated in the internal format, and every protocol message that goes out is a tranformation from internal objects or data structures. So that translation layer is solid from the beginning. Furthermore, if the system is using a proven protocol, the extensibility and performance features are likely to be better than one can easily design from scratch.
Protocol syntax isn't very important as long as it's extensible. Translating between models that are different is harder than translating between different syntaxes. It's like translating a business course from American into Chinese -- the language is the easy part, the culture and environment are so different that you can easily mean something you didn't intend to mean. So it's not the end of the world if the syntax is header fields or XML documents, as long as there's a clear way to extend either one. The extensibility is key so that as the clients and servers evolve they're not totally hamstrung by an inflexible protocol.
Whew. That's asking a lot of a l'il ol' whiteboard sketch. Comments welcome.
Frum argues:
- Canadians are less obese than Americans
- Portion sizes are smaller in Canada than in US.
- It's because Canadians are less wealthy that portion sizes are smaller.
- Smaller portions lead to less obesity.
- Obesity leads to health care costs.
- Making sodas more expensive (by taxation) will cause lower consumption of sodas (conclusion: also reduce obesity, also reduce health care costs).
- Canadians are similarly obese to Americans and Frum's evidence was only anecdotal.
- Portion sizes are similar and Frum's evidence was only anecdotal.
- Since portion sizes aren't smaller in Canada, wealth isn't a factor in portion sizes (at least the wealth difference between CA/US doesn't matter to that). Also note that total consumption of caloric sodas has been steady for decades as Canadians have gotten significantly richer (and soda cheaper).
- This one requires more data to completely demolish, but the evidence that total consumption of caloric sodas has been steady for decades does cast doubt on the idea that smaller cans of sodas will reduce consumption.
- There's more evidence that poor fitness (sedentary lifestyles) has a much greater health care cost than obesity.
- Such a small increase in price of soda is unlikely to change consumption, given that consumption has been steady for decades as soda production has gotten cheaper and people richer.
Thursday, October 28, 2004
We shipped a minor release this month - the 0.4 release of Chandler. The release date of October 26 was picked months ago, as was a candidate set of workflows and other tasks to achieve. We met our release date, partly by making some minor cuts to the feature set (though we still reached the overall goal of having something experimentally usable or demoable), partly by working professionally towards common goals. Even better, we did it without panic, without yelling at each other, without having sales presell the release (heh heh -- no sales). We didn't make developers stay all night. We didn't have unpleasant meetings. We didn't demonize anybody for their bug counts. And we still managed to release on a schedule.
I don't want to get too deep into how we did it (one could write a book), but it had a lot to do with honesty and trust. Maybe when the stakes and egos are high it's too easy to fool oneself into believing ridiculous schedules. I'd like to think our transparency (it's all out there on the wiki helped us be honest with ourselves and communicate potential problems early.
It's nice to have confirmation that it's possible to reach high goals and still be sane.
Wednesday, October 27, 2004
Saturday, October 23, 2004
I had a fun time making stuff for my friend's wedding a couple weeks ago. Now the pictures have come out.
I made silk shawls for the bridesmaids. Lessons learned:
- I couldn't iron a double-folded-over edging into silk organza. Pin a lot.
- Sewing raw silk organza edges into a folded border is hard. I bought black silk thread so the seam wouldn't show much, and then held the organza very taut, front to back, as I fed the pinned edge through the machine. Still, the tension in the seam pulled the organza together a bit, until I ironed the *&$! out of it.
- Use a ton of water to iron silk charmeuse. But do iron, because it's worth it to get the piping straight.
- Silk must be carefully pinned, particularly when you're sewing 7 layers together. Even so, I caught excess organza in the seam a couple times.
- Use the right sewing needle to go through those 7 layers. When I used the needle I normally use for quilting, it made a scary "thunk" sound.
Sorry, no pics of the finished shawls at this point. They ended up black silk organza bodies, with charcoal charmeuse endings (folded over the raw organza edges) and purple charmeuse piping.
I was hanging around doing nothing on the wedding day and suddenly (but willingly) pressed into service making the ball for the flower girl to carry. The materials: a styrofoam ball, ribbon, and green "toothpicks" with wire already wrapped around the non-pointy end. The idea, as I saw it (but I Am Not A Florist) was to wrap the free end of the wire around a flower stem, then put the pointy end of the toothpick into the ball. Repeat until covered. Sounds simple, right? Lessons learned: |
- Plan ahead. Will you be putting leaves on the ball along with the flowers? Put them on first, dummy, or they cover up the flowers.
- Pick flowers with strong stems. Flowers with weak structure will be soooo frustrating.
- Wrap several flowers/leaves together onto the same toothpick. You probably don't have enough toothpicks, plus it goes faster.
- Don't try to push the toothpicks in too far. Otherwise you push the wire or flower right off the toothpick just as it gets buried in styrofoam.
- Attach the ribbon handle as strongly as you can -- it's going to be swung around by a 2.5 year old (cute Ava). Very firmly attach the ribbon to two toothpicks and stick them in at different angles so the tension doesn't pull them straight out.
- Don't fret, there is no way to hold it without crushing some blooms or tearing off some petals now and then. After failed attempts at wrangling it with wire handles which backfired and tore off flowers, I just used the fingertips of one hand to support it.
- Finally, don't worry. Everybody will love it anyway.
Actually, it turned out quite pretty. It's by no means the prettiest thing in this photo, but it worked. Many people helped out a lot and it was a beautiful wedding with a sense of cooperation. For example -- credits to Cheng for the photos I used here.
Friday, October 22, 2004
I talked to a bunch of people at Educause about this yesterday, and they were excited about this and other new WebDAV features because many universities are betting on WebDAV. University of Memphis reports two services that people can't live without: email, and now WebDAV. Since WebDAV is such a flexible repository technology it's hard to tell a potential customer (like Memphis 2.5 years ago, when I worked at Xythos) what it will give them. But give it to users, and they will figure it out. Looks like the Atompub people are storing blog postings on a Web server, which students increasingly can do now via their WebDAV accounts [1]. And of course the universities are also keen on storing calendar data in WebDAV accounts. More application data in fewer server repositories means lower administration costs for these universities.
With all this increased excitement, you'd think I could get more people to show up at WebDAV Working Group meetings or contribute on the mailing list. The next meeting is in Washington DC, in the second week of November. Want to join in? It's easy -- all you have to do is... join in.
[1] I realize that although giving students WebDAV accounts is a little new, giving them Web accounts, or Web space in their Unix accounts, isn't new. However, in some colleges students had to request this service, or know enough Unix to be able to author the content. Plus raw HTTP doesn't support multi-user applications very well. WebDAV extends the usefulness and usability of personal Web space.
Friday, October 15, 2004
Tuesday, October 05, 2004
Ingredients:
- 1 cup half and half cream
- 1/4 cup grated fresh ginger root
- 1 cup heavy whipping cream, whipped to soft peaks
- 1 cup ginger ale or diet ginger ale
- 1/2 to 3/4 cup sugar or Splenda
- 1 T. lemon juice
Soak the grated ginger root in half and half cream. Put this and the ginger ale and whipping cream in the fridge to chill for an hour or so. Use a fine sieve to take the fresh ginger out of the cream. Stir the ginger-flavored cream together with the whipped cream, ginger ale, sugar/Splenda and lemon juice. Immediately put in your ice cream maker etc..
Mmm! I imagine for those who love ginger and can also eat sugar, candied ginger would be a nice addition to the recipe.
Monday, October 04, 2004
- RFC3920, Core protocol (framework for applications like notifications, as well as instant messaging and presence)
- RFC3921, Instant messaging and presence over the core protocol
- RFC3922, how to map XMPP presence information and instant messaging to the same common interchange format that SIMPLE instant messaging can map to
- RFC3923, requirements for end-to-end security of instant messages even when routed over more than one protocol
The work began earlier than two years ago, of course. Jabber was designed while Jeremy Miller was waiting for the IETF to come up with a standard IM protocol (and taking too long). When the IETF process still appeared stalled, Jeremy and others proposed that the IETF could standardize Jabber, by creating a working group to design a revision to Jabber that met the IETF standards for internationalization, security, XML namespace usage and a few other things. A BOF meeting was held in July 2002, very eventful and entertaining as IETF meetings go. The WG was formed, and I was added as a co-chair to help Pete Resnick, on October 31 2002. Peter Saint-Andre authored *all* of our internet drafts, doing a huge amount of difficult work in an extremely timely, professional and skilled manner. Whew! It's been fun!