<M <Y
Y> M>

[Comments] (1) : At last, I can pretend I'm friends with Kris.

[Comments] (2) The Ur-Quan Masters: I spent most of yesterday playing this game, a fun space adventure. A.k.a. Star Control 2, as seen in Bob the Angry Flower.

Looking back through the mists of time, I thought I remembered seeing a box for this game in Software Etc. when I was a kid, and wanting to buy it but not having the money. But I was wrong; it was a similar game called Starflight 2. What I remember accurately is the source code for this game being made freely available a few years back. Now the game has been ported to modern platforms and it's in Debian, with goofy voice acting and everything.

This is an excellent game with some serious gameplay problems. The story is like a good text adventure, complex and nonlinear, with strong characterization (though all the characterization happens on the species level: you never see two named members of a species, for instance) and lots of dialogue and backstory. There's also a Spacewar sub-game that looks perfectly fine but I skipped it because I was more interested in the adventure game.

The problems are with the other sub-game, a resource-gathering-fest that takes all the fun out of exploring the universe. Just like in real life there are too many stars, they're too widely spread apart, it takes forever to navigate within a solar system, and most of the planets have few points of interest. But you spend most of the game going around poking at planets for resources. The entire game universe starts to look like a big copy protection scheme, and the various hint guides, with their huge tables, take on the appearance of the manual that has the secret numbers you need to complete the game in the time limit provided.

So, I guess I'd like to see it turned into something more like a Maniac Mansion type graphic adventure, is what I'm saying. Fun game though.

: This is odd. Jaime Weinman embedded a 1954 (according to IMDB; internal copyright date is 1953) Warner Brothers cartoon called "Design for Leaving". The title makes it sound like a parody of the classic Populuxe short "Design for Dreaming", and that's exactly what it is. But "Design for Dreaming" didn't come out until 1956. Time paradox? Or something more sinister?

I really have no idea. In 1942, Unknown magazine published a story by Henry Kuttner called "Design for Dreaming". That's the only earlier reference to the phrase I can find. It's barely possible that DfD was a transient catchphrase that was in the public consciousness at the time but that rarely showed up in ways visible to search engines. Otherwise, I gotta go with time paradox.

Update: There's a 1933 film called "Design for Living", which takes care of the cartoon's title. Depending on your tolerance for time paradox this might move into the realm of coincidence the fact that the cartoon parodies a short that doesn't exist yet. Or did the short take its cue from the cartoon?

: Ah... Chocolate: or, An Indian Drinke is good for what ails me. "The ensuing tract" is an all-time classic of old-time rhetoric, vocabulary, and orthography, devoted to the awesomeness of the newfangled chocolate. It starts with a a poem that banishes the quackery of Extraordinary Popular Delusions in favor of much tastier Cosmopolitan-style quackery:

Tell us no more of Weapon-Salve,
But rather Doome us to a Grave:
For sure our wounds will Ulcerate,
Unlesse they’re wash’d with Chocolate.

And, of course, Receipts galore:

Of Cacaos, 700; of white Sugar, one pound and a halfe; Cinnamon, 2. ounces; of long red pepper, 14. of Cloves, halfe an ounce: Three Cods of the Logwood or Campeche tree; or in steade of that, the weight of 2. Reals, or a shilling of Anniseeds; as much of Agiote, as will give the colour, which is about the quantity of a Hasell-nut. Some put in Almons, kernells of Nuts, and Orenge-flower-water.

Concerning this Receipt I shall first say, This shooe will not fit every foote...

I love it! They shooehornèd extra vowels in everywhere!

: Hey, Jake. Today (yesterday) we were walking to the subway with Fureigh and I was talking about our side-by-side battle in that karaoke contest. I was singing "King of the Road" and a guy walking past us joined in for the final line. Fun times! Oh, T-Rex was there too, apparently.

We were with Fureigh to see Too Much Light again. For those of you who haven't seen TML, here's the name of one of the plays: Yoda Does Impressions. What you envisioned is the exact play that was performed, except it was a Yoda doll whereas you were probably thinking someone was acting like Yoda. There was also a great play where everyone was being hard-boiled newspaper types.

[Comments] (4) : I've been invited to FOO Camp. Should I go?

: Sumana just said: "This is one of the most biting Onion satires since 'Area Man Not Very Interesting'!"

: I guess LinkedIn must have recently added the ability to broadcast job listings to your network, because I'm hearing from people I haven't heard from in years who want me to find someone to work with them. The most interesting of these job listings comes from, UM, Josh Hendler. I see that I only mentioned Josh in NYCB once, which is odd but understandable since during the time of our acquaintance we were constantly working, and the day we stopped working was the last day I ever saw him. More about Josh later.

Josh now works at the Democratic National Committee and he's looking for a database data-chopper in DC to manage the DNC's national voter database, which I guess they finally got their act together and created. If you're interested in politics, data-chopping is a relatively low-stress job. Send me email if you're interested and I'll tell Josh.

: I'm reading Trilobite!: Eyewitness to Evolution (exclamation not in original), possibly Newt Gingrich's favorite book about trilobites. It is excellent in general but I wanted to spotlight two things. First, trilobite eyes were made of crystalline calcium carbonate, and were molted along with the rest of the exoskeleton! No wonder their gazes appear so stony. Second, this anecdote about a Swedish trilobitist:

Tjernvik was in his eighties when I visited Sweden. His English was remarkably fluent: he had learned much of his use of the idioms from the novels of P.G. Wodehouse, and the result was charmingly anachronistic. When a particularly fine Megitaspis turned up he would say, "absolutely top hole, old bean!" If he wished to impart some important item of information it would be, "can I have a word in your shell-like?" At the end of the day: "Toodle-pip, old boy!"

YABO: God created the natural numbers. Adam created the Networked Byte Organ [See action-packed issue 1024! -Ed.], which listens to network traffic and plays it as music. I created YABO, a Ruby script which takes any data and creates a MIDI file. Samples include a bit from Mega Man 2 (compare Adam's), a bit from an OGG file of a square wave, and a midi representation of yabo.rb itself. Crank up the BPM and you've got a modem. Requires the midilib gem. YABO? Yatta!

[Comments] (2) : We got some sleazy religious snail-spam today, from "Saint Matthew's Churches" (there are no real churches). The envelope is stuffed full of papers with complex instructions for getting stuff from God. It's like doing your spiritual taxes. The point is to get you to blow cover and reveal yourself as a sucker to the all-seeing PO Box in Tulsa, whereupon SM's Cs start asking for money and it's like doing your render-unto-Ceasar taxes. Recall that Matthew was a tax collector, and is now the patron saint of bankers.

The envelope is actually the best part of this buffet of lunacy. (front, back) On the back there's fake handwriting that starts out saying "Dear Jesus, ...". I guess I was absent that day in fifth grade when they taught us how to write a business letter to Jesus.

Translation Collector #3: Japanese! It looks like they only translated half the book.

What the?: The novel The Sot-Weed Factor is based around a real poem! Random website has the scoop. PS: don't read any of Barth's novels. Barth is BORING except when mimicking someone else's style, which doesn't happen nearly enough.

: We watched The Company. Sumana said: "Maybe there was a plot in that movie, except it was communicated through dance."

"We should have had some bees watch it."

"'What? There are flowers 25 miles away?!?!'"

: Today I watched Amelie. Now that's how you do a movie with no plot! Highly recommended. I especially enjoyed the Dwarf Fortress-like explanations of everyone's likes and dislikes.

I have a bit of mega news to impart but it needs to wait until tomorrow because I'm going to sleep now. I will mention that today I met Ian Bicking and his friend Luke.

[Comments] (4) : Sorry for suspense, but Sumana was asleep and I didn't want to rummage around in the bedroom for the camera. In defiance of all my previous experience with publishers, O'Reilly sent me a copy of RESTful Web Services before it was even published! I wasn't expecting to get a copy for a long time, since the entire first batch is being shipped off to RailsConf.

That's Ian holding the book when we went out for pizza. More pictures here.

[Comments] (1) Kris's Dream: I asked her “are you instanced?” and she said yes.

Nerdy dream-selves crack me up.

[Comments] (3) The Confusion : Amazon told some people that their copies of RESTful Web Services wouldn't be delivered until July. According to O'Reilly this is a vicious slander, and they insist that "honor be satisfied". Actually they said it was a glitch; I'm just making it sound more interesting. Amazon has a big order in to the printer, so you should get your books soon. (Thanks, Bonnie, for the information.)

: I was talking to Brendan a while ago and we started talking about mad science. I mentioned Narbonic, the premier comic about mad science. Brendan hadn't been reading it because of the Arrested Development plot-arc problem. But recently Narbonic reached the end of its six-year run and started re-running with commentary from the artist, so it's a good time to start from the beginning. More comic strips should do that. This week's comics are especially good, with their glimpse into the mad mind.

: As long as I'm recommending comics: Beaver and Steve. High-larious!

Muppet License?: Yesterday I heard something to the effect that only a trained Muppeteer may operate a genuine Jim Henson Creature Shop Muppet. If JHCS sees a random person performing with a Kermit they'll come after said random person.

One, is this true? Is there some sort of Muppet license? Two, what's the legal argument? Is there no right of first sale for Muppets? Does sticking your hand in a Muppet instantiate the trademarked character, the same way drawing (or saying the name of) Mickey Mouse would?

[Comments] (6) Import/Export: Some of the gifts we've been asked over the years to find for relatives in India:

PS: Sumana officially expresses her frustration at the general desire to send these things via courier as people make trips back and forth, rather than using the mail.

: Went to Chris DiBona's tech talk at Google NYC. I hadn't met Chris before. I told him to say hi to everyone. The big surprise was meeting Rohit Khare! He moved to New York recently so we'll be hanging out.

The first chapter I wrote for the REST book which had a lot in common with a column Rohit wrote about Gopher in 1998. (Said essay mentioned four years ago in NYCB.) Writing this chapter really helped me get my ideas together for the book, but I cut it because it was only 8 pages. Also it turns out that in 2007 most people don't really want to read a detailed technical comparison of FTP, Gopherspace, and the Web. But for those who do, I'll be publishing the chapter as a standalone essay soon: hopefully on one of O'Reilly's sites so I can squeeze a couple more bucks out of them.

: Oh, another thing. I haven't hooked everything up yet, but Chris DiBona will be pleased to know (nice segue!) that Beautiful Soup now has a Subversion repository hosted by Google Code. Today I worked on soup all day.

: Sorry for no posts. I was in Washington D.C. with in-laws. I went with Sumana to see monuments (new WWII monument: disturbingly not in the same spirit as other monuments?) and I got sunburned. We also met up with Josh Hendler of Clark campaign fame and a-few-entries-ago fame. There are pictures but I'm working on an interview for the REST book and therefore too lazy to get them off the camera. Also there's a great picture of me and Josh in front of the Capitol with our arms folded like "we're going to clean up Washington!" but I guess I have some superstition that if I post the picture after my sunburn goes away, it'll be gone in the picture too.

: Another interview with Eugene Jarvis! (The other one.)

EJ: The whole thing was kind of a mistake!

I wish I could say that in every interview. I've got one tomorrow; maybe I'll work it in.

: Wikiclock: sort of a social Rube Goldberg device.

: Sam and I just talked to Jon Udell for his Friday Podcast series. I sounded like an idiot the whole time, but hopefully the miracle of editing will save me.

[Comments] (3) : Wow, that made me feel better:

Every IT generation has its seminal tome that transcends time and connects the dots in a way that no book had before it. For the object oriented generation in the 1980s, it was the Gang of Four (GoF) book. For the application architecture generation in the 1990s, it was Fowler's book on patterns (PoEAA). "RESTful Web Services" will be, in my opinion, that book for the 2000s Web services generation.

: Excellent interview with Trace Beaulieu, though it ends with a lot of Hollywood pheromone exchange that I find dull. Includes anecdote about the monkey he made so angry that he was thereafter wary of working with any show business monkey whatsoever (my default position). Also:

But I realized that without that character [Crow], I really didn’t have a reason to mock anything. I actually kinda like stuff.

A stuff-liker? Blasphemy!

One of my very-long-term projects is to collect random observations about MST3K episodes and the underlying movies. (Sample observation: the 1950s were a very good time to do a low-budget military-themed movie because there were lots of surplus trucks and equipment you could get cheap.) Not reviews per se, but an attempt to find the more subtle themes and interconnections in the massive MST3K oeuvre. I bring this up because of this line from the interview:

You know, maybe the robots were sort of a practice for [Joel]. I think he’s a pretty good dad.

Thanks to this project and time's perspective, I see now that the fundamental fact about MST3K, the one that makes it more than a comedy show, is the relationship between Joel Robinson and his robots. In my adolescence without a father I took as a model for masculinity Joel's mix of father, older brother, and demiurge. This is kind of weird but I could have done a lot worse. I suspect I'm not the only one.

Usually children leave their parents, but Joel left the 'bots. They helped him leave. What does this mean?

[Comments] (1) : I flew in to California to see my niece, who is cute. Right now I'm staying with Adam.

Longtime readers know that my mother made me some comprehensive scrapbooks of my early life which were lost in the mail. What you don't know is that my mother made comprehensive scrapbooks of her own life, scrapbooks that run to 17 volumes. Susanna is storing all those volumes, and today I went through them and selected pages for a surrogate scrapbook. Susanna will take those pages out of my mother's scrapbooks and bind them together for me. Substitution: achieved! Kind of. And Susanna won't have to store so much.

: In a coffeeshop in Bakersfield, probably the first such I've ever been in. I don't really have anything to say, so I'm just checking in. I'm reading The Cheese and the Worms, which is a little overwritten (or overtranslated) but has lots of interesting things in it. Like cheese.

Tummy Time: Maggie was lying on her stomach, an activity Susanna referred to as "Tummy Time". I said, "I never got Tummy Time when I was a baby." According to Susanna, we didn't need Tummy Time when we were babies because in our day babies slept on their stomachs and liked it. These days, though, babies are supposed to sleep on their backs to avoid SIDS. But if they sleep on their backs, they start crawling later! Thus, the need for remedial stomach-lying, aka Tummy Time. It's all a bunch of hacks!

: Back in New York. On my flight there was a guy who looked and sounded exactly like Take the Money and Run-era Woody Allen. He came to my attention as he rushed to the boarding gate with his wife and kid, and explained to everyone that he'd meant to join the pre-boarding party earlier but his kid wasn't on the boarding pass, and he'd had to have him put on the boarding pass, and... At any moment I expected the punchlines to start flowing, but apparently he wasn't actually Take the Money and Run-era Woody Allen.

: I've finally got the green-light for my Frank Zappa/Samuel L. Jackson crossover vehicle, Baby Snakes on a Plane.

[Comments] (2) Acceptance: I can't find the link [UPDATE: it was Paul Sandoz], but someone posted a weblog entry that mentioned something I say in RWS about choosing different URIs for different representations. The example I (and the unknown weblog entry writer) used was a press release which is available in two languages (English and Spanish) and two data formats (HTML and plain text). The URI to this resource is /releases/104, and you can choose a representation format by setting the Accept and Accept-Language headers. But I also recommend exposing a URI for each language and format:

When a client requests one of those URIs they can leave out one or both of the Accept- headers and still get what they want. The Content-Location response header is set to /releases/104 so that you have a URI to use when talking about the press release in general, rather than a specific version of it.

The question in the weblog entry I can't find is more or less this: what about the other two Accept- request headers, Accept-Charset and Accept-Encoding? Why don't I recommend exposing URIs like /releases/104.es.txt.gzip.UTF8?

The reason I put any special levers in the URI is because we pass around URIs, not URIs plus headers. Lots of programs and services take a URI, perform a GET on it, and expect that they got what you told them to get. One example I give in the book is the W3C HTML validator. If the only URI I exposed was /releases/104, there'd be no way to validate the Spanish version separate from the English version. If the default representation format for /releases/104 was plain text (unlikely, but this is just a thought experiment), there'd be no way to validate the HTML formats at all.

To the extent that this reason applies to some piece of information, I argue for putting a lever for it in the URI. Obviously it applies to things like which press release you want. I think it also clearly applies to the language and the data format. I think it doesn't apply to compression or character encodings. Here's a quote from page 243, in the section "Compression" where I talk about Accept-Encoding:

You probably remember that I think different representations of a resource should have distinct URIs. Why do I recommend using HTTP headers to distinguish between compressed and uncompressed versions of a representation? Because I don't think the compressed and uncompressed versions are different representations. Compression, like encryption, is something that happens to a representation in transit, and must be undone before the client can use the representation. In an ideal world, HTTP clients and servers would compress and decompress representations automatically, and programmers should not have to even think about it.

We can argue over what counts as a different representation (as you can see I take a fairly high-level view), but even if you think the compressed and uncompressed data are different representations, this isn't a difference that needs to go into the URI. A client can be automatically programmed to detect a compressed representation and uncompress it. The key is this ability. If it were possible to algorithmically translate any human language into another, or any data format into another, there'd be a much weaker case for extending the URI with levers for language and data format.

The same logic holds for character encodings, because a client can be automatically programmed to convert any character encoding into Unicode. The case is weaker because 1) the programming is difficult unless there happens to be a library for your language, and 2) you only get compression if you ask for it, but you get a character encoding whether you like it or not.

If you're exposing a resource in multiple encodings, and you have reason to believe that a URI-driven client might choke on your default encoding, then sure, put an encoding selection lever in the URI. But at the risk of sounding provincial (if being too cosmopolitan can be a kind of provinciality), your default encoding ought to be UTF-8 or UTF-16.

Transactions of the Transaction Society: Sam and I got a question from reader Scott Davidson about the famous RESTful transaction design (quoted at length by Jon Udell here, in case you bought so many copies of the book that you're now deadlocked trying to decide which one to look up page 231 in). I think it's worth responding to at length:

I'm perplexed why your transaction example in Chap. 8 didn't simply create a transaction resource that included both checking & savings account as well as the transfer amount w/ a PUT (defining the resource as XML in the request body). Then you could simply call /transaction/11a5/commit or even just assume that this is a request to commit the transaction by default and avoid the 2nd call altogether. Is there a specific reason why it was not done this way? I can already see the "REST-haters" rolling their eyes to this three request/response transaction pattern.

The short answer is that if I'd presented it that way, the "REST-haters" would have an even better reason to roll their eyes: it would look like I couldn't think of a resource-oriented way to do transactions and I'd had to fall back to the RPC style.

Let me explain. When I read this question my immediate vision was of a request that looked like this:

PUT [some URI] HTTP/1.1
Content-Type: application/xml

<transaction type="transfer" amount="50.00">
 <source href="/accounts/checking/11" />
 <destination href="/accounts/savings/55" />
</transaction>

I don't know if this is what Scott had in mind, but let's run with it. This actually won't work as is: PUT only works when the client knows the URI of the new resource, and the URI for a transaction resource is chosen by the server. That's a minor problem we can fix by sending POST to a "transaction factory" resource:

POST /transactions HTTP/1.1
Content-Type: application/xml

<transaction type="transfer" amount="50.00">
 <source href="/accounts/checking/11" />
 <destination href="/accounts/savings/55" />
</transaction>

My first suggestion about transactions (page 231) was: "You can expose simple transactions as batch operations..." This is a kind of batch operation (albeit not quite the kind I had in mind), one that affects two resources identified by URI.

The problem with this representation is that it makes the second HTTP request look a lot like an RPC-style overloaded POST request. It looks less like an object the client is creating, and more like a command that /transactions is supposed to execute.

I wouldn't go so far as to say it is overloaded POST, because its result is a new addressable resource (the transaction record). There's a fuzzy overlap here between RESTful and RPC-style, just as there is with a request like "GET /rest-endpoint?method=photos.search&tag=penguin". But in the book I don't design URIs that look like method calls, because it sets a bad example, and for the same reason I don't design representations that look like commands. If you looked at that second HTTP request in isolation, you'd probably think "okay, there's no fundamental difference between RESTful and RPC-style transactions". When in fact there is a more elegant way to do them that looks nothing like the RPC style.

Why do I think the way I showed in the book is more elegant? Mainly because requests on transaction views work exactly the same way as would non-transaction requests on the underlying resources. If you could change an account balance at will, you'd PUT to /accounts/savings/55. You can't, so you create a transaction and PUT to /transactions/11a5/accounts/savings/55.

Two lesser reasons. First, you don't have to do the whole transaction at once. You can build it up on the web service as real-world events happen on your end, and commit when you're ready. It works the same way as a transaction in a programming language. Second, a transaction is an addressable resource even while in progress. Multiple authenticated clients can inspect or collaborate on a transaction, and the rules for avoiding conflicts are the same as on the rest of the web (eg. If-Unmodified-Since).

That leaves the question of efficiency. You can package multiple operations into a single HTTP request for efficiency's sake. But if a single operation is an HTTP method applied to a URI, that's what you should package. If the uniform interface is good enough for one-at-a-time operations, it's good enough for descriptions of batch operations. You don't need an application-specific vocabulary like the one I came up with reflexively. A simple, uniform vocabulary will do; something like this:

<transaction>
 <request method="PUT" target="/accounts/checking/11">
  <representation>balance=150</representation>
 </request>

 <request method="PUT" target="/accounts/savings/55">
  <representation>balance=250</representation>
 </request>
</transaction>

(You could probably use an XML document that contains a series of SOAP envelopes!)

I think POSTing that representation to a transaction factory satisfies Scott's original criteria: "create a transaction resource that included both checking & savings account as well as the transfer amount... defining the resource as XML in the request body". And it would make a good addendum to the "Transactions" section, once the reader has seen which HTTP requests underly the transaction. But presenting it instead of the multi-request version would probably be confusing, and would certainly give the impression that there was no RESTful way to make those HTTP requests one at a time.

[Comments] (6) Category:Fictional Fictions: I feel a sense of unease whenever I'm revising a story and I change what happens. I feel like there's some residual sense in which A "really" happened and B is a lie to cover it up. But if the story is published, most people will think B "really" happened and A will seem a curiosity if they know about it at all. How do we discuss different kinds of fictional events? Lay some vocabulary on me.

[Comments] (1) : A set of algorithms for experimental travel. "Arrange to spend a weekend away with your partner. Travel to your chosen destination by different means and don't arrange a meeting time or place. Now look for each other..." There's a lot of overlap with the Lonely Planet guide, which I've had my traveling eye on.

<M <Y
Y> M>

[Main]

Unless otherwise noted, all content licensed by Leonard Richardson
under a Creative Commons License.