Blog
Talks
Blog
2023
Aug 08
Upgradeable NFT and ERC-20 tokens backed by a single smart contract
Jul 25
Next.js custom server with cron jobs
May 25
OBS streaming to Discord with audio
2021
Jul 01
Upgrading multiple proxy contracts in Solidity in one call
May 03
Mailmask shutting down
2020
Jul 17
My first smart contract in Rust on Elrond VM
Jun 17
Building your Next.js web app using GraphQL
May 28
Upgradeable smart contracts using the Diamond Standard
Mar 21
Advanced role-based access control in Solidity
Mar 19
Nested delegate call in Solidity
Feb 19
What is needed for Ethereum to go mass-market
2019
Oct 03
Upgradeable smart contracts with eternal storage
Sep 08
Maker OTC on-chain orderbook deep-dive
Jul 29
How to use Serializable Isolation with Postgres transactions
May 07
Building a multi-lingual static site with Gatsby
Mar 26
Architecting microservices for effective development and deployment
Mar 22
React useReducer hook for form handling
Feb 07
Deploying single-page apps on Zeit using Now
2018
Dec 10
Using bitmaps for efficient Solidity smart contracts
Oct 07
Authentication in GraphQL via directives and custom Apollo links
Oct 03
Mixpanel server-side proxy to bypass blockers
May 09
Setup CouchDB and Futon behind a secure Nginx proxy
2017
Nov 23
Updating a Google spreadsheet via the Javascript API
Nov 16
React.js cached function binding for efficient props
Mar 16
Tabbed pages using React Native NavigationExperimental
Mar 15
React Native push notification using Batch and Fastlane
Mar 10
Get custom fonts working in React Native
Feb 22
Using React Native Navigation CardStack with Redux
Feb 17
Continuous Integration for React Native with TestFlight and TestFairy deployment
2016
Dec 27
Mocha multiple reporters for CircleCI and Slack
Oct 12
React hot-module-reload in Electron desktop apps
Sep 27
Redux asynchronous dispatcher pattern
Sep 09
React.js Hot-Module-Replacement with Browserify
Sep 07
Getting geth client mining to work in Travis CI builds
Aug 30
We need a decentralized, censorship-resistant Twitter-like platform
Aug 29
Trigger a Travis CI build from another project's build
Jul 04
Setting up HTTPS for Github organization pages with custom domains
May 14
EtherPing - get notified when you receive Ethereum payments
May 08
Thinodium - a light-weight Object Document Mapper for Node.js
May 04
Setting up geth Ethereum node to run automatically on Ubuntu
Apr 04
geth-private - easily setup private Ethereum blockchains from the command-line and Node
Mar 16
Taking the next steps in remote working
Jan 19
Client-side encryption for strong security - guidelines
2015
Aug 20
Logarama - hierarchical, level-based browser-side logging library
Aug 19
Heartnotes - offline, encrypted diary using Electron.js + React.js
Jul 15
React.js + Flux server-side rendering with Koa
May 24
Sending file logs to Loggly in a Docker container
May 15
Why I am asking for a refund from the ind.ie project
Apr 10
Parse push notifications for your Android and iOS Cordova app
Mar 30
DARPA 2015 report
2014
Dec 18
Meteor localhost smtp using Postfix on Ubuntu
Aug 18
PhoneGap development with on-device livereload
Jul 23
Linear Algebra in Javascript
Jun 20
Ansijet - Ansible playbook automation server
Jun 19
Clockmaker, flexible timer management for Javascript
Jun 17
Melkor, a wiki engine built using node.js
Jun 03
Shippable + Ansible + Docker + Loggly for awesome deployments
Apr 21
Why Promises are more flexible than callbacks
Feb 14
Javascript generator delegation and coroutine performance
2013
Dec 26
Automated deployment with Docker - lessons learnt
Nov 24
Cloud Primecoin mining on Ubuntu 12.04 with auto restart
Nov 04
An improved angular.module() - split your modules into multiple files
Sep 17
Setting up TightVNC on Ubuntu 12.04
Sep 12
Nginx configuration file for ownCloud 5 server with PHP 5.5 FastCGI
Aug 27
Ember.JS is stupidly easy, and stupidly difficult
Aug 24
Abide - observable object properties in Javascript using Ember-style syntax
Aug 15
Javascript IMAP email client for browsers
Jul 08
Generate overridable getters and setters in Javascript
Jul 06
How to capture email addresses using Analytics
Jun 11
How to check if a JPEG is progressive
Jun 10
How to wrap fs.exists() within a Promise
Jun 10
Updated Google text-to-speech library and added to Bower
Jun 10
Mocking calls to a class constructor in Javascript
May 18
Wordpress Flickr Embed 1.1 released
May 02
If I had Google Glass... #ifihadglass
Apr 18
Fast Levenshtein algorithm implementation
Mar 28
Squel 1.1 - now with custom query building
Mar 21
Thoughts on: an open, distributed peer-to-peer Twitter eco-system
Mar 13
Thoughts on dynamically loading parts of a mobile app
Jan 29
Mocking jQuery methods such as fadeIn
Jan 10
Squel 1.0.6 with automatic name quoting
2012
Dec 06
Wordpress Flickr Embed 1.0.1 released
Nov 13
A plugin for embedding Flickr images into Wordpress posts
Nov 03
Squel 1.0.5 with Mocha, Chai and Sinon
Apr 01
google-tts - a Javascript API for Google Text-to-Speech engine
Mar 15
Weber - compile scripts, stylesheets and templates on-the-fly
Mar 14
Zhongwen.co.uk - a simple jQuery Mobile web app
Jan 27
Processing long-running Django tasks using Celery + RabbitMQ + Supervisord + Monit
2011
Dec 23
Squel.js - lightweight Javascript library for building SQL query strings in node.js or the browser
Dec 21
Instructing Cakefile to exit with error if a vows test fails
Dec 18
Django - fetching list of all SQL queries executed so far for all requests
Nov 18
Primary key, foreign key improvements to Sequelize + Date.js alternatives
Nov 12
Adding model validation to the Sequelize ORM library for node.js
Nov 09
CoffeeScript function binding gotcha when using cloned Spine models
Nov 07
How to write a custom widget for jQuery Mobile
Oct 24
Comparison of RequireJS and Hem for JS minification
Aug 17
Notes on using RequireJS with Backbone and/or Spine
Aug 11
Idea for a local app based social network
Aug 01
Asynchronous implementation of LZW algorithm in Javascript
Jul 24
Redmine plugin which pushes updates to external URL
Jul 20
Javascript array and object lookup speeds
Jul 15
wuPlay - real-time multiplayer web gaming on your mobile
Jul 04
Javascript client-side file generation and download
Jul 02
jQuery AJAX progress indicator plugin
Jun 27
Setting up a simple Ubuntu apt repository
Jun 24
Ubuntu 10.04 Lucid 64-bit + PHP 5.2 FastCGI + APC + nginx
Jun 23
RequireJS with progress indicator
Jun 22
Getting Vagrant working on Ubuntu 10.10
2010
Nov 25
Simple online calculator using HTML and Javascript
Nov 10
Using Gradle + Juicer to minify and GZip Javascript and CSS
Oct 27
Setting up Hudson on Debian for continuous integration with Git
Aug 29
A bulk stock updater module for Ubercart
Aug 24
A simple pager script for Drupal
Aug 20
My first Android Market app purchasing experience
Aug 12
Git + Windows Vista + Eclipse
May 17
My Three Words now on Facebook and your website
Apr 27
The 14 spiritual laws of success
Mar 31
My Three Words
Mar 24
Getting page tags to show on your Wordpress pages
Feb 07
Dropbox on removable media
Jan 20
3D demo
Jan 16
Page Tagger 0.3.5 and Common-Utils
2009
Dec 20
Page Tagger 0.3.4
Nov 27
Copenhagen target converter
Nov 18
Page Tagger 0.3.2
Oct 20
Launch48
Sep 22
Creating an archives page like mine
Sep 19
"You are now friends with Android"
Sep 10
One Giant Leap!
Sep 08
Page-Tags is now known as "Page Tagger"
Sep 08
Page-Tags 0.3
Aug 07
Do online music stores share the same back-end database?
Apr 03
Page-Tags 0.2
Mar 31
Web server information plugin
Jan 18
Tag your Wordpress 2.7 pages!
2008
Dec 06
Redmine + SVN + MySQL 5 + Lighttpd 1.5 + FastCGI
Aug 09
RandomHello plugin - 'Hello' in different languages
Jul 28
Enabling SSL in Wordpress 2.6
Jul 12
SMTP server not working for Yahoo UK accounts
Jul 05
BCS interview with Mindtree co-founder
Mar 30
Now running Wordpress 2.5
Mar 27
Why the Vodafone flat-rate data tariff is lacking