Thomas Hunter II

Welcome to my personal blog! I'm an international speaker, published author, and a software engineer specializing in Node.js (which I write about extensively). I'm available on Twitter as @tlhunter if you'd like to chat, and a lot of my open source work is available on GitHub as @tlhunter.

Radar Chat

Leave Digital Messages in the Physical World.

Radar Chat is a mobile app (currently a PWA) that I've been building for the past several months and is currently in open beta. It's designed to help you find garage sales, food trucks, good coffee, etc. Sign up and let me know what you think!

Books I've Published

Featured Posts

Multithreaded JavaScript: Concurrency Beyond the Event Loop
Node.js Modules, Packages, and SemVer
, 8 min read
Zero-downtime deploys with DigitalOcean, GitHub, and Docker
, 15 min read
Distributed Systems with Node.js: Building Enterprise-Ready Backend Services
Elpizia
, 24 min read
On Migrating from Wordpress to Static Markdown
, 9 min read
Why you should avoid ORMs (with examples in Node.js)
, 14 min read
Redis and Node Part 1: The Basics
, 7 min read
HTTP API Design Part 1: Requests
, 8 min read
Publishing an HTML5 Mobile App, Part 1: Development and Debugging
, 7 min read

All Posts

Detecting if a PWA/TWA is Installed
, 4 min read
The Death of a Node.js Process
, 7 min read
Node.js Modules, Packages, and SemVer
, 8 min read
PS2 RPI4 Part III: Underway
, 5 min read
PS2 RPI4 Part II: Internals
, 4 min read
PlayStation 2 Raspberry Pi Restoration
, 6 min read
Elpizia
, 24 min read
The Apex Consumer
, 15 min read
Fixing the Massdrop AKG K7XX Squeak
, 1 min read
Nine Volt Daisy Chain
, 4 min read
Cobalt Caliber
, 36 min read
JavaScript Symbols: But Why?
, 8 min read
Introducing Package Diff
, 1 min read
Protecting your JavaScript APIs
, 7 min read
Removing gVim Right and Bottom Borders
, 2 min read
Common API mistakes and how to avoid them
, 13 min read
On Migrating from Google Analytics
, 5 min read
Compromised npm Package: event-stream
, 1 min read
The Monster in the Basement
, 13 min read
Essential Firefox Tweaks
, 3 min read
JavaScript Object Type Coercion
, 4 min read
Recent Concerns about Node.js Security
, 1 min read
Node.js and Lambda Three Part Series
, 1 min read
Cobalt Dungeon for iOS is now available
, 1 min read
Support me on Patreon
, 1 min read
Twitter Plays Zork: @DemocraticZork
, 1 min read
Go v1.9.1 vs Node v8.9.0 Microbenchmark
, 2 min read
Is it time to replace REST with RPC?
, 8 min read
Random Meetup Attendee Bookmarklet
, 1 min read
2017: A Central Europe Odyssey
, 27 min read
Redis and Node Part 4: Lua Scripting
, 5 min read
Redis and Node Part 2: Shared State
, 5 min read
Redis and Node Part 1: The Basics
, 7 min read
Digital Nomad: Inventory Advice
, 7 min read
HTTP API Design Part 4: API Standards
, 6 min read
HTTP API Design Part 3: Bodies
, 4 min read
HTTP API Design Part 2: Responses
, 4 min read
HTTP API Design Part 1: Requests
, 8 min read
Advanced Microservices
, 2 min read
Linux Mint Disable "Recently Used"
, 1 min read
A Holistic Approach to Microservices
, 1 min read
My Trip to Japan
, 18 min read
Enabling Yubikey U2F support in Linux
, 1 min read
Installing Linux Mint on an XPS13 (9350)
, 3 min read
The only bad thing about ES7 Async/Await
, 2 min read
Upgrading to the XPS 13 (9350)
, 2 min read
Strategic Game of Life: Mobile Edition
, 3 min read
Upgrading Linode II: Xen to KVM
, 1 min read
Tips for Building Mobile Games in HTML5
, 13 min read
Upgrading Linode
, 2 min read
Arpad: An ELO Ranking System for Node.js
, 1 min read
Consumer Centric API Design
, 1 min read
Principles of good RESTful API Design
, 16 min read
Only Push/Pull Current GIT Branch
, 1 min read
Remove OpenDNS from Linux Mint
, 1 min read
Border Patrol Saga
, 5 min read
Cheating at Cookie Clicker
, 1 min read
Installing Redis on Debian as a Service
, 2 min read
Fixing Homebrew
, 1 min read
SSH into a machine with a dynamic IP
, 1 min read
WordPress GET Variables with lighttpd
, 3 min read
The JavaScript Event Loop [Presentation]
, 10 min read
Lansing Startup Weekend
, 2 min read
Enable PHP Mail on OS X Mountain Lion
, 2 min read
What WordPress 4.x Could Be
, 6 min read
I turned on a light
, 2 min read
Wacom Bamboo Splash Review
, 4 min read
A Better Debian SSH Login Message
, 2 min read
Transitioning from MediaTemple to Linode
, 2 min read
Install Node.js on Debian 6
, 1 min read
Using authbind with Node.js
, 1 min read
Fun Timing Game in Canvas
, 1 min read
Drop Root Privileges in Node.js
, 2 min read
The Upcoming Parallel Digital Universe
, 3 min read
All Hands Active Board Member
, 1 min read
GitHub Connection Timed Out
, 1 min read
CouchDB and PHP Web Development
, 7 min read
Node.js Convert JSON to XML, Pluralize
, 2 min read
Fixing ApacheBench on OS X Lion
, 2 min read
Review of OpenShift Node.js Support
, 4 min read
Raspberry Pi with Tons of Hardware
, 2 min read
Cobalt Calibur 3 Open Source
, 1 min read
My First Arduino Project
, 1 min read
Code School Review
, 6 min read
Series or Parallel Power-Source Switch
, 1 min read
Auto Mount External Drives in Debian
, 1 min read
Per-User Password Hashing Algorithms
, 2 min read
Recursively Delete Files by Extension
, 1 min read
Recursively convert OGGs to MP3s
, 1 min read
Node.js GPS Module
, 1 min read
A Primer on Web Caching
, 6 min read
The Future of Augmented Reality
, 4 min read
PHP + Apache Stack vs Node.js
, 8 min read
OS X Wireless Control from the CLI
, 1 min read
SSHing into Arch Linux Raspberry Pi
, 1 min read
Updating Pacman on the Raspberry Pi
, 2 min read
Gracefully Kill Node.js App from Ctrl+C
, 1 min read
Determine Wireless Encryption Type
, 1 min read
Express.js Pass-Through Directory
, 1 min read
Bad Mount Point Input/Output Error
, 1 min read
MacBook Pro with SSD and Hard Drive
, 1 min read
Git SSL Errors
, 1 min read
NPM SSL Errors
, 3 min read
Settling In to a New Mac
, 1 min read
Female Voice using eSpeak
, 1 min read
Know your Wireless Cards!
, 1 min read
Suppressing SSH MOTD Messages
, 1 min read
Re-Map Caps Lock key to Esc in OS X
, 2 min read
Why Android should switch to Go
, 3 min read
NERF Gun Laser Instructions
, 1 min read
Node.js Robotics Software Suite
, 2 min read
RedBubble Poor Product Quality
, 2 min read
Creating Self Executable PHP Scripts
, 2 min read
Open Sourcing Facebook App, Squirrelify
, 1 min read
Open Sourcing EVE Crawler
, 2 min read
Cobalt Calibur: Roadmap
, 2 min read
Using .htaccess to Prevent www Subdomain
, 1 min read
Global gitignore vs repository gitignore
, 2 min read
Modded Laser NERF Gun
, 1 min read
Building a Really Simple Node.js Module
, 1 min read
Linux Force Dismount
, 1 min read
Hiding Files and Folders in OS X Finder
, 1 min read
Open Source AJAX Game Engine
, 1 min read
The Shark Fin Conjecture
, 1 min read
Why the MPAA and RIAA will soon be gone
, 4 min read
Xpath Expressions Explained
, 2 min read
Tech Startup Entrepreneur Books
, 3 min read
Tumblr-like Template Syntax PHP Library
, 2 min read
Really simple SSH proxy (SOCKS5)
, 3 min read
Using Swipes in MacVIM in OS X
, 1 min read
Building Custom OS X Dashboard Widgets
, 5 min read
How to login via SSH Without a Password
, 2 min read
Delay command execution in X-Chat
, 1 min read
Apache2 Outperforming lighttpd 1.5
, 5 min read
Installing lighttpd on Ubuntu 10.04
, 2 min read
Time Differences between PHP and MySQL
, 1 min read
Read GET URL variables using JavaScript
, 1 min read
PHP cURL cookies not saving on Windows
, 2 min read
Convert ASCII to UTF-8 using VBA
, 1 min read
Web Spidering with PHP
, 4 min read
FL Studio Piano Roll Tutorial
, 2 min read
FL Studio Automations
, 3 min read
FL Studio Interface Overview
, 2 min read
Preloading CSS Hover Images
, 1 min read
Simple AJAX
, 2 min read
CSS Image Button Rollovers
, 3 min read
Database Administration using phpMyAdmin
, 5 min read
Free Notepad++ Web Developers Theme
, 2 min read
Change PHP Timezones
, 7 min read
Changing MySQL Default Character Sets
, 1 min read
MySQL Fulltext Search Ignored Words
, 3 min read
Data Hiding in a Word Document
, 2 min read
Search Engine Friendly Exit Counter
, 2 min read