JavaScript and the thickening client

In recent weeks I’ve been listening to the back-catalog of Ajaxian podcasts while commuting. It’s been great food for thought for me, since I’m one of those people who retreated to the server side years ago to avoid the horror of incompatible, standards-oblivious browsers and crazed animated status bar messages. Things seem to have gotten a lot better, to say the least.

Here are some things that these podcasts have prompted me to think about:

"Reverse" game update -- my language safari

My “Let’s play a game” post, featuring a simple number game implemented in three different scripting languages, has received many comments and updates in the few weeks it’s been up. There are now twelve implementations, seven written by me (wide variations in quality!) and five contributed by readers. The languages represented, as of today: Haskell, Io, JavaScript, Lisp, Logo, Lua, PHP, Prolog, Python, REBOL, Ruby, and Scheme.

I’ve learned a hell of a lot, and gotten some good ideas about which languages might be rewarding to dive into further. My favorite new discovery so far is Io. It’s clean, simple, consistent, and yet very pragmatic at the same time (e.g. lots of useful bindings, embeddable, etc.). The messaging syntax feels very natural, and the lack of brackets (cf. Objective-C) gives more than just visual relief: you don’t have to backtrack to the beginning of the expression to insert a bracket when you decide you need to chain one more message on the end.

Sort tables with sorttable.js

I’ve been enjoying listening to the “Audible Ajax” podcasts from Ajaxian lately. One of the older shows was a talk by Lugradio’s Stuart Langridge in which, in an aside, he mentioned a table sorting widget he had written. It sounded cool. When I got home I fired up the browser and found it: sorttable.js.

Even though it’s over two years old and doubtless there are a bazillion Ajax (tm) toolkits that include supersets of this functionality, I find it to be a very elegant thing. Largely that’s because of its utterly configuration-free operation. As long has you’ve put <th> headers on your table, you just include the script in your page, and set class="sortable" and a unique id on each of your table(s); clicking on a table header re-sorts the table by that column, without any action on the server side at all.

Site tweaks

Can’t stop tweaking the blog engine. Added:

  • Technorati search link on individual post pages
  • Del.icio.us bookmark link on individual post pages
  • Append .txt to any individual post URL to see the Markdown source, like this (mostly added for the benefit of people curious about Markdown)

Programming languages I have known

Gearing up for some programming-language-related posts, I’ve been thinking about the languages I’ve been exposed to over the years (those years being, specifically, 1981 to 2006).

To the best of my memory, everything I’ve ever written more than “Hello World” in is listed below. Languages that are italic I’ve written useful, if sometimes small, programs in. Languages that are bold are languages I’ve been paid to code in – though that includes things like selling shareware games as a teenager!

Well blogs

I’ve recently moved the Wellblogs aggregator to my server from its former home. It’s a simple “planet” style presentation that shows the last week’s worth of posts across a few dozen blogs written by members of The Well.

The software is a Python engine written by Michael Josephson, and I’ve been very impressed with it so far. It’s based on Mark Pilgrim’s Universal Feed Parser, a MySQL data store, Cheetah templates, and some extra bits to gracefully handle the inevitable connection failures involved when fetching dozens of disparate feeds every hour. Getting everything working was a breeze, and as someone doing more web development in Python lately I’m finding the code interesting reading. Hopefully the blogs are too!