[{"categories":["engineering","deep-dive"],"date":"13 August, 2026","date_day":"13","date_month_year":"Aug '26","reading_time":15,"series":["The Backend Engineer's Playbook"],"subtitle":"Go channels look simple, but they rely on heap-allocated ring buffers and runtime scheduler parks. Learn how the hchan structure, stack-to-stack copies, and lock ordering work to prevent leaks and panics.","tags":["go","concurrency","runtime","memory","architecture"],"title":"How Go Channels Actually Work","url":"/go-channels-deep-dive/"},{"categories":["engineering"],"date":"10 August, 2026","date_day":"10","date_month_year":"Aug '26","reading_time":6,"series":["Building a Game Engine in Pure Go"],"subtitle":"Building structural algorithms to identify rooms procedurally from coordinate maps, propagate sunlight through doorways, parse modular JSON missions, and render positional sound.","tags":["go","systems-programming","game-engine","algorithms","audio"],"title":"Part 6: Simulating a Living Facility: Room Derivation, Sunlight Spillover, and Positional SFX","url":"/modular-missions-floodfill-audio-raylib/"},{"categories":["engineering"],"date":"9 August, 2026","date_day":"09","date_month_year":"Aug '26","reading_time":16,"series":[],"subtitle":"A complete system design of a fault-tolerant distributed job scheduler built for scale. Covers PostgreSQL row locking with SKIP LOCKED, hash ring shard distribution, cron parsing, worker backpressure, and missed job recovery.","tags":["system-design","distributed-systems","go","cron","job-scheduler","postgresql","backend","architecture"],"title":"Designing a Distributed Job Scheduler in Go: Partitioning, Locking, and Backpressure","url":"/designing-a-distributed-job-scheduler/"},{"categories":["engineering"],"date":"9 August, 2026","date_day":"09","date_month_year":"Aug '26","reading_time":4,"series":["Building a Game Engine in Pure Go"],"subtitle":"Building a 2D Raylib rendering pipeline capable of 4-bit cardinal autotiling and multi-font fallback chains for unicode glyphs and emojis.","tags":["go","systems-programming","game-engine","raylib","algorithms"],"title":"Part 5: From Terminal Cells to Sprite Maps: Font Fallbacks and Auto-Tiling","url":"/autotiling-sprites-font-fallbacks-raylib/"},{"categories":["engineering"],"date":"8 August, 2026","date_day":"08","date_month_year":"Aug '26","reading_time":4,"series":["Building a Game Engine in Pure Go"],"subtitle":"Refactoring entity storage from pointer-heavy OOP structs to a Structure of Arrays (SoA) ECS using bitwise masks for entity identity and zero-allocation system loops.","tags":["go","systems-programming","game-engine","ecs"],"title":"Part 4: Refactoring to SoA ECS: Bitmasks and Flat Component Arrays","url":"/structure-of-arrays-ecs-bitmasks-golang/"},{"categories":["engineering"],"date":"1 August, 2026","date_day":"01","date_month_year":"Aug '26","reading_time":14,"series":["Relay","The Backend Engineer's Playbook"],"subtitle":"A deep technical guide to designing a robust, provider-agnostic billing pipeline for usage-based SaaS. Covers subscription state machines, idempotent event processing, automated dunning logic, credit notes, and metered invoice generation with full SQL schemas, Mermaid diagrams, and Go snippets.","tags":["billing","payments","webhooks","saas","system-design","backend","architecture"],"title":"Designing a Usage-Based Billing Pipeline for SaaS","url":"/designing-a-usage-based-billing-pipeline-for-saas/"},{"categories":["engineering","data-platforms"],"date":"31 July, 2026","date_day":"31","date_month_year":"Jul '26","reading_time":31,"series":["Deep Dive","The Backend Engineer's Playbook"],"subtitle":"A practical field guide to Couchbase indexing. Covers primary vs GSI indexes, composite key ordering, index-order sorting, covering and partial indexes, array indexes (including replacing OR and LIKE), IntersectScan and UnionScan avoidance, replication and partitioning, projection selectivity, the ADVISE and INFER tools, scan consistency, and pagination, all with runnable SQL++ (N1QL) examples against the travel-sample dataset.","tags":["couchbase","database","indexing","performance","query-optimization","sql","backend"],"title":"Couchbase Index Best Practices and Query Performance Tuning","url":"/couchbase-index-best-practices-performance-tuning/"},{"categories":["engineering"],"date":"26 July, 2026","date_day":"26","date_month_year":"Jul '26","reading_time":39,"series":["Relay","The Backend Engineer's Playbook"],"subtitle":"A practical, opinionated guide to designing backend APIs. Covers request and response schema, offset and keyset pagination, BFF, server-driven UI, caching, versioning, naming, the new HTTP QUERY verb, WebSocket vs SSE, API security (auth headers, server-to-server auth, webhook receivers), and bulk data load APIs. Built around Relay, the same AI proxy system from the multi-tenant SaaS post, with REST and JSON as the running example and Go code throughout.","tags":["api-design","rest","http","backend","system-design","architecture","security"],"title":"API Design for Backend Systems","url":"/api-design-for-backend-systems/"},{"categories":["engineering","concepts"],"date":"22 July, 2026","date_day":"22","date_month_year":"Jul '26","reading_time":24,"series":["The Backend Engineer's Playbook"],"subtitle":"How to use cache to prevent your database from getting hammered. Understanding cache mechanics, types, strategies, and when each one wins.","tags":["database","performance","caching","systems-thinking","scalability","backend"],"title":"Cache-Driven Development: Saving Your Database From Itself","url":"/cache-driven-development/"},{"categories":["engineering"],"date":"7 July, 2026","date_day":"07","date_month_year":"Jul '26","reading_time":32,"series":[],"subtitle":"A full system design of a production rate limiter. Covers every major algorithm (token bucket, sliding window, leaky bucket, fixed window), their tradeoffs, how they break in a distributed system, how Redis fixes them, and how Stripe, Cloudflare, and API gateways actually deploy this in production.","tags":["system-design","rate-limiting","redis","distributed-systems","backend","architecture"],"title":"Designing a Distributed Rate Limiter with Redis","url":"/designing-a-rate-limiter/"},{"categories":["engineering"],"date":"1 July, 2026","date_day":"01","date_month_year":"Jul '26","reading_time":37,"series":["Relay","The Backend Engineer's Playbook"],"subtitle":"A complete system design of Relay, a multi-tenant AI API gateway. Covers multi-tenant database architecture (silo vs pool vs bridge), API key authentication, provider routing with failover, dual-layer rate limiting, token-based billing, response caching, row-level security, tenant provisioning, and observability. Full Postgres schemas, mermaid diagrams, and Go snippets included.","tags":["system-design","saas","multi-tenancy","architecture","database","backend","ai"],"title":"How Multi-Tenant SaaS Actually Works","url":"/how-multi-tenant-saas-works/"},{"categories":["personal"],"date":"22 June, 2026","date_day":"22","date_month_year":"Jun '26","reading_time":1,"series":[],"subtitle":"Writing documentation, comments, or even blog posts into the void, and doing it anyway.","tags":["personal","writing"],"title":"Nobody Will Read This","url":"/nobody-will-read-this/"},{"categories":["personal"],"date":"22 June, 2026","date_day":"22","date_month_year":"Jun '26","reading_time":2,"series":[],"subtitle":"DRY is a rule we all know. But at 3 AM with a crashing server, the copy-paste starts looking pretty reasonable.","tags":["programming","software-engineering","humor","personal"],"title":"What is DRY? (And Other Things We Say at 3 AM)","url":"/what-is-dry/"},{"categories":["engineering"],"date":"17 June, 2026","date_day":"17","date_month_year":"Jun '26","reading_time":6,"series":["The Backend Engineer's Playbook"],"subtitle":"RAM is up 400%. CPUs cost 15% more. The free hardware lunch is finally over. Welcome back to the 80s, where every byte counts.","tags":["performance","hardware","software-engineering","systems-thinking"],"title":"So, We Are Writing Efficient Software Again","url":"/so-we-are-writing-efficient-software-again/"},{"categories":["engineering"],"date":"16 June, 2026","date_day":"16","date_month_year":"Jun '26","reading_time":11,"series":["The Search Systems Handbook"],"subtitle":"Building a thread-safe inverted index from scratch in Go. Covers sharded mutexes, lock contention profiling, slice pooling to avoid GC pressure, and benchmark comparisons against a naive sync.RWMutex approach under varying read/write ratios.","tags":["go","search","concurrency","performance","systems-thinking","data-structures"],"title":"Constructing Concurrent Inverted Indexes in Go","url":"/constructing-concurrent-inverted-indexes-in-go/"},{"categories":["engineering"],"date":"15 June, 2026","date_day":"15","date_month_year":"Jun '26","reading_time":7,"series":["The Backend Engineer's Playbook"],"subtitle":"Why reordering two struct fields made my loop 30% faster, and what it taught me about how CPUs actually work.","tags":["go","performance","systems-thinking","hardware"],"title":"A Love Letter to the L1 Cache","url":"/love-letter-to-the-l1-cache/"},{"categories":["engineering"],"date":"15 June, 2026","date_day":"15","date_month_year":"Jun '26","reading_time":2,"series":[],"subtitle":"How to connect ADB over Wi-Fi using a one-time USB handshake, even when a VPN or firewall blocks the direct connection.","tags":["android","adb","wifi","troubleshooting"],"title":"Wireless ADB When Your Network Fights You","url":"/til/2026-06-15-wireless-adb-over-wifi/"},{"categories":[],"date":"15 June, 2026","date_day":"15","date_month_year":"Jun '26","reading_time":2,"series":[],"subtitle":"How this site works, what data it collects, and what you can expect.","tags":[],"title":"Privacy \u0026 Terms","url":"/about/privacy/"},{"categories":["engineering"],"date":"14 May, 2026","date_day":"14","date_month_year":"May '26","reading_time":4,"series":["The Backend Engineer's Playbook"],"subtitle":"\"It's just a simple query\". Why the distance between a logical requirement and its infrastructure cost is the most expensive gap in engineering.","tags":["engineering","systems-thinking","architecture","performance"],"title":"Why Explaining Technical Difficulty is Hard","url":"/why-explaining-technical-difficulty-is-hard/"},{"categories":["engineering"],"date":"10 May, 2026","date_day":"10","date_month_year":"May '26","reading_time":6,"series":["The Backend Engineer's Playbook"],"subtitle":"A breakdown of the absolute absurdity of human time, monotonic clocks in Go, and the one true way to store time across PostgreSQL, Couchbase, and mobile clients.","tags":["golang","postgresql","database","architecture"],"title":"Just About Go Time","url":"/just-about-go-time/"},{"categories":["engineering"],"date":"9 May, 2026","date_day":"09","date_month_year":"May '26","reading_time":5,"series":["PostgreSQL"],"subtitle":"A forensic analysis of why abusing JSONB for schemaless architecture leads to write amplification, TOAST bloat, and catastrophic query planner failures.","tags":["postgresql","database-internals","performance","systems-design"],"title":"Building a Poor Document Store inside PostgreSQL","url":"/building-a-poor-document-store-inside-postgresql/"},{"categories":[],"date":"9 May, 2026","date_day":"09","date_month_year":"May '26","reading_time":1,"series":[],"subtitle":"Transform bit patterns using minimal clock cycles.","tags":[],"title":"Bitmask Golf","url":"/explore/games/bitmask/"},{"categories":[],"date":"9 May, 2026","date_day":"09","date_month_year":"May '26","reading_time":1,"series":[],"subtitle":"Isolate subnets using strict placement rules.","tags":[],"title":"Dependency Defuser","url":"/explore/games/defuser/"},{"categories":["Engineering"],"date":"8 May, 2026","date_day":"08","date_month_year":"May '26","reading_time":7,"series":["PostgreSQL"],"subtitle":"Execute transactional SQL migrations in Go using Goose. Covers lock avoidance, rollback safety, version tracking, and embedding migration SQL in Go binaries.","tags":["postgresql","golang","database"],"title":"PostgreSQL Migrations in Go: Production Schema Patterns with Goose","url":"/postgresql-migrations-in-go-production-schema-patterns-with-goose/"},{"categories":["engineering"],"date":"28 April, 2026","date_day":"28","date_month_year":"Apr '26","reading_time":5,"series":["Infrastructure Automation","Projects"],"subtitle":"A technical reference on migrating existing Cloudflare infrastructure to Terraform. Includes an automated bootstrapping script to bypass manual state imports and handle API edge cases.","tags":["cloudflare","terraform","infrastructure-as-code","devops"],"title":"Migrating Cloudflare to Terraform","url":"/cloudflare-management-with-terraform/"},{"categories":[],"date":"27 April, 2026","date_day":"27","date_month_year":"Apr '26","reading_time":4,"series":[],"subtitle":"An archive of sunsetted technologies, derelict architectures, and dead protocols. We learn as much from failure as we do from success.","tags":[],"title":"Internet Graveyard","url":"/internet-graveyard/"},{"categories":["engineering"],"date":"11 April, 2026","date_day":"11","date_month_year":"Apr '26","reading_time":6,"series":["Web Performance Architecture"],"subtitle":"Master critical rendering path optimization. Learn 8 proven strategies to reduce First Contentful Paint, improve Lighthouse scores, and boost Core Web Vitals.","tags":["browser","web-performance","optimization","frontend"],"title":"Critical Rendering Path Optimization: 8 Proven Strategies to Boost Web Performance","url":"/critical-rendering-path-optimization-8-proven-strategies-to-boost-web-performance/"},{"categories":["engineering"],"date":"11 April, 2026","date_day":"11","date_month_year":"Apr '26","reading_time":7,"series":["Web Performance Architecture"],"subtitle":"A technical guide to Web Vitals. Solve LCP, TBT, CLS, and Accessibility issues using automated build-time pipelines and vanilla JS patches.","tags":["hugo","web-performance","lighthouse","optimization","core-web-vitals"],"title":"A Tale of Web Vitals","url":"/a-tale-of-web-vitals/"},{"categories":["engineering","guide"],"date":"10 April, 2026","date_day":"10","date_month_year":"Apr '26","reading_time":4,"series":["Deep Dive"],"subtitle":"Unbounded concurrency is a reliability nightmare. Learn how to protect your system from OOM kills and database exhaustion by implementing Semaphores and Worker Pools in Go.","tags":["go","concurrency","performance","reliability","architecture"],"title":"Why Your Goroutines Need a Speed Limit: Bounded Concurrency in Go","url":"/bounded-concurrency-in-go/"},{"categories":["engineering"],"date":"7 April, 2026","date_day":"07","date_month_year":"Apr '26","reading_time":5,"series":["Building a Game Engine in Pure Go"],"subtitle":"To calculate Field of View in a grid-based game engine, you have to cast rays. The naive approach uses heavy floating-point trigonometry. This post explores Bresenham's Line Algorithm: a 60-year-old technique from the era of hardware plotters that draws perfect lines using only integer addition and comparison.","tags":["algorithms","math","game-engine","systems-programming"],"title":"Part 3: Casting Shadows Without Trigonometry: The Beauty of Integer Math","url":"/casting-shadows-bresenham-integer-math/"},{"categories":["engineering"],"date":"6 April, 2026","date_day":"06","date_month_year":"Apr '26","reading_time":4,"series":["Building a Game Engine in Pure Go"],"subtitle":"If your game logic knows about OpenGL, your architecture has failed. This post dissects the Interface Segregation Principle in Go, demonstrating how the Derelict Facility engine swapped an ANSI terminal renderer for hardware-accelerated Raylib without changing a single line of game simulation code.","tags":["go","systems-programming","game-engine","architecture"],"title":"Part 2: Decoupling the Renderer: Terminal to Raylib in One Interface","url":"/decoupling-game-engine-renderer-raylib/"},{"categories":["engineering"],"date":"5 April, 2026","date_day":"05","date_month_year":"Apr '26","reading_time":5,"series":["Building a Game Engine in Pure Go"],"subtitle":"The textbook answer for a 2D grid in Go is a slice of slices. In a systems-level game engine running at 60 FPS, this innocent data structure becomes a performance landmine. This post explores pointer chasing, CPU cache lines, and how flattening a 2D map into contiguous memory creates massive performance gains through Data-Oriented Design.","tags":["go","systems-programming","game-engine","performance"],"title":"Part 1: Data-Oriented Design in Go: Why [][]Tile Destroyed My Game Engine","url":"/data-oriented-design-go-contiguous-memory/"},{"categories":[],"date":"3 April, 2026","date_day":"03","date_month_year":"Apr '26","reading_time":1,"series":[],"subtitle":"TIL how ClickHouse works with Parquet beyond just reading files.","tags":[],"title":"A Deep Dive into Apache Parquet with ClickHouse","url":"/til/clickhouse-parquet/"},{"categories":["Architecture","Engineering"],"date":"2 April, 2026","date_day":"02","date_month_year":"Apr '26","reading_time":4,"series":["Web Performance Architecture"],"subtitle":"Reviewing the technical evolution of this blog over a decade: from managed platforms and dynamic backends to a custom, zero-dependency Hugo architecture.","tags":["Hugo","Web Development","System Design"],"title":"10 years of lorbic.com architecture","url":"/10-years-of-lorbic.com-architecture/"},{"categories":["Resources"],"date":"2 April, 2026","date_day":"02","date_month_year":"Apr '26","reading_time":5,"series":[],"subtitle":"A living collection of the best engineering blogs, essays, and deep dives I've read and want to remember.","tags":["reading-list"],"title":"My Reading List","url":"/reading-list/"},{"categories":["engineering","infrastructure"],"date":"1 April, 2026","date_day":"01","date_month_year":"Apr '26","reading_time":6,"series":["Deep Dive"],"subtitle":"A pragmatic guide to running k3s inside WSL2 on a Windows gaming PC and accessing it securely from a MacBook. No LAN exposure, no fragile port proxies: just SSH and control-plane tunneling.","tags":["kubernetes","wsl","networking","macos","devops"],"title":"Kubernetes on WSL2 and the macOS tunnel","url":"/kubernetes-on-wsl2-macos-access/"},{"categories":["engineering"],"date":"31 March, 2026","date_day":"31","date_month_year":"Mar '26","reading_time":4,"series":["Deep Dive"],"subtitle":"Ingesting PII is easy; cleaning it up is hard. Here is how to use ClickHouse's data masking policies and regex to redact sensitive logs in flight without killing your query performance.","tags":["clickhouse","database","security","regex"],"title":"ClickHouse data masking with regex","url":"/clickhouse-regex-data-masking/"},{"categories":["engineering","fundamentals"],"date":"31 March, 2026","date_day":"31","date_month_year":"Mar '26","reading_time":5,"series":["Deep Dive","The Backend Engineer's Playbook"],"subtitle":"A practical guide to understanding how CPU caches (L1/L2/L3) impact Go service performance, with benchmarks on modern hardware.","tags":["go","performance","hardware"],"title":"Understanding CPU Caches in Go","url":"/cpu-caches-in-go/"},{"categories":[],"date":"31 March, 2026","date_day":"31","date_month_year":"Mar '26","reading_time":1,"series":[],"subtitle":"This blog teaches almost all about typography.","tags":["web"],"title":"Typography in ten minutes","url":"/til/2026-04-01-typography-in-ten-minutes/"},{"categories":["engineering"],"date":"30 March, 2026","date_day":"30","date_month_year":"Mar '26","reading_time":4,"series":["Deep Dive","PostgreSQL"],"subtitle":"Postgres is the swiss-army knife of databases, but when you hit the 10-million row mark for write-heavy logs, the relational wall becomes real. Here is why we moved our observability stack to ClickHouse.","tags":["clickhouse","postgres","postgresql","database","observability"],"title":"ClickHouse vs. Postgres: When to Move Your Logs Out of a Relational DB","url":"/clickhouse-vs-postgres-log-storage/"},{"categories":["engineering"],"date":"29 March, 2026","date_day":"29","date_month_year":"Mar '26","reading_time":3,"series":["Deep Dive"],"subtitle":"Why is WSL2 so slow? Understand the 9P filesystem boundary, why /mnt/c/ degrades Go build times, and how to fix WSL2 performance bottlenecks on Windows.","tags":["go","wsl","performance","windows"],"title":"WSL2 Is Slow? Fix /mnt/c/ File System Performance \u0026 Go Latency","url":"/wsl2-performance-tax-go-windows/"},{"categories":[],"date":"29 March, 2026","date_day":"29","date_month_year":"Mar '26","reading_time":1,"series":[],"subtitle":"What is a mutex?","tags":["go"],"title":"What is a Mutex?","url":"/til/2026-03-30-what-is-a-mutex/"},{"categories":["engineering","ai"],"date":"28 March, 2026","date_day":"28","date_month_year":"Mar '26","reading_time":6,"series":["The Backend Engineer's Playbook"],"subtitle":"Two years of coding with AI every day: what actually saves time, what creates hidden debt, and why your fundamentals are your only real defense against hallucinated correctness.","tags":["ai","coding","productivity","engineering","systems-thinking"],"title":"AI Coding in 2026: Productivity Multipliers vs. Skill Replacements","url":"/ai-coding-productivity-vs-skill/"},{"categories":["engineering","tooling","productivity"],"date":"15 February, 2026","date_day":"15","date_month_year":"Feb '26","reading_time":13,"series":["The Backend Engineer's Playbook"],"subtitle":"Rebuilding multi-stage Docker images on every code change wastes minutes and cache. How to decouple build dependencies from runtime containers for instant feedback.","tags":["docker","containers","development","python","nodejs","devops","workflow","docker-compose"],"title":"Fast Docker CI: Stop Rebuilding Container Images on Every Commit","url":"/stop-rebuilding-docker-images-runtime-containers/"},{"categories":["engineering","architecture"],"date":"1 February, 2026","date_day":"01","date_month_year":"Feb '26","reading_time":11,"series":["The Backend Engineer's Playbook","Projects"],"subtitle":"Learn how to build production-ready Python background workers that scale under load. Covers worker pools, queue architecture, retry strategies, idempotency, and graceful shutdown.","tags":["python","system design","microservices","backend","distributed systems","reliability"],"title":"Python Background Workers: Architecture, Queues, and Retry Strategies","url":"/building-production-ready-background-workers-in-python/"},{"categories":["engineering","fundamentals"],"date":"24 January, 2026","date_day":"24","date_month_year":"Jan '26","reading_time":10,"series":["Deep Dive","The Backend Engineer's Playbook"],"subtitle":"How CPU word alignment and struct field ordering silently inject memory padding in Go. Learn field reordering to cut heap memory allocations and cache misses.","tags":["go","performance","memory","optimization"],"title":"Go Struct Field Alignment: How Memory Padding Wastes Your RAM","url":"/go-struct-field-alignment/"},{"categories":["engineering"],"date":"15 January, 2026","date_day":"15","date_month_year":"Jan '26","reading_time":4,"series":["projects"],"subtitle":"Aider is my favorite AI coding assistant. It lives in the terminal, commits directly to Git, and actually understands my codebase. But it was missing one thing: the ability to save and restore chat sessions. So I built it. The PR never got merged, but I've been running my fork for months now. Here's the story.","tags":["open-source","python","ai"],"title":"I Added Session Management to Aider","url":"/aider-session-management/"},{"categories":["engineering"],"date":"14 January, 2026","date_day":"14","date_month_year":"Jan '26","reading_time":6,"series":["projects"],"subtitle":"Can ClickHouse replace dedicated vector databases like Pinecone, Weaviate, or Milvus? Explore HNSW indexing, vector similarity search performance, and how to store embeddings with SQL in ClickHouse.","tags":["clickhouse","vector-database","embeddings","database"],"title":"Can ClickHouse Replace Vector Databases? HNSW, Benchmarks \u0026 SQL Setup","url":"/clickhouse-as-a-vector-database/"},{"categories":["engineering","fundamentals"],"date":"12 January, 2026","date_day":"12","date_month_year":"Jan '26","reading_time":6,"series":["Deep Dive","The Backend Engineer's Playbook"],"subtitle":"When thinking about performance, it's easy to focus on Big O notation. But in Go, the difference between the Stack and the Heap is often the difference between a service that scales and one that chokes on GC pauses. This post explores escape analysis, the \"Pointer Myth\", and why passing by value is often 40x faster than passing by pointer.","tags":["go","performance","memory","internals"],"title":"Memory Mechanics In Go - Stack vs Heap","url":"/memory-mechanics-stack-vs-heap-in-go/"},{"categories":["engineering","data-platforms"],"date":"11 January, 2026","date_day":"11","date_month_year":"Jan '26","reading_time":6,"series":["Deep Dive","The Backend Engineer's Playbook"],"subtitle":"\"The database that runs your app cannot be the database that analyzes your app\". It's a hard lesson learned at scale. Early on, Postgres does it all. But as you hit massive scale, your analytics queries start killing your login APIs. This post breaks down the physics of Row-oriented (Couchbase) vs Column-oriented (ClickHouse) databases, and how to bridge them using Change Data Capture (CDC) for a robust, lag-free architecture.","tags":["database","architecture","couchbase","clickhouse","system-design"],"title":"OLTP vs OLAP - Why You Need Two Databases","url":"/oltp-vs-olap-why-you-need-two-databases/"},{"categories":[],"date":"10 January, 2026","date_day":"10","date_month_year":"Jan '26","reading_time":1,"series":[],"subtitle":"Deep dives into software architecture, systems thinking, and the craft of engineering.","tags":[],"title":"The Technical Journal Dispatch","url":"/nl/"},{"categories":[],"date":"10 January, 2026","date_day":"10","date_month_year":"Jan '26","reading_time":1,"series":[],"subtitle":"Thank you for subscribing to the Lorbic newsletter","tags":[],"title":"You're Subscribed!","url":"/nl/subscribed/"},{"categories":["engineering"],"date":"7 January, 2026","date_day":"07","date_month_year":"Jan '26","reading_time":15,"series":["Deep Dive","Projects","The Backend Engineer's Playbook"],"subtitle":"How Go's concurrent tri-color mark-sweep collector works under the hood. Learn pacer triggers, GOGC tuning, and zero-allocation memory pool patterns.","tags":["go","performance","profiling","optimization"],"title":"Go Garbage Collector Mechanics: Pacer, GOGC, and Allocation Latency","url":"/dont-take-out-the-garbage-go-gc-deep-dive/"},{"categories":["engineering","tools"],"date":"28 December, 2025","date_day":"28","date_month_year":"Dec '25","reading_time":9,"series":["Projects"],"subtitle":"CouchLens is a browser-based tool for analyzing Couchbase N1QL query performance. It parses system tables, extracts execution plans, and generates insights to help database administrators find performance bottlenecks without sending data to external servers. This post explains what it does, how to use it, and what features are coming.","tags":["engineering","database","couchbase","tools"],"title":"Introducing CouchLens: A Query Analysis Tool for Couchbase","url":"/couchlens-couchbase-query-analysis-tool/"},{"categories":["engineering","concepts"],"date":"18 November, 2025","date_day":"18","date_month_year":"Nov '25","reading_time":17,"series":["Deep Dive","The Backend Engineer's Playbook"],"subtitle":"Working with Couchbase for the past year and a half has been more than just learning a database. It has been an exercise in system thinking: seeing how indexes, queries, consistency, and durability interact, and how small design choices ripple through performance and reliability.\nThis essay is my personal notebook from that journey. It is technically dense because Couchbase demands precision, but it is also reflective because the lessons extend beyond one database. Understanding how array indexes multiply entries, why compound index order matters, or how query consistency flags change latency is not just about Couchbase, it is about learning to think in terms of systems, trade‑offs, and consequences.","tags":["engineering","database","couchbase","Systems Thinking"],"title":"What Couchbase Taught Me About System Thinking","url":"/what-couchbase-taught-me-about-system-thinking/"},{"categories":["engineering"],"date":"6 November, 2025","date_day":"06","date_month_year":"Nov '25","reading_time":6,"series":["Deep Dive"],"subtitle":"Understanding Private-Public Key Encryption - The Backbone of Modern Security.","tags":["cryptography","cybersecurity","code"],"title":"Understanding Private-Public Key Encryption","url":"/private-public-key-encryption/"},{"categories":["engineering"],"date":"28 October, 2025","date_day":"28","date_month_year":"Oct '25","reading_time":7,"series":[],"subtitle":"Learn how to refactor your code in 5 minutes.","tags":["refactoring","code"],"title":"The 5-Minute Refactor","url":"/the-5-minute-refactor/"},{"categories":["engineering"],"date":"1 October, 2025","date_day":"01","date_month_year":"Oct '25","reading_time":6,"series":["Projects"],"subtitle":"My journey to build my own cloud storage from scratch with nextcloudflare and the lessons I learned along the way","tags":["cloud","nextcloud","cloudflare","self-hosted"],"title":"I Built My Own Google Drive","url":"/i-built-my-own-google-drive/"},{"categories":["productivity"],"date":"23 September, 2025","date_day":"23","date_month_year":"Sep '25","reading_time":5,"series":[],"subtitle":"A Minimal Note-Taking System for Thoughts, Ideas, Questions, and Actions","tags":["note-taking","productivity","thoughts"],"title":"Introducing Quark","url":"/introducing-quark/"},{"categories":[],"date":"13 August, 2025","date_day":"13","date_month_year":"Aug '25","reading_time":5,"series":[],"subtitle":"Practical, unsentimental steps to lock down your passwords, devices, and online identity before someone else owns them.","tags":["cybersecurity","online-security","privacy-protection"],"title":"Why Your Password Habits Will Get You Hacked","url":"/password-security-habits/"},{"categories":[],"date":"12 August, 2025","date_day":"12","date_month_year":"Aug '25","reading_time":7,"series":["Projects"],"subtitle":"Running Outline VPN over HTTPS (port 443) to slip past censorship. Learn how to blend in with HTTPS traffic and what it actually takes to stay invisible.","tags":["vpn","networking","censorship"],"title":"Stealth VPN with Outline over HTTPS","url":"/outline-vpn-over-https/"},{"categories":["engineering"],"date":"17 July, 2025","date_day":"17","date_month_year":"Jul '25","reading_time":7,"series":["Deep Dive"],"subtitle":"A no-fluff, step-by-step guide for software engineers dealing with massive Git merge conflicts during migrations or long-lived branches. Includes real anecdotes and ASCII diagrams.","tags":["git","dx"],"title":"How to Resolve Huge Git Merge Conflicts Without Losing Your Mind","url":"/resolving-huge-merge-conflicts/"},{"categories":[],"date":"16 July, 2025","date_day":"16","date_month_year":"Jul '25","reading_time":3,"series":[],"subtitle":"Milvus' Journey to 35K+ GitHub Stars: The Real Story of Building Milvus from Scratch","tags":[],"title":"Our Journey to 35K+ GitHub Stars: The Real Story of Building Milvus from Scratch (2025)","url":"/til/2025-07-16-milvus-vector-db-story-2025/"},{"categories":[],"date":"10 July, 2025","date_day":"10","date_month_year":"Jul '25","reading_time":1,"series":[],"subtitle":"What Being a Staff Developer Means at Shopify (2023)","tags":[],"title":"What Being a Staff Developer Means at Shopify (2023)","url":"/til/2025-07-10-what-being-a-staff-developer-means-at-shopify-2023/"},{"categories":[],"date":"10 July, 2025","date_day":"10","date_month_year":"Jul '25","reading_time":1,"series":[],"subtitle":"Vector search using clickhouse.","tags":[],"title":"Vector Search with ClickHouse - Part 1","url":"/til/2025-07-10-vector-search-with-clickhouse-part-1/"},{"categories":[],"date":"10 July, 2025","date_day":"10","date_month_year":"Jul '25","reading_time":1,"series":[],"subtitle":"Vector Search with ClickHouse - Part 2","tags":[],"title":"Vector Search with ClickHouse - Part 2","url":"/til/2025-07-10-vector-search-with-clickhouse-part-2-1/"},{"categories":["concepts","engineering"],"date":"7 July, 2025","date_day":"07","date_month_year":"Jul '25","reading_time":7,"series":[],"subtitle":"A deep dive into Facebook's memcache architecture and the hard lessons it teaches about real-world system design, performance, and failure.","tags":["systems thinking","infrastructure","scalability"],"title":"What Facebook's Memcache Taught Me About Systems Thinking","url":"/scaling-memcache-facebook/"},{"categories":["concepts"],"date":"17 April, 2025","date_day":"17","date_month_year":"Apr '25","reading_time":5,"series":[],"subtitle":"Bitmasking is one of those computer science tricks that feels like wizardry, until you realize it's just some clever shifting and binary math. This blog explores the idea, shows how we use it in Go, and why it's surprisingly useful when working with databases like Couchbase.","tags":["go","couchbase","cs"],"title":"Bitmasking In Go","url":"/bitmasking/"},{"categories":[],"date":"13 April, 2025","date_day":"13","date_month_year":"Apr '25","reading_time":4,"series":["Projects"],"subtitle":"When working with Docker, persistent data is often stored in volumes. Unlike container filesystems, volumes survive restarts and recreations. But what if you need to move this data from one machine to another?  Here's a quick and reliable way to back up a Docker volume on one computer and restore it on another.","tags":["docker"],"title":"Docker Volume Backup: The 1-Line Command You Should Be Using (Instead of tar)","url":"/how-to-backup-and-restore-docker-volumes/"},{"categories":["clean code"],"date":"11 March, 2025","date_day":"11","date_month_year":"Mar '25","reading_time":3,"series":[],"subtitle":"Understanding different types of software testing is crucial for delivering a reliable application. Smoke Testing checks basic stability after a new build, while Sanity Testing verifies specific bug fixes or minor updates. Functional Testing ensures that features work as expected based on business requirements. Regression Testing prevents new changes from breaking existing functionality. End-to-End (E2E) Testing simulates real-world user workflows, and Performance Testing checks system speed, load handling capacity, and responsiveness. Implementing these (some or all) test types helps maintain software quality and prevent critical failures.","tags":["engineering"],"title":"Testing Types","url":"/testing-types/"},{"categories":["tools"],"date":"10 March, 2025","date_day":"10","date_month_year":"Mar '25","reading_time":3,"series":[],"subtitle":"10 March, 2025","tags":["macOS"],"title":"Tools I Use on My Mac","url":"/tools-i-use-on-my-mac/"},{"categories":[],"date":"23 February, 2025","date_day":"23","date_month_year":"Feb '25","reading_time":3,"series":["Deep Dive"],"subtitle":"In Go, method receivers determine whether a method acts on a copy of a value or a reference to it. This choice isn't just about performance; it affects correctness and behavior, especially when dealing with synchronization primitives (mutex, wait group, etc), slices, and embedded types.","tags":["go"],"title":"Understanding T and *T method receivers in Go","url":"/method-receivers-in-go/"},{"categories":[],"date":"10 February, 2025","date_day":"10","date_month_year":"Feb '25","reading_time":2,"series":[],"subtitle":"In engineering, progress is key. However, sometimes teams get stuck in endless discussions, over-planning, and constant changes, delaying actual work. This situation is called \"Analysis Paralysis.\" It happens when people focus too much on making perfect decisions instead of moving forward with practical solutions.","tags":["Engineering"],"title":"Analysis Paralysis in Engineering Teams","url":"/analysis-paralysis/"},{"categories":["Clean Code"],"date":"22 September, 2024","date_day":"22","date_month_year":"Sep '24","reading_time":6,"series":[],"subtitle":"When it comes to writing clean, maintainable code, there are a few fundamental rules that can help improve the overall structure and quality of your codebase. As engineers, our goal should be to keep things simple, clear, and scalable. With this in mind, here are some guidelines which prioritize code readability, functional clarity, and the overall maintainability of a project.  These guidelines are based on principles from clean code, SOLID, and functional programming while emphasizing simplicity over unnecessary complexity.","tags":["Go"],"title":"Go Clean Code Guidelines","url":"/go-clean-code-guidelines/"},{"categories":["Clean Code"],"date":"22 September, 2024","date_day":"22","date_month_year":"Sep '24","reading_time":5,"series":[],"subtitle":"SOLID and functional programming principles explained and implemented in Go","tags":["go"],"title":"SOLID and Functional Programming Principles in Go","url":"/solid-and-functional-programming-principles-in-go/"},{"categories":[],"date":"23 February, 2024","date_day":"23","date_month_year":"Feb '24","reading_time":4,"series":[],"subtitle":"In the ever-evolving world of IT, prioritize mastering core concepts over chasing trends. Embrace hands-on learning through projects, stay curious, seek guidance when needed, and remember that problem-solving and persistence are key to success in this dynamic field.","tags":[],"title":"10 Essential Tips for Beginners Starting in IT","url":"/essential-tips-for-beginners-starting-in-it/"},{"categories":[],"date":"2 February, 2024","date_day":"02","date_month_year":"Feb '24","reading_time":3,"series":["Projects"],"subtitle":"In this blog we are going to build NGINX from source code. And we will configure NGINX's settings, paths, and add or remove modules.","tags":["nginx","linux"],"title":"NGINX: Building from Source and Installation on Linux (Updated)","url":"/build-nginx-from-source/"},{"categories":[],"date":"27 January, 2024","date_day":"27","date_month_year":"Jan '24","reading_time":8,"series":["Projects"],"subtitle":"Is Docker filling up your C: drive? Here is how to install or move Docker Desktop and its containers to D: drive on Windows 10/11 using WSL2 flags.","tags":["docker","devops","windows","wsl2","troubleshooting"],"title":"How to Install Docker Desktop on Another Drive in Windows","url":"/docker-custom-installation-location-windows/"},{"categories":["Projects"],"date":"7 January, 2024","date_day":"07","date_month_year":"Jan '24","reading_time":7,"series":[],"subtitle":"Discover the power of Cloudflare Workers and D1 database as we guide you through building a robust URL redirector application on LorbiC.com. Shorten and customize your links effortlessly, optimizing user experience and website performance. Learn step-by-step with prerequisites, database setup, and code implementation. Unlock the potential of Cloudflare's edge computing and revolutionize URL handling for seamless redirections. Elevate your web application's performance with this comprehensive guide at Lorbic.com.","tags":["Cloudflare","Serverless","JavaScript"],"title":"Build a URL redirector application with Cloudflare Workers and Cloudflare D1","url":"/build-a-url-redirector-application-with-cloudflare-workers-and-cloudflare-d1/"},{"categories":["ai"],"date":"2 December, 2023","date_day":"02","date_month_year":"Dec '23","reading_time":3,"series":["Projects"],"subtitle":"Effortlessly set up Llama 2 on your gaming laptop using Docker and Ollama, with a user-friendly interface and local data storage for privacy.","tags":["ai","llm","ml"],"title":"Setting Up Llama 2 with Docker on Your Gaming Laptop Using Ollama","url":"/setting-up-llama-2-with-docker-on-your-gaming-laptop-using-ollama/"},{"categories":["Cloud"],"date":"7 May, 2023","date_day":"07","date_month_year":"May '23","reading_time":4,"series":["Projects"],"subtitle":"In this blog learn how to host a static website on AWS with S3, Cloudfront and Route53. Enable HTTP/2, HTTP/3 and reditect insecure http to secure https. Set the bucket to private.","tags":["AWS","Cloud"],"title":"AWS - Host Static Website With S3 + Cloudfront + Route53  ","url":"/aws-host-static-website-with-s3--cloudfront--route53/"},{"categories":[],"date":"1 April, 2023","date_day":"01","date_month_year":"Apr '23","reading_time":2,"series":["Projects"],"subtitle":"Learn how to enhance user experience by activating the search input field with a simple key press on your website. This quick guide provides a code snippet and easy-to-follow steps.","tags":["snippets","javascript"],"title":"Simplifying Search Activation: A Quick Guide with JavaScript","url":"/simplifying-search-activation-a-quick-guide-with-javascript/"},{"categories":[],"date":"1 April, 2023","date_day":"01","date_month_year":"Apr '23","reading_time":2,"series":["Projects","PostgreSQL"],"subtitle":"Learn the simple and fast process of creating a PostgreSQL container using Docker. This guide provides both the command and a detailed explanation of the container and PostgreSQL database configuration.","tags":["snippets","postgresql"],"title":"Setting Up a PostgreSQL Container: A Quick Guide","url":"/setting-up-a-postgresql-container-a-quick-guide/"},{"categories":["Tutorial"],"date":"12 May, 2021","date_day":"12","date_month_year":"May '21","reading_time":18,"series":[],"subtitle":"Learn basics of Dart programming language with code examples and explainations.","tags":["Dart","Programming"],"title":"Learn Dart Programming","url":"/learn-dart-programming/"},{"categories":["Tutorial"],"date":"12 May, 2021","date_day":"12","date_month_year":"May '21","reading_time":2,"series":[],"subtitle":"12 May, 2021","tags":["C","C++","Programming"],"title":"Types of Pointers in C/C++","url":"/types-of-pointers-in-c/c-/"},{"categories":["Tutorial"],"date":"4 May, 2021","date_day":"04","date_month_year":"May '21","reading_time":3,"series":[],"subtitle":"4 May, 2021","tags":["C++"],"title":"Avoid Memory Leaks In C++","url":"/avoid-memory-leaks-in-c-/"},{"categories":["Tutorial"],"date":"4 May, 2021","date_day":"04","date_month_year":"May '21","reading_time":6,"series":[],"subtitle":"4 May, 2021","tags":["Linux","Programming","Bash"],"title":"Operators in Bash Shell Programming","url":"/operators-in-bash-shell-programming/"},{"categories":["Guide"],"date":"4 May, 2021","date_day":"04","date_month_year":"May '21","reading_time":8,"series":[],"subtitle":"4 May, 2021","tags":["Linux","Programming","Bash"],"title":"Learn Complete Linux Bash Scripting in One Article","url":"/learn-complete-linux-bash-scripting-in-one-article/"},{"categories":["Tutorial"],"date":"4 May, 2021","date_day":"04","date_month_year":"May '21","reading_time":2,"series":["Projects"],"subtitle":"4 May, 2021","tags":["Windows 10","WSL"],"title":"Access Wsl Filesystem From Windows 10 File Explorer","url":"/access-wsl-filesystem-from-windows-10-file-explorer/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"Connect with Vikash Patel, Senior Software Engineer. Links to my technical blog, Today I Learned (TIL), game engine series, and socials.","tags":[],"title":"Links","url":"/links/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to acme","url":"/r/acme/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to df","url":"/r/df/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to dfgh","url":"/r/dfgh/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to gh","url":"/r/gh/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to github","url":"/r/github/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to hireme","url":"/r/hireme/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to li","url":"/r/li/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to linkedin","url":"/r/linkedin/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to newsletter","url":"/r/newsletter/"},{"categories":[],"date":"1 January, 0001","date_day":"01","date_month_year":"Jan '01","reading_time":0,"series":[],"subtitle":"1 January, 0001","tags":[],"title":"Redirect to raft","url":"/r/raft/"}]