Blog Posts

The authentication tarpit

At work, we’re looking at adding the Atom Publishing Protocol in a few places where it makes sense. APP’s got a lot going for it - the spec is a great example of how to design a Resourceful API and is worth reading even if it’s not an immediately good fit for your application. But… It’s one of the givens of good application security that you don’t store passwords in clear text and you do your level best not to send them over the wire in cleartext.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Martin Fowler's big mouthful

Martin Fowler is writing a book about Domain Specific Languages and, because you could never accuse Martin of a lack of ambition, he’s trying to write it in a reasonably (implementation) language agnostic fashion. It’s fairly easy to write an implementation language agnostic book about old school DSLs, what used to be called little languages - there’s a fairly well established literature and theory to do with lexing, parsing and interpreting.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Getting to grips with Javascript

I’ve been busily adding AJAX features to the work website, and I got bored of writing Form handlers. I got especially bored of attaching similar form handlers to lots of different forms on a page, so I came up with something I could attach to document.body and then plug in handlers for different form types as I wrote them. So, I wrote FormSender and set up my event handler like so:

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

The secret of comedy is...

… timing. You either have it or you don’t. Does this count as good timing? Finish up some improvements to the way Typo sweeps cached pages Announce Typo 5.0 Go down with a horrible cough and cold that leaves you exhausted and incapable of hacking Discover that the ‘improvements’ in Typo’s cache sweeping can, occasionally, cause it to wipe the entire Typo installation directory Stagger out of bed. Attempt to fix problem Release Typo 5.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Typo 5 is out - and more on the future

Right, we’ve cut a Typo 5 gem and it’s on rubyforge and heading to various mirrors I hope. Frédèric’s writing the release notification which will be appearing on Typosphere Real Soon Now. It’s been a surprisingly tricky process - we’re now requiring Rails 2.0.2 because the workings of view_paths have changed in a way which means we can’t quite make themes with Rails 2.0 and 2.0.2 and working with the edge seems like the more sensible proposition.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Rails 2.0 and the Future of Typo

So, if you’ve been watching the Typo tree, you’ll see there’s been a fair amount of activity on it since Rails 2.0 got released. There’s a new default theme replacing the rather creaky ‘azure’, and a fair amount of work on getting our code compatible with the current state of Rails. As we work on this, it becomes apparent that Typo’s code is getting horribly brittle. I have said before that there’s been several places where we’ve zigged before Rails zagged, and we’re paying the price for that.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Comprehensible sorting in Ruby

Here’s a problem I first came across when I was about 13 and helping do the stock check at the family firm. The parts department kept all their various spare parts racks of parts bins. Each bin was ’numbered’ with an alphanumeric id. We had printouts of all the bin numbers along with their expected contents and we’d go along the racks counting the bins’ contents and checking them off against the print out.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Can I get a witness?

Worrying about test coverage when you’re doing Test- or Behaviour-driven development is like worrying about the price of fish in Zimbabwe when you’re flying a kite. Your tests are there to help you discover your interface and to provide you with an ongoing stream of small bugs to fix. If you write them cleanly, and keep them well factored (you are refactoring your tests, aren’t you?) they will help to document your intent too.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

An announcement

Do you have a PC, Xbox 360 or anything else that will run the Valve Orange Box? If so, get hold of a copy and fire up the Portal subgame. That is all.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Things that make a developer cry

So, we’re doing a cobranding exercise at work. The idea being we serve up a branded version of amazing tunes in a subdomain of our partner, their users get a skinned version of the site that feels like part of the partner’s site, we get an influx of new users and everybody is happy. One aspect of this is we’re using the partner’s site to handle authentication. Today, we got all our ducks in a row and started authenticating against the partner’s SOAP service as part of our user testing.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Leopard Polish

Yes, I’ve upgraded to Leopard. Yes, it’s spiffy. The headline features like Time Machine are great, but I’m loving the little details more. For instance, the first time you go to run an application that’s been downloaded from the net, a dialogue pops up reminding you that the file has been downloaded and asking if you want to trust it. It’s a nice bit of security, and it asks you the question at the right time.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Time flies when you're enjoying yourself

It’s been a while since I wrote anything here, mostly because I’ve been indecently busy. Well, up until last Sunday when I managed to trip over a low wall in our garden and, in the process take off a large amount of the skin on my left shin. A mere flesh wound, but painful, embarrassing and it’s left me sporting what looks like a foot long, white, elastoplast. The worrying bit is that, when I went to get my wounds dressed, the nurse took one look at my bulk and demanded a urine sample.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Rails tip: Side effect filters

Some bugs are easy to overlook. One that has a habit of catching me out is a Rails filter that returns false occasionally when it’s being evaluated purely for its side effects. Here’s how I’ve started working round the issue: def side_effect_filter return if some_conditions_not_met? … ensure return true end What happens here is that the ensure catches any return and returns true instead. The catch is that if something throws an uncaught exception anywhere, it too gets caught by the ensure and true is returned.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Typo on Rails 2

Whee! Sat in my home directory is a version of typo that appears to work with Rails 2.0. I ended up giving up on the themer approach which proved to be very hard to get up and running transparently - things kept disappearing off around infinite loops, which is no fun at all, let me tell you. So, ended up cheating and ended up monkeying with @@view_paths directly, which is almost certainly against the rules, but has the cardinal virtue of working.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Railsconf Europe Photos

<typo:flickr img=“1455226602” size=“medium” caption=“James Duncan Davidson” /> I’ve finally started uploading the scans from RailsConf Europe last week. There’s still one more roll to scan and another 9 shots in the camera, but I’m pretty pleased with the results so far. I didn’t really start shooting until about halfway through the last day. The light in the hotel was horrible and I just wasn’t in the mood, then suddenly I’d shot three rolls and was wondering where I could find another roll of Neopan 1600 at 9pm in Berlin.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Today's Noun is: Reticence

What does the OED say reticence is? Reticence: Maintenance of silence; avoidance of saying too much or of speaking freely; disposition to say little. Pretty straightforward. When I chose reticence as one of my five nouns for programmers it was another reminder that objects are not the same as datastructures. Well designed objects keep their cards (instance variables) close to their chest. Client code tells objects what to do, it doesn’t ask them to kiss and tell.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Slide Of The Conference

Britt Selvitelle of Twitter gave a cracking talk at RailsConf Europe about scaling Rails applications to Twitter scale. It was great. Full of advice that we shall definitely be taking on board as we continue to develop amazing tunes. However, the last slide before the inevitable “Any Questions?” was the slide of the conference. It read: It’s 2007. Every spammer has your email address. Put it on your goddamn webpage so people can get ahold of you about interesting things

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

My head hurts

During DHH’s keynote at RailsConf Europe it was apparent that there’s a great deal to like in edge rails, so I thought I’d have a crack at getting Typo up on it. Ow. I’d expected the pain points to be related to routing, but it seems that the rails routing system is approaching the level of the Excel calculation engine - nobody dares touch it for fear of breaking things, so typo’s custom routes seemed to work quite happily.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions

Hello Berlin!

Well… that was a fun flight. We’ve missed the Bratwurst on Rails event that the Berlin Ruby folks were putting on, so it’s a simple matter of getting some sleep before heading over to the conference hotel at ungodly o’clock to register in time for the first of the Railsconf tutorials. If anyone knows of a good professional photolab in Berlin that can do black and white film dev + scan overnight, I’d be very interested to hear about it.

  • 0 likes
  • 0 reposts
  • 0 replies
  • 0 mentions