hello.js

var please = require('share');
console.log('thank you');

Friday, 19 July, 2019 UTC

Rendering Legacy Pages inside of a React Component

Rendering Legacy Pages inside of a React Component

Recently, I needed to implement an unusual feature for a React front end: a reusable component that displays server-rendered pages from a legacy version of the same app. If you’ve found yourself in a similar situation, I hope this guide will make life ... more


Saturday, 13 July, 2019 UTC

Making Your First Game in Phaser 3 with TypeScript

Making Your First Game in Phaser 3 with TypeScript

I recently got a chance to use Phaser 3 and TypeScript to build Root Maker with my Ludum Dare team. It worked out great. Phaser is one of the best frameworks around for HTML5 game development, and it’s definitely worth checking out if you haven’t. I ... more


Tuesday, 9 July, 2019 UTC

Helper Functions for Testing a PostgreSQL Database

Helper Functions for Testing a PostgreSQL Database

When writing tests for a Node.js server, it’s common to test the database as well. (At least, one hopes.) Here are a few helper functions for testing a PostgreSQL database using Knex. Setup and Teardown These two functions are common. Note that getConnection ... more


Tuesday, 2 July, 2019 UTC

Organization Patterns for Writing Better Web Acceptance Tests

Organization Patterns for Writing Better Web Acceptance Tests

Out of all the tests I write on a day-to-day basis, acceptance tests are the hardest. In my experience, writing them for web applications is complex. There are many asynchronous actions going on: web requests firing off, responses being processed, UI ... more


Friday, 21 June, 2019 UTC

JavaScript-free Web Development with WebAssembly, Bolero, and F#

JavaScript-free Web Development with WebAssembly, Bolero, and F#

A while back, I remember hearing about WebAssembly and how it would finally release the web from the grip of JavaScript. (Languages that transpile to JavaScript don’t cut it). Although WebAssembly doesn’t make the news much these days, it turns out there ... more


Thursday, 20 June, 2019 UTC

JavaScript-free Web Development with WebAssembly, Bolero, and F#

JavaScript-free Web Development with WebAssembly, Bolero, and F#

A while back, I remember hearing about WebAssembly and how it would finally release the web from the grip of JavaScript. (Languages that transpile to JavaScript don’t cut it). Although WebAssembly doesn’t make the news much these days, it turns out there ... more


Tuesday, 18 June, 2019 UTC

BLOBs with Knex and PostgreSQL

BLOBs with Knex and PostgreSQL

My team and I recently decided that we should store user-generated binary files in our PostgreSQL database so that a user could download them at a later time. This is different from uploading those files to something like Amazon S3 (which we’ll likely ... more


Monday, 20 May, 2019 UTC

Document Your Project’s package.json File

Document Your Project’s package.json File

The package.json file is the heart of any Node.js project, but it often goes entirely undocumented. In this post, I’ll review a few areas that are worth documenting, and how I like to do it. What to Document Packages and versions The package.json file’s ... more


Wednesday, 8 May, 2019 UTC

Importing AWS Infrastructure to Terraform

Importing AWS Infrastructure to Terraform

Terraform is a great tool for setting up and configuring architecture as code. However, it can be tricky to manage resources that were not created by Terraform. I recently worked on a project where most of our AWS infrastructure had been manually created ... more


Wednesday, 24 April, 2019 UTC

Intuitive React Integer Input

Intuitive React Integer Input

Input fields are some of the most fundamental aspects of any application, and front-end validation is expected these days. Unfortunately, doing even simple validation is often more complicated than many clients expect. Requests for name or email fields ... more


Friday, 19 April, 2019 UTC

Deploy a Static WordPress Using AWS & Cloudflare, Part 1: Building a WordPress in Docker

Deploy a Static WordPress Using AWS & Cloudflare, Part 1: Building a WordPress in Docker

Basic websites are often made in insecure ways with plugins and features available through frameworks like WordPress. A lot of times though, these websites don’t need these features when they go live because they’re just static sites. For example, if ... more


Thursday, 18 April, 2019 UTC

Getting Started with Chart.js – The Easy, Beautiful Way to Chart

Getting Started with Chart.js – The Easy, Beautiful Way to Chart

Chart.js is a JavaScript tool which allows you to generate charts for a webpage. It is an approachable way to create beautiful charts with little effort. Due to the good examples and solid documentation, it won’t take long to get your data on the page. ... more


Wednesday, 17 April, 2019 UTC

Four Ways to Keep Junk Out of Git

Four Ways to Keep Junk Out of Git

Source control is a vital part of software development, but you don’t always want it to keep track of everything . Passwords, temporary changes, and desperate debugging edits are best kept out of version control. I’ve found four effective ways to handle ... more


Sunday, 14 April, 2019 UTC

Writing an iOS App on Your Phone with play.js

Writing an iOS App on Your Phone with play.js

play.js is an interesting iOS app that acts as an IDE for Node.js and React Native. It’s a weird concept, but the thought of being able to create an app for my phone by using an app for my phone was too fun to pass up. Having worked with React Native ... more


Wednesday, 3 April, 2019 UTC

How TypeScript Shaped our Entire Codebase for the Better

How TypeScript Shaped our Entire Codebase for the Better

Over the last year and a half, I’ve had the pleasure of working on a web app built in TypeScript. I came to Atomic with no web development experience at all. On my first couple of projects, I spent most of my time working on small, relatively isolated ... more


Tuesday, 2 April, 2019 UTC

Open-Source vs. Build-Your-Own – A Formula for Deciding

Open-Source vs. Build-Your-Own – A Formula for Deciding

You probably use open-source libraries and frameworks on a daily basis. They’re incredibly handy for solving common problems, like how to build an administrative dashboard or how to manage global state in a JavaScript application. One could easily argue ... more


Saturday, 30 March, 2019 UTC

Tools for Learning About New Tech Communities

Tools for Learning About New Tech Communities

After deciding to explore a career in software development, I recognized that, beyond general programming experience, I had no real exposure to the industry. I didn’t know anything more than a surface-level description of the job title. I lacked knowledge ... more


Wednesday, 27 March, 2019 UTC

A Comprehensive Guide to Fixing Node-Gyp Issues on Windows

A Comprehensive Guide to Fixing Node-Gyp Issues on Windows

node-gyp is a tool that enables the compilation of native add-on modules for Node in multiple platforms. It has widespread use and is included as a dependency in many NPM packages. On most systems, this isn’t an issue, and installing node-gyp with the ... more


Monday, 18 March, 2019 UTC

How We Built a Scrappy Curriculum Editor using VSCode, TypeScript, and AWS Lambda

How We Built a Scrappy Curriculum Editor using VSCode, TypeScript, and AWS Lambda

Great apps aren’t stuck in the mud. They change with the times. They float like oak leaves along a wide river of user expectations, business requirements, fashion trends, and platform changes. To keep floating, leaves apps need a watchful team of developers ... more


Saturday, 9 March, 2019 UTC

Considering a Non-Technical Role? Think about these 6 Things

Considering a Non-Technical Role? Think about these 6 Things

Almost three years ago, after spending 13 years as a software developer, I took on the role of Delivery Lead here at Atomic. It was a step away from code and toward all things related to project delivery: project management, backlog management, reviewing ... more


Wednesday, 20 February, 2019 UTC

Add Padding to Embedded SVGs for svg-pan-zoom Controls Using JavaScript

Add Padding to Embedded SVGs for svg-pan-zoom Controls Using JavaScript

A while ago, my current project added support for zooming and panning SVG images. We were able to accomplish this pretty quickly by using the svg-pan-zoom library, which allowed us to easily add UI for pan and zoom controls on top of SVGs. However, after ... more


Tuesday, 19 February, 2019 UTC

Wrapping a TypeScript Function for Background Execution

Wrapping a TypeScript Function for Background Execution

In my last post, I showed how to write a higher-order function that could wrap an existing function without losing the original function’s types. Today, I’m going to show how you can use that same technique to wrap an existing function for a different ... more


Wednesday, 13 February, 2019 UTC

An Introduction to React Native Testing with Cavy

An Introduction to React Native Testing with Cavy

I’ve recently been using Cavy to handle end-to-end testing for a React Native app. In this post, I’ll go over some first impressions and a few patterns I’ve found to be helpful. Intro to Cavy Cavy is an end-to-end testing framework that integrates with ... more


Tuesday, 5 February, 2019 UTC

Four Ways to Refactor for Easier Development

Four Ways to Refactor for Easier Development

Refactoring isn’t just about optimization or replacing some ugly code with something more elegant. It’s also a chance to keep things organized and consistent, which: Helps new team members understand things better. Helps everyone contribute faster because ... more


Tuesday, 5 February, 2019 UTC

Creating a Local File Cache Inside Your React Native App

Creating a Local File Cache Inside Your React Native App

I recently had to implement a local file cache for a React Native app so that users could play audio and video when offline. There are a number of reasons you might need to make a similar caching system, and this post explains how to set up the basic ... more


Friday, 1 February, 2019 UTC

Replacing Heroku Review Apps on Non-GitHub Projects

Replacing Heroku Review Apps on Non-GitHub Projects

If your software team develops multiple new features simultaneously, you need to be able to deploy and test them in isolation. The gold standard for this is to use Heroku’s review apps, which are temporary environments automatically spun up for each ... more


Thursday, 31 January, 2019 UTC

Using React Storybook to Tackle Complex Multipart Stories

Using React Storybook to Tackle Complex Multipart Stories

Often, when developing a new React component for a web app, I find myself with lots to do. For example, I may need to add a Redux container, API endpoint, some Redux actions, and the UI of the component. These tasks are all interconnected and interdependent, ... more


Monday, 21 January, 2019 UTC

Type-Driven Development – Replacing Unit Tests with Types in Typescript

Type-Driven Development – Replacing Unit Tests with Types in Typescript

Being explicit about the return type of the function is the most under-utilized feature of TypeScript. At least, that’s true for the way I write my code. When I first started using TypeScript, I was really impressed with the way it inferred the return ... more


Saturday, 19 January, 2019 UTC

Project-Specific Command Line Shortcuts with direnv

Project-Specific Command Line Shortcuts with direnv

Most projects that last more than a few weeks accumulate some form or another of automation. Some carefully craft jobs in a package.json file and run them with yarn automation . Some stuff their Makefile s full of .PHONY targets and run them with make ... more


Wednesday, 9 January, 2019 UTC

Creating Amplify Email Campaigns in JavaScript

Creating Amplify Email Campaigns in JavaScript

On my current project, we are using AWS Amplify to manage cloud infrastructure. One of the reasons we’re using Amplify is to send targeted emails to our users through AWS’s analytics tool, Pinpoint. Setting up an email channel through Amplify turned ... more