Dang that’s some mighty fine internets you got there

Today felt like the first day I discovered the world wide web. Pure awesome:

Before today I had never even heard of any of these artifacts of amazing. What a couple of idle hours will find. Okay, five. Or so. Roughly. Maybe seven. Anyway.

PS. If it’s not too late to mention, hotforwords might be a bit NSFW. A little. More embarrassing than, you know, dodgy. Maybe shrink the window a bit before clicking. And look over your shoulder. Check for reflections in windows behind you. Its fine really, just, perhaps, hard to explain if you’re not prepared. She’s got 2 degrees in philology you know. Just explain you only watch it for the etymologies. That excuse always works.

SwingHelper

One of the most common causes of sporadic bugs in swing applications is doing things on the wrong thread. Most common of these is when a thread that is not the Event Dispatch Thread does something that updates the gui. Its very easy to do accidentally as seemingly innocent operations done on a background thread can fire off event listeners and end up inside code it shouldn’t as a result.

CheckThreadViolationRepaintManager from the SwingHelper project is a very useful class that can be easily plumbed into a Swing application to report any wayward threads getting into gui code.

Also from the same stable is the EventDispatchThreadHangMonitor which can report when the Event Dispatch Thread spends too long outside its main loop (which will result in a sluggish and unresponsive gui).

WordPress Fail

So I was all fired up about migrating to wordpress, due to the rot this blog has suffered over time. (The category links have been broken for nearly 2 years now I think). I got as far as the following line in the (ahem) 5 minute install guide:

Create a database for WordPress on your web server, as well as a MySQL user who has all privileges for accessing and modifying it.

And now it all seems like way too much effort. I’m incredibly lazy when it comes to blog tools. Gone are the days when I would happily spend half a day tinkering with the tool prior to writing a 10 minute post. And I’m sick of blasted relational databases. A blog is just a bunch of text snippets with a few bits of metadata around the edges. Why not use a perfectly good filesystem for storing what is so easily represented as a bunch of files? It might even stand a chance of holding my attention long enough for me to finish installing it.

I really want to blog more, but I need the feedback of comments to help keep me going. Every time I’ve tried tinkering with movable type comments to allow me to turn them back on its been buried in spam within seconds, and I can’t be bothered figuring out which magic combination of plugins, captchas, blacklists and runic inscriptions I need to make it work.

I’m off to find some incredibly tedious housework to do that might make farting about with MySql seem like a reward and a treat.

Change the Words

Agile is dead. The word is too easy to slap onto any old thing in an attempt to jazz it up. It’s also pretty easy to use as a pejorative term by those who have no interest in improving. Let’s take a typical interaction:

“We’re doing agile development. By using agile techniques we can work more effectively and our software is easier to change, with fewer bugs. The agile approach lets our customers steer the project while it’s running to maximise return on investment.”

“Agile techniques? I’ve heard about them. Isn’t agile software development just an excuse not to spend time doing design and analysis? How can you run a project without nailing down all the requirements and design in advance? Agile approach? No thanks!”

In my head, I like to replace the word ‘agile’ with ‘professional’ and ‘modern’. To me the above conversation thus sounds a bit like this:

“We’re doing professional development. By using modern techniques we can work more effectively and our software is easier to change, with fewer bugs. The professional approach lets our customers steer the project while it’s running to maximise return on investment.”

“Modern techniques? I’ve heard about them. Isn’t professional software development just an excuse not to spend time doing design and analysis? How can you run a project without nailing down all the requirements and design in advance? Professional approach? No thanks!”

It also works when talking about software frameworks.

“We’ve built a software framework to enforce a standard approach to all applications and maximise reuse of common components. All a project team has to do is work to the common interface and conform their design to the framework. Sharing common software components maximises standardisation between projects.”

I hear:

“We’ve built a software nightmare to enforce a mediocre approach to all applications and maximise reuse of inappropriate components. All a project team has to do is work to an inappropriate interface and conform their design to the nightmare. Sharing inappropriate software components maximises mediocrity between projects.”

(Just to clarify, I’m a big fan of libraries. A library is something that you use. java.util.collections for example. A framework is something that (ab)uses you.)

The Next Language for Startups?

Nobody who can spell HTML would be surprised if you launched a Web 2.0 company and chose to use Rails to build your site. On the other hand, one of the ways startups beat the competition is by taking the road less travelled, by using a language considered wierd or niche by everyone else. Success can lead to the language being noticed and becoming more widely accepted.

I was pleased to discover that Slideaware have migrated from Rails to Erlang for their online powerpoint collaboration application. Not because I don’t like Rails, but because I really like Erlang.

Paypal

It’s not friendly and it makes it really hard to pay for stuff.

Has anyone ever actually had a smooth user experience with Paypal? Every single time I’ve tried to use it I’ve had problems.

The new credit card loop of death. A particular favourite. This is where paypal keeps insisting that ‘this card has already been registered’ while steadfastly refusing to let me actually use it to pay for stuff, eventually looping back to the ‘add card’ screen for another fun go around.

Amnesia. Several times paypal has let me go all the way through adding a new card, accepted it and then just forgotten all about it, forcing me to add the card again. Often leads to another free trip to the loop of death above.

Insisting that a payment has already been made (for an item on ebay) and refusing to let me continue, despite ebay having precisely the opposite opinion. Makes the whole cute ‘an ebay company’ logo look like some kind of ironic joke.

Workflow bugs in little-used ancillary features are one thing but… this is paypal. One might consider the workflow around, you know, ‘paying for stuff’ to be something of a core function?

Mistakes you will make in software

Almost without fail I see certain errors repeated on every single software project I come across. The projects that successfully dodge these pitfalls almost always do so because someone on the team fell into them once before and swore they wouldn’t do so again. Those of you who haven’t yet been burned by this class of error will almost certainly protest about complexity or wierd design choices in the code made by those who have.

Who are these heinous kingpins of crime in the bug ghettos of the software world? Its a work in progress, but the initial contenders are:

  • Dates and times
  • Money
  • Concatenated strings as identifiers

Those of you who’ve been beset in the past are nodding right now, those who haven’t are probably saying, “they don’t seem very complicated.”

Which is exactly why they’ll get you sooner or later. Then you’ll remember this post, and you’ll nod.

Feed me

It’s been kindly pointed out that my feeds and half my category links are broken and have been for a while. Probably nobody is left who still actually uses a browser to read blogs, but, as this dovetails rather precisely with my assumptions about readership size; and faffing with moveable type templates rates somewhat lower than not, it may take a while before it all gets sorted. Apologies to anyone who’s still committed enough to make the effort, I’ll try and get round to sorting it.