RSSAmplifier

Blog

Peter Mbanugo - Consultant, Trainers, and Programmer

I'm a consultant for high-performance Node.js/JavaScript apps. You'll find my blogs, courses, and services here.

pmbanugo.meRSS feed ↗83 posts

Latest posts

A Crash Course on Concurrency: Build a Tiny Scheduler from Scratch

Build a tiny concurrency runtime from scratch and discover how schedulers, task switching, yielding, coroutine state, and event loops work under the hood

Control Flow in Odin

Learn how Odin keeps control flow explicit through exhaustive switch statements, value-based error handling, or_return, and block-scoped defer. Discover why visible control flow makes code easier to reason about.

Memory Safety, AddressSanitizer, and Logical Lifetimes in Tina

Learn how Tina combines AddressSanitizer, arena allocation, and logical lifetimes to detect memory safety violations

Why Odin?

A succinct introduction to the Odin programming language for experienced programmers, especially those familiar with Go, Java, and other GC-based languages.

Zero to Hello World in Odin

Write your first Odin program and learn about the structure of an Odin program/project.

Data and Memory Management in Odin

Learn how to work with data, and fearless memory management in Odin

Building an HTTP Server on a Thread-per-Core Framework, without Async/Await

How to build a production-grade HTTP server without async/await or coroutines. Discover how Tina HTTP uses thread-per-core state machines in Odin

The Tokio/Rayon Trap and Why Async/Await Fails Concurrency

Async/await makes concurrency easy to write, but incredibly complex to operate. Read on for why the Tokio/Rayon boundary is failing in production, and how explicit state machines fix it.

Why Queues Don’t Fix Overload (And What To Do Instead)

Why adding Kafka or bigger queues won't save your server from traffic spikes. Learn the physics of backpressure, load shedding, and the latency death spiral.

Practical Introduction to Async Generators in JavaScript

A comprehensive and practical guide to synchronous and asynchronous generators and iterators in JavaScript & TypeScript

Building a Formal Verification Tool from Scratch: Part 3 (Rethinking the Foundation)

We take a step back to rethink the foundation. Replacing dynamic arrays with fixed-size registers, upgrading our hash function, and learning why simple data structures make things easy.

Building a Formal Verification Tool from Scratch: Part 2 (The Virtual Machine)

Hardcoded solvers don't scale. We need an engine that operates purely on logic to verify any system. We build a custom Virtual Machine in Odin, tackling instruction sets (bytecode), tagged unions, and the subtle traps of memory identity.

Building a Formal Verification Tool from Scratch: Part 1 (Die Hard Edition)

What if you could explore every possible timeline of your distributed system to find the bugs you haven't imagined yet? I'm building a TLA model checker from scratch to understand how formal verification works

2025 Wrapup: Articles, Talks, Papers, and Software I Loved

A look back at some of the most impactful articles, talks, research papers, and software tools that shaped my year in 2025.

Building a Lock-Free Single Producer, Single Consumer Queue (FIFO)

Build a complete lock-free Single Producer Single Consumer (SPSC) queue from scratch. Step-by-step implementation in Zig with detailed explanations of every atomic operation and memory ordering choice.

Faster Websites with Client-side Prerendering & Speculation Rules API

Learn how to use client-side prerendering and the Speculation Rules API to improve the performance of your site.

When Threads Share Memory: Understanding Race Conditions and Atomics

Learn why multi-threaded programs break in subtle ways and how atomic operations fix them. A practical guide to race conditions, memory ordering, and Acquire/Release semantics.

On Software Complexity: Why Can't We Make Simple Software?

Exploring the challenges of software complexity and advocating for simplicity in design.

Write Your Own FIFO Queue: An Essential Data Structure for Modern Systems

Learn how to implement a queue data structure from scratch using circular buffers. Understand FIFO principles, constant-time operations, and why this pattern powers everything from audio processing to network packet handling. Code examples in Zig.

The Road Ahead: Why I'm Going All-In on Zig

This is a story about leaving the comfort of web development to tackle hard problems, find a new philosophy, and build software that lasts.

Angular Signals: Building a Reactive Countdown Timer

A comprehensive tutorial for experienced Angular developers to learn Angular Signals and their practical applications.

Node.js Performance: Processing 14GB Files 78% Faster with Buffer Optimization

Learn how to optimize Node.js for processing large files: 14GB of data processed 78% faster using buffer streaming, byte-level parsing, and hash-based lookups. Complete guide with benchmarks, profiling insights, and code examples for handling 1 billion rows efficiently.

Working with Strings in Zig: A Comprehensive Guide

Learn how to work with strings in Zig: slicing, formatting, Unicode handling, memory allocation, and C interoperability. A practical reference for Zig developers.

Building React Apps with Bun: A Modern Development Experience

Learn how to build React applications using Bun's fast runtime and built-in tooling. Create a blog app with TailwindCSS and discover the developer experience.

MCP/Tools Are Not REST API: Here's a Better Design

MCP/tools are sometimes designed like REST APIs. I'll show you how to design better tools for AI agents and models.

Looking for the Best React Data Grid (Table)? It's Probably on This List

A review of the top 5 React data grid libraries with code examples and performance benchmarks.

Build Your First AI Agent in 10 Minutes (or Less)

Learn how to build your first AI agent in TypeScript.

Build a Blog with Angular In Under 30 Minutes, Using Analog

Learn how to build a blog using Angular and Analog. This tutorial will guide you through the process of setting up a Markdown-powered blog using Analog.

What Vibe Coding Actually Looks Like for a Senior Engineer

Vibe coding reality: My 20-hour journey building with AI peer programming. What senior engineers actually experience beyond the 1-hour hype.

Building Full-Stack Angular Applications with Analog

See how to build an Angular application with Analog, enjoying a modern, smooth developer experience.

In the Age of AI, is Code Literacy Your Superpower?

Explore the importance of code literacy in the age of AI and how it can empower individuals to harness Gen AI effectively.

Peer Programming with LLMs, For Senior+ Engineers

This article contains a collection of resources for senior (or staff+) engineers exploring the use of LLM for collaborative programming.

Efficient Cookie Management with the Cookie Store API

Learn how to use the Cookie Store API for efficient cookie management in web applications.

How To Use Libuv In Zig

This guide will show you how to use libuv from your Zig project.

Top React UI Libraries to Use in 2025

Explore the best React UI libraries available. Enhance your development experience and ship quickly to production!

Mastering Advanced JavaScript Set Operations

Explore advanced Set operations in JavaScript. Learn how to leverage these powerful methods for unique collections and data manipulation.

Building Runtime-agnostic Apps/Packages with JavaScript

A guide on how to build applications and packages that work across different JavaScript runtimes.

How to Install Node.js on Windows: A Complete Guide

Learn how to install Node.js on Windows using modern nodejs version managers and the official installer. A step-by-step guide for JavaScript developers.

Node.js Features You Didn't Know About: Part 2

Explore Node.js's experimental features: native TypeScript, SQLite support, and glob file search. Discover the latest advancements!

How To Build CLI Using TypeScript and Bun

This tutorial will teach you how to create a CLI using JavaScript and TypeScript. We'll use Bun, a JavaScript runtime, to build the CLI.

3 Node.js Features You Didn't Know About

Discover new Node.js features: native .env loading, built-in file watching, and faster script execution without third-party tools

How to Install Node.js on Ubuntu and Linux Distros

Learn how to install Node.js on Ubuntu and Linux systems using modern nodejs version managers. A step-by-step guide for JavaScript developers.

How to Automate Kafka Topic Creation/Deletion Using GitHub Actions And JavaScript

Automate Kafka topic management with JavaScript and GitHub Actions for scalable, event-driven DevOps workflows (aka GitOps)

Announcing Buntastic: A Fast, High-Performance Static Site Server (OSS)

Introducing Buntastic, a high-performance static site server built with Bun and Tigris. Learn how it offers blazing-fast performance, global caching, and more.

Docker vs Podman: A Comprehensive Comparison for Modern Containerization

Compare Docker and Podman on features, performance, security, and use cases to choose the best container engine for your needs

How to Install Docker on Windows: A Beginner's Guide

This article will show you how to install Docker on Windows 10 and above.

Hyper-V vs WSL: How To Pick The Right Tool?

This article will compare Hyper-V and WSL on Windows, helping you decide which one to use for your projects.

How To Prerender Pages in Browser For Faster Page Loads

Learn how to improve your website speed using speculation rules api

How to Build Blazing Fast Websites with Any Framework

Learn how to build fast websites using real user data, expert insights, and framework-independent techniques for improved performance and SEO

Mapping Over Promises in JavaScript

Learn how to effectively map over promises in JavaScript. Also how to handle concurrency for them