| 2025-10-04 |
The serde optimization gauntlet: Wasm and arenas |
| 2025-09-18 |
Life after wasm-pack: an opinionated deconstruction |
| 2025-09-10 |
Top-level await is a footgun: The Wasm worker edition |
| 2025-06-12 |
Are SIMD gather instructions underrated? |
| 2025-05-26 |
The DuckDB and Arrow rabbit hole: data modeling adventures |
| 2025-04-20 |
A Bevy app entirely off the main thread |
| 2025-03-27 |
Wasm's curious word size and the SWAR advantage |
| 2025-02-02 |
Default musl allocator considered harmful (to performance) |
| 2025-01-22 |
The right tool for the job: positioned IO for Zip archives |
| 2024-11-12 |
Keeping up with the fronted Joneses: streaming server side rendering |
| 2024-11-06 |
Cloudflare's forbidden Steam |
| 2024-10-07 |
The hidden nuance of the JavaScript File API |
| 2024-08-17 |
SQL reduction: ask for forgiveness |
| 2024-08-10 |
Next.js on Cloudflare: a gem with rough edges |
| 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 |