🎉 I'm releasing 12 products in 12 months! If you love product, checkout my new blog workingoutloud.dev

Den Dribbles

A personal blog on all things of interest. Written by Dennis O'Keeffe.

All blog posts

Up and running with Go 1.22's new built-in router

Go 1.22 comes a brand new built-in router option for more complicated server applications. This is a basic dive in for Golang first timers. (8 min read)

Type-safe usage of React as a prop for flexible components

Ever wondered how design systems provide an 'as' prop for their components that you can use to inject or change the component type? Let's look at how we can do this with TypeScript. (8 min read)

Mounting Your Own Cloud Storage With Cloud Mounter and AWS

After another failed hard drive meant losing data, I decided to look into mounting my own cloud storage. Here is how I did it. (7 min read)

Using Prisma For Migrations And DrizzleORM For Querying

This post is for you if you are migrating across from a Prisma application or just want to check out the performance difference with DrizzleORM. (6 min read)

Node.js --prof and --process-prof flags

Understand the Node.js profile flag by improving an inefficient approach to getting unique elements from an array. (11 min read)

Explaining CJS vs AMD vs UMD vs ESM

One of the JavaScript ecosystems biggest pain points. What are they and why do library maintainers hurt inside when they have to support them all? (9 min read)

Mastering API Testing with Supertest, Express.js, and Jest

A walkthrough on setting up a basic Express.js application and writing tests using Supertest for robust APIs. (5 min read)

Diving Into Typescript's Type System: Type Operators

Join me as we dive deep into TypeScript's type operators, including keyof, index types, and index signatures. I'll be guiding you through practical examples that you can follow along with in the TypeScript Playground. Master these powerful tools with me to boost your TypeScript's code reliability and predictability with an advanced type system. (4 min read)

Typescript And Promises: Conquering Asynchronous Programming

See how TypeScript is used with async promises. (4 min read)

Typescript And Functional Programming

Implement your own map function with TypeScript. (3 min read)

Advanced Union And Intersection Types In Typescript

A practical explanation of how union and intersection types work. (4 min read)

Typescript Modules For Organizing And Sharing Code Effectively

This post covers the basics of modules in TypeScript. (3 min read)

Harnessing The Power Of The keyof Operator

See how we can use the TypeScript operator keyof to dig into our types. (2 min read)

Advanced Typescript Generics In Practice

A look at different implementations of generics for more specific use cases. (4 min read)

TypeScript Decorators: An Introduction To Metadata And Annotation

Decorators, a proposed feature for JavaScript, are already available as an experimental feature in TypeScript. See an example of decorators in action in this post exploring the topic. (5 min read)

Ensuring Type Safety With Type Guards

Implementing custom type guards for a complex type validation with deep object structures. (5 min read)

Next.js + Vercel AI Package In Action

Get started with the new Vercel AI SDK in this quick demo with NextJS. (7 min read)

Exploring Typescript Mapped Types And Transformations

Mapped types are a powerful feature that enable us to take existing types and generate new types from them on the fly. (3 min read)

Mastering Conditional Types In Typescript

See the T extends U ? X : Y syntax in action with simple examples. (6 min read)

Understanding Advance Type Inference In Typescript

Advanced Use Case: Exploring type inference with conditional types and more complex generic patterns. (7 min read)

The Benefits of Combining Static Site Generation with Incremental Static Regeneration

Learn how you can statically generate pre-determined Next.js pages using a database for improved build times while still allowing for dynamic content to be generated on the fly. (9 min read)

A Practical Look At The "Unknown" Type In Typescript

Ever wanted to better understand the unknown type? This blog post walks you through a practical setup and look at working with the unknown type. (8 min read)

Using The New Vercel Open Graph Image Generation

Following the release of Satori and Vercel's new open graph image generation, follow along as I demonstrate how I updated my own open graph images for the blog. (6 min read)

Exploring the Tremor dashboard UI library

A look at implementing beautiful graph UI components quickly with Tremor. (4 min read)

Iterating on our bulk Visi exports feature

This post focuses on my work at Visibuild to roll-forward a feature to a more scalable solution. (24 min read)

Discriminated Unions In Typescript

Peel back some of the magic behind discriminated union in TypeScript and how they impact your workflow. (11 min read)

Annotated Rails Models

Help understand your Rails models easier with the help of the annotate models gem. (3 min read)

Local ActiveStorage Development With Rails 7

Set up ActiveStorage on your local developer environment with Rails 7. (4 min read)

Mocks With Minitest

A short overview on how you can mock both class methods and instance methods when dealing with Minitest. (4 min read)

Pry Debugger Tips

Some basic tips on getting more value from the Pry debugger. (6 min read)

Ruby SmarterCSV Gem

A quick look at using the SmarterCSV gem. (2 min read)

Processing Local YAML Files With Sidekiq

See how you can use Sidekiq jobs to read and process a local YAML template for populating the database. (5 min read)

Uploading Files In ActiveAdmin

See how to upload files to ActiveAdmin using this example that uploads a CSV file and populates data to the database. (5 min read)

Automating Ruby Gem Package Releases With Github Actions

In the final part of the Ruby Gem series, we will be automating the deployment of our recently created gem using GitHub Actions. (6 min read)

Creating Your Own Ruby Gem

In this post we will take our basic code from the previous exercises and package it up as a Ruby gem to install in other projects. (2 min read)

Deploying Your Gem To RubyGems

In part two of the Ruby gem series, we will take the gem we created in the previous part and deploy it to RubyGems. (3 min read)

MiniTest With GitHub Actions

In this short overview, see how MiniTest can be incorporated into your GitHub Actions workflows. (4 min read)

RSpec With GitHub Actions

In this short overview, see how RSpec can be incorporated into your GitHub Actions workflows. (3 min read)

Rails Entity-Relationship Diagrams

In this short post, see how you can visualize your domain model quickly using the rails-erd gem. (1 min read)

Through Rails Associations

Following up on the previous post, we will be looking at the last through associations that come baked into Rails. (5 min read)

Devise Part 10: Devise Token Auth

In part ten of the Devise series, we start a new project from scratch to explore how the devise-token-auth gem can be setup with a Rails 7 application. (4 min read)

Devise Part 11: Authentication Tokens With Doorkeeper

In part eleven of the Devise series, we continue on with the previous project to add the capability of authenticating to a public API using authentication tokens with Doorkeeper. (7 min read)

Understanding Rails Associations

In this post, we go through all six of the possible Rails associations with visualizations to help us understand what associations are supported and how they work in Rails 7. (9 min read)

Exploring Ahoy Analytics With Rails 7

This post is a reflection on my first look at using Ahoy analytics in a Rails 7 application. (4 min read)

ActiveAdmin With Ruby On Rails 7

ActiveAdmin is a powerful gem to help us generate admin panels for our internal usage for Rails applications. This post will cover the basics of getting up and running with ActiveAdmin and Ruby on Rails 7. (5 min read)

Getting Started With The FriendlyID Gem In Rails 7

See how the FriendlyID gem makes it simple to convert you URLs into something more useful and friendly with Rails 7. (5 min read)

Ruby Memoization Basics And Memoist

An intro into Ruby memoization with the memoization operator and the Memoist gem. (4 min read)

SimpleCov With Ruby And GitHub Actions

See how to setup SimpleCov for your RSpec tests in a simple Ruby setup and then implement a GitHub Action to comment the coverage results in a pull request. (5 min read)

Devise Part 7: Testing With RSpec And Factory Bot

For this part, we look at setting up some helpers for us to log users in when writing controller tests. (6 min read)

Devise Part 8: Policy Authorization In Rails 7 With Pundit

This post looks at how we outline required policies in order to fulfill requests in Ruby on Rails using the Pundit gem. (10 min read)

Devise Part 9: Setting Up 302 Redirection vs 401 Unauthorized Handlers

In part nine, we take a look at how we can set up our API endpoints to return a 401 response if a user is not signed in instead of the default 302 redirect to the login page. (6 min read)

Benchmarking In Ruby

This post will demonstrate how to benchmark and compare code to help us better understand the performance of our Ruby code. (3 min read)

Devise Part 5: OAuth With GitHub And OmniAuth

In part five, we set up the OmniAuth configuration for Devise to demonstrate login using GitHub. (7 min read)

Devise Part 6: Adding Recaptcha To Prevent Fraud And Abuse

In part six, we enforce the usage of reCAPTCHA v2 to prevent signing up or logging in without passing the reCAPTCHA verification. (6 min read)

Sending Your First Email With ActionMailer In Rails 7

Follow the basics to send an email using a Postmark template and view it in the browser during development. (13 min read)

Devise Part 1: Setting Up Devise With Rails 7 And React

In part one of this six part series on Devise and Ruby on Rails, we demonstrate setting up Devise for Rails 7 with a basic sign up and login flow. (5 min read)

Devise Part 2: Using Redis Sessions Instead Of The Cookie Store

In part two of our Devise series, we look at how we can replace the default cookie session store with Redis. (3 min read)

Devise Part 3: Updating Our Devise Views With Tailwind CSS

In part three of the series, we walk through how to add TailwindCSS to a Rails 7 project and spruce up our sign in page. (4 min read)

Devise Part 4: Authentication With A Separate Frontend

In part four, we add in a separate Next.js project into the mix and demonstrate how to organize authentication for our main Rails API. (9 min read)

Rate Limiting With Rack Attack In Rails 7

In the second of two posts, we look at setting up rate-limiting with the rack-attack gem to see how we can limit requests to our API. (10 min read)

Rate Limiting With Rack Throttle In Rails 7

This is the first of two posts that will look at rate limiting in Rails application. This post will focus on the rack-throttle gem and its usage with Redis. (6 min read)

Getting Started With Sidekiq In Rails 7

A demonstration on getting a local development environment going with Sidekiq and Redis to run a simple demonstration job in Rails 7. (7 min read)

Using The Rails Cache With Redis

An entry-level introduction to setting up the Rails cache and seeing it in action with Redis in development. (6 min read)

Ruby On Rails Pagination With Kaminari

Implement simple pagination mechanisms using the Kaminari gem with Ruby on Rails 7. (9 min read)

Action Cable Messages With Redux

Continuing on from the last post, we introduce Redux to handle our remote messages and perform actions on our React.js application. (8 min read)

Action Cable Hello World With Rails 7

Dive head-first into using Action Cable with Rails 7 and setup a basic React project that can handle web sockets. (8 min read)

Factory Bot With Rails

At this stage of the project, we are introducing Factory Bot to help replace the default fixtures so we can test our PostsRepository code. (11 min read)

Dry Validation With Rails

Continuing on with our project, the next step is to add in dry-validation and dry-monads to help tidy up our code. (16 min read)

Repository Pattern In Rails

A look at how we can implement a Railsy-way of the Repository Pattern in our Rails apps. (10 min read)

Exploring Dry-RB With Dry Matcher And Dry Monads

See how we can use the Dry RB gems dry-matcher and dry-monads to clean up our Ruby code. (7 min read)

Setting Up A Base GraphQL Server And GraphiQL With Rails 7

Follow along as we build out a skeleton Rails 7 server that enables us to use GraphQL. (7 min read)

Rails 7 Using React With ESBuild

Set up a new Rails 7 project with ESBuild that has TypeScript support out-of-the-box. (4 min read)

Rails 7 Using React With Htm

See how you can update your new Ruby on Rails 7 project to use HTM and React without a Node.js setup. (6 min read)

The Beginner's Guide To Monkey Patching In Ruby

This guide will alleviate questions that new Rubyists have around monkey patching and how it works in Ruby. (9 min read)

Bang Methods In Ruby

Why the '!' in Ruby is so important to conquer and real-world implications. (3 min read)

Pattern Matching In Ruby

Understand pattern matching in Ruby. (4 min read)

Understanding Ruby Blocks

A recap on the fundamentals of Ruby blocks. (8 min read)

My Core Principles For 2022

As 2022 kicks off, I am listing out the core principles that I am putting a focus into throughout the year. (9 min read)

Python Decorators In Action

An overview on Python higher-order functions, decorators and some practical examples for when decorators can be used. (5 min read)

Jest Snapshot Testing For Template Languages

Discover a great use case for Jest Snapshot testing with template engines and generators. (8 min read)

Generating Fake Data From JSON Schema

Generate fake data to be used in your applications based on a JSON schema document. (4 min read)

Generating JSON Schema From Typescript Types

Use the ts-json-schema-generator package to generate a valid JSON schema from your TypeScript types. (3 min read)

Generating DBML Files From A Prisma Schema

Output DMBL files from your Prisma schema and see how you can view it online. (4 min read)

Create Stripe Subscription Products From The CLI

Create new Stripe subscription products from a simple TypeScript script. (3 min read)

Next.js Enterprise Project Structure

Set yourself up for success in large Next.js project structures by following this opinionated layout. (12 min read)

5 Must Have Figma Plugins For Web UI Design

I share 5 of the Figma plugins that sped up my workflow 10x. (3 min read)

Scheduled Post Test

Don't mind me, I am just testing my scheduled blog post workflow. (1 min read)

Scheduling One-Off Cron Jobs With AWS EventBridge And AWS Lambda

Reduce instances and costs for single-run cron jobs by using AWS EventBridge rules to trigger AWS Lambda functions. (8 min read)

Next.js Shortened URL Automation

Automate the process of creating shortened URLs for your Next.js posts with this how-to guide. (6 min read)

In My First 5 Days Of NFTs I Minted 2460 Collectibles From Hotel Quarantine

A recount on how I minted 2460 pieces of generated digital art onto OpenSea from my hotel room in Australia. (25 min read)

Jest With GitHub Actions

See how to use Jest alongside GitHub Actions run Jest testing in CI. (5 min read)

Building Typescript NPM Packages With Parcel 2

See how easy it is to build a TypeScript NPM package using Parcel 2. (8 min read)

Locking Redis Transactions In Node.js

Avoid dirty reads on highly contended cache resources in Node.js with the Redlock package. (11 min read)

Introduction To Caching With Next.js

The beginner's guide to how different forms of server and client caching work with Redis and React Query. (21 min read)

Converting The Interim Swyftx Data Structure Into A Valid OpenAPI Format

Following on from the previous post, we will take the interim data structure we scraped from the Apiary documentation website and reshape it into a valid OpenAPI JSON structure. (15 min read)

Authenticating Use For The Swyftx API With Node.js

As we begin a new short series on Swyftx, we begin by getting up and running with your API keys and retrieving your profile with a simple Node.js project. (8 min read)

Scraping The Swyftx Apiary Docs Into A JSON File With Puppeteer

Using Puppeteer, we scrape the Swyftx API docs from Apiary and convert it into a JSON data structure to use later. (15 min read)

5 Handy Python Tips For Beginners

After 30+ days of my 100 day Python journey, I stop to reflect on the five tips that have been unusual by helpful coming into the language. (4 min read)

Regression With Scikit Learn (Part 4)

In our final coverage of regression using SciKit Learn, we look at how we can use regression with regularization. (5 min read)

Regression With Scikit Learn (Part 3)

In part three, we look at using k-fold cross-validation to prevent dependency on a particular train/test split. (4 min read)

Regression With Scikit Learn (Part 2)

In second blog post on linear regression, we take what we learned in part one and look deeper into the basics of linear regression and applying a train-test-split to our data. (5 min read)

Recapping Kubernetes Basics

This short recap on Kubernetes will set the foundation for the upcoming series on Kubernetes and EKS. (7 min read)

Regression With Scikit Learn (Part 1)

Continuing with our look into supervised learning, today we explore the basics linear regression by applying it to another Scikit Learn toy dataset. (4 min read)

Measuring Classifier Model Performance

See how we can visual test the performance capability of our K-Nearest Neighbors classifier using Scikit Learn. (7 min read)

First Look At Supervised Learning With Classification

The 100 Days of Python series is moving into its second phase with Machine Learning. The journey will start with a first look at project setup and classification. (10 min read)

Python Lambda Functions Deployed With The Typescript AWS CDK

Deploy a simple Python lambda function with the TypeScript AWS CDK to LocalStack. (7 min read)

Deploying An EKS Fargate Cluster With The AWS CDK (Part 1)

Deploy a Kubernetes Fargate on EKS cluster using the AWS CDK. (4 min read)

Oil Paint Effect With OpenCV Python

Apply an oil paint effect to images in Python with OpenCV. (2 min read)

Automating Pip Package Deployment With Github Actions

Learn how to use GitHub Actions to speed up your Pip package deployments to PyPi. (4 min read)

Deploying A Fargate Cluster With LocalStack And The AWS CDK

Use the ECS patterns library to deploy a simple Fargate cluster to LocalStack. (11 min read)

Generating Fake CSV Data With Python

Learn how to generate random data and export it to CSV to use in your projects. (8 min read)

DynamoDB With LocalStack And The AWS CDK (Part 2)

The second part of this demo will show how to interact with our DynamoDB table using DynamoDB Toolbox. (6 min read)

Semantic Versioning In Python With Git Hooks

Use Conventional Commits, pre-commit and Commitizen to automate your versioning based on commit messages. (6 min read)

DynamoDB With LocalStack And The AWS CDK (Part 1)

A walkthrough on how to deploy a local DynamoDB table to LocalStack with the AWS TypeScript CDK. (10 min read)

Your First Pip Package In Python

Learn how to deploy your first package to Pip in this straight-forward tutorial. (8 min read)

Building A CDN With S3, Cloudfront And The AWS CDK

Use the TypeScript AWS CDK to deploy an S3 Bucket fronted by a CloudFront CDN and Route53 record. (13 min read)

PyTest With GitHub Actions

Build off previous work on PyTest by adding a GitHub action to run PyTest in CI. (4 min read)

How PyDoc Helps Your Python Development

Explore PyDoc and understand how it can improve your documentation and how to search it. (7 min read)

Using The AWS CDK With LocalStack And aws-cdk-local

Speed up your local AWS CDK development but using LocalStack and the AWS CDK Local wrapper package. (5 min read)

AWS CDK With Typescript Foundations

Get started with the AWS CDK in TypeScript and learn some of the foundational work for upcoming tutorials. (12 min read)

Time Functionality In Python

Explore how to work with the time module from the Python Standard Library in detail. (3 min read)

Mocking Python datetime In Tests With FreezeGun

Learn how to set up reliable PyTest unit tests for the Python datetime library with FreezeGun. (5 min read)

Datetime In Python

Learn how to work with the datetime library in Python. (4 min read)

Exceptions In Python

An overview look at custom exceptions in Python (4 min read)

Working With Regex Expressions In Python

This post will look at how the regex module in python can be used to work with regular expressions. (4 min read)

Beautiful CLIs With The Rich Python Library

See how the Rich library for Python can make it easy to add color and style to terminal output. (4 min read)

Annotating Video Clips With MoviePy

Introduce yourself to MoviePy through a simple example to add text to video. (4 min read)

Pretty Error Output In Python

Make debugging Python errors more enjoyable. (2 min read)

CLI Prompts In Python

Use PyInquirer to create more interactive and user-friendly command line prompts. (5 min read)

Tip: Interactive Python Notebooks With Binder

Display your public GitHub repositories in an interactive notebook. (2 min read)

Tip: Making Directories Recursively With Python

Using the OS module recursively make folders on your operating system. (1 min read)

Python Unit Testing With PyTest

Learn the basics of installing and using PyTest with a basic math module example. (4 min read)

Building CLIs With python-fire

Work through an example of building a simple CLI script with the python-fire library. (3 min read)

Dev Only Next.js Routes

A method to protect your Next.js routes from being accessed in production. (5 min read)

Releasing workingoutloud.dev

A Sunday morning product built to help be more public about my work and day-to-day life. (1 min read)

Reading a file directory with Python

Use the glob library to create a list of all the files in a directory. (3 min read)

Frontmatter Parsing With Python

Learn how to take a markdown file and parse the frontmatter metadata for usage in your scripts. (2 min read)

Composing Images and Text with Python

Use the Pillow image library to add text and icons layers to an image programmatically. (4 min read)

Unsplash API with Python

Installing and using an unofficial Python Unsplash API by salvoventura (3 min read)

First Steps With Jupyter Notebooks

Setting up a Jupyter Notebook for the first time to aid with the 100 Days of Python challenge (3 min read)

A First Look At Generative Art With p5.js

Slowly introducing yourself to the world of generative art with this short introduction (7 min read)

Debugging JavaScript Performance With NDB

Use the Node debugger to visualise performance (5 min read)

Intro To Debugging Node.js Applications With VSCode

See how you can get started with the VSCode debugger for Node.js applications (10 min read)

Running Cron Jobs On Your Local Mac

An easy-to-understand example of how to run automated jobs using crontab on your Mac (5 min read)

Local AWS development with LocalStack

Learn how to setup LocalStack to help with local development emulating AWS products (4 min read)

Using DynamoDB on your local with NoSQL Workbench

Learn how to play around with DynamoDB locally and use NoSQL Workbench to plan out your work (4 min read)

Dynamic UIs Using Dynamic Imports, Next.js 10 and React State

See how you can dynamically create UIs based on React State using dynamic imports, Next.js 10 and React State (3 min read)

Building A Design System Package With Storybook, TypeScript And React In 15 Minutes

Have you ever wanted to build a UI Component Library with TypeScript and React? This blog post will take you through a straightforward set up that uses the bare minimum to get a working component library that you can re-use across your different React projects. (8 min read)

Adding A Basic Related Articles Section To The Gatsby Starter Blog Starter

This blog post will show you how I updated my Gatsby website to display a basic related articles section based on frontmatter tags. (5 min read)

Implementing Simple Auth To Your Next.js Website using Next.js Auth

This post will go through a simple example of setting up simple authentication with a user and password to your Next.js website. (5 min read)

Exploring The New Image Component With Next.js

This blog post will explore the new Next.js Image component for an optimised image experience on the web. (4 min read)

Exploring Internationalisation With Nextjs 10 and react-intl

This blog post will explore the new internationalised routing in Next.js 10 and how you can use this to your advantage with react-intl for React.js (7 min read)

Taking Stripe Payments With Next.js 10, TypeScript 4, React 17 and Vercel

Learn how to create a test Stripe example, update that example and deploy to Vercel for a Stripe payment gateway, React 17, TypeScript 4 and Next.js 10 (10 min read)

Exploring Vercel Analytics Using Next.js 10 and GTMetrix

See a roundup of my look into Vercel's new analytics feature that you can enable on a Vercel project and see how I used GTMetrix to help push some numbers. (5 min read)

Deploying Next.js 10 With Vercel CLI and the Vercel GitHub Integration

Learn how to deploy the base Next.js 10 app with the Vercel CLI and/or the Vercel GitHub Integration (4 min read)

Deploying Static Websites To AWS S3 + CloudFront + Route53 Using The TypeScript AWS CDK

Use the TypeScript AWS CDK to deploy static sites to S3 with a CloudFront distribution and Route53 setup for a custom domain. (8 min read)

Exporting Static HTML From A Nextjs 10 Site

Learn how to export static HTML from a Nextjs 10 project to host (3 min read)

Snowpack 2.15.1 with Create React App 4.0.0 and NPM 7

Updating my previous post on using Create React App with Snowpack for the latest versions and NPM 7 (1 min read)

Webpack 5 Builds for AWS Lambda Functions with TypeScript

Using Webpack 5 to build lambdas for AWS deployments (5 min read)

Self-Destructing Tweets

A look into how you can run a cron job to self-destruct tweets (6 min read)

Generating Types From JSON Schema With QuickType

Generate strongly-typed models and serializers from JSON, JSON Schema (7 min read)

Align TypeScript Standards With JSON Schema

Using TypeScript to standardise types across the board using JSON Schema (4 min read)

Prevent Breaking API Changes With OpenAPI And openapi-diff

Prevent Breaking API Changes With OpenAPI And openapi-diff (4 min read)

Validate Your APIs With OpenAPI Schema Validator

Validate Your APIs With OpenAPI Schema Validator, YML and JSON (4 min read)

56 Mental Models That Help You Tick

Explore a tool kit of models that you can apply to your own work day (10 min read)

Your First ESLint Rule Applied To Create-React-App

Look at how you can create your first ESLint rule and apply it to a working application (8 min read)

Prompting New App Versions With The Service Worker And Create-React-App

Look at how we can work around one of the Service Worker's biggest misunderstanding (4 min read)

Creating and using AWS Secrets from the CDK and CLI

A quick overview of adding/retrieving secrets for AWS (3 min read)

10 Time Management Tips for the Developer Who Wants It All Now

Tips and tricks for how you can become the developer you've always wanted to be (17 min read)

Error Tracing with ES6 Classes and Sentry

Extend the Error prototype with ES6 classes to capture errors and send them to Sentry (8 min read)

Build Your Own Heat Map with D3

A quick look at building a heat map in D3 (5 min read)

Unix Redirection In C

Explore how redirection works in C (5 min read)

How To Use Your Tailwind Theme Anywhere Throughout Your React App

Use the React Context API with Tailwind's theme generator to access the values anywhere throughout the application (6 min read)

Getting Started With React + TypeScript + Tailwind + Classnames In Minutes

Get up and running with Tailwind faster than your bread takes to toast (4 min read)

How To Use NPM ES Modules With Deno

Discover how the Skypack CDN can help use your favourite modules with Deno (2 min read)

Lessons From My One-Month Writing Milestone

Some learnings and reflections after hitting a month of sharing (8 min read)

O(1) Reloading With Create React App

Upgrade a CRA template to start making use of Snowpack (7 min read)

What the flip are Unix Named Pipes?

A look at named pipes and how we can interact with them in Golang (5 min read)

Speedy diagram mocks with RoughJS and Puppeteer

An evening project to speed up small, rough diagrams from the command line (12 min read)

BYO Form Builder with Deno, React and JSON

See how we can auto-generate fully validated forms using React, Snowpack, YAML and a bit of grit (15 min read)

4 Easy Steps To Building Your First Twitter Bot With JavaScript

Tired of Twitter negativity? Avoid it all by posting from the safety of the command line! (5 min read)

Docker + GitHub Actions = Your Next Productivity Superpower

Run through the basics to get your first Docker GitHub Action up and running (6 min read)

The World's Most Gentle Introduction Into Functional Programming

Understanding core functional programming concepts by implementing "pipe" and "compose" - two of the most common utility functions in JavaScript (19 min read)

Going Back Into Lockdown

This year has been... strange. (8 min read)

7 CSS Tips To Save Your Sanity

CSS is hard. In fact, I preach day in and day out that it one of the more difficult concepts to grasp effectively. Here are 7 tips to help you scale and manage CSS and its alternatives. (9 min read)

The 9-Step Plan To Becoming Dangerous In Any Language

Learn the lessons that I had to find out the hard way when it came to learning languages over and over and over... (14 min read)

Your First Github npm Package in 5 Minutes

A short example of setting up your first npm GitHub package (3 min read)

The ABCs of Pipenv and Python Package Management

An entry-level look at how to setup determinstic Python environments using Pipenv (6 min read)

Dipping Your Feet Into Golang Servers With Fiber

In this entry into Fiber, we will cover installation of Fiber, as well as the basics of GET + POST requests, handling errors and returning JSON. (9 min read)

Up and running with Factory Bot in Rails 5

A short morning run over setting up the factory_bot_rails gem with RSpec (4 min read)

Build a CLI Puppeteer tool to screenshot all the things!

In this example, we will screenshot vaild HTML with Puppeteer (10 min read)

Build your own code generator in JavaScript

Follow along as we do the bare minimum to start generating files using EJS from the command line (10 min read)

5 Resources to Level Up Your Design System

Improve your Design System with these websites that work as together as a foundation into your next UI iteration (4 min read)

Creating your first Stripe Charge with Dotnet + C# in 5 minutes

Follow along in this short Stripe series as we take a look at making a Stripe charge in a few different languages! (3 min read)

Creating your first Stripe Charge with Python + Flask in 5 minutes

Follow along in this short Stripe series as we take a look at making a Stripe charge in a few different languages! (2 min read)

Creating your first Stripe Charge with Gin + Golang in 5 minutes

Follow along in this short Stripe series as we take a look at making a Stripe charge in a few different languages! (3 min read)

Creating your first Stripe Charge with Slim + PHP in 5 minutes

Follow along in this short Stripe series as we take a look at making a Stripe charge in a few different languages! (3 min read)

Creating your first Stripe Charge with Java + Spring in 5 minutes

Follow along in this short Stripe series as we take a look at making a Stripe charge in a few different languages! (4 min read)

Creating your first Stripe Charge with Ruby on Rails in 5 minutes

Follow along in this short Stripe series as we take a look at making a Stripe charge in a few different languages! (3 min read)

The ABCs of Rate Limiting ExpressJS Servers with Docker + Redis

Follow along as we go start to finish in setting up rate limiting on an ExpressJS server and show how to enforce it across multiple servers (11 min read)

Seven things to start saying RIGHT NOW to become a Tech Lead

Satirical Tech Lead Fridays (5 min read)

Authentication with Next Auth

Use Next Auth to login into a Next.js application using GitHub Credentials, and store them in a local MySQL Docker container (6 min read)

Building an Alfred extension for my developer notes

How I built a local Alfred extension to quickly jump to the web page online (3 min read)

Dead code elimination with the Babel AST Parser

Using the Babel AST Parser to help find unused JS/TS/Less/SCSS files in the code base (7 min read)

Bundling TS React Electron Apps with Parcel

Get up and going with Electron by using Parcel to handle the bundling, TypeScript for type checking, React for the UI and the Electron dialog API to help read/write files (6 min read)

Using the AWS CDK to send a serverless Slack message

Follow along to send a simple message to Slack by using the AWS SDK to trigger a JavaScript Lambda function on a timed cron job that has NPM dependencies required. (7 min read)

Scraping websites with Xray

Use Nodejs and Xray to scrape the blog website (3 min read)

Running complex applications with Tmux and Tmuxinator

Use tmuxinator to setup projects that require complex setups (3 min read)

Programatically create or update GitHub files

Use Node.js and Octokit to programatically create a markdown file in a GitHub repo (3 min read)

Algebra Properties

A short look at some important algebra properties and their formulas (3 min read)

Converting a rails routes output into a Postman Collection

Follow as I use functional Ruby programming to generate an OpenAPI v3 yml file from information given from rails routes and import it into Postman (9 min read)

Converting the blog to its own subdomain

Challenges and process to get the blog converted over to Gatsby + Netlify CMS (5 min read)

Network Addressing

An overview of network addressing and how to understand concepts like network masking. (4 min read)

OSI Layers

A quick overview on the seven layers of the Open System Interconnection (OSI) model. (1 min read)

Write Ahead Log

A quick overview on the seven layers of the Open System Interconnection (OSI) model. (4 min read)

Scala Data Types

A short look at the data types available when using Scala. (2 min read)

Web Fetch API

Looking at usage of the web "fetch" API. This example uses the node-fetch library for demonstration purposes. (2 min read)

Auxiliary And Space Complexity

Looking at usage of the web "fetch" API. This example uses the node-fetch library for demonstration purposes. (3 min read)

Hello Java Streams

A short look at how to sum an integer list and manipulate a string list using Java 8 streams. (2 min read)

Kafka Basic Terms

A look into the common terms and their definitions when using Apache Kafka. (6 min read)

Intro To Elasticsearch

A look at ElasticSearch and setting up a multi-node cluster using Docker compose and create a JavaScript client for insertions. (3 min read)

Intro To Cassandra

A small intro into how you can get started with Cassandra using Docker and basic syntax. (4 min read)

Autocomplete With RxJS

A quick look at how RxJS implements an autocomplete subscription. (2 min read)

Basics On Programming Paradigms

A quick overview of a number of programming paradigms and what are some key defining features. (2 min read)

Logistic Regression Basics

A quick and dirty intro into the applications of numpy, pandas, sklearn and matplotlib to apply basic logistic regression. (6 min read)

D3 Scale

Looking at how we can normalise data using the d3-scale library. (10 min read)

Reselect Quick And Dirty

The tl;dr reminder of how Reselect works for Redux state memoization. (1 min read)

Moving To Melbourne

tl;dr Syd => Melb. (1 min read)

Go Binary Search Trees

Go implementation of a Binary Search Tree. (3 min read)

Process Description And Control

A deeper look into processes under the hood. (8 min read)

D3 Word Cloud with Create React App

Creating a D3 word cloud from a base Create React App project. (4 min read)

Queues with Kue.js, Node.js and Redis

Creating queues to schedule workers using Kue.js, Node.js and Redis (2 min read)

EKS Basics

An introduction to what EKS is. (4 min read)

Redux Persist With React Native

Adding Redux Persist to React Native for data persistence. (1 min read)

Python Anagrams

Python implementation of comparing two strings to check if they are anagrams. (1 min read)

Intro To Helm

An introduction into managing packages on Kubernetes with Helm. (7 min read)

Thread Basics

A look into how threads operate. (6 min read)

B Tree Basics

A short look into B-Tree structures, what defines them and some technologies that use them. (2 min read)

Istio With EKS

A basic look at how to add Istio to your EKS cluster. (6 min read)

React Hook Basics

An introduction to React Hooks. (2 min read)

Rust Fizzbuzz

The classic FizzBuzz implementation in Rust with Unit Testing. (2 min read)

Ruby Trees

Ruby implementation of a basic node tree and traversal using DFS and BFS. (2 min read)

Running Detox With Expo

How to setup Detox to run e2e tests for an Expo application. (2 min read)

PHP Binary Search Trees

PHP implementation of a Binary Search Tree. (2 min read)

Trees in Golang

Golang implementation of a basic node tree and traversal using DFS and BFS. (3 min read)

Java Linked List

Java implementation of a basic unidirectional Linked List. (5 min read)

Ruby Binary Search Trees

Ruby implementation of a Binary Search Tree. (2 min read)

Anagrams in JavaScript

JavaScript implementation of comparing two strings to check if they are anagrams. (1 min read)

Go Linked List

Go implementation of a basic unidirectional Linked List. (6 min read)

Python Binary Search Trees

Python implementation of a Binary Search Tree. (2 min read)

Spiral Matrices in JavaScript

JavaScript Spiral Matrices with unit testing. (2 min read)

MySQL Development With Docker

Setting up a MySQL container for local development. (1 min read)

Redis CLI Basics

Basic usage and command calls for Redis from the command line. (2 min read)

Python Trees

Python implementation of a basic node tree and traversal using DFS and BFS. (2 min read)

Install Redis With Helm

A basic intro to using the Redis chart and installing it with Helm. (1 min read)

EKS Pulling From Docker Hub

Adding credentials to be used for EKS when pulling images from Docker Hub. (1 min read)

PHP Anonymous Functions

Basic intro to anonymous functions with PHP. (1 min read)

Overview of eksctl

Basic instructions on how to use EKSCTL on the command line. (4 min read)

Basic Slices with Golang

Basic applications of slices. (2 min read)

Ruby Constructors

How to build instances with Ruby. (2 min read)

Python Exceptions

Basic error handling with exceptions in Python. (1 min read)

PHP Constructors

Building instances with PHP classes. (1 min read)

Java Spiral Matrix

Java Spiral Matrices with unit testing. (2 min read)

PHP Unit Testing

Basic unit testing for PHP. (1 min read)

Java Lambda Functions

How to create basic lambda functions in Java requiring interfaces. (1 min read)

Docker application with Nginx and Nodejs

Linking two Docker containers to run a Nodejs app behind a NGINX reverse proxy. (2 min read)

Ruby Lambda Functions

A quick look at Ruby Lambda and Proc functions. (1 min read)

Go Basic Strings

Basic string manipulation in Golang using the strings package. (2 min read)

PHP Array Method Applications

Basic push, pop, shift and unshift applications for PHP. (2 min read)

PHP Linked List

PHP implementation of a basic unidirectional Linked List. (1 min read)

Java Maps

Basic implementation of maps in Java. (1 min read)

Java Initialising Arrays

Using the arrays and array list utility packages in Java. (2 min read)

Javascript Logging Conventions

See what I do when it comes to JavaScript logging for web. (3 min read)

Braintree with Nodejs and React

Create a basic payment with Braintree using React and Nodejs! (7 min read)

Hello Gin

Simple basics on a GET and POST request for Gin in Go. (2 min read)

React Portal Basics

An introduction to React Portals. (1 min read)

Diagrams With Mermaid

Checkout how to create dynamic diagrams using mermaid! (5 min read)

Go Spiral Matrix

Golang Spiral Matrices with unit testing. (2 min read)

Ruby Error Handling

Examples on how to handle errors in Ruby. (1 min read)

Expo Amplify

Example of adding in Amplify (1 min read)

Intro To Myrocks

Short introduction and link to the MyRocks engine. (1 min read)

Java Anagrams

Solution in Java. (1 min read)

Java Trees

Solution in Java (2 min read)

JavaScript Naming Conventions

Suggestions and guides for naming in JavaScript. (1 min read)

LSM Tree Basics

Resources for log-structured merge trees. (1 min read)


A look at current base principles. (6 min read)

Contrast Colors

A small intro into auto-determining WCAG color contrast standards (1 min read)

Hello Shave

What do you do when your content becomes super long? (1 min read)

Yargs Parser

Say hello to an easy way to parse CLI args and options with yargs parser. (3 min read)

Ruby Linked List

Ruby implementation of a basic unidirectional Linked List. (2 min read)

Depth Sharp Cli

Use the incredible Sharp package for Node and build a simple CLI image compression tool. (7 min read)

Go Fizzbuzz

The classic FizzBuzz implementation in Golang with Unit Testing. (2 min read)

Debouncing events in React

See example code on how to debounce trailing and leading events. (3 min read)

React Context Basics

An introduction to React Context. (3 min read)

React Dynamic Imports

See example code for dynamically importing a React Component. (1 min read)

Python Spiral Matrix

Python Spiral Matrices with unit testing. (2 min read)

PHP Trees

PHP implementation of a basic node tree and traversal using DFS and BFS. (2 min read)

Python Linked List

Python implementation of a basic unidirectional Linked List. (4 min read)

Ruby Anagrams

Ruby implementation of comparing two strings to check if they are anagrams. (1 min read)

PHP Anagrams

PHP implementation of comparing two strings to check if they are anagrams. (1 min read)

Kubernetes Healthchecks

An example of a simple health check for Kubernetes. (1 min read)

Ruby Fizzbuzz

The classic FizzBuzz implementation in Ruby with Unit Testing. (1 min read)

PHP Spiral Matrix

PHP Spiral Matrices with unit testing. (1 min read)

Python Fizzbuzz

The classic FizzBuzz implementation in Python with Unit Testing. (1 min read)

Ruby Spiral Matrix

Ruby Spiral Matrices with unit testing. (2 min read)

Expo Facebook Login

How to use the Expo API to log into Facebook and authenticate on AWS Amplify. (1 min read)

Java Fizzbuzz

The classic FizzBuzz implementation in Java with Unit Testing. (1 min read)

JavaScript FizzBuzz

The classic FizzBuzz implementation in JavaScript with Unit Testing. (1 min read)

PHP Fizzbuzz

The classic FizzBuzz implementation in PHP with Unit Testing. (1 min read)

Hello, Blog!

Blog initiation and hazing. Read my primary objectives with this blog and the series I will write about. (2 min read)


Get fresh posts + news direct to your inbox.

No spam. We only send you relevant content.