The Bucket Is the Log: Building an Append-Only Log on Object Storage in Go
Build an append-only log on object storage in Go using immutable segments, a bounded catalog, writer fencing, and replay by LSN or timestamp—without a broker.
Notes and visual explanations about Go, distributed systems, databases, performance, and software engineering.
Build an append-only log on object storage in Go using immutable segments, a bounded catalog, writer fencing, and replay by LSN or timestamp—without a broker.
Learn how Go singleflight prevents cache stampedes, why caller cancellation gets tricky, and how to safely cancel and drain shared work during shutdown.
How an LSM tree gives us the right building blocks, and where object storage changes the design.
How hierarchical timing wheels expire millions of cache entries efficiently in Go without periodic O(n) scans or a timer per key.
An illustrated tour of Go’s runtime scheduler: operating-system foundations, the G-M-P model, work stealing, preemption, and scheduler traces.
How to use small interfaces, structs, and hand-written test doubles to isolate dependencies and write focused unit tests with Go's standard library.
Why averages and medians hide tail latency, how the 99th percentile exposes it, and how to calculate and interpret p99 with examples in Go.
A concise introduction to CSP through processes, synchronous input and output, guarded commands, and the ideas that shaped Go channels.
A visual guide to Go's memory allocator, from virtual memory and TCMalloc to mspan, mcache, mcentral, mheap, arenas, and object allocation.
A practical guide to Go's named, unnamed, and underlying types, with examples of assignability, conversion, type identity, and compatibility.
A source-level tour of Go channels: hchan, sudog, wait queues, buffered storage, blocking sends and receives, select, and goroutine wake-ups.
How CORS preflight requests add latency to cross-origin APIs, why URL-specific preflight caching may not help, and what SPA designers should consider.
Build a minimal token-based single sign-on flow in Node.js, covering redirects, global and local sessions, consumer validation, and single sign-off.
Compare ordinary parameters with object destructuring in Node.js through V8 bytecode, heap usage, garbage collection, and microbenchmarks.
Reimplement JavaScript's call(), apply(), and bind() to understand this binding, variable arguments, return values, constructor behavior, and edge cases.
Build the ideas behind React step by step: reusable components, state, setState, declarative rendering, and efficient DOM updates.
Build a small Express-like framework in Node.js, starting with an HTTP server and GET routes, then adding Router, Route, and Layer abstractions.
How JavaScript's prototype chain works, how constructor prototype properties differ from object [[Prototype]] links, and how inheritance resolves properties.
How Node.js stores and transmits binary data with Buffer, including allocation APIs, memory behavior, performance, and the internal 8 KB slab pool.
Why setTimeout(0) and setImmediate() can run in either order, explained through Node.js event-loop phases, libuv, clock updates, and process timing.
A short introduction to relations, Cartesian products, schemas, attributes, and how those mathematical ideas are represented as SQL tables.
Why Python evaluates default arguments once, how mutable defaults retain state between calls, and how the None sentinel pattern avoids the problem.
An introduction to CPython's object representation through PyObject, PyVarObject, reference counting, type pointers, and variable-sized objects.
Why code inside a Java class can access private fields on another instance of the same class, with examples using mutation and equals().
A comparison of recursive, iterative, paired-multiplication, and prime-decomposition approaches to computing large factorials in Python and Java.