Since 2012 I've written 149 articles and 232435 words.

2024-05-27 The accidental journey to TrueNAS Scale
2024-05-13 Dot or Not? A type safety story about file extensions
2024-04-14 Practical responsive image sprites for the web
2024-03-17 Pitfalls of React Query
2024-02-26 You might not need a React animation library: transitions
2024-01-28 The composition king: compound components
2024-01-03 The WebAssembly value proposition is write once, not performance
2023-12-22 The dark side of inlining and monomorphization
2023-09-04 Split Next.js across hosting providers and advocate for direct S3 uploads
2023-08-18 MySQL text ID collation: tread carefully
2023-08-08 Decapitation: a migration from antd to headless story
2023-07-31 Advantages of opaque types over value objects
2023-06-01 Too edgy, a serverless search
2023-05-16 There and back again with zstd zips
2023-04-29 New browser APIs unlock new possibilities
2023-04-08 CycleList: a cyclical activity tracker
2023-03-23 Designing Responsive React Components for 2023
2023-01-31 Wasm compression benchmarks and the cost of missing compression APIs
2022-12-02 Rethinking web workers and edge compute with Wasm
2022-10-19 Cloudflare Tunnel saved my home server when my apartment got a new ISP
2022-10-07 Avoiding allocations in Rust to shrink Wasm modules
2022-09-17 Favoring SQL over Redis for an evergreen leaderboard
2022-09-02 DEFLATE yourself for faster Rust ZIPs
2022-07-27 Avoiding dynamic CSS-in-JS styles in React
2022-07-12 The footgun with Docker Compose shared configurations
2022-05-20 The subjective nature of JS libraries exposing an off the main thread API
2022-03-27 Recommendations when publishing a Wasm library
2022-02-10 Don't freak, but our Rust web server is now Node.js
2022-01-17 Accessing public and private B2 S3 buckets in Rust
2021-12-13 Authoring a SIMD enhanced Wasm library with Rust
2021-11-21 Replacing an unavailable ZFS drive
2021-11-18 A workaround for Rust's lack of structural subtyping
2021-09-17 Reality check for Cloudflare Wasm Workers and Rust
2021-08-23 Simulating the EU4 map in the browser with WebGL
2021-07-24 Git Rebase to Squash Commits to Most Recent Message
2021-07-02 Wasm and Native Node Module Performance Comparison
2021-05-15 Stumbling with WebGL Image Processing
2021-04-29 Cargo Workspace and the Feature Unification Pitfall
2021-02-07 Leveraging Rust to Bundle Node Native Modules and Wasm into an Isomorphic NPM Package
2020-12-29 Writing a Secure Systemd Service with Sandboxing and Dynamic Users
2020-11-09 A Quick Tour of Trade-offs Embedding Data in Rust
2020-11-02 Designing a Decaying Leaderboard with Redis
2020-10-05 Results of Authoring a JS Library with Rust and Wasm
2020-08-20 Migrating a 160k Word Jekyll Blog to Hugo
2020-08-16 Backblaze B2 as a Cheaper Alternative to Github's Git LFS
2020-07-17 My Bet on Rust has been Vindicated
2020-07-13 Reasons to Migrate away from Gatsby
2020-04-04 Opinionated Guide for Web Development with Rust Web Workers
2020-02-19 Parsing Performance Improvement with Tapes and Spatial Locality
2019-07-03 Monitoring Remote Sites with Traefik and Prometheus
2019-05-07 Downsampling Timescale Data with Continuous Aggregations
2019-03-03 SQLite: Dropping an index for a 300x speedup
2019-02-28 Azure Pipelines for Rust Projects
2019-01-27 Guidelines on Benchmarking and Rust
2018-12-15 Quick investment advice for the smart and lazy
2018-10-14 Leaning on Algo to route Docker traffic through Wireguard
2018-09-11 Exploring TimescaleDB as a replacement for Graphite
2018-09-04 Hashing strings bytewise in C#
2018-08-11 IPv6 only networking not viable in 2018
2018-07-24 Satisfying NAS share and backup solution
2018-05-21 Migrating to Actix Web from Rocket for Stability
2018-05-03 Viewing WireGuard Traffic with Tcpdump
2018-04-19 Lessons learned: ZFS, databases, and backups
2018-03-29 Routing Select Docker Containers through Wireguard VPN
2018-02-23 Integrating Kotlin with a Dropwizard App
2018-02-04 Dropwizard 1.3 Upcoming TLS Improvements
2018-01-15 Fighting Instability and Rust
2017-11-21 Replacing Elasticsearch with Rust and SQLite
2017-10-22 Back to the Register: Distilling the Federal Register for All
2017-09-12 WireGuard VPN Walkthrough
2017-08-23 Robust systemd Script to Store Pi-hole Metrics in Graphite
2017-08-14 Building a Home Server
2017-07-24 Investigation into the Inefficiencies of Node.js Http Streams
2017-07-19 Writing a high performance TLS terminating proxy in Rust
2017-06-10 Creating a parallel AMP site with Jekyll
2017-05-22 Introduction to Journald and Structured Logging
2017-04-26 Migrating to the new NET SDK MSBuild Project Files
2017-03-26 The Difficulty of Performance Evaluation of HikariCP in Dropwizard
2017-03-06 First Impressions of the Google Pixel
2017-02-04 The Last Hooray, Bye Windows Phone
2017-01-22 The Cost of TLS in Java and Solutions
2016-12-29 Exporting Open Hardware Data into Graphite
2016-12-27 Monitoring Windows system metrics with Grafana
2016-12-18 Exploring Data: Michigan Traffic Accidents
2016-11-19 Another Year, Another Site Refresh
2016-11-14 Waning F#
2016-11-09 Dropwizard 1.1 and Let's Encrypt with no Downtime
2016-10-22 Dropwizard Multipart Form Quickstart
2016-09-14 Boxcars: an Example Rocket League Replay Parser Using Rust and Nom
2016-09-07 Know Thy Threadpool: A Worked Example with Dropwizard
2016-09-01 Dropwizard 1.0 TLS Checklist
2016-07-16 Fun with Pfarah: a Paradox Clausewitz Parser
2016-06-14 ISO 8601 and Nanosecond Precision Across Languages
2016-06-01 Visualizing Ann Arbor Incidents
2016-05-15 Introduction to IMAP
2016-04-23 Initial Impressions of a Website with Modern Build Tools
2016-03-12 A Java Result Algebraic Data Type Worth Using
2016-02-23 Turning Dropwizard Performance up to Eleven
2016-02-17 Federal Register Data Exploration with R
2016-02-10 Modern Website over HTTP 2 and SSL with Nginx and Let's Encrypt
2015-12-12 Trading Beauty for Performance: F# active patterns vs Nullable
2015-10-20 Most Popular Electron UI Libraries
2015-10-16 Disecting the Postgres Bulk Insert and Binary Format
2015-09-15 XSLT 2.0 Processing in Postgres
2015-08-09 Guide and Explanation for Metrics in Dropwizard
2015-07-14 Processing arbitrary amount of data in Python
2015-04-16 Getting Started with Dropwizard: Testing
2015-04-05 F# and Data go Hand in hand
2015-02-15 Writing a Dropwizard JSON App
2014-12-31 Optimizing Innodb for Bulk Insert
2014-12-17 Announcing EU4 Stats
2014-09-08 Continuous Integration and Delpoyment with .NET/Mono
2014-07-23 C#, Mono, Nuget, Nunit, T4, CI, Oh My!
2014-07-18 C# and Threading: Explicit Synchronization isn't Always Needed
2014-06-08 Await Async in C# and Why Synchrony is Here to Stay
2014-04-25 Deathmark Postmortem: a Game Where Everyone Dies
2014-03-22 Migrating from GoDaddy/IIS/WCF/C#/MySQL to DigitalOcean/Apache/Flask/Python/SQLite
2014-02-07 Computer Game Development at Michigan: Zelda Postmortem
2014-01-17 Computer Game Development at Michigan Week 2: Start of Unity
2014-01-08 Computer Game Development at Michigan Week 1: Introduction
2014-01-05 Linux Virtualization with a Mounted Windows Share on Client Hyper-V
2013-12-31 A New Way In Writing Documents With Markdown and Pandoc
2013-09-26 Software Engineering Interview Questions that Make an Impact
2013-09-22 Distributing and Deploying a Linux Python Application
2013-08-24 Design Dilemma: Configuration Files
2013-07-25 On Résumés
2013-07-06 Design Pattern Dilemma: A Localizable Object
2013-06-16 High Performance Unsafe C# Code is a Lie Redux
2013-06-08 The Two Extremes of a Startup and a Corporation
2013-06-03 The Perfect Blogging Workflow
2013-06-02 Premier of Perl and Stocks
2013-05-30 Chicago Calls
2013-04-14 The Legacy and Opportunity of 1.5 Million Lines of Code
2013-02-22 Designing a REST API: Unix time vs ISO-8601
2013-02-04 The Joys and Woes of a Forever Project
2013-01-04 Adventures with WriteableBitmap and Bit Manipulation
2012-12-30 Create a Simple Session Aware SSL Bottle Login
2012-12-06 A Lesson in Algorithms and Data Structures: the Traveling Salesman
2012-12-02 The Devils that are Unsigned Numbers
2012-11-22 I Did Not Cheat
2012-10-20 Woes of Linux Virtualization on Windows 8
2012-10-09 C# Refactoring and Failure
2012-09-05 C# For Loops and Iterators Uncovered
2012-09-03 NBSoftSolutions Now Runs on Jekyll
2012-09-02 ENGR151++: Google AI Challenge
2012-08-25 High Performance Unsafe C# Code is a Lie
2012-08-22 Optimizing Code and Why We Should All be Language Agnostic
2012-08-22 Windows 8: Lesser of the Evil
2012-08-21 All Beautiful Code Starts Ugly