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 |