Thomas Hunter II

Welcome to my personal blog! I'm an international speaker, a published author, and a software engineer specializing in Node.js. I post pretty regularly on Mastodon as @tlhunter@mastodon.social, and a lot of my open source work is available on GitHub at github.com/tlhunter. I also dabble in photography.

My Books

Recent Photos

Featured Posts

mig: The Universal Database Migration Runner
, 6 min read
Node.js Modules, Packages, and SemVer
, 8 min read
Zero-downtime deploys with DigitalOcean, GitHub, and Docker
, 15 min read
PS2 RPI4 Part I: Restoration
, 6 min read
πŸ“” 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
HTML5 Mobile Apps, Part 1: Development and Debugging
, 7 min read

Timeline

The Ultimate Fujifilm X-E1 Camera Guide
, 13 min read
πŸ“Ί Map Buddy Product Retrospective
, 1 min read
A Cheap and Pocketable Camera in 2024
, 7 min read
After your first 10,000 Photographs
, 7 min read
Repairing a Minolta X-370 Light Leak
, 6 min read
PS2 RPI4 Part IV: Conclusion
, 5 min read
Welcome to your Chat Bot
, 11 min read
Emulating Windows XP on Linux in 2023
, 3 min read
πŸ“Ί How NOT to Measure Latency by Gil Tene
, 1 min read
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
PS2 RPI4 Part I: 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
HTML5 Mobile Apps, Part 3: Distribution
, 6 min read
HTML5 Mobile Apps, Part 2: Performance
, 4 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