Most compelling opening paragraph for a blog entry

How could anyone read the first few sentences of this piece in Good Math, Bad Math and not be hooked?

I decided that for today, I’d show the most thoroughly evil programming language ever devised. This is a language so thoroughly evil that it’s named Malbolge after a circle of hell. It’s so evil that it’s own designer was not able to write a hello world program! In fact, the only way that anyone managed to write a “Hello World” was by designing a genetic algorithm to create one.

Be sure to read the comments, because the author admits that he made several mistakes when writing the piece. I think that these were clearly self-protective attempts by his unconscious mind to deflect the full force of the evil….

Tim on JSON and XML

From ongoing · JSON and XML:

There used to be an argument about whether platform-neutral, language-neutral data formats were important, or whether distributed objects were the right answer. That’s over: HTML, XML, JSON. ¶

There used to be people who argued that network interchange formats shouldn’t be text-based, but use binary where possible, for efficiency. That’s over: HTML, XML, JSON.

I used to be in the people who argued camp, but at this point I’m almost convinced. It’s a little spooky using an over-the-wire format that looks like the kind of pseudocode we’re used to scribbling all over the whiteboard, but perhaps that’s the whole point. We’ll see……

"I came here for an argument." "No you didn't!!"

I was pulling together material for a presentation I’m giving today, and found myself reviewing the WS-* loyal opposition debate. You may remember Tim’s rant:

No matter how hard I try, I still think the WS-* stack is bloated, opaque, and insanely complex. I think it’s going to be hard to understand, hard to implement, hard to interoperate, and hard to secure. ¶

I look at Google and Amazon and EBay and Salesforce and see them doing tens of millions of transactions a day involving pumping XML back and forth over HTTP, and I can’t help noticing that they don’t seem to need much WS-apparatus.

And then I stumbled upon “S stands for simple”, a delightful (and newly posted) piece in dialogue form by Peter Lacey. A short extract won’t do it justice: you must read the whole thing.

A couple of years ago, Guillaume Lebleu made a great point in a comment to a piece by Simon St. Laurent:

Standards are great, but most of the time, they get crazy by trying to put everybody’s need into one document, bringing extremly complex abstractions along the way, or tons of optional fields to avoid semantic collision, that 99% of people don’t need. This is true for tech and industry standards. In a way 90% of us need ultra-simple standards, and 10% have very complex needs that are too expensive to standardize.

Amen, brother.

USENIX OSDI is in town

[Note: shameless name-dropping follows.]
The grand-daddy of all operating systems conferences is in town this week: USENIX. 20 years ago this was a forum for trumpeting the importance of Unix in a marketplace that was still dominated by vendor-specific operating systems (VMS, Domain, MVS, and even this insignificant upstart called MS-DOS…). I remember demonstrating PC-NFS at USENIX (and the related show for “suits” called UniForum), and everybody was amazed that these toy systems could actually play with the big guys. O tempora, o mores… Today USENIX is about operating systems in general, and this week’s symposium is OSDI’06, on operating systems design and implementation. (The other big USENIX event is LISA, where sysadmins for Really Big Systems get together.)
I didn’t actually sign up to attend USENIX (Amazon.com is much more frugal about these things than Sun used to be), but several of my friends are involved in the event, and I arranged to have breakfast this morning with Jim Waldo. We were joined by Margo Seltzer, and had an interesting discussion about varieties of systemic errors in large-scale distributed systems. Jim and I had planned to meet for dinner, but during the day he emailed me to suggest that I join him for the poster session that evening. So I did. I had a great time, met a lot of old friends, and made some new acquaintances including Jim Thornton of PARC, who used to work with my Amazon.com colleague Marvin Theimer, and Liuba Shrira from Brandeis – it turned out that she was an ex-neighbour from Brookline!
I’m actually not very good at poster sessions. I find that I want to actually read the interesting ones, which usually conflicts with the expectation of the poster presenters who want to talk. And sometimes (rather too often, unfortunately), when I finish reading the poster, I realize that most of the ideas have already been incorporated in some other piece of research, or perhaps even a commercial product. It’s really hard to tell a bright-eyed grad student that they need to go back and redo the literature search phase of their project. (Marvin is better at it than I.)
Having said that, there were two initiatives that I definitely want to follow up in the cold, clear light of day: Shirako from Duke, and Plush from U.C. San Diego. The problem statements look exactly right; I’ll be interested to see how much progress they’ve made.

At last! TECO!!

OK, all you EMACS devotees. Who among you know what EMACS stands for? “Editor MACroS”, that’s right. But what language were these macros originally written in? Thanks to Good Math, Bad Math, you can now read all about the World’s Greatest Pathological Language: TECO. I first encountered it in 1970, when the Essex University PDP-10 was delivered.
This extract will pique your curiosity, or send you running for cover. I’ve modified it a bit from the original piece, because when I tried to quote it, some of the special characters were interpreted as bits of HTML. Besides, it looked all wrong to me; anyone who actually used TECO will remember that the ESCAPE key was echoed as $:

[…] The print command to print a string is control-A; so the TECO hello world program is: “^AHello world^A$$“. Is that pathological enough?
Commands to remove text include things like “D” to delete the character after the pointer; “FD”, which takes a string argument, finds the next instance of that argument, and deletes it; “K” to delete the rest of the line after the pointer, and “HK” to delete the entire buffer.
To insert text, you can either use “I” with a string argument, or TAB with a string argument. If you use the tab version, then the tab character is part of the text to insert.

I still remember the illicit thrill that ran through the Computing Centre when we learned that someone had created a TECO macro to invert a matrix. In retrospect, I blame the freely-available hallucinogens and too much Hunt the wumpus….

A few photos from this afternoon

I’ve just uploaded a few pictures that I took this afternoon. There’s a little something for everyone: local Massachusetts history (Norumbega!), computer history, a motor cycle for Alec, tandem bikes for ChrisG, watchmaking for… well, anyone that likes industrial history, and a couple of fearless young swallows. Enjoy. (Start at the beginning: I’ve added captions to all of the photos – thanks, Susan!)

Cringely nails the "Net neutrality" issue

Cringely gets to the heart of the matter.. Right now, it’s all about VoIP:

One thing ISPs supposedly aren’t allowed to do is to ban packets completely. If they tried that by, for example, restricting all Internet video or VoIP phone service to a particular provider, the courts would fill with lawyers filing Restraint of Trade lawsuits. So the ISPs take the air carrier approach of not denying passage to anyone, but wanting to give priority boarding to their most loyal frequent fliers. That’s the heart of their argument.
But the other position ISPs like to take is that of the common carrier, which supposedly doesn’t know the difference between one packet and the next, and is therefore not liable if some of those packets carry kiddie porn or terrorist communications. The ISPs, you see, want it both ways.
And they’ll probably get it, because they have the lobbying clout.
[…]
Where this Net Neutrality issue will hit home is for Voice over IP telephone service, which becomes pitiful if there is too much latency. That’s what this is all about, folks: VoIP and nothing else. The telcos want to use it to keep out the Vonages, Skypes, and Packet8s, and the cable companies do, too. It is a $1 trillion global business, so we shouldn’t be surprised that the ISPs will do anything to own it, but it isn’t about movies or music or even AJAX apps — at least, not yet.

UPDATE: There are also some excellent pieces on the topic over at Jim Lippard’s blog. Too many to link individually….

Delicious Library – promising, but…

Over at present simple, badaunt writes about Delicious Library:

I discovered that Delicious Library is a way to catalogue your books. Just point any FireWire digital video camera, like an Apple iSight®, at the barcode on the back of any book, movie, music, or video game. Delicious Library does the rest. The barcode is scanned and within seconds the item’s cover appears on your digital shelves filled with tons of in-depth information downloaded from one of six different web sources from around the world.

So of course I downloaded it, plugged in my iSight, and started playing.
Basically it works. Wave the bar code on the book at the iSight, getting the angle and lighting right, and the lookup takes a couple of seconds. Great. However, like badaunt, I can’t imagine actually scanning my whole collection. It would take forever, it would require a fair amount of manual intervention (see below), and when I’m done, what use is it?
But I’d love to be able to use it as an adjunct to blogging. For example, I’ve recently been on a Jack McDevitt kick: I picked up Chindi at an airport bookstore, enjoyed it, followed with Omega, and over the next few weeks I worked my way through another four or five of his books.
Now, it would be brilliant if I could have prepared that last paragraph by scanning a few McDevitt books into Delicious Library and clicking a button to generate a chunk of HTML with thumbnail covers, links to Amazon.com, and so forth. (XMLRPC upload to the blog would be nice, but cut-and-paste is adequate.) However right now Delicious Library offers no easy way to work with the data in the library. The Export... option just dumps out a ton of stuff from the Amazon.com page in plain text; Print... just lists thumbnails and titles in a PDF, and Mail... generates an email message per book with the cover and a link.
What I’d like is the ability to define a template, using predefined variables for the various fields of the item record (title, author, publication date, publisher, Amazon cover thumbnail URL, etc.) Then on command the app could simply expand a copy of the template for each selected item in the library, replacing the variables as appropriate, and dump the whole lot onto the clipboard, ready for me to paste into my WordPress composition window.
I mentioned manual intervention earlier, and I have to say that the bar code scan approach is by no means foolproof. For example, I just tried to scan Jack McDevitt’s Infinity Beach. The application read the UPC – 099455007993 – and mapped it into The Lone Ranger Vol. 2 DVD. Eventually I discovered that the way to correct this was to update the “Details” field labelled amazon® # with the ISBN – 0061020052 – and then instruct the app to Reload details from Amazon.com.... In the first dozen books I tested, I ran into this twice, which is somewhat depressing. Oh, well.
The price is OK ($40; the demo version allows up to 25 items), but Delicious Library needs to be a little more open and extensible to meet my needs. Maybe it could be AppleScriptable…?
UPDATE: Mike, the Major Domo at Delicious Monster Software, assures me that they’re working on the features that I suggested. He also provided a workaround for the scan error (look inside the front cover…). I’m impressed, and I’ve volunteered to be a beta tester.