It’s mid 2026. We’re over 6 months past the point where most people in the software industry have accepted - grudgingly, eagerly, or otherwise - that everything has changed and that there’s no going back. 
 I did a round of interviews with our dev team recently and I asked if anyone can remember the last time they wrote a function. Most couldn’t. Same for me. 
…
I have been inspired to write again by AI. By bad AI writing, to be exact. You know the sort. I don’t even need to elaborate at this stage. 
 I’m by no means anti-AI. I use it constantly at work. It has transformed what I am capable of getting done as a software developer. I’m not anti-AI; I am pro-human. 
 I like people and I’m interested in their ideas. For that…
Brasília was envisaged as the dawn of a new Brazil. Purpose-built from the ground up on a pristine site in just 41 months, it attempted to remould and redefine what it meant to be Brazilian in its own logical, elegant, efficient image. 
 
			 Brasília by Ramon Buçard on Unsplash 
		 
 

 This style of large-scale urban planning is labeled high modernism…
I grew up in the Winamp days. Napster, Limewire, cracks & warez, remember? Winamp was always open. And alongside my playlist of illicitly-downloaded mp3s would always be MilkDrop . If you don’t know, MilkDrop is absolute zenith of audio visualization software, and it spawned my love of generative visualizations. 
 I’ve never got my head around all the maths involved. I’ve…
The term “bus factor” refers to the number of project maintainers who, if hit by a bus and incapacitated, would cause that project to stall. You can replace the bus crash with any other form of physical or mental incapacitation or even changes in life circumstances or priorities. The lower the bus factor, the greater the risk that a project might suddenly become unsustainable. 
…
The land is flat and vast, extending as far as the eye can see. There is no sun, as such. Rather, an ambient glow with no obvious source permeates. Occupying this Plane is an ocean of people, gathered into groups large and small, distributed irregularly, coalescing and scattering like slow-motion static on a last-century TV. 
 There are minstrels, artists, trinket-collectors and writers; bards…
Earlier this year I quit my job to work full-time on an open source ecommerce framework . After three years working as the lead of a small team within a department of around 20 devs, I’m now back to working alone. Here are some reflections on the thrills and perils of the lone developer. 
 
			 Photo by Noah Silliman on Unsplash 
		 
 

…
In unit testing, we often want to create mocks of other parts of our app in order to better isolate the
particular component under test, and prevent us from dragging the whole dependency graph into our simple little
unit test. 
 
			 Dependency graph of a component we want to test 
		 
 

 In the example above, we could mock out ListComponent ,…
If you, like me, were born in the 1980s, then you are a member of the generation of analog natives -
those who grew up during that period in which the Information Age reached the masses. Of course, all of humanity up until that point
lived fully analog lives; but uniquely, our generation is the one which experienced first-hand the transition from
the analog to the digital world. So…
Zoid is a JavaScript library for simple arithmetic operations. The project has been around for a few years and
has a sole maintainer, who works on it in her free time. 
 
			 Photo by Oliver Thomas Klein on Unsplash 
		 
 

 Here are a couple of issues picked out of the issue tracker - one from a couple of years ago and one very recent,
presented…
I write this from somewhere above Western Europe as I fly back to Vienna from the AngularConnect conference which just
took place in London. Since a lot of the news and announcements from conferences typically take a long time to
percolate out into the wider community, I thought I’d jot down a few notes of the things which I found interesting from
the talks I saw (it was…
About 13 years ago I built a web shop for my dad’s company. Like many small businesses, the company does not
have an in-house development or IT department, so anything vaguely website-related tends to end up in my inbox.
This is how I recently found myself in a conference call with Dom from IntegriMart 1 , a company
which provides marketing tools for websites. This type of…
I have just converted this website from an AngularJS app backed by the Wordpress REST API to a
static HTML site powered by Hugo , a static site generator written in Go. This post explains my reasoning,
experiences and thoughts about the results. 
 
 

 Back in 2014 I was learning AngularJS, and I decided to build my website with it as a learning exercise. I wrote
about…
Hi! I’m a software developer originally from Manchester, England and now based in Vienna, Austria. 
 
			 Speaking about creative coding at WeAreDevs 2017 
		 
 

 I’ve been making computers do things since I was in my teens, with varying degrees of success. Since 2018 I’ve been building the open-source e-commerce framework Vendure .…
When we talk about productivity, it is usually in the context of our professional lives. Is this fair? Does productivity begin and end at the office door? 
 I’d like to address this question indirectly, by backing up and taking a high-level look at the subject. No tips or “weird tricks” here; rather some brief thoughts on the scope of productivity. 
 Productivity is…
In software development, we often hear and speak of abstractions . When we use this term, we often mean some variation on concepts such as “hiding the implementation details”, “providing an interface”, “modelling a data type” or even “removing duplicate code”. But what is the essence of abstraction? 
 
			 The origin of 'abstract'…
Earlier this week I set out to convert a few of my Angular 2 apps to use Ahead-of-time (AoT) compilation. I’ve just been to AngularConnect and heard about a project named “@ngtools/webpack” ( video here ) which supposedly allows you to use the same build tools that the angular-cli project uses, even if you don’t use the cli (which is the case with my stuff right now). 
…
SKQW (pronounced “skew”) is a native desktop audio visualization application written in TypeScript with Angular 2, and implemented on the Electron framework. 
 
			 
		 

 It is currently in alpha and a compiled binary only exists for Windows, but I’m hoping that - if there is interest - I can push the project forward and improve stability,…
Hi there. You opened an issue with my project on GitHub, and it’s getting kind of stale by now. 
 I am aware of it - GitHub was kind enough to send me an email containing your report, which I scanned one morning a couple of weeks ago while I ate breakfast. I’ve even thought about it briefly a couple of times since then; once I was in the shower and I got the vague idea that I knew…
Want to create a reusable Angular 2 component which can be customized with a user-provided template? 
 I had this use case and could not find any relevant documentation or tutorials, so after a few days digging around the internals on Angular 2, I am sharing the result of my research. This is one way to do this - perhaps there are other, better ways. Feedback is welcome ! 
 ( TL;DR -…
Yesterday I lost several hours to the following error in an Angular 2 app I am working on: 
 Cannot resolve all parameters for 'BaseDataService'(Http, undefined, ODataService). 
 Make sure that all the parameters are decorated with Inject or have valid type 
 annotations and that 'BaseDataService' is decorated with Injectable.
 The undefined in this case is my redux AppStore…
AngularConnect , the largest Angular conference to date, has just taken place in London. Here is a summary based on what I learned and what I found most interesting. Since it was a two-track event, I only saw half the talks, so for the full picture, watch the sessions yourself on YouTube . 
 Many of you just want a quick rundown on the key points, so the first section of this post is just that…
I’ve recently been listening to the excellent podcast series Revolutions by Mike Duncan. Right now we are in the thick of the French Revolution. It’s really riveting stuff, and offers some fascinating insights into the interplay of groups , ideology , virtue , violence and terror . If that list sounds familiar, perhaps you frequent Twitter or Reddit or some other online community.…
On an ecommerce website I maintain, we started running into a strange issue where we were getting orders coming in with the first line of the address being duplicated in the “delivery instructions” field. This was causing all sorts of confusion and mild distress at the office. Today I finally persisted enough to get to the bottom of it. 
 The form was something like this - try it…
This post describes a way to use Gulp to automatically @import Less files from anywhere in your project’s folder structure. It is useful if you want to define self-contained components that put all HTML, JavaScript and LESS files together, yet you don’t want to maintain a list of imports in your main LESS file. 
 The following method should also apply if you prefer Sass, since it…
Last September I wrote a post detailing how I went about re-building this website with AngularJS backed by WordPress. That write-up was a high-level discussion on my choice of tools, design decisions, and lessons learned, rather than specific implementation details. The article proved to be one of the more popular I’ve written so far, and I’ve since received many requests to make the…
A variable used in an Angular expression cannot contain a hyphen. This might be obvious to some, but this issue on one of my GitHub repos baffled me for a while, and the solution was really simple and now seems totally obvious to me. I’m making a public note of it so that I may save another frustrated developer a few minutes of hair-pulling. 
 The Problem 
 In brief, I have a…
Chromata is a small tool written in JavaScript which can turn any image into a unique, animated artwork. Written in ES6 JavaScript, using canvas and canvas blends.
This is a review of the book Responsive Web Design with AngularJS by Sandeep Kumar Patel. Disclosure: I was asked to review this book by the publisher, Packt, and they provided me with a copy of the ebook free of charge. The book can be found for purchase here . 
 
			 Responsive Web Design with AngularJS 
		 
 

 First Impressions 
 The first thing…
In this post I will describe a way of using ES6 classes today in your AngularJS 1.x applications. This is intended more as an exploration than a recommendation of best practice. I’ll go into quite some detail about the reasoning and process behind my solution, but if you’d prefer to fast forward to the finale rather than enjoy the adventure, see the last section where I bring it all…
I’ve not typed a semicolon for a couple of weeks now. I don’t mean the look-at-me-I-know-fancy-punctuation kind (there will be plenty of those here). I am of course referring to ; , the token that denotes the end of a statement. No, I’ve not ditched JavaScript for Python or Erlang; I’m on holiday. I’m getting back to (half of) my roots in beautiful Malaysia, and as a…
Next week sees the close of my first year as an active participant on GitHub and in the open source community. I’d like to mark the occasion by collecting together a few thoughts on my experience thus far. 
 
 

 At the beginning of this year I wrote about my decidedly shaky start in the world of professional software development in the essay Confessions of an Intermediate…
This is an experiment with using the WebRTC getUserMedia API to capture your webcam stream and then use a motion-detection algorithm to create kung-fu movie sound effects to match your motions. The Web Audio API is used for the sound effects. 
 Featured on Google’s Chrome Experiments website.
I have recently been exploring some of the lesser-used features of CSS - namely 3D transforms and animations. For a recent talk I gave at a local JavaScript user group, I put together this demo , and in doing so I became really curious about just how far the 3D capabilities of pure CSS could be pushed. 
 In searching around for examples, I came across the work of Keith Clark. In particular, he…
An old-school arcade-style 3D shoot-em-up, rendered entirely with CSS and DOM. 
 Uses some of the experimental browser APIs which are not yet available in all browsers, so your experience may vary depending on your browser’s support and capabilities. Works best in Chrome for me. Internet Explorer doesn’t work at all because it uses the Web Audio API. 
 Featured on Google’s…
I write this from a tiny apartment in Paris, sitting up in bed on a sleepy Friday morning after a crazy couple of days at the ngEurope conference. I would like to share a few thoughts and experiences about what I’ve seen and learned over the past couple of days. This isn’t going to be a purely technical blog post. I also won’t try to be comprehensive in covering all the talks.…
AngularJS 1.2 introduced a new feature for the ngRepeat directive which allows the directive to span multiple elements, as opposed to just the single element that it is attached to. This is done by appending -start and -end to the directive name in your view: 
 < tr ng-repeat-start = 'item in items' >< td > {{ item.name }} </ td ></ tr > 
 
 < tr ng-repeat-end >< td > {{…
I’ve recently been having lots of fun with CSS 3D transforms and animations. As part of a demo for a talk I am giving at the ViennaJS meetup group this month, I put together a demo that showcases how some fairly sophisticated 3D effects can be achieved with pure CSS, and made interactive with a little JavaScript. 
 _Note: The 3D effect is not currently supported by Internet Explorer. _…
I’ve just completed and launched a complete re-write of this website. Since the first iteration (started around nine months ago) and this new one, I’ve learned a lot about the fundamental technologies of the web: HTML, CSS and JavaScript; about AngularJS in particular; and about things like build systems and application architecture. Therefore I wanted to share a few thoughts and…
Horizonal.js takes any static HTML document and transforms it into a collection of discrete “pages”. The transitions between one page an the next can then be programmed via CSS transforms, CSS animations, JavaScript, or any combination of these. 
 I made this after I read David Desandro’s Intro to CSS 3D Transforms and became fascinated with the idea that any DOM element can be…
Another experiment with canvas. This time I was interested in making a drawing app. Specifically, drawing cats. It became a sort of crowd-sourced art experiment in the end. Works well on touch devices too. 
 Featured on Google’s Chrome Experiments website.
An experiment in combining the Web Audio API with the HTML canvas element. My first foray into the fascinating world of canvas. Read more about my approach in this blog post . 
 Update May 2015 - As of latest versions of Chrome (42+) and recent versions of Firefox, changes in the way cross-origin audio is handled mean this demo may not work. 
 Featured on Google’s Chrome Experiments…
Using touch events in your JavaScript app is as simple as adding event listeners like this: 
 myElement . addEventListener ( 'touchstart' , myStartHandler ); 
 myElement . addEventListener ( 'touchmove' , myMoveHandler ); 
 myElement . addEventListener ( 'touchend' , myEndHandler ); 
 While making an app which needs to work cross-browser with touch, I had some difficulties getting…
If you are building a public-facing app in AngularJS, you’ll want your users to be able to share it via social media. Indeed, for certain apps, this may be the most important channel of promotion. By “rich social sharing”, I mean something like this: 
 
			 Rich sharing on Facebook 
		 
 

 
			 Rich sharing on Twitter…

 

 It was 2am , and I had been awake for about 30 minutes, bouncing my 7-month-old son to sleep. After the first few minutes of blurry-eyed swaying, I’d reached that familiar zone of high alertness and lucid thinking. Unable to go back to bed until my son was soundly asleep, yet physically unable to do anything productive with all this waking time, I started thinking about how…
When I moved to Vienna last October, I was pleased to find a very active and vibrant development community. Just this week alone, there have been at least 19 tech meetups in the city. A quick search on meetup.com reveals 46 tech-related meetup groups at the time of this writing, and there’s even a website dedicated to listing all the meetups each week. During my time here so far, I’ve…

 

 The Problem 
 You use Google Analytics on your website and you want to do an A/B or multivariate test on some site-wide change, rather than just testing variations of a single page. An example - and the scenario which lead me to devise this solution - was testing how the presence or absence of the logo of a well-known security company in the footer of an e-commerce site would…
The ng-repeat is probably one of the most oft-used of all the core AngularJS directives, and with good reason. It offers amazing flexibility and is probably one of the first things to really “wow” you about the framework. 
 Whenever I’ve used ng-repeat , however, I’ve usually also run in to the need to paginate the items being repeated. It seems like there should be…
For those that don’t know, angular-ui-router is a router for AngularJS that replaces the one that comes built-in, and adds a whole lot of powerful features. 
 I’ve been using it on a project I’m working on and I’ve found the ability to nest routes to be really powerful and a nice way to organise routes (or states , as they should be more correctly called in the context…