Web development blog

May 3rd, 2008

Beware the underdog

Whilst watching the replay of Ronnie O’Sullivan vs Stephen Hendry today I was reminded of a conversation I’d had with Kevin Rapley, Daniel Davies and Danny Smith at the last Birmingham blogmeet. Cor, name-dropper me.

Dan Davies (who, to lessen confusion shall henceforth be known by his web-name as Danux) was quizzing me over a post I’d written about open source web technologies, upon which he’d already commented. At this point I was set upon by both Daniels and accosted. Danny Smith wanted to know why I couldn’t get behind the open source ethos and posited the theory that it’s all about the underdog, a concept we Brits love. (I can hear the Great Escape theme in my head as I type.)

This was a viewpoint I could understand, and it was the first time anyone had tried to intelligently explain why open source has value, apart from the financial benefits of not having to pay for your software. This helped me understand why I have the utmost respect for the open source ethos but will always choose the best solution to a problem (ie: the problem of finding a good web browser) based on technical factors rather than a shared communal empathy.

I don’t mean to belittle the idea at all, and I can completely understand it. People like to see others “sticking it to the man”, including me, but for whatever reason that doesn’t translate to my digital world. I choose software based on how good it looks (I equate this with an idea of “build quality”), how good the support seems to be, how compatible it is with my current system, and of course the price.

Because most open source applications are developed for the love of programming rather than to fulfil a commercial requirement, the UX element can slip. Plus most open source programs are built to be compatible with other open source programs, which really means Linux.

What interested me more is the idea of the underdog in a wider digital sense, and how it can affect other choices we make online. My friend Dave wrote a post entitled Apple is Totally Anti-competitive and got what can only be described as a barrage of abuse in comment form. Some of it was down to a few accidental factoids, but a good deal of it was down to the fact that Dave had simply dared to pour scorn on the mighty Apple.

People love Apple in a way that they don’t love any other company. People love Google but who loves Yahoo? They’ve all propagated evil, but because we think of them as the underdogs, this stuff gets automatically edited out by our subconscious. Microsoft are no more anti-competitive than Apple, but it’s Bill Gates’ wrists that get slapped when he tries to bundle software together, so when Steve Jobs makes iTunes the only way to sync your iPod without it breaking or distributes Safari under the guise of a software update, the technology community raises an eyebrow and that’s it.

I’m neither an Apple fanboy nor a Microsoft…er…lover, but the quite obvious double standards that exist around technology and intellectual property boggle my noggin.

So why the Ronnie reference? Well, here’s a man who has been playing professional snooker since ’92, has had nine 147 breaks and was the highest ranked 2002, ’04 and ’05 (get all the stats at snooker.org), but because he has a history of mental problems and has been known to crack under pressure, and because we know he’s capable of so much more, he’s always the one the crowds flock to the Crucible to see. Although no-one would call Ronnie the underdog, we attach the same romanticism to him as we would with any fresh new talent.

And that’s the case with the likes of Apple and Google. Their fans have a romantic link with these corporations in much the same way as open source developers do with the platforms they use, but what confuses me is when Apple talk about chasing three blokes in Miami for opening up the OSX platform or MySQL sells for $1 billion, this does nothing to curb the romance.

Maybe I’m just an old stick-in-the mud. Yeah, that’s probably it.

Byron’s first stumbling block

On Thursday I started work on my new content management system for ASP.NET, called Byron. I wanted to make it both flexible and efficient and in doing so I’ve had my first setback, and it’s all to do with data.

ASP.NET has a great model for creating flexible applications that can be configured very easily and without having to write too much unnecessary code. The Provider module means that you can put all the logic for a set of functionality in one place, and worry about the nuts and bolts later.

For example, I started off with a DataProvider system. I created a base class with a load of functions for accessing information about users and their roles, so that I could build a login system for the admin area later down the road. I then built a MySqlDataProvider which inherited from the DataProvider class and which would actually handle the instructions that the DataProvider was being given.

So basically the user system says “reset this user’s password” and the DataProvider says ”OK. Oi, MySQL? Check this user’s password would you?” MySQL comes along, resets the user’s password and tells the user system it has done so. (A very simplistic description, but hopefully it makes sense.) That all works great because the MySqlDataProvider knows what data to access, in what table and what to do with it. Now comes the tricky part.

I want the system to be a framework or platform, more than a CMS. I want Byron to form the basis of all .NET sites I develop in the future, so that means the system needs to be flexible enough to deal with any type of content, be it a page, a blog post, a contact form or a news article. Because there are subtle differences between examples 1, 2 and 4, a catch-all system wouldn’t work, so total flexibility was what was needed.

So I built a ContentProvider and setup a whole load of stuff in the site’s configuration file so that new types of content could be created, understood and rendered. It all went swimmingly until I came to the point at which I’d have to access data for each page, post or article.

And that’s where the stumbling block came and whacked me square in the noggin. How do you access data from a database without knowing

  1. what the content will be used for, and crucially
  2. what form that data is held in?

It could conceivably be XML, a MySQL or MS SQL database or even - heaven forfend - a bunch of text files. If I wanted the system to be totally flexible it would have to cope with all of these, and more. And that’s actually OK as long as you know what data you need, but because the content system was dynamic too, I didn’t.

I knew that if I really knuckled down I could create a really fancy generic query system where the complexity of each query could be communicated and passed from the ContentProvider to the DataProvider and back again. But this would end up slowing the system down, and I’d have a foot-long white beard by the time I’d finished. So I had to make a compromise, and from now on, Byron will only support a MySQL database.

I wanted to allow the support of any database that can interpret SQL (a “programming” language for databases), but there are limitations which I won’t go into, so it’s MySQL or no SQL. Hey, if it’s good enough for WordPress it’s good enough for me!