ai-review: reviewing AI code before it lands π
Over the years I have become very comfortable as a developer who spends most of his time in the terminal. I've spent far too long tweaking my dotfiles [...]
a collection of dev rss feeds - blogroll
Posts
Over the years I have become very comfortable as a developer who spends most of his time in the terminal. I've spent far too long tweaking my dotfiles [...]
I've been using Claude Code as a pair programmer, debugger, and feedback collector while I playtest my game, OnTrack. The setup has worked so well tha [...]
I wear headphones a lot and I like the option of wearing over-ear and in-ear headphones at any one time; I find that I prefer my over-ear for deep wor [...]
Since ChatGPT burst onto the scene in November 2022 it and its competitors have taken software development by storm. We've seen companies go all in on [...]
As 2024 comes to a close, I wanted to take a moment to reflect on what has been the most incredible and challenging year of my life. In January our ch [...]
I recently lost an evening to debugging a subtle issue which highlights a potential pitfall in the interaction between TypeScript enums and "falsy" va [...]
As I write this blog post I am sat in an AirBnB in Utrecht reflecting on two incredibly inspiring days at performance.now() 2024. I was not only fortu [...]
If you were to look at my Steam library you would see that most of my games are strategy and logistics based (think Factorio) but with a healthy dose [...]
It's very common when working with TypeScript that you will have a type that declares a list of values, such as an enum or union type: enum SupportedC [...]
I have used Vim or variants like Neovim ever since the second year of university, which means I've been using Vim for nearly 13 years (!). In that tim [...]
Recently a computer upgrade went from one graphics card to a new case, new fans and a new graphics card. Along the way I learned a bunch and I'm writi [...]
My daily workflow often involves repeatedly running tasks, whether that be build commands, unit tests, or some other scripts. My ideal workflow is to [...]
In October 2021 I took on a new role within the Chrome DevTools team as a Technical Lead (TL) of the DevTools Performance Tooling team, who are respon [...]
Just over two years ago I left a role at a London based startup where I lead development of a large, React based e-commerce frontend to join Google to [...]
On every team at every company I've been at prior to my current role, the advice was simple: don't check your node_modules folder into your version co [...]
Last year I created Pomodone, a small time tracking application based on the Pomodoro technique of working in 25 minute intervals. It's a pretty basic [...]
Although occasionally you'll be given a task to complete which can be completed in no more than a few hours, most of your work is likely going to cons [...]
Over the next few weeks I'm going to be sharing some videos demonstrating parts of my workflow in VSCode - from managing changes with git (today's vid [...]
Since moving to Windows 10 something I've always struggled with is how to remap keys on a keyboard. I don't remap much, but one remapping that I've us [...]
Back in October 2019 I'd taken the plunge and tried Windows for my development work. It was largely a succesful experiment. By using the Windows Subsy [...]
Code comments often get a bad reputation amongst developers as a waste of time, or a sign that your code could be improved. Here's a quote from a CONT [...]
Testing JavaScript code that's asynchronous can prevent its own set of challenges that you have to ensure you deal with when writing your tests. I rec [...]
When you get a code review request from a colleague, what do you focus on? What reaches the bar for what you consider something that's worth commentin [...]
We've all been there. The one corner (or maybe there's multiple!) of your application that makes you cringe every time you have to touch that part of [...]
Over the next few weeks I'm going to be sharing some videos demonstrating parts of my workflow in VSCode - from managing changes with git (today's vid [...]
When I think about keeping code simple, I think about the progression of your average software engineer from junior to mid to senior, and this one com [...]
Over the next few weeks I'm going to be sharing some videos demonstrating parts of my workflow in VSCode - from managing changes with git (today's vid [...]
Today I'm kicking off a new series on writing and maintaining JavaScript software titled "Designing Good JavaScript" by looking at learning at our mis [...]
In the last post we tackled writing tests for bad JavaScript code and now we have tests covering the behaviour of our code we are ready to do some ref [...]
I like refactoring code and thinking about software design. It's something I speak about, blog about and enjoy doing as part of my job day to day. A c [...]
I've been working recently on Puppeteer and migrating it to TypeScript. This has presented the opportunity to do some refactoring and today I want to [...]
I like keyboard shortcuts. I use Vim to edit code, which is entirely keyboard based, and generally I feel better and more productive if I can use the [...]
I've used Vim on and off for a long time. I got introduced to it at University by a lecturer, tried it, didn't get it, and moved on. I then decided to [...]
Have you ever come across code that you wrote six months ago and thought "what was I doing?". I know I have! And I know that in the past I've been too [...]
In my first post of the year about technical choices I'm making in 2020 I finished with a point about letting tools make choices for you: I've become [...]
Back in April 2012 I registered and put the JavaScript Playground online with a first blog post about using objects in jQuery's .css() method. Over th [...]
Happy New Year! The world of frontend web development is continually changing with new technologies, ideas and frameworks springing up all the time. W [...]
I've been an exclusively Mac developer ever since I bought a second hand MacBook (remember the all white, plastic ones?). I absolutely loved it and as [...]
When working on a part of a user interface I like to constantly try to think about potential bugs that could occur, potentially when looking at taking [...]
If you've followed me on the internet for a while you'll know that I'm a big fan of Elm and I've written and spoken a fair bit about it. There are som [...]
When I first started working with GraphQL APIs my first challenge was to decide what GraphQL frontend library I wanted to use. I can remember spending [...]
One of the things I like to spend a lot of time on is data structures. It's one of the first things I think about when building something: what data d [...]
babel-plugin-macros is a project that I've followed with interest even though I'd never had a chance to use it. Today that changed and I wanted to sha [...]
One of the best features of React is that it doesn't force much convention and leaves a lot of decisions up to the developer. This is different from s [...]
If you missed the prior videos, you can find them here: Part 1 and Part 2. Today we're implementing more of test-data-bot's API in TypeScript and divi [...]
It's fair to say that React 16.8 and the introduction of hooks has really changed how we write React. Hooks are one of those APIs that make you realis [...]
If you missed part one, you can find it here. Today we're implementing more of test-data-bot's API in TypeScript and diving more into types, interface [...]
When I got my first job after university I was ready to get stuck in. Through university and side projects I'd done a good amount of programming and t [...]
I've been wanting a project to dive into to help me learn TypeScript, and the other day on an issue for test-data-bot, someone asked if TypeScript def [...]
PropTypes are a great way to document your components and I generally advise that everyone do this fairly strictly. In fact, we have an ESLint rule th [...]
It's fair to say that the introduction of hooks in React 16.8 has really changed how we build React components. They certainly take some getting used [...]
There's a common theme I find with people who tell me that they don't find unit testing useful, and it's normally that they are writing bad tests. Thi [...]
React 16.8 introduced hooks; a new way to work with effects and state in React. No longer do React components that have state need to be ES2015 classe [...]
Whenever I've used TypeScript in the past, I've set up TSLint as my linting tool of choice. However, I've always wished I could use ESLint instead, fo [...]
If you follow me on Twitter, or have read this blog for a while, you'll probably know that I'm a big fan of Elm. It's a functional, strictly typed lan [...]
In the past year I've launched two video courses on React, and today I'm offering 40% off them over the Black Friday period. You can use the coupon co [...]
I'm sure that Kent needs no introduction, he's a prolific contributor to the React community and ecosystem. One of the things he talks a lot about is [...]
Today I'm releasing my brand new video series titled "React in Five" I've been working with, writing tutorials, and speaking about React for a few yea [...]
One of the most common tasks in building a frontend application is to update query parameters. A quick search for query string on npm reveals many opt [...]
As mentioned in my last post on VSCode, I've recently been trialling it as my editor of choice and so far have found the experience to be excellent. C [...]
I have recently been trialling using Microsoft's VSCode editor as my primary code editor, and so far I've been very happy with it. One feature that I' [...]
This post was first published on ElmPlayground.com but has now been updated and moved to this blog. Something that continually trips beginners up in E [...]
One of the best features of React, and one of the reasons I think so many people love using it, is that it gives you the freedom to choose what approa [...]
I think we'd all agree that code comments are a good way to document code that is otherwise hard to follow. Sometimes there's just no way to make the [...]
Today I'm releasing my brand new video series titled "Testing React with Jest and Enzyme". I've been working with, writing tutorials, and speaking abo [...]
Over the weekend I moved this blog from GitHub Pages to Netlify and in this blog post I want to talk about why. Github Pages and the JavaScript Playgr [...]
React v16 was a very exciting release for React, and included many new features. In the recent React 16.2 release, improved support for Fragments was [...]
In today's post we'll introduce the AirBnB library Enzyme for testing React applications. We'll do this using a test driven development (TDD) approach [...]
In today's video I took an existing Elm application and add first class URL support via Elm's Navigation package. You can find all the source code on [...]
I've been a Vim user now consistently for about 6 years. My extensive dotfiles repository and (now badly outdated) blog on TIL Vim demonstrate pretty [...]
CSS in JavaScript has been something I've been meaning to explore for a while now; it's also one the questions I get asked most when I talk about my e [...]
This blog post is a write up of a talk I've gave at Front Trends in Poland, May 2017. You can find the slides and video below, along with a full write [...]
In the previous screencast we took a React component that was doing too much and refactored it, splitting it into two components that are easier to ma [...]
As you work on a React application it's highly likely that you'll encounter components that have grown over time. They may have started with just one [...]
I've recently been getting into TypeScript following a lot of positive blogs about it from Tom Dale and others. Today I'll show you how I've set up a [...]
Last week I attended the Elm London meetup, arranged by Kris Jenkins, who always produces a great selection of challenges for people to take on for al [...]
What are functional, stateless components? React 0.14 introduced functional, stateless components as a way to define React components as a function, r [...]
Last year I wrote about RemoteDataJS, a library I released on GitHub that made it really easy to deal with data from APIs in JavaScript. This library [...]
There is a lot of confusion amongst React developers on what context is, and why it exists. It's also a feature that's been hidden in the React docume [...]
I've been using Vim solidly for about six years now, and do all of my editing in it. This blog post, all the open source code on GitHub, and all my co [...]
ReactJS is a brilliant framework to work in, and something that I get asked a lot by people new to the framework is how best to deal with loading data [...]
Webpack is one of the most prominent open source projects in the JavaScript and they are always looking for more people to help contribute back to the [...]
Flow is a static type checker for JavaScript which adds the ability to annotate our JavaScript code with extra information on what types we're expecti [...]
Webpack is on the verge of having its latest major version released, and it's expected to drop very soon. However, the main thing holding the release [...]
Whilst most people use Webpack primarily for their JS scripts, there's always one final part of deploying that is forgotten: the HTML. In production w [...]
One of the biggest problems that developers face with CSS is that CSS is global. Each CSS class gets exposed globally and itβs very easy to inadverten [...]
Last week at the London JavaScript Community Meetup I did a live coding presentation where I created a React project from scratch and configured Webpa [...]
One of the things that most of us have to do in our applications is fetch data from a remote data source, typically an API that gives us back some JSO [...]
Webpack is a fantastic tool but there's no doubting that as a newcomer to React it's can be a challenge to get started with. I've met numerous develop [...]
If you've ever been interested in learning more about React and getting to grips with the framework then I have some good news for you! I've teamed up [...]
I wrote back in 2015 about the state of front end tooling and since that post it's continued to be a topic I follow with interest. I'm particularly in [...]
ES2015 introduces a huge new set of features to the language, many of them welcomed, but does so at a huge cost: there's a vast amount for people to l [...]
Recently I've been hearing a lot about Rollup, a new JavaScript bundling tool that aims to produce smaller bundling sizes through tree shaking, which [...]
If you follow me on GitHub or Twitter you'll have noticed that I've been doing a lot of work with Elm recently. Elm is a new language aimed at making [...]
Update: this post was updated on 09/11/2015 to use Babel 6, rather than Babel 5. I've spoken and written previously about using tools like jspm to let [...]
There's been a lot of posts written recently on the web about the state of tooling in front-end development and the opinion that many share that the e [...]
I've written at length about some of the new features coming to JavaScript with ES6, including arrow functions, classes, modules and destructuring. To [...]
Recently I gave a talk called "The State of JavaScript" at the inaugural meetup of the London JS Community. You can find the slides for this below: I [...]
Back in August 2012 I wrote a post on building a command line tool in NodeJS. That post is now over two years old and plenty has changed, hence I thou [...]
In this post we will look at how we can embrace promises to lead to much nicer code when working asynchronously with JavaScript. This post is not a fu [...]
jspm is a package manager for JavaScript applications that sits on top of the SystemJS. Both were written and are maintained by Guy Bedford. SystemJS [...]
ES6 comes both with huge new features like generators or classes, but also packs in a lot of smaller features that are going to make a big difference [...]
I had the pleasure last weekend of speaking at Epic FEL, a single day, single track conference in the heart of London, run by Made by Many. They did a [...]
Coming up in October and November I'm doing two different workshops; the first in Bristol and the second in London. Web Dev Conf On the 9th of October [...]
Support ES6 support varies across environments and platforms, implementations get updated all the time and it's important to also note that the spec i [...]
Something that I've been researching into a lot recently is refactoring - one of the most popular posts on this blog was the one on refactoring. I rea [...]
I've recently been working on an application which has two distinct parts: an Angular front-end, and an API powered by ExpressJS. Something I was keen [...]
Continuing with the theme of playing with new features of ES6, today we're going to look at how we can use the new ES6 module syntax today, using Squa [...]
Some of the features soon to be at our fingertips with the growing support for ECMAScript 6 are absolutely fantastic, but often examples shown online [...]
In this article I'll take you through how we can use command line tools such as Grunt, Bower and Yeoman to speed up our typical development workflow. [...]
I'm a big fan of the Pub Sub (Publish, Subscribe) design pattern, and it's one that I tend to reach for often. I've written previously about it, but t [...]
Gulp has been doing the rounds recently online through Twitter as an alternative to Grunt in the JS build tooling space. Whilst I am a huge fan of Gru [...]
Last year I wrote a post about the JS Playground in 2012, and I thought it would be nice to write a similar one reviewing 2013. So, I delved into Goog [...]
For the most part, in JavaScript, what you see is what you get. A value's a value; there are no tricks. Sometimes however, you want a value that's bas [...]
Recently I covered Browserify in another post, but did not go into much detail. I discussed how to use Browserify with your own modules, but what I di [...]
If you've been a long time reader of this blog you'll know that I'm a fan of RequireJS, and have written about it before. This past weekend I was doin [...]
Recently I sat down with my Pulldown Project, aiming to rewrite the tests. The problem with them was that they were network dependent. Each test would [...]
Today I'm happy to go live with the new design of the JavaScript Playground! My thanks go hugely to Ben Howdle and Martin Bean. The beautiful new desi [...]
At the weekend I annouced my latest project, "Confident jQuery". It's going to be a book, self-published through Leanpub aimed at those who are confid [...]
I recently got my hands on a Firefox OS preview device, a Keon and today I'm going to show you how to get a simple Hello World app running on the phon [...]
Last week's refactoring post turned out more popular than expected and I wasn't going to revisit it. However, it got so much interest that I'd like to [...]
A good couple of months ago, I sat down with fellow JavaScripter Tom Ashworth to rewrite my JS tool pulldown. I thought it would be of interest to rea [...]
One of the things I've been getting more into recently is refactoring. It's something that is heavily talked about in the Ruby world, but seems to be [...]
Yesterday I finally sat down and properly ported the site over to Jekyll, the static site generator. Before I used PyroCMS. I've nothing against Pyro, [...]
Did you know that jQuery gives you a way to write your own custom CSS methods? I didn't until recently and I'd like to show you why they are useful in [...]
A lot has been made of how, in the future versions of jQuery, it will be possible to easily build your own version of jQuery, without the parts you kn [...]
Recently I found out that I had been nominated for two of .net awards. I've been nominated for "Young Developer of the Year" and "Brilliant Newcomer o [...]
Way back in June last year I published part two of my Backbone series and today, at long last, it's time to pick up the pieces. I apologise for such a [...]
Something I've not covered much so far is some of the newer parts of JavaScript. That is, methods in ECMASscript 5 that are not so commonly used due t [...]
So this week I attended my first conference outside of the UK and travelled to a freezing Lille, in Northern France (it's been below freezing every da [...]
I've teamed up with the lovely folks at Event Handler, who run an array of events in London, to run two JavaScript workshops in March 2013 which I'm r [...]
Chris Coyier over at CSS Tricks does a yearly post documenting stats on the blog from the past 12 months, and it inspired me to do the same, as much a [...]
My JS Tooling post listed 5 of my favourite command line tools that I use every day when I'm doing some JS development. If you've any more to recommen [...]
The new keyword in JavaScript was an enigma to me for a long while, and only recently have I really begun to grasp it. In this article I'm going to at [...]
"The massive growth in rich, JavaScript-heavy web applications has lead to a huge array of frameworks designed to help you build apps. There are so ma [...]
Today I spent a bit of time updating the site, and as such it seemed like a good time to write a small blog post with some updates. Disqus I have now [...]
Previously on this blog I've written about an AMD approach with Require.js and about package management with Jam JS. Jam uses Require.js so what I tho [...]
Jack Franklin explores five popular JavaScript testing libraries and provides examples of how to use them so you'll be able to choose the best one for [...]
Note: I apologise for the lack of updates on JS Playground recently, but happy to announce the site is now returning to at least one post per week. An [...]
Today we're going to take a look at bunyip, a tool from Ryan Seddon to make running your test specs in multiple browsers really easy. Out of the box, [...]
For those who don't follow me on Twitter or perhaps missed it, one of the reasons I've not been blogging on JSPlayground as much recently is down to w [...]
As part of me wanting to spend some time playing with command line Node.js tools, last week I sat down and wrote nodefetch. Whilst I don't usually blo [...]
Today we are going to combine a few different tools and create a simple Node package that will allow a user to search a directory for files. In this t [...]
I've attended WDC for the past two years so when Alex (@alexolder) gave me the chance to speak I couldn't say no. Having been at WDC the past two year [...]
This coming Tuesday, July 31st, I'm going to be talking at the London Titanium Meetup. If you're not a Titanium developer please don't be put off, I'm [...]
In this tutorial we are going to take a look at RequireJS, an AMD compatible asynchronous script loader that is incredibly powerful. In my experiments [...]
As some of you will have noticed unfortunately posting has slowed in the past few weeks, and I just wanted to write a quick post to explain why. It's [...]
I have had a lot of tweets recently asking about how I work, the tools I use, the workflow I've adopted and lots of related questions. I regularly twe [...]
Today we'll take a look at Jam JS, a JavaScript Package Manager. This uses RequireJS to load in your required packages and makes using JavaScript libr [...]
Today I'll pick off where Part 1 left off, and start working on the to-do part of our application. This tutorial literally starts where Part 1 stops, [...]
In today's tutorial I want to introduce you to the concepts behind polyfills, a word you see used a lot in today's JS world. I'll demonstrate just wha [...]
A while ago I kicked off a planned series of Backbone.js tutorials with Part 1, which introduced Backbone as we set up a "shopping cart" - albeit an o [...]
In today's tutorial I want to take a look at yepnope, which is an asynchronous resource loader that works on conditions. That is, you give it a test, [...]
Today I'd like to talk a little bit about Objects in JavaScript. When I first started using JavaScript (my first experience of it was through jQuery), [...]
One of the first and most well received posts on the JavaScript Playground introduced jQuery Deferreds, a new feature in jQuery 1.5 to enable us to ma [...]
JavaScript Playground is now just over one month old, so I thought it would be a good time to write a quick post with some updates about the site. Fir [...]
A while back I wrote about creating a Pub/Sub implementation in jQuery and said that I'd revist the subject without relying on jQuery. Today I'm going [...]
So last week I showed you how to write a basic jQuery plugin and today I want to take that plugin & convert it into CoffeeScript. The first thing to d [...]
So last time we installed Node & did the traditional "Hello World" example with Node & then using the Express framework. Today we're going to make a s [...]
Today we're going to take a look at writing a jQuery plugin. There's a number of different ways to go about structuring jQuery plugins & hence a lot o [...]
Unless you've been living under a rock for the past 12 months or so, you've probably heard of Node.js. Simply put, Node is JavaScript on the server. N [...]
Backbone.js is a framework that lets us structure our applications using a pattern similiar to MVC (technically Backbone is not pure MVC as the C stan [...]
Following on from last week's introduction to QUnit today I want to talk less about how to use QUnit but ways to make it easier to use or integrate it [...]
Grunt describes itself as: Grunt is a task-based command line build tool for JavaScript projects. It was released very recently and is authored by Ben [...]
Today I want to talk a little about scope in JavaScript and the this variable. The idea of "scope" is that it's where certain functions or variables a [...]
Recently I was asked on Twitter to do a tutorial on QUnit, a JavaScript Unit Testing framework, and the one used by jQuery. What I wanted to do howeve [...]
Having discussed the Module pattern briefly a few days ago, today I want to tackle another pattern, the Pub Sub (or Publish and Subscribe) pattern, al [...]
A quick fun "JS WTF?" post for you today. If you load up your JavaScript console & enter: 5 < 4 < 3 You'd be expecting to see false, right? However, y [...]
From jQuery 1.7 new methods were added for binding events, .on() and .off() which, unsurprisingly, does the opposite of .on(). Amongst the community, [...]
Lets say you've got a little library like this, that just increments a number: var jspy = { count: 0, incrementCount: function() { this.count++; }, de [...]
Prior to jQuery 1.5, Ajax requests could get a bit messy. You'd probably do something like this, if we were making a simple get request: $(function() [...]
Something I will be focusing on on a regular basis here at JSP is producing tidy code that's easier to maintain in the future as well as nicer to work [...]