Simon Willison’s Weblog

Entries in 2003

Filters: Type: entry × Year: 2003 ×

Installing psycopg on Red Hat 9

Adrian Holovaty and I spent some time today figuring out how to get the psycopg Postgres module to install on Red Hat 9. It took a while, but eventually we tweaked the spec file and used it to compile our own RPM. I’ve posted our modified spec file to the psycopg mailing list. More for my own record than anything else, the arcane incantations needed to create the RPM went roughly as follows:

[... 151 words]

Professional social software

Via D. Keith Robinson, LinkedIn is a social software system that works kind of like Friendster but is targetted at professionals. You sign up, create a profile that includes your industry and geographical area and it provides you with a number of tools to find other people with similar interests. More importantly, it lets you build up a network of contacts through which you can access other people. If nothing else, it’s a great way of maintaining your CV.

[... 178 words]

Javascript from Python

In a way I’m disappointed to see python-spidermonkey released. It’s a Python wrapper around the Mozilla project’s SpiderMonkey Javascript engine which allows Python scripts to execute Javascript code in a rock-solid, battle-tested embedded interpreter.

[... 187 words]

A belated Merry Christmas

I’m back to work after enjoying that most precious of things: a holiday without computers. Comment spam has been deleted, email spam has been saved in a special folder (for rapid training of bayesian classifiers in the future) and the few emails of actual importance have all been flagged for follow up. Oh, and my Mac’s shipping date has slipped to the 2nd of January. If haven’t received it by Macworld and Apple drop the price I’ll be understandably upset.

[... 81 words]

Nielsen watch 2003

Jakob Nielsen’s Top Ten Web Design Mistakes of 2003 make interesting reading this year, covering topics including undated content, incomprehensible thumbnails and overly specific forms. In previous years Jakob’s complaints tended to center around far more obvious problems such as horizontal scroll bars and fixed size fonts. Either the field of web usability has matured to the point where the common issues are less glaringly obvious or Jakob is running out of low-hanging fruit.

[... 75 words]

XML highlights for PHP 5

XML in PHP5: An in-depth look into advanced XML features (via Keith) does exactly what it says on the tin. Here are the bits that caught my eye:

[... 155 words]

I’ve ordered my PowerBook

Thanks to everyone who provided advice on buying a Mac—it provide incredibly helpful in making my selection. I placed my order this afternoon for a 15" 1 GHz PowerBook with a SuperDrive, backlit keyboard and 60 GB of Hard Disk space. I went with the minimum possible memory (256 MB) and plan to buy an extra 512 MB from Crucial (for less than half the price Apple charge) in a few weeks time.

[... 184 words]

Atom autodiscovery test suite

Mark Pilgrim has released the Atom autodiscovery test suite, comprising 148 tests:

[... 130 words]

Open Mosix

I can’t remember how I stumbled across it, but Open Mosix looks like a really interesting project. It’s a Linux kernel extension that makes creating a Linux cluster is as simple as installing a kernel module on a number of machines and supplying each one with a shared config file.

[... 310 words]

RELAX NG now an ISO standard

Via James Robertson, RELAX NG (altogether too many caps) has been published by ISO as an International Standard. RELAX NG compact syntax is will hopefully join it soon.

[... 149 words]

More CSS trickery

Stu Nicholls dropped me a line earlier to pimp his new CSS demo site, He’s got some really nice tricks and the site warrants serious exploration. There’s a good take on the classic 3 column layout with header and footer problem, a bunch of neat menus and a bunch of fun demos that defy categorisation.

[... 75 words]

Joel on Eric

Joel Spolsky’s latest essay reviews Eric Raymond’s The Art of Unix Programming (a book I really want to pick up) and uses it as background for a discussion of the cultural differences between Windows and Unix programmers. As always, it’s an insightful piece.

[... 197 words]

Mac buying advice needed

I’m in the market for a new laptop, and I’m almost 100% certain it’s going to be a Mac. I’m going to be using it as my primary personal computing platform, but the vast majority of what I do with a computer is browsing, using email and messing around Python, Apache and other geeky toys. I’m sorely tempted by one of the 14" iBooks. Since I’ll be using this thing a lot (and I’ve never been a huge fan of laptop keyboards) 12 inches seems to small, and I’m not convinced that the extra cash for a PowerBook is worthwhile now that iBooks go up to 1 GHz.

[... 417 words]

Javascript debugging: IE Option gotcha

I’ve been debugging Javascript today. I like Javascript as a language, but I doubt anyone would disagree that it’s a horrible, horrible language to debug across multiple browsers. Firebird at least has good debugging support—I currently use the Javascript Console and Jesse Ruderman’s shell bookmarklet and I really need to learn to use Venkman some day. If anyone knows a better way of debugging Javascript in IE than relying on the lame popup box I’d love to hear about it.

[... 238 words]

Grouping table data by header

Andy’s latest Javascript experiment is over a week old now but I managed to miss it the first time round. It’s an interesting twist on the sortable tables idea, allowing table data to be grouped as well as sorted by dragging each table header on to a box at the top of the table. Unfortunately the grouping feature seems unstable in IE but it works a treat in Firebird.

[... 80 words]

New Python Computer Science text book

Python Programming: An Introduction to Computer Science is a new Computer Science text book designed for use in introduction to programming classes, written by John Zelle, who’s Teaching with Python page . Kirby Urner recently posted a mostly positive review of the book to the Python Edu-SIG mailing list, which sparked an interesting discussion about Python’s place in the CS curriculum.

[... 183 words]

Static content generation

Ian Bicking has an interesting pieces on using static publishing in a CMS. The choice between static and dynamic when building software for the web is a critical one, and one that I think deserves in-depth discussion.

[... 672 words]

My first SitePoint article

Enhancing Structural Markup with JavaScript is my first published article for SitePoint, a web development portal that is also home to some of the best web design forums on the web. I’ve been a big fan of SitePoint for a number of years and it’s great to finally have contributed something to the site. The article discusses two methods of building useful Javascript effects on top of well structured markup and is based on my easytoggle and blockquote citations experiments, both previously featured on this blog.

[... 119 words]

More blogmark tweaks

I’m up to 110 blogmarks now, and from my point of view they’re the single most useful feature I’ve added to this site in a long time. I’ve modified my day archive pages to show the blogmarks added on that day, and I’m considering adding them to individual entry pages as well so that an entry is displayed along with the blogmarks added while that entry was at the top of my blog. The idea there is that I could aim to blogmark “related items” for the top entry, although obviously unrelated sites would end up in there as well.

[... 204 words]

Implementing filesystems in Python

LUFS-Python provides a relatively simple API for implementing new Linux filesystems in pure Python. You install the package, write a class implementing methods for handling filesystem operations such as creating a directory, opening/reading/writing/closing a file, creating symlinks etc and finally mount your new filesystem with some special arguments to the mount command.

[... 371 words]

Nasty new IE vulnerability

Most people reading are probably aware of the common trick whereby spammers and other assorted ne’er-do-wells publish URLs with usernames that look like hostnames to fool people in to trusting a malicious site—for example, This trick is frequently used by spammers to steal people’s PayPal accounts, by tricking them in to “resetting” their password at a site owned by the spammer but disguised as

[... 164 words]


Two acronyms that have been seeing a lot of action at work recently are YAGNI and DRY. They’re great principles to go by in any case, but in a pair programming environment they take on a whole new level of utility.

[... 231 words]

Hacked for Spam

From the New York Times:

[... 636 words]

How not to use OOP

Via Hans Nowak, Understanding Object Oriented Programming, or how to turn 19 lines of easily maintained code in to an OO monstrosity spanning 7 class files. This is not the way to make code more maintainable. For comparison, here’s how I would implement a solution to the same problem in Python, assuming the availability of an equivalent function to Java’s System.getProperty("") ( is similar but inappropriate for this example):

[... 153 words]

Bounty Hunting

Via Jeremy Hylton, Mark Shuttleworth (super-rich geek and space tourist) is offering $100,000 worth of bounties in 2004 to developers willing to help out with a number of Open Source projects, most of which are to be developed in Python. A comparison can be made here with Mitch Kapor, another geek-done-well who funds open source development through his sponsorship of the Open Source Applications Foundation.

[... 207 words]

New PHP community site

Via The Farm, Chris Shiflett is calling for assistance in setting up a new PHP community site to run along similar lines to use Perl. Chris has already secured an offer of hosting and support from O’Reilly and is now seeking offers of help from potential contributers. PHP has long needed a site of this kind (PHP Builder has lost a lot of momentum since being sold by Tim Perdue) so this could be a worth while project to get involved with if you have the time.

[... 140 words]

Simpler content managment

Perls of wisdom in a sea of site mismanagement, via the ever-excellent Column Two:

[... 497 words]

GAWDS now inviting new members

The Guild of Accessible Web Designers is a world wide organisation of web designers and developers committed to helping each other, and promoting the message that accessible web design is ’good for business’. I’d describe the organisation in detail here, but the official site does a far better job than I could. If you’ve been following the web accessibility community in any detail You’re likely to recognise a number of the names on the registered members list; I’ve been following GAWDS developments for a while and its shaping up to be a great resource for accessibility minded designers. I’ve also contributed an article on Writing good ALT text which hopefully provides some useful advice on a frequently misunderstood topic.

[... 134 words]

Dates on the web

D. Keith Robinson writes about Using Dates For Featured Web Content. Keith’s right, including a date with your content really is a no-brainer. I’ll add an anecdote of my own. Several years ago I ran a popular news site for Team Fortress Classic, a team based online first person shooter game with a thriving clan scene. I was careful to include dates on every piece of content, but in my youthful naivety I neglected to include the year. The years rolled by and the content built up until I suddenly realised that I was no longer sure what year some of it was written in! The site has sadly now passed in to history but the lesson remains: the web moves faster than you might think, so omitting the year in your dates is a pretty dumb thing to do.

[... 220 words]

Extracting the length from MP3 files with Python

Ned Batchelder recently wrote about the difficulties involved in extracting the length from an MP3 file. We’re going to need to solve this problem soon at work; luckily, it seems that the answer may lie in the Python bindings for mpgedit, an audio file editing library available for both Windows and Linux.

[... 149 words]