(2)
Fri May 04 2007 00:02 The Ur-Quan Masters:
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.
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?
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!
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.
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.
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!"
Mon May 07 2007 09:28 YABO:
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.
Tue May 08 2007 09:11 Translation Collector #3:
Tue May 08 2007 22:31 What the?:
"We should have had some bees watch it."
"'What? There are flowers 25 miles away?!?!'"
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.
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.
(1)
Thu May 10 2007 13:53 Kris's Dream:
Nerdy dream-selves crack me up.
(3)
Thu May 10 2007 20:30 The Confusion:
Tue May 15 2007 11:34 Muppet License?:
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?
(6)
Wed May 16 2007 22:09 Import/Export:
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.
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.
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.
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.
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?
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.
Mon May 28 2007 19:00 Tummy Time:
(2)
Thu May 31 2007 09:35 Acceptance:
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.
Thu May 31 2007 17:26 Transactions of the Transaction Society:
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.
(6)
Thu May 31 2007 18:52 Category:Fictional Fictions: