Links

pmuellr is Patrick Mueller

other pmuellr thangs: home page, twitter, flickr, github

Tuesday, April 18, 2006

RIP: Kim Clohessy

Got some sad news this weekend. Kim Clohessy passed away. Mike Milinkovich also covered this today. +1 on everything said there.

I first met Kim when I went on assignment from IBM to OTI in 1997. I had specifically started working with the embedded software group in Phoenix, and Kim was one of the technical/executive leads there. Kim was one of those great executive and technical guys; worked great in front of customers selling our stuff, but he also knew our stuff. Hell, he helped invent it! But you know, there just aren't enough folks like that.

Kim is actually the only person I personally know who wrote a practical app for Palm with the J9 VM, which was our baby back then; some kind of farm/ranch management tool for his horses, IIRC. He was obviously proud of it, I remember him mentioning it more than once. Of course, he deserved to brag, J9 on the Palm wasn't the easiest thing to work with in early days. You pretty much had to be a rocket scientist.

The picture on Mike's blog is a great picture to remember Kim by; smiling like he usually did.

Later, dude.

Wednesday, April 12, 2006

Content-Type is dead?

This meme has been floating around today. Here are some links, on both sides of the issue:

Dang! And we just added some code this week to optionally returns JSON or XML, depending on the HTTP Accept: header, from a REST service. It just seemed so ... natural. Yahoo! is doing it via a common query string parameter, which I guess you could say is the Lo REST way, whereas the Accept: header is the Hi REST way.

So I can see that maybe Lo REST is a more portable way to do this than the Hi REST way. Can I really set headers in my http client? Am I sure it's not going to futz with them? Maybe some proxy will lose them, or someone will reuse the URL without remembering to set the Accept: header. Query string parameters ALWAYS work.

That, I can buy, as an argument for not using Accept:. Or maybe, as an argument to allow both Accept: and the query string parameter (who wins?).

Anyway, I decided to check the trail on this a little more, by reading the notes that led up to Larry Masinter's response. OK, the cellmt guys, with their Accept: header of

Accept: application/cellml-1.0+xml; q=0.5, application/cellml-1.1+xml; q=1

is ... yeah ... a little over the top. Does anyone really do anything on the server with the q parameters? And those mime-types, with the version built into them ... whoa. *and* the "+xml" !

Then I read up on HTTP 1.1 Content Negotiation. Ok, sure. No one does any of this stuff. If I had waited just a few hours more, I could have used this to put me to sleep.

So Larry is right, "HTTP content negotiation was one of those "nice in theory" protocol additions that, in practice, didn't work out."

Ian is wrong, Content-Type still has value, although maybe it has none in a web browser rendering web pages. I don't really care.

Dare makes a little sense: I do think some Web/REST advocates need to look around and realize what's happening on the Web instead of arguing from an "ideal" or "theoretical" perspective. My take-away: use Lo REST vs. Hi REST. Dare also makes no sense, seemingly comparing the state of HTML and multi-media rendering (sucky support for content type) to web services via REST. They both use HTTP. And ... maybe that's about it! So the web browsers screwed up content type, that's their fault; why can't the RESTafarians try to do it right, if they want?

Wednesday, April 05, 2006

Triple XXX

BoingBoing ran a story today on Triple XXX, a restaurant in West Lafayette, IN, which is where Purdue is located. Which is where I went to college.

Very popular place to go late at night, after drinking way too much beer, to get a burger and onion rings. Lots of folks liked the Duane Purvis, including Sandy, but the peanut butter was a little over the top for me. I usually got the Bert Burger, or maybe eggs, or sausage gravy, depending on how close to dawn it was (or past).

My senior year, I rented a house with 6 friends, on Littleton Street, across from the hugemongous frats, about 5 houses down from Triple XXX. It was very convenient. I remember at the end of fall semester, no one had enough money to pay for a big shopping trip, so we just stopped shopping. And ate at Triple XXX a lot; except on Tuesdays; 25 cent tacos at Taco Bell on Tuesdays.

In the picture above (click the picture for a slightly larger version), circa 1960, you can just barely see the sign for the Clark gas station under the car cover. That's where we'd buy our cigs. I was there in the 80's; besides the cars, it looks pretty much the same.

I think we used to call the restaurant Tri Chi, but looking at the name now, it's funny that it's called Triple XXX, when we pronounced the name "Triple X". Not "Triple X X X". Which would have been way too long. Wouldn't Triple XXX be XXXXXXXXX?

I love in the picture above they have to make a point to show the restaurant is not an 'adult' restaurant (whatever that might mean).

Gonna have to get me a shirt!

Monday, April 03, 2006

Comments enabled

I decided to enable comments; previously, I had specifically disabled them. I'm not a big fan of commenting in blogs, because without a nice interface to let me track who responds to comments I make, it's not really worth it. I really don't want to have to go back to someone's blog web site to check. I'm sure that will change some day.

In the meantime, I got a couple emails this weekend from some folks at IBM concerning my posts on VMware. I figure I might as well be a little nice about it, and let people post comments instead of having to find an email address of mine.

BTW, Russell and Karl, I posted the links you sent in my del.icio.us links. Thanks again.

Actually, I noticed on /. today that apparently VMware has a free server available now as well as the player (as a beta). Sigh. There just aren't enough hours in the day.

Sunday, April 02, 2006

Attributes vs. Elements

This is a response to Bill Higgins' blog post titled Simplicity for humans, simplicity for programs.

IIRC, when Balaji was designing the new marshaller, I specifically told him that I wanted everything marshalled as subelements and not attributes. Why would I do this? It had nothing to do with readability; I requested this because the marshalling scheme we were replacing was agressively using attributes instead of subelements. Including doing things like marshalling a list of things as a comma-separated string used as an attribute value. That was way wrong. Since it forced folks to have to do further parsing even after parsing up the XML.

The decision on whether to marshall something as an attribute or subelement is usually not too difficult. If the value can be represented as a short-ish string, an attribute works out well. If it's a string and long-ish, using a subelement might be better (and allow you to handle in-line markup on that, or microformats, or ...). If it's data with it's own structure, you'll want to use subelements.

If you are representing a list of things, you really want subelements, although then you have more decisions to make. Should you add a special containing element, like a <ul> element, and render the list items as subelements under that? Or should you not have a containing element, and store each item as a peer of other elements in the same structure. Maybe you want to use a containing element, but that element name is the 'property' name, and the list elements are stored as <li> elements.

In the end, you end up with this weird tension of wanting to use attributes as much as possible, since they are easier for programs to get to, they take up less text, etc. But then you end up having the remainder of your things that you have to render as subelements, for whatever reason. The decision ends up being made strictly on whether XML can actually handle it as an attribute, and that seems wrong.

Thus, I decided that rather than make somewhat arbitrary decisions about whether to use attributes or subelements, and then make people guess at which we'd use when they saw the programs that ate this data, to go with the lowest common denominator; nothing but subelements. Of course, even that's not quite right; we actually do have a small fixed set of things we render as attributes. Very small.

The fact that you have to make decisions like this, even about whether to render something as an element or attribute, speaks to the problems here. XML is great for documents, but what you are really talking about is data. Do we need to describe all our data as documents? If noone is ever going to need it as a document, why go to that trouble? Is XML a solution in search of a problem in this case?

If you don't have a real requirement to provide a document for your data, other formats like JSON might be more appropriate.

Saturday, April 01, 2006

Annual pilgramage to Busch Gardens

Went to Busch Gardens Williamsburg on Friday. Great weather, great trip. Park was pretty empty, we rarely had to wait more than 10 minutes in a line. Here are a few tips:

  • Curse of DarCastle is pretty dumb, but not as dumb as Escape from Pompeii
  • The waiting area for DarCastle is quite chilly, I'm sure it'll be a great place to cool off when it gets hot.
  • Instead of waiting in the insanely slow lines to get tickets, they now have ticket kiosks that no one seems to use.

Wednesday, March 29, 2006

VMware Player

I'd been meaning to try the VMware Player for a while now, and this weekend, I finally took it for a test drive. Easy installation, with a suggested reboot, which I did (note: I reboot my Wintel laptop once a day anyway, so this doesn't bother me too much. One of the prices of running Windows).

Next, I downloaded a "Breezy Badger" Ubuntu release from this page. I've installed Ubuntu several times now over the last year, it's the Linux distro I'm most comfortable at this point. Unpack that .zip, create some shortcuts, and I'm off and running.

The boot time seems a little slow compared to a native Ubuntu boot, and so I was concerned that the entire runtime story would also be paying this penalty. But, I was happy to find out this wasn't true. Once booted, things were quite snappy.

Here's a few things I learned along the way, which may not be obvious:

  • The initial 'admin' user is 'ubuntu', and that's the password as well. I wanted my own userid, which was simple enough to add, but to get sudo support for this, make sure you add that new user to the admin group. If you do that, you don't need to touch the /etc/sudoers configuration
  • The clock is slow. Visibly slow. And you will probably be on the wrong timezone after rebooting as well. But the slow clock is just ... weird. I guess that's ok, it's just a temporal thing. As long as you are just fixing the clock by jumping it ahead, things probably won't get too confused about being out of sync. Things like make anyway.
  • I thought I'd try to 'fix' the clock issue by enabling NTP synchronization. In the clock widget, right click, adjust time, pick the synchronize with time server option. Wops. NTP support not installed, do you want to install it? Sure. Fine, please insert your Breezy Badget CD. Ut oh. OK. I used to keep a BB CD in my backpack, but couldn't find it. So, I thought, let me just download another one. Start the iso download. Now, while I've got some time on my hands, I'm wondering, is VMware going to recognize my laptop's CD drive as it's own? Else, what do I do? Also think, I might as well give Nero ImageDrive a try before burning the CD, maybe that will even work. And guess what? Run ImageDrive on the iso, see it loaded as a virtual CD drive in windows, and a file explorer simultaneously popped up in my VMware session on the CD. Very, very cool. Saved burning a CD.
  • Even with time synchronization, the slew is so bad, I don't think using NTP is going to cut the mustard. Instead, I think I'll just manually synchronize the time when I remember to do this. How do the 'real' versions of VMware handle this? I'm not sure I could really work like this, with the time more or less ALWAYS behind.
  • Ran eclipse 3.1.x under the gcj java that Ubuntu ships. Just to see if it would come up. And it did, though it gave me some error 'pane' where the project navigator should have been. Didn't really look into it.

All in all, I'm definitely impressed, but worried about the clock. The only other really nagging issue was the screen size. I run my laptop at 16x12, and the Ubuntu display driver maxxed out at 1024x768 (I think). Too small. Want bigger. And I know enough about X to know that there's no way I'm going to try to reconfigure that. It would also be nice if there were some way of allowing a native directory/directories to leak through to the VMware session somehow. I'd like to actually host my home directory on my real drive instead of the VMware one. I suspect I can set up file sharing to do this somehow, maybe the performance would be acceptable. Or maybe just backing up my home directory somehow (zip it up, ftp it back to the native OS) would do the trick. More experimentation required.

I think I could see doing some lightweight development, or at least screwing around, here. Don't know that I'd want to use this for full-time development, though I don't know what the other, 'real' versions of the product can do either.

Monday, March 27, 2006

Tate on Continuations

Just read Bruce Tate's article Crossing borders: Continuations, Web development, and Java programming. I pretty much grok continuations; I definitely get the block concept ala Smalltalk, and once you get that, things like continuations don't look so unusual.

But here are some odd points that he made, at the bottom of the article:

New advances in Web development are rapidly making the continuations approach much more important. Rather than fetching whole Web pages with the traditional request/response models, Ajax applications can asynchronously fetch a small part of a Web page and weave the results into an existing page. But Ajax applications tend to force an application to maintain a connection to a user for long periods of time to keep applications responsive and keep state tracking easy to code. That practice defeats the purpose of stateless programming because you do need to hold resources for each connected user. With continuations, you can keep the state in a continuation and restore the state on demand.

I'm not sure that Bruce gets the whole Ajax thing. Ajax doesn't force any kind of connection as he suggests. The thing with Ajax is that you finally get to do client-side programming; keeping the state on the client, where it belongs. I have no idea what he's even trying to say here.

In the near future, hardware improvements will make the added resource consumption of continuations less critical. Without a major overhaul, Web development frameworks will still be too complicated. Ajax threatens to complicate Web development even more. These factors are all converging to drive the acceptance of continuation servers. In two years, most new Web development will use some continuation server or some simulation of continuations.

What hardware improvements are these? Hardware improvements that will make it cheaper to do continuations in Java? I doubt it; it seems to me there are few hardware changes that impact Java at all; it is a virtual machine, after all! I imagine he must be thinking about virtualization stuff that's coming. But I don't think the enhancements for virtualization are intended to scale to virtualizing our servers over thousands of users. But you never know; I used to use VM/CMS for development back in the day, and it in fact virtualized a 'machine' over hundreds of users. Still, isn't virtualizing a machine for a single web user a bit overkill?

w/r/t Ajax complexity: I know some folks who have recently switched from a traditional J2EE web app development story to an Ajax-based one, and from what I hear (and see, from the app), they are making a lot more headway in getting the app done than they were with the traditional tools. Is it complicated? It's different; not sure it's any less complicated than the traditional tools. It certainly appears to be much more productive.

In two years, I would be very suprised if most new web development is using continuations. Since I don't see a PHP version.

Friday, March 24, 2006

Jazz

At Eclipsecon, there was a BOF session where some collegues demoed the product that I'm working on at present: Jazz. Best blog post I've seen describing it is here. More later when I know what we can talk about.

YouOS

This site reminds me of this blog post. Must check out.