Dockerised Gitlab+CI+Runner

Gitlab is an open source clone of Github with some extra features like merge requests which are useful for teams. It has recently been combined with Gitlab CI which is a continuous integration server similar to Travis.

WordPress Packagist gaining traction

WordPress Packagist is a service I developed at Outlandish. It provides a mirror of the WordPress plugin and theme directories as a Composer repository.

A better command line for Windows

From my post on the Outlandish blog:

Convert XML to JSON

From my post on the Outlandish blog:

Mixtape vol. 13 - Trees

Here's some more music.

Mixtape vol. 12 - "Spot the Dog"

Here are some tracks plucked from my Spotify "Loved" playlist. As usual, no theme, just things I like. Perhaps you will like too.

TV apps are a flawed idea

From my post on the Outlandish blog:

Android powered robot tank

After half a lifetime of dreaming about it, I've finally started building a robot. It's based on a remote controlled tank, an Android mobile phone and a IOIO board which connects the two via USB.

Looking for bad user experience? I go DirectGov.

I've just moved home and so needed to update the address on my driving license. "Do it online - do it quicker," says the DVLA website. Well all right, I reply. How naive of me.

Mixtape vol. 11 - "A Few Old Tunes"

A fairly haphazard selection of some of the interesting tracks that I have "bookmarked" and put aside over the past few years.

Designing a better payslip

You know there's something seriously wrong when your payslip is three pages long and comes with a two page explanatory leaflet. Payslips are often pretty cryptic but the one I received today was so bad it took me over half an hour to work it out. All I really care about is how much have I earned, how much am I getting and, most importantly, where did the rest go?

How @trendingtopics works

I made the @trendingtopics Twitter bot to keep me and others up to date on the (often) interesting topics that are being discussed most across the Twitterverse. This is a slightly technical explanation of how it all works.

Mixtape vol. 10 - "Christopher Hogwood" Edition

This mix starts off a bit electropop then veers off into indie and other good stuff.

Interaction '09 Highlights

Four days of presentations, workshops & chats have drawn to a close. I've had a great time, learned a lot, met interesting people and leave full of ideas and enthusiasm. Full videos of every session will be posted up on the site in due course but in the meantime, here are some of my highlights.

Mixtape vol. 9 - "Not a Care in the World"

This is mainly a 50s mix with a few tracks bleeding over into the adjacent decades. When I listen to this music I can't help but bounce around with a grin on my face while my worries melt away. Try it - it's better than prozac.

More search terms instead of URLs

In August I posted about an emergent trend of sharing web addresses by quoting search terms rather than URLs. For instance the PM programme on BBC Radio 4 says "to find our blog, put pm blog into any search engine." Since then I've noticed this pattern in a few other places.

Twitter Trending Topics 2.0

I've updated the code that runs @trendingtopics. It will now tweet sooner, avoid duplicate tweets, ignore hashtags and add links to Wikipedia and Google where appropriate. My aim for this update was to be a bit more intelligent in what to tweet and when. I also wanted to show a bit more about the topic without having to read through a stream of tweets on a Twitter search page. This update goes some way towards those goals but I'll be tweaking it more over the next few days so please let me know what you think, either here on or Twitter.

What is an Interaction Designer?

There's a great thread over on the IxDA mailing list discussing "As an interaction designer, how do you explain your work in social situations?" Here are my favourite answers.

Formatting bytes with significant figures in PHP

Hopefully these PHP snippets can be useful to someone. The first function formats a number to a specified number of significant figures (this is different from rounding to a number of decimal places). The second function uses the first to display a number of bytes with appropriate human-friendly formatting. e.g. 12345B becomes 123kB (to three significant figures).

Hackney Tweetup

I'd like to organise an informal gathering of Twitter users from Hackney and heareabouts. There's a bunch of us living in the neighbourhood and i think it would be nice to get a proper introduction so we can put faces to the usernames. I was thinking the Pembury Tavern for a couple of drinks some time next week. Please let me know your availability and I'll try and pick a day that suits everyone.

Twitter Trending Topics

The @trendingtopics Twitter bot tweets the topics that people are talking about most on Twitter. There’s also an RSS feed if you’re interested. It’s a very low tech solution and it’s not guaranteed to work but I find it quite useful.

Mixtape vol. 8 - "Yes"

Phew! It's been a while. I actually compiled this mix back in May or June but didn't get round to finishing it until now. Once again there's no theme other than music I'm currently enjoying - or at least, was enjoying 4 months ago!

Search terms instead of URLs

Web addresses are horrible. They're difficult to remember and poorly understood. Which is why I found the recent trend of suggesting search terms instead of quoting a URL interesting.

Things I found in my car (that I didn't put there)

The car doctor unexpectedly had the car valeted, washed and partially resprayed. It looks pretty good now so I felt I had to do something about the junk that has accumulated inside. Here is a selection of the things I found.

Server-side Greasemonkey

Today's Gmail Labs announcement got me thinking about ways to allow users to customise a site. Greasemonkey is amazing but the problem is that the scripts are stored with the browser on the client-side. So if I install a script to enhance Gmail on my desktop, I will still get the unenhanced version when I log into Gmail on my laptop. But since the user script is just a bit of JavaScript, couldn't Gmail allow me to install the user script on the server and then serve it back to me wherever I choose to access Gmail from? It's only serving me the scripts I installed so it's no more of a security risk than client-side Greasemonkey.