thomashunter.name
Open in
urlscan Pro
2600:3c01::f03c:91ff:fe58:7ae7
Public Scan
Submitted URL: http://thomashunter.name/
Effective URL: https://thomashunter.name/
Submission: On February 16 via api from US — Scanned from DE
Effective URL: https://thomashunter.name/
Submission: On February 16 via api from US — Scanned from DE
Form analysis
0 forms found in the DOMText Content
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 2021 2020 2017 2014 2013 RECENT PHOTOGRAPHS FEATURED mig: The Universal Database Migration Runner Jan 1, 2023, 6 min read Node.js Modules, Packages, and SemVer Feb 8, 2021, 8 min read Zero-downtime deploys with DigitalOcean, GitHub, and Docker Jan 28, 2021, 15 min read PS2 RPI4 Part I: Restoration Jul 4, 2020, 6 min read Elpizia Jan 26, 2020, 24 min read On Migrating from Wordpress to Static Markdown Nov 9, 2018, 9 min read Why you should avoid ORMs (with examples in Node.js) Oct 31, 2018, 14 min read Redis and Node Part 1: The Basics Jul 11, 2017, 7 min read HTTP API Design Part 1: Requests Jun 23, 2017, 8 min read HTML5 Mobile Apps, Part 1: Development and Debugging Sep 28, 2015, 7 min read EVERYTHING After your first 10,000 Photographs Feb 4, 2024, 7 min read Repairing a Minolta X-370 Light Leak Jan 16, 2024, 6 min read Getting into Photography on a Budget in 2023 Oct 7, 2023, 9 min read PS2 RPI4 Part IV: Conclusion Aug 6, 2023, 5 min read How to file a CCPA complaint against Reddit Jul 1, 2023, 2 min read How to Delete your Reddit Account and All Data under GDPR/CCPA Jun 19, 2023, 6 min read Welcome to your Chat Bot Apr 16, 2023, 11 min read Emulating Windows XP on Linux in 2023 Apr 9, 2023, 3 min read How NOT to Measure Latency by Gil Tene Mar 11, 2023, 1 min read mig: The Universal Database Migration Runner Jan 1, 2023, 6 min read Setting Open Graph Tags without Server Side Rendering May 24, 2022, 11 min read Detecting if a PWA/TWA is Installed Dec 11, 2021, 4 min read Multithreaded JavaScript: Concurrency Beyond the Event Loop Jun 5, 2021 Distributed Systems with Node.js: Humble Books Bundle Jun 1, 2021, 1 min read The Death of a Node.js Process Mar 8, 2021, 7 min read Go v1.15.8 vs Node v14.15.5 Microbenchmark Feb 10, 2020, 1 min read Node.js Modules, Packages, and SemVer Feb 8, 2021, 8 min read Zero-downtime deploys with DigitalOcean, GitHub, and Docker Jan 28, 2021, 15 min read PS2 RPI4 Part III: Underway Jul 11, 2020, 5 min read PS2 RPI4 Part II: Internals Jul 5, 2020, 4 min read PS2 RPI4 Part I: Restoration Jul 4, 2020, 6 min read Distributed Systems with Node.js: Building Enterprise-Ready Backend Services Apr 30, 2020 Elpizia Jan 26, 2020, 24 min read Installing the Node.js Binary Archive on Linux Dec 24, 2019, 1 min read The Apex Consumer Dec 8, 2019, 15 min read Go v1.13.3 vs Node v12.12.0 Microbenchmark Oct 28, 2019, 1 min read Cheap and Portable Writing Device in 2019 Jun 30, 2019, 3 min read Fixing the Massdrop AKG K7XX Squeak May 28, 2019, 1 min read On using Service Workers with Static Content Apr 30, 2019, 9 min read Nine Volt Daisy Chain Apr 17, 2019, 4 min read Why should I use a Reverse Proxy if Node.js is Production-Ready? Mar 28, 2019, 8 min read Cobalt Caliber Mar 6, 2019, 36 min read JavaScript Symbols: But Why? Mar 5, 2019, 8 min read Node.js Task Runners: Are they right for you? Feb 26, 2019, 8 min read Introducing Package Diff Feb 26, 2019, 1 min read Protecting your JavaScript APIs Jan 31, 2019, 7 min read Treating OpenBox like a Tiling WindowManager Jan 27, 2019, 4 min read The Increasing Need for Regulation of the Software Industry Jan 23, 2019, 4 min read Removing gVim Right and Bottom Borders Jan 20, 2019, 2 min read Common API mistakes and how to avoid them Jan 14, 2019, 13 min read On Migrating from Google Analytics Dec 28, 2018, 5 min read Review of the iClever Foldable Bluetooth Keyboard Dec 20, 2018, 2 min read Books I'm Reading to Become a Better Writer Dec 12, 2018, 3 min read Compromised npm Package: event-stream Nov 27, 2018, 1 min read 17 Pounds in 44 Days: My Adventure with Keto Nov 21, 2018, 7 min read On Migrating from Wordpress to Static Markdown Nov 9, 2018, 9 min read The Monster in the Basement Nov 4, 2018, 13 min read Why you should avoid ORMs (with examples in Node.js) Oct 31, 2018, 14 min read Essential Firefox Tweaks Oct 28, 2018, 3 min read JavaScript Object Type Coercion Aug 28, 2018, 4 min read JavaScript Object Property Descriptors, Proxies, and Preventing Extension Aug 16, 2018, 16 min read Advice for Technical Public Speaking: Part 3 Jul 27, 2018, 7 min read Advice for Technical Public Speaking: Part 2 Jul 25, 2018, 6 min read Advice for Technical Public Speaking: Part 1 Jul 23, 2018, 7 min read Go v1.10.3 vs Node v10.6.0 Microbenchmark Jul 7, 2018, 1 min read Recent Concerns about Node.js Security Jun 12, 2018, 1 min read Node.js and Lambda Three Part Series Apr 2, 2018, 1 min read Developing Cobalt Dungeon using Phaser and Cordova Mar 27, 2018, 11 min read Cobalt Dungeon Dev 01: Creating a New Room Mar 15, 2018, 1 min read Cobalt Dungeon for iOS is now available Mar 12, 2018, 1 min read Cobalt Dungeon for Android is now available Mar 6, 2018, 1 min read Cobalt Dungeon Dev 02: Creating a Bitmap Font for Phaser Mar 5, 2018, 1 min read Cobalt Dungeon Dev 03: FL Studio Overview Mar 3, 2018, 1 min read I'm working on a mobile game called Cobalt Dungeon Feb 20, 2018, 2 min read Support me on Patreon Feb 12, 2018, 1 min read Twitter Plays Zork: @DemocraticZork Nov 26, 2017, 1 min read Go v1.9.1 vs Node v8.9.0 Microbenchmark Nov 9, 2017, 2 min read What have I been up to? Late 2017 Edition Sep 28, 2017, 1 min read Is it time to replace REST with RPC? Sep 27, 2017, 8 min read Refactoring a Node.js codebase using Async/Await Sep 3, 2017, 6 min read Random Meetup Attendee Bookmarklet Aug 16, 2017, 1 min read 2017: A Central Europe Odyssey Jul 17, 2017, 27 min read Redis and Node Part 4: Lua Scripting Jul 14, 2017, 5 min read Redis and Node Part 3: Atomicity with MULTI Jul 13, 2017, 5 min read Redis and Node Part 2: Shared State Jul 12, 2017, 5 min read Redis and Node Part 1: The Basics Jul 11, 2017, 7 min read Digital Nomad: Inventory Advice Jul 6, 2017, 7 min read HTTP API Design Part 4: API Standards Jun 27, 2017, 6 min read HTTP API Design Part 3: Bodies Jun 26, 2017, 4 min read HTTP API Design Part 2: Responses Jun 24, 2017, 4 min read HTTP API Design Part 1: Requests Jun 23, 2017, 8 min read Advanced Microservices Jun 19, 2017, 2 min read Linux Mint Disable "Recently Used" Apr 14, 2017, 1 min read Ubuntu 16.04 LTS Xen stuck on "Loading Initial Ramdisk" Apr 5, 2017, 1 min read Online Colorscheme Configurator for i3, i3status, dmenu Feb 8, 2017 A Holistic Approach to Microservices Dec 27, 2016, 1 min read Running a Node.js process on Debian as a Systemd Service Sep 27, 2016, 3 min read My Trip to Japan Jun 26, 2016, 18 min read Enabling Yubikey U2F support in Linux Jun 14, 2016, 1 min read The JavaScript Event Loop Presentation (2016 Edition) Feb 24, 2016, 1 min read Installing Linux Mint on an XPS13 (9350) Jan 31, 2016, 3 min read The only bad thing about ES7 Async/Await Jan 18, 2016, 2 min read Upgrading to the XPS 13 (9350) Jan 1, 2016, 2 min read NextPlayer: A Node.js module for managing player turns Oct 14, 2015, 1 min read HTML5 Mobile Apps, Part 5: Ecosystem Opinions Oct 2, 2015, 6 min read HTML5 Mobile Apps, Part 4: Live Operations Oct 1, 2015, 3 min read HTML5 Mobile Apps, Part 3: Distribution Sep 30, 2015, 6 min read HTML5 Mobile Apps, Part 2: Performance Sep 29, 2015, 4 min read HTML5 Mobile Apps, Part 1: Development and Debugging Sep 28, 2015, 7 min read Strategic Game of Life: Mobile Edition Aug 19, 2015, 3 min read Upgrading Linode II: Xen to KVM Aug 3, 2015, 1 min read The long road to Async/Await in JavaScript Jun 30, 2015, 7 min read Tips for Building Mobile Games in HTML5 Apr 13, 2015, 13 min read Gridloche: Realtime Multiplayer Go-Like with RPG Elements Nov 15, 2014, 1 min read Upgrading Linode Nov 4, 2014, 2 min read Robot Onslaught: Multiplayer twin-stick 2D shooter using PubNub Oct 5, 2014, 1 min read Arpad: An ELO Ranking System for Node.js Aug 25, 2014, 1 min read Consumer Centric API Design Aug 9, 2014, 1 min read Linux Kernel 3.15.3 on Linux Mint 17 (or other Debian-Based Distributions) Jul 3, 2014, 2 min read Running a Node.js process on Debian as an init.d Service Jun 19, 2014, 4 min read What have I been up to? Early 2014 Edition Feb 19, 2014, 3 min read Principles of good RESTful API Design Dec 31, 2013, 16 min read Book Review: Debian 7: System Administration Best Practices Dec 29, 2013, 7 min read JavaScript and Canvas version of Conway's Game of Life Dec 12, 2013, 1 min read Letting PHP know that its connection behind NGINX is over HTTPS Dec 3, 2013, 1 min read See which user accounts hackers try to access on your server the most Dec 2, 2013, 1 min read Tips for assembling the O2 (Objective2) Headphone Amplifier Kit Dec 1, 2013, 3 min read Only Push/Pull Current GIT Branch Nov 1, 2013, 1 min read Remove OpenDNS from Linux Mint Oct 28, 2013, 1 min read Enable Emoji fonts on Debian / Ubuntu / Mint Linux Oct 21, 2013, 1 min read Border Patrol Saga Oct 17, 2013, 5 min read Cheating at Cookie Clicker Sep 5, 2013, 1 min read Recursively download website files using WGET Jul 28, 2013, 1 min read Instant Backbone.js Application Development Jul 27, 2013, 1 min read Book Review: Hands-on Testing with PHPUnit How-to Jul 22, 2013, 2 min read Installing Redis on Debian as a Service Jun 15, 2013, 2 min read Fixing Homebrew Jun 13, 2013, 1 min read SSH into a machine with a dynamic IP Jun 9, 2013, 1 min read Setting up a Security Camera for a Linux Webcam Jun 3, 2013, 1 min read Track IP Address using DD-WRT + CRON + WGET May 16, 2013, 1 min read Safely Parse Complex Objects and Arrays in PHP May 13, 2013, 1 min read WordPress GET Variables with lighttpd May 12, 2013, 3 min read The JavaScript Event Loop [Presentation] Apr 27, 2013, 10 min read How to "Burn" an ISO to a USB drive in OS X Apr 4, 2013, 2 min read Generate OAuth Consumer Key and Shared Secrets using PHP Feb 28, 2013, 2 min read Set opendiff (FileMerge) as your git diff tool on OS X Feb 27, 2013, 1 min read Lansing Startup Weekend February 2013: GeoMonsters Presentation Feb 26, 2013, 1 min read Lansing Startup Weekend Feb 24, 2013, 2 min read SleekMVC, my PHP Framework, gets Routing support Feb 2, 2013, 1 min read Enable PHP Mail on OS X Mountain Lion Jan 27, 2013, 2 min read GeoLocation based Communication with Node.js, Redis Jan 13, 2013, 2 min read What WordPress 4.x Could Be Jan 9, 2013, 6 min read I turned on a light Jan 8, 2013, 2 min read Programmer Religious Wars and the Abstraction Gradient Jan 7, 2013, 2 min read Node App Inspired by Daniel Suarez' Book Daemon Jan 5, 2013, 1 min read Wacom Bamboo Splash Review Dec 29, 2012, 4 min read Subdomains and Google Apps with Gandi and Linode Dec 27, 2012, 4 min read Client-Side Terrain Tile Representation Algorithm Dec 26, 2012, 4 min read A Better Debian SSH Login Message Dec 24, 2012, 2 min read Transitioning from MediaTemple to Linode Dec 23, 2012, 2 min read Install Node.js on Debian 6 Dec 22, 2012, 1 min read Visual Git History Log in Terminal Window Dec 17, 2012, 1 min read Using authbind with Node.js Dec 14, 2012, 1 min read Fun Timing Game in Canvas Dec 11, 2012, 1 min read Respond to JSON or XML requests from a Node.js API Dec 9, 2012, 2 min read Drop Root Privileges in Node.js Dec 4, 2012, 2 min read The Upcoming Parallel Digital Universe Dec 1, 2012, 3 min read Could JavaScript support Parallelism like in Haskell? Nov 22, 2012, 2 min read All Hands Active Board Member Nov 6, 2012, 1 min read Configurable Object to XML Converter for Node.js Oct 25, 2012, 1 min read How Cobalt Calibur uses Canvas to display Sprite-Based Graphics Oct 12, 2012, 7 min read MongoDB Node.js driver collection select doesn't require callback Sep 27, 2012, 1 min read GitHub Connection Timed Out Sep 22, 2012, 1 min read CouchDB and PHP Web Development Sep 22, 2012, 7 min read Node.js Convert JSON to XML, Pluralize Sep 21, 2012, 2 min read Backup External Music Collection using Rsync Sep 1, 2012, 2 min read Fixing ApacheBench on OS X Lion Aug 29, 2012, 2 min read Spaghetti Architecture and the Importance of Starting Over Aug 28, 2012, 4 min read Review of OpenShift Node.js Support Aug 27, 2012, 4 min read Step by Step guide to getting Cobalt Calibur running on OpenShift Aug 22, 2012, 7 min read Raspberry Pi with Tons of Hardware Aug 21, 2012, 2 min read Cobalt Calibur 3 Open Source Aug 16, 2012, 1 min read Copying OpenIndiana Image onto USB in OS X Aug 1, 2012, 3 min read My First Arduino Project Jul 29, 2012, 1 min read Code School Review Jul 23, 2012, 6 min read Series or Parallel Power-Source Switch Jul 15, 2012, 1 min read Extended Pigpen Cipher to Include Numbers Jul 13, 2012, 2 min read Auto Mount External Drives in Debian Jul 2, 2012, 1 min read Per-User Password Hashing Algorithms Jun 29, 2012, 2 min read Recursively Delete Files by Extension Jun 25, 2012, 1 min read Recursively convert OGGs to MP3s Jun 25, 2012, 1 min read Node.js GPS Module Jun 24, 2012, 1 min read A Primer on Web Caching Jun 23, 2012, 6 min read The Future of Augmented Reality Jun 22, 2012, 4 min read PHP + Apache Stack vs Node.js Jun 21, 2012, 8 min read OS X Wireless Control from the CLI Jun 14, 2012, 1 min read Scan for Computers on Local Network with Nmap Jun 13, 2012, 1 min read SSHing into Arch Linux Raspberry Pi Jun 9, 2012, 1 min read Updating Pacman on the Raspberry Pi Jun 8, 2012, 2 min read Linux CLI apps should have a --json flag Jun 6, 2012, 5 min read Gracefully Kill Node.js App from Ctrl+C Jun 4, 2012, 1 min read Move special OS X user folders to external drive Jun 3, 2012, 2 min read Determine Wireless Encryption Type May 30, 2012, 1 min read Express.js Pass-Through Directory May 29, 2012, 1 min read Bad Mount Point Input/Output Error May 29, 2012, 1 min read MacBook Pro with SSD and Hard Drive May 28, 2012, 1 min read Git SSL Errors May 26, 2012, 1 min read NPM SSL Errors May 25, 2012, 3 min read Settling In to a New Mac May 23, 2012, 1 min read Female Voice using eSpeak May 21, 2012, 1 min read Know your Wireless Cards! May 20, 2012, 1 min read Speech Synthesis and Bluetooth with Node.js May 19, 2012, 1 min read Suppressing SSH MOTD Messages May 18, 2012, 1 min read Re-Map Caps Lock key to Esc in OS X May 17, 2012, 2 min read Why Android should switch to Go May 15, 2012, 3 min read NERF Gun Laser Instructions May 14, 2012, 1 min read Node.js Robotics Software Suite May 13, 2012, 2 min read RedBubble Poor Product Quality May 9, 2012, 2 min read Creating Self Executable PHP Scripts May 7, 2012, 2 min read Open Sourcing Facebook App, Squirrelify May 5, 2012, 1 min read Open Sourcing EVE Crawler May 2, 2012, 2 min read Cobalt Calibur: Roadmap May 2, 2012, 2 min read Ignore SSL Errors with NPM Node Package Manager Apr 24, 2012, 1 min read Pitfalls when Renaming your GitHub Account Apr 23, 2012, 3 min read Using .htaccess to Prevent www Subdomain Apr 20, 2012, 1 min read Global gitignore vs repository gitignore Apr 19, 2012, 2 min read Modded Laser NERF Gun Apr 18, 2012, 1 min read Building a Really Simple Node.js Module Apr 16, 2012, 1 min read Redirect all Pages from Old Domain to New Domain Using .htaccess Apr 15, 2012, 1 min read Linux Force Dismount Mar 11, 2012, 1 min read Moving Content to a new Domain and Keeping SEO Feb 15, 2012, 1 min read Hiding Files and Folders in OS X Finder Feb 14, 2012, 1 min read Open Source AJAX Game Engine Feb 13, 2012, 1 min read Why Node.js is awesome: A short history of web applications Feb 9, 2012, 3 min read Tracking Backbone.js "Page Views" with Mixpanel Feb 9, 2012, 1 min read The Shark Fin Conjecture Feb 9, 2012, 1 min read Why the MPAA and RIAA will soon be gone Jan 22, 2012, 4 min read Cobalt Calibur 3.0: Node.js, MongoDB, Redis, Backbone.js Jan 16, 2012, 4 min read How to use javascript event bindings to make callbacks cleaner Dec 29, 2011, 4 min read Xpath Expressions Explained Dec 26, 2011, 2 min read Tech Startup Entrepreneur Books Nov 26, 2011, 3 min read Force or Prevent WWW subdomain with lighttpd Nov 25, 2011, 1 min read How to generate a Self Signed SSL Certificate for lighttpd Nov 23, 2011, 2 min read Tumblr-like Template Syntax PHP Library Nov 20, 2011, 2 min read Really simple SSH proxy (SOCKS5) Sep 26, 2011, 3 min read GIT: Colored Output, Shortcut Commands, Autocompletion, and Bash Prompt Sep 14, 2011, 2 min read Using Swipes in MacVIM in OS X Aug 24, 2011, 1 min read Simple PHP Namespace Friendly Autoloader Class Aug 23, 2011, 1 min read Scheduling a daily Cron task in Debian to check external IP Jul 31, 2011, 2 min read Building Custom OS X Dashboard Widgets Jul 13, 2011, 5 min read How to login via SSH Without a Password Jun 6, 2011, 2 min read Delay command execution in X-Chat Jun 1, 2011, 1 min read Submitting Multi-Dimensional Array Data to PHP Mar 19, 2011, 2 min read lighttpd configuration to redirect subdomains Feb 27, 2011, 1 min read MySQL REPLACE vs INSERT ON DUPLICATE KEY UPDATE Feb 26, 2011, 2 min read Apache2 Outperforming lighttpd 1.5 Feb 8, 2011, 5 min read Installing lighttpd on Ubuntu 10.04 Feb 3, 2011, 2 min read PHP / MySQL Web Application Migration Steps Oct 7, 2010, 8 min read Time Differences between PHP and MySQL Jun 13, 2010, 1 min read Dynamic Form Actions using Different Buttons Apr 25, 2010, 1 min read Read GET URL variables using JavaScript Mar 4, 2010, 1 min read Zend Certified Engineer (ZCE) Study Guide Links Mar 2, 2010, 2 min read Accessing CodeIgniter Session Data using External Scripts Feb 20, 2010, 2 min read PHP cURL cookies not saving on Windows Jan 17, 2010, 2 min read Convert ASCII to UTF-8 using VBA Dec 29, 2009, 1 min read Web Spidering with PHP Nov 26, 2009, 4 min read FL Studio Piano Roll Tutorial Nov 19, 2009, 2 min read FL Studio Comprehensive Mixer Interface Overview Nov 18, 2009, 3 min read Polymorphism, Abstract Classes, and Interfaces in PHP Nov 17, 2009, 2 min read FL Studio Automations Nov 17, 2009, 3 min read FL Studio Interface Overview Nov 16, 2009, 2 min read Introduction to CSS: Selectors and Relationships Explained Nov 15, 2009, 5 min read Preloading CSS Hover Images Nov 14, 2009, 1 min read Simple AJAX Nov 13, 2009, 2 min read Password Encryption, Hashing, Salting Explained Nov 10, 2009, 5 min read Create Windows Vista like buttons using Photoshop Nov 7, 2009, 2 min read Web Image Formats Size and Quality Comparison Nov 6, 2009, 3 min read Creating Seamless Textures using Photoshop Nov 5, 2009, 2 min read Introduction to Photoshop Blending Options Nov 4, 2009, 3 min read CSS Image Button Rollovers Oct 21, 2009, 3 min read CSS Box Model differences in Firefox and Internet Explorer Oct 20, 2009, 2 min read Database Administration using phpMyAdmin Oct 18, 2009, 5 min read Free Notepad++ Web Developers Theme Oct 2, 2009, 2 min read Pagerank and higher search engine rankings explained Sep 28, 2009, 4 min read Change PHP Timezones Sep 19, 2009, 7 min read Setting up VHOSTS using XAMPP/Apache in Windows Sep 5, 2009, 3 min read Changing MySQL Default Character Sets Aug 20, 2009, 1 min read Generating Password Protected ZIP Files using PHP Sep 20, 2008, 1 min read MySQL Fulltext Search Ignored Words Sep 2, 2008, 3 min read Data Hiding in a Word Document Feb 25, 2008, 2 min read PHP Navigation System using Single Entry Point Jul 3, 2006, 5 min read Search Engine Friendly Exit Counter Jul 2, 2006, 2 min read Clean user data using PHP and Regular Expressions Jul 1, 2006, 2 min read THOMAS HUNTER II @TLHUNTER I came here to kick ass, build web applications, and chew bubble gum. And I'm all out of gum. MY BOOKS * Multithreaded JavaScript * Distributed Systems with Node.js * Advanced Microservices * Consumer Centric API Design * Backbone.js Application Development EXTERNAL * github.com/tlhunter * @tlhunter@mastodon.social * npmjs.org/~tlhunter * instagram.com/nucleocide SIDE PROJECTS * Photo Gallery * Journalism * Tech Talks * Map Buddy (Mobile Web App) * mig: Universal Migration Runner * Cobalt Dungeon for Android * Node.js Documentation PDFs * i3, i3status, dmenu Configurator 📰 Subscribe with RSS Copyright 2018 Thomas Hunter II | @tlhunter | thomashunter.name