Two's company, three's a mob: Mob programming

posted on 26 April 2017 in engineering

First there came pair programming, a development disciple that promised team collaboration, improved quality, inbuilt mentoring and redundancy. Now the development community is taking it to the next level - mob programming. Mob programming, or mobbing, is where the entire team works together on a single problem, sharing one PC, one keyboard and one mouse.

Read Article

Starting a promise chain to handle exceptions correctly

posted on 04 January 2017 in engineering

Here’s a little promises quirk that I’ve overlooked for a while. Generally we all write promises like this:

doSomething()
  .then(doSomethingElse)
  .then(doSomethingFurther)
  .catch(handleError);

And we know that any exception raised will skip to the catch handler. Except for the initial doSomething() call. If an exception is raised here it will be treated like a normal exception and stop executing all the rest of your code. So how do you deal with it?

Read Article

Increment project version from Travis

posted on 29 November 2016 in engineering

Can you effectively use GitHub and Travis for continuous delivery? You sure can, but managing the version number can be difficult, here’s a way to automatically increment the patch number on every deployment from Travis.

Read Article

Adding font-awesome (or any SVG) to Google Slides

posted on 12 May 2016 in general

Getting images into Google Slides is simple right, just upload the image and voila. What if instead of images you want icons? You can always take a screenshot of an icon and upload that, but then you’re stuck with the size because resizing that thing is going to make it ugly. There’s a better way.

Read Article

Using Grunt with Pebble Build to create scalable PebbleKit JavaScript

posted on 09 November 2015 in engineering

Pebble watchapps communicate with the phone via PebbleKit, a sandboxed JavaScript environment that runs within the Pebble phone app. It's pretty simple to setup the interactions on the JavaScript side, but what happens when the JavaScript starts to get more complex? Using Grunt we can manage a scalable JS app, including running linters, bundling and running unit tests.

Read Article

Replace your CMS with GitHub Pages, Jekyll and Grunt

posted on 23 September 2015 in engineering

For years I’ve used Wordpress to host my site, which has been great but it’s overkill for what I need. I’d be happier to write the HTML myself if it wasn’t such a maintenance pain keeping consistency across all the pages. I hated having to update WordPress continually to ensure my site is secure. In order to keep all my site source in Git I have to synchronise the changes that happen automatically on the server, like updates and uploads / media files back to my working copy to commit them. And it doesn’t enable me to keep any of my content in Git, which is most important, I have to take regular database backups for this.

Read Article

Pallet Wood Coffee Table

posted on 03 August 2015 in woodworking

I’ve recently become addicted to pallet wood projects on Pinterest, there’s something beautiful in breathing life back into old wood, and best of all it’s free. After finding a free source of pallets I’ve tried my hand a couple of projects, some shelves for the bathroom and a pallet wood stool, I was pretty happy with the results so I thought I’d try my hand at something more substantial, a coffee table.

Read Article

Logging Objects to the Console in Internet Explorer

posted on 24 April 2015 in engineering

Compared to other browsers, IE’s JavaScript console is pretty lacking in it’s ability to log objects, they just appear as [Object object]. As a work around for this below is a shim that will JSON.stringify any objects that are passed as parameters to console.log (or it’s sister functions like error, warn…).

Read Article

Catching JavaScript errors with Promises

posted on 02 August 2014 in engineering

If your JS function needs to return a Promise but doesn’t do any asynchronous activity, you may be tempted to use the static Promise.resolve() function rather than instantiating a new Promise object. Be aware that doing this will change the way javascript errors are dealt with.

Read Article

Mapping errors in jQuery promises / deferred

posted on 15 July 2014 in engineering

For those familiar with JavaScript Promises, jQuery’s Deferred.fail() handling can act unexpectedly. Standard Promises implementations allow the first catch handler to deal with the error and then return to normal execution flow (see JavaScript Promises: There and back again). jQuery on the other hand appears to execute all fail handlers, in the order they were defined with no chance to recover normal flow.

Read Article