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