• Staff Engineer tips


    The technical aspects of Staff+ development are well-understood, especially by Staff+ engineers that have a wealth of personal experience to draw on for guidance. Combining this well-developed skillset with the new skills required of a Staff+ engineer is how you’ll start to have a really big impact on the wider organisation, and this can be much more challenging.

  • Documents vs UIs - holding back the web?


    While updating this website I’ve found myself staring at a crossroads. Persist with the existing format of a backend application that serves up a mix of templated HTML and static assets, or switch to a UI framework (specifically, elm-ui). But what are the trade-offs? If I’ve grown so fond of elm-ui, why isn’t this switch a simple decision? It comes down to the difference between documents (AKA “content”) and User Interfaces, and I think the answer reveals one of the main weaknesses of the web as a platform.

  • One trick for appearing more senior at work


    Use fewer words.

  • Game of Thrones Season 7, the chink in the amour


    Here’s an analysis of the latest episode of Game of Thrones. It should go without saying that this is riddled with spoilers. If you aren’t up to date (Season 8, Episode 5) then please hold off reading this until you have caught up.

  • Real-world software security lessons


    Last week I published an article on the Guardian about how real-world intuition can help teach us lessons about securing our software.

  • PebRunner - a Pebble Netrunner companion


    I haven't blogged for a while so I've not mentioned that over the last year or so I've got really into a game called Netrunner. I am also the proud owner of a new(ish) Pebble Time, having owned the original Pebble for the last couple of years as well. The obvious way to combine these things was to make a Netrunner app for the Pebble, so that's exactly what I did.

  • Typed API design :: Scala eXchange


    Last week I gave a talk at the 2014 Scala eXchange in London, entitled "Effective API design with Scala types". The talk involves some practical examples of how choosing appropriate types can greatly improve the design of your API, making it both much easier to build and much easier to use. I promised I would upload some more details about the code so here it is along with some more background, links to the talk and some supporting resources.

  • SSH config for easier EC2 usage


    SSH is one of the key tools used for modern web development but it's not very well known that ssh can be configured to make life easier. Modern applications often bear little resemblance to those that existed when ssh was developed so tweaking the default settings is increasingly important.

  • Play multi-project builds as of 2.3.4


    With the lastest release of the Play Framework, the way multi-project builds should be created has changed. Unfortunately this change is yet to be documented. If you're following the docs but seeing unexpected (and unwelcome) error messages along the lines of object Project is not a member of package play then read on. I spent a while getting to the bottom of this, hopefully I can save you the time.

  • Happy birthday, BASIC


    BASIC was 50 the other day! I shared some happy memories on the Guardian but I thought I should go into a little more detail here on my own site. Apart from anything else, you'd miss all the links if you only read the Guardian version ;-)

  • Computers and time


    Time is fairly complex subject but we are used to taking it for granted. One reason for that is that these days computers keep track of time for us so we rarely need to think about it. The way that they do this is very interesting and taking a look at how computers understand time can teach us a lot about what time is to us. What's more, in our look into the world of computer time, we'll uncover an impending disaster that is to the Y2K problem as Krakatoa is to the gentle rumblings of your stomach on a hungover morning.

  • Wagner at the Proms


    What a week! I've long been a big fan of Wagner's work and this year marks the bicentenial of his birth, which has given me a fantastic opportunity to get stuck into some music. Most notably, the proms has been offering a veritable banquet of Wagner. It's rare for quality productions of Wagner's later work to be performed in full because of their length and difficulty. It's rarer still for the two most extreme such works to be performed in a single week by an all-star cast with the low barrier to entry (and cost!) offerred by the Proms.

  • Meter Delta - Dynamic Time Signature Improvisation


    Meter Delta is a tool to help musicians improvise together in dynamic time signatures, chosen at random by the computer. Meter Delta itself is just a library to take care of the timings and time signature selection but I also provide a default UI that you can use directly, or as inspiration for your own project.

  • A new website


    It's been a very long time coming but luckily @grumpyjames put together a fantastic blog and showed it to me, which was incentive enough for me to get my own off the ground. It has been pointed out to me that there's no point writing one's own blogging platform when it's so easy to just use one of the almost infinite number of existing solutions. Good advice, that I have chosen to ignore. I finally have a new website.

  • The Wheel of Time's conclusion, plus a new toy


    So I've finally joined the modern age and bought myself an eReader. Nook have had a bit of a fire sale and are selling a pretty decent device for a wholly reasonable £29!

  • Functional Programming Principles in Scala: Rebloogged


    My colleague @lindsey_dew and I have written a series of blogs on Coursera's Functional Programming Principles in Scala course for the Guardian's dev blog.

  • Why you need an SSL certificate


    This blog has started to become a "me sharing little things" place. Along the same lines, a friend of mine has been setting up a website and asked me about SSL certificates. Rather than just replying with a recommendation, I launched into a brief description of why they're necessary. I might as well put it up here in case it can help anyone else.

  • Find your IP


    A colleague just asked me how do I get the IP address of the server this script is running on?, which a great question. You can do it in Python but it's a bit of a hassle and as is often the case, it's really easy to do this in bash. I came up with this off the top of my head. It's not the best way to do it but it works nicely and it's very clear so I figured it would be a nice example to show. (I have a few alternative implementation as well but if you have a neat one I'd love to see it in the comments)

  • Über PS1 - with added Git


    I spend alot of time in a terminal working with git. If you're like me then you can save typing by customising your command-line prompt. I'm going to chat for a bit about why I built this, you may want to jump straight to the PS1 samples at the bottom.

  • Amazon & WikiLeaks - The Real Problem


    I’m sure you have all heard about Amazon’s decision to stop hosting the WikiLeaks website and given my interests (and career!) in web technologies this is something I’ve been giving a lot of thought to over the past few days. My opinions have changed while I’ve been thinking about it so I’m going to tell the story of my reasoning as a backdrop to what I have (for now) concluded is the real underlying issue. This isn’t about WikiLeaks and it isn’t about Amazon but given the ongoing WikiLeaks debacle and Amazon’s enviable position in online retail and web services, these organisations and the relationship between them makes for a great case study in the deeper issue of the role of technology in our lives today.

  • Hello, world!


    So I've been talking about "updating my site" for years. It's one of those things that always needs doing but because it's my own site I've set my expectations pretty high. Many times, I've begun coding an update and many times I've then "found something better" and decided I should do it that way instead. I've hacked away at PHP (as well as written an entire PHP MVC framework), dabbled in node.js, toyed with django (which I'm using at work these days) but not yet got it done.