<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>HarrisonSec — Long-form writing on agent runtimes, distributed systems, and security</title><link>https://harrisonsec.com/</link><description>Recent content on HarrisonSec — Long-form writing on agent runtimes, distributed systems, and security</description><generator>Hugo</generator><language>en-ca</language><lastBuildDate>Thu, 18 Jun 2026 08:00:00 +0000</lastBuildDate><atom:link href="https://harrisonsec.com/index.xml" rel="self" type="application/rss+xml"/><item><title>QuantumVault</title><link>https://harrisonsec.com/projects/quantumvault/</link><pubDate>Thu, 01 May 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/projects/quantumvault/</guid><description>&lt;h1 id="quantumvault-a-bootloader-level-demo-of-cold-storage-control"&gt;QuantumVault: A Bootloader-Level Demo of Cold Storage Control&lt;/h1&gt;
&lt;h2 id="1-project-motivation-and-personal-backstory"&gt;1. Project Motivation and Personal Backstory&lt;/h2&gt;
&lt;p&gt;QuantumVault isn&amp;rsquo;t the result of a corporate spec or a VC pitch deck. It started with something far simpler — a university course and a personal regret.&lt;/p&gt;
&lt;p&gt;During an x86 assembly course at the University of the Fraser Valley (UFV), taught by Professor Talia Q, I was reintroduced to low-level system design. That meant working with BIOS interrupts, 16-bit memory segmentation, and even boot sector handoffs — things that most developers today will never touch.&lt;/p&gt;</description></item><item><title>StegoSafe</title><link>https://harrisonsec.com/projects/distributed-key-storage/</link><pubDate>Thu, 08 May 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/projects/distributed-key-storage/</guid><description>&lt;h1 id="stegosafe-securing-your-bitcoin-keys-using-advanced-steganography"&gt;StegoSafe: Securing Your Bitcoin Keys Using Advanced Steganography&lt;/h1&gt;
&lt;h2 id="executive-summary"&gt;Executive Summary&lt;/h2&gt;
&lt;p&gt;StegoSafe represents a breakthrough in digital asset security, combining ancient steganographic principles with cutting-edge cryptography to create an innovative solution for protecting sensitive data - particularly cryptocurrency private keys. Unlike conventional security systems that rely on passwords, hardware devices, or centralized services, StegoSafe embeds encrypted fragments of private keys into ordinary image files, making them invisible to attackers while providing robust recovery mechanisms through distributed redundancy.&lt;/p&gt;</description></item><item><title>Secured VLAN</title><link>https://harrisonsec.com/projects/secured-vlan/</link><pubDate>Fri, 16 May 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/projects/secured-vlan/</guid><description>&lt;h1 id="secured-vlan-enterprise-grade-network-segmentation--security"&gt;Secured VLAN: Enterprise-Grade Network Segmentation &amp;amp; Security&lt;/h1&gt;
&lt;h2 id="1-project-overview--core-objectives"&gt;1. Project Overview &amp;amp; Core Objectives&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Secured VLAN&lt;/strong&gt; is a comprehensive blueprint for building a secure, scalable, and auditable enterprise network. This project demonstrates how to implement robust network segmentation, enforce least-privilege access, and centralize security controls using VLANs, ACLs, and firewalls. Designed for real-world deployment, it addresses challenges such as blurred internal-external boundaries, remote access, and evolving security threats.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Objectives:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Strict departmental isolation with VLANs&lt;/li&gt;
&lt;li&gt;Enforced access policies using ACLs and firewalls&lt;/li&gt;
&lt;li&gt;Centralized logging for compliance and future AI-driven analysis&lt;/li&gt;
&lt;li&gt;High availability and resilience across all network layers&lt;/li&gt;
&lt;li&gt;Scalable, modular design for future expansion&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;























&lt;picture&gt;
 &lt;source srcset="https://harrisonsec.com/images/secured-vlan-topology-small.webp" type="image/webp" media="(max-width: 600px)"&gt;&lt;source srcset="https://harrisonsec.com/images/secured-vlan-topology.webp" type="image/webp" media="(max-width: 600px)"&gt;&lt;source srcset="https://harrisonsec.com/images/secured-vlan-topology-small.webp" type="image/.webp..webp" media="(max-width: 600px)"&gt;&lt;source srcset="https://harrisonsec.com/images/secured-vlan-topology.webp" type="image/webp" media="(min-width: 601px)"&gt;
 &lt;source srcset="https://harrisonsec.com/images/secured-vlan-topology.webp" type="image/.webp..webp" media="(min-width: 601px)"&gt;
 &lt;img src="https://harrisonsec.com/images/secured-vlan-topology.webp" alt="Enterprise Network Topology Diagram" loading="eager" decoding="async" &gt;
&lt;/picture&gt;
&lt;p&gt;&lt;em&gt;Figure 1: Example of a three-tier enterprise network topology with VLAN segmentation and DMZ.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>I Tested Higgsfield's Minecraft 'Prompt-to-Build.' It Generates Shapes, Not Scenes.</title><link>https://harrisonsec.com/blog/i-tested-higgsfield-minecraft-prompt-to-build/</link><pubDate>Thu, 18 Jun 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/i-tested-higgsfield-minecraft-prompt-to-build/</guid><description>&lt;p&gt;Higgsfield shipped a Minecraft &amp;ldquo;prompt-to-build&amp;rdquo; feature: a mod that drops a &amp;ldquo;Supercomputer&amp;rdquo; block into your world, takes a free-text prompt, and generates a structure in-world a minute later. I spent one session putting real building prompts through it to see what it actually does, not what the landing page says it does. Eight prompts, fixed screenshots, an in-world walkthrough, and a scoring rubric.&lt;/p&gt;
&lt;p&gt;The short version: it behaves like a &lt;strong&gt;single-cohesive-3D-form generator with strong canonical priors&lt;/strong&gt;, not an architecture or scene engine.&lt;/p&gt;</description></item><item><title>Agent Architecture Is a Compute Allocation Problem: The Advisor Strategy, Cost-Curve Frame Recursed</title><link>https://harrisonsec.com/blog/agent-architecture-compute-allocation-advisor-strategy/</link><pubDate>Mon, 15 Jun 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/agent-architecture-compute-allocation-advisor-strategy/</guid><description>&lt;p&gt;In April 2026, Anthropic published a blog post called &lt;em&gt;&amp;ldquo;The advisor strategy: Give agents an intelligence boost&amp;rdquo;&lt;/em&gt;, naming a pattern they had been A/B-testing in production: a cheaper model runs the agent loop end-to-end, an expensive model is consulted only when the cheap one hits a decision it can&amp;rsquo;t solve. They reported concrete numbers — Haiku + Opus advisor on BrowseComp at 41.2% (Haiku alone: 19.7%) at 15% of the cost of running Sonnet through the whole task.&lt;/p&gt;</description></item><item><title>Agent Retrieval Above the Crossover: A First-Principles Read of CodeGraph</title><link>https://harrisonsec.com/blog/codegraph-architecture-first-principles-llm-retrieval/</link><pubDate>Mon, 08 Jun 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/codegraph-architecture-first-principles-llm-retrieval/</guid><description>&lt;p&gt;The prior post in this series, &lt;em&gt;&lt;a href="https://harrisonsec.com/blog/agent-retrieval-cost-curve-claude-code-grep-vs-rag/"&gt;Agent Retrieval Is a Cost Curve Problem&lt;/a&gt;&lt;/em&gt;, argued that a viable LLM-symbol-graph would need to satisfy six specific conditions — and that no existing tool had hit all six. The post went live on 2026-05-25; seven days earlier, &lt;a href="https://github.com/colbymchenry/codegraph"&gt;CodeGraph&lt;/a&gt; had hit GitHub trending with exactly those six properties satisfied.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the easy version of the update: framework predicted it, someone shipped it, here&amp;rsquo;s the existence proof. The companion piece (&lt;em&gt;&lt;a href="https://harrisonsec.com/blog/i-tested-codegraph-on-hono-benchmark/"&gt;I Tested CodeGraph on Hono. The Tool-Call Savings Reproduce — the Cost Savings Don&amp;rsquo;t.&lt;/a&gt;&lt;/em&gt;) handles the empirical half — 40 verified-connected runs, a decision matrix, the install-or-not call. Short version of that post: the tool-call savings reproduce on an independent repo (−55%), the &lt;strong&gt;cost&lt;/strong&gt; savings from the vendor benchmark don&amp;rsquo;t (+7% at Hono&amp;rsquo;s size). Fewer steps, not fewer dollars, until your repo is big enough.&lt;/p&gt;</description></item><item><title>I Tested CodeGraph on Hono. The Tool-Call Savings Reproduce — the Cost Savings Don't.</title><link>https://harrisonsec.com/blog/i-tested-codegraph-on-hono-benchmark/</link><pubDate>Mon, 01 Jun 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/i-tested-codegraph-on-hono-benchmark/</guid><description>&lt;p&gt;Two weeks ago CodeGraph hit GitHub trending — tree-sitter + SQLite/FTS5 + MCP for Claude Code, 19k+ stars in a week. The team published a benchmark on 7 repos showing &lt;strong&gt;35% cheaper, 57% fewer tokens, 46% faster, 71% fewer tool calls&lt;/strong&gt; vs. baseline.&lt;/p&gt;
&lt;p&gt;Those are big numbers. They&amp;rsquo;re also numbers from a benchmark designed by the team that built the tool, on repos they chose. Designer bias is the #1 risk in any retrieval benchmark — when you pick the test repos and write the ground truth, you&amp;rsquo;ll consciously or unconsciously favor your own tool&amp;rsquo;s strengths.&lt;/p&gt;</description></item><item><title>Agent Memory Is a Cache Coherence Problem</title><link>https://harrisonsec.com/blog/agent-memory-is-a-cache-coherence-problem/</link><pubDate>Thu, 28 May 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/agent-memory-is-a-cache-coherence-problem/</guid><description>&lt;p&gt;This post is one half of a pair. The other half — &lt;a href="https://harrisonsec.com/blog/agent-retrieval-cost-curve-claude-code-grep-vs-rag/"&gt;&lt;em&gt;Agent Retrieval Is a Cost Curve Problem&lt;/em&gt;&lt;/a&gt; — argues that Claude Code&amp;rsquo;s within-session code retrieval avoids RAG because the cost curve says it should. This piece argues something parallel about &lt;em&gt;cross-session memory&lt;/em&gt;: the lossy auto-capture systems being marketed as &amp;ldquo;AI memory&amp;rdquo; are, in classical distributed-systems vocabulary, &lt;strong&gt;caches&lt;/strong&gt;. They inherit every problem caches have always had, and the hype around them is mostly arguing for one side of a write-back vs write-through trade as if the other side didn&amp;rsquo;t exist.&lt;/p&gt;</description></item><item><title>Agent Retrieval Is a Cost Curve Problem: Why Claude Code Doesn't Use RAG</title><link>https://harrisonsec.com/blog/agent-retrieval-cost-curve-claude-code-grep-vs-rag/</link><pubDate>Mon, 25 May 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/agent-retrieval-cost-curve-claude-code-grep-vs-rag/</guid><description>&lt;p&gt;There&amp;rsquo;s a popular interview question making the rounds: &lt;em&gt;&amp;ldquo;Why doesn&amp;rsquo;t Claude Code use RAG to retrieve code? Why grep?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The popular answer goes: chunking breaks code structure, vectors approximate when code demands exact, indexes go stale, cold-start is slow, retrieval is a black box. All five are real. None of them are the reason.&lt;/p&gt;
&lt;p&gt;They&amp;rsquo;re symptoms. The reason is older than RAG, older than LLMs, older than the term &lt;em&gt;retrieval&lt;/em&gt;. It&amp;rsquo;s a &lt;strong&gt;cost curve&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Channels Aren't Message Passing — How Parked Goroutines OOM-Killed a Pod</title><link>https://harrisonsec.com/blog/channels-arent-message-passing/</link><pubDate>Tue, 12 May 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/channels-arent-message-passing/</guid><description>&lt;p&gt;It&amp;rsquo;s 3am. The Kafka consumer pod that&amp;rsquo;s been running cleanly for six weeks gets OOM-killed. Kubernetes restarts it. Five minutes later: OOM-killed again. Restart. OOM-killed a third time. By the fourth restart I&amp;rsquo;ve shelved the dashboard and started reading &lt;code&gt;runtime/chan.go&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The code that died fit on one line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;events&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; make(&lt;span style="color:#66d9ef"&gt;chan&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Event&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I want to tell you that line is the bug. It isn&amp;rsquo;t. An unbuffered channel will happily backpressure a &lt;em&gt;single&lt;/em&gt; producer — every send rendezvous with a receiver, the producer cannot run ahead. The channel did exactly what it was designed to do.&lt;/p&gt;</description></item><item><title>How I Improved an AI Agent from 40% to 60% — With A/B Test Data</title><link>https://harrisonsec.com/blog/ai-agent-40-to-60-percent-with-ab-data/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/ai-agent-40-to-60-percent-with-ab-data/</guid><description>&lt;h2 id="the-setup"&gt;The Setup&lt;/h2&gt;
&lt;p&gt;I was optimizing an AI agent for a production system — a creator agent that handles user requests like &amp;ldquo;make this character fiercer&amp;rdquo; or &amp;ldquo;rename this entity.&amp;rdquo; The agent runs a 5-layer pipeline: Perceive → Cognate → Decide → Act → Express, with real LLM calls at each step.&lt;/p&gt;
&lt;p&gt;Quality was bad. Not &amp;ldquo;it doesn&amp;rsquo;t work&amp;rdquo; bad — &amp;ldquo;it works 40% of the time&amp;rdquo; bad. The remaining 60% were wrong entity targeting, infinite reasoning loops, and silent failures.&lt;/p&gt;</description></item><item><title>Don't Pick One AI. Run Three Against Each Other.</title><link>https://harrisonsec.com/blog/dont-pick-one-ai-run-three/</link><pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/dont-pick-one-ai-run-three/</guid><description>&lt;h2 id="the-problem-nobody-talks-about"&gt;The Problem Nobody Talks About&lt;/h2&gt;
&lt;p&gt;AI can write code, generate content, analyze data, design systems, and manage projects. It&amp;rsquo;s getting better every month. The natural question: what&amp;rsquo;s left for humans?&lt;/p&gt;
&lt;p&gt;The wrong answer: &amp;ldquo;AI will replace us.&amp;rdquo;
The other wrong answer: &amp;ldquo;AI is just a tool, nothing changes.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The right answer is uncomfortable: stop picking the best AI. Run multiple AIs in competition, and become the judge.&lt;/p&gt;
&lt;h2 id="the-tournament-model"&gt;The Tournament Model&lt;/h2&gt;
&lt;p&gt;Three rules, learned the hard way:&lt;/p&gt;</description></item><item><title>Node Turns Waiting Into Events. Go Moves Context Switching Into User Space.</title><link>https://harrisonsec.com/blog/node-go-concurrency-event-loop-vs-user-space-scheduling/</link><pubDate>Mon, 27 Apr 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/node-go-concurrency-event-loop-vs-user-space-scheduling/</guid><description>&lt;p&gt;Most discussions of TypeScript/Node vs Go concurrency stop at the surface: &lt;em&gt;Node is async, Go is threaded.&lt;/em&gt; That framing isn&amp;rsquo;t wrong — it just isn&amp;rsquo;t deep enough to be useful when you&amp;rsquo;re picking a runtime, debugging a tail-latency problem, or explaining to your team why one of the services keeps falling over under CPU load.&lt;/p&gt;
&lt;p&gt;The real difference is not async vs threaded. It&amp;rsquo;s a question about where, in the system, suspended work lives — and what shape it takes when it&amp;rsquo;s resumed.&lt;/p&gt;</description></item><item><title>Why Your AI Agent Keeps Failing — The 90% Problem</title><link>https://harrisonsec.com/videos/why-your-ai-agent-keeps-failing/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/why-your-ai-agent-keeps-failing/</guid><description>&lt;p&gt;The model is roughly 10% of what makes an AI agent work in production. The other 90% — context engineering, memory, validation, tool-call reliability — is where every team&amp;rsquo;s agents quietly stop working at scale.&lt;/p&gt;
&lt;p&gt;This video walks through the four-layer failure model and where each kind of bug actually lives.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/ai-agent-90-percent-problem/"&gt;Blog post: The AI Agent 90% Problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/videos/the-90-percent-ai-agent-problem-podcast/"&gt;Companion long-form: The 90% AI Agent Problem (18 min)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The 90% AI Agent Problem</title><link>https://harrisonsec.com/podcast-ai/the-90-percent-ai-agent-problem/</link><pubDate>Sat, 18 Apr 2026 18:00:00 +0000</pubDate><guid>https://harrisonsec.com/podcast-ai/the-90-percent-ai-agent-problem/</guid><description>&lt;h2 id="episode-summary"&gt;Episode Summary&lt;/h2&gt;
&lt;p&gt;Building an AI agent that works is easy. Building one that keeps working is where most teams fail.&lt;/p&gt;
&lt;p&gt;This episode breaks down the hidden 90% of agent engineering: context management, memory, tool execution, state recovery, and loop closure. I use Claude Code as the reference point, compare it with more fragile agent designs, and show how production quality often comes from code around the model, not from model changes themselves.&lt;/p&gt;</description></item><item><title>The 90% AI Agent Problem (Podcast Episode)</title><link>https://harrisonsec.com/videos/the-90-percent-ai-agent-problem-podcast/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/the-90-percent-ai-agent-problem-podcast/</guid><description>&lt;p&gt;Long-form podcast version of the 90% Problem thesis. Goes deeper than the 7-minute video on each of the four layers: context, memory, validation, tool-call reliability.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re scoping AI agent reliability work, this is the layered mental model the readiness review uses.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/ai-agent-90-percent-problem/"&gt;Blog post: The AI Agent 90% Problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/videos/why-your-ai-agent-keeps-failing/"&gt;Short video: Why Your AI Agent Keeps Failing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The 90% Problem: Why Most AI Agents Are Still Broken</title><link>https://harrisonsec.com/blog/ai-agent-90-percent-problem/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/ai-agent-90-percent-problem/</guid><description>&lt;p&gt;&lt;img src="https://harrisonsec.com/images/blog/90-percent/slide_00.jpg" alt="The 90% Problem"&gt;&lt;/p&gt;
&lt;h2 id="your-agent-works-great-until-it-doesnt"&gt;Your Agent Works Great. Until It Doesn&amp;rsquo;t.&lt;/h2&gt;
&lt;p&gt;You built an AI agent over the weekend. It calls tools, remembers context, follows instructions. You demo it to your team. Everyone&amp;rsquo;s impressed.&lt;/p&gt;
&lt;p&gt;Monday morning, a user types &amp;ldquo;rename Ember to Infernia.&amp;rdquo; Your agent loops 15 times, burns through your API budget, and returns a response that doesn&amp;rsquo;t contain the word &amp;ldquo;Infernia.&amp;rdquo; A rename. One entity. One operation.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been there. I ran an eval suite on a production agent — 5 test cases, 5 runs each. Pass rate: &lt;strong&gt;40%.&lt;/strong&gt; Not on hard tasks. On things like &amp;ldquo;update the right character out of six&amp;rdquo; and &amp;ldquo;rename one entity.&amp;rdquo; The model was GPT-4 class. Plenty capable. The problem was everything &lt;em&gt;around&lt;/em&gt; the model.&lt;/p&gt;</description></item><item><title>Claude Code + Codex Plugin: Two AI Brains, One Terminal</title><link>https://harrisonsec.com/blog/claude-code-codex-plugin-two-brains/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/claude-code-codex-plugin-two-brains/</guid><description>&lt;p&gt;You&amp;rsquo;re debugging a gnarly race condition. Claude Code has been going at it for 10 minutes — reading files, forming theories, running tests. Then it hits a wall. Same hypothesis, same failed fix, third attempt.&lt;/p&gt;
&lt;p&gt;What if you could call in a second brain — a completely different model with fresh eyes — without leaving your terminal?&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s what the &lt;strong&gt;Codex plugin for Claude Code&lt;/strong&gt; does. It puts OpenAI&amp;rsquo;s Codex (powered by GPT-5.4) inside your Claude Code session as a callable rescue agent. Two models. Two reasoning styles. One shared codebase.&lt;/p&gt;</description></item><item><title>Why Claude Code's Agent Loop Is 1,421 Lines</title><link>https://harrisonsec.com/videos/claude-code-deep-dive-query-loop/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/claude-code-deep-dive-query-loop/</guid><description>&lt;p&gt;Every AI coding agent runs the same core pattern: send context to an LLM, get back text and tool calls, execute tools, feed results back, repeat. &lt;strong&gt;LLM talks, program walks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Claude Code&amp;rsquo;s implementation lives in &lt;code&gt;query.ts&lt;/code&gt; — a 1,729-line async generator where the &lt;code&gt;while(true)&lt;/code&gt; loop spans from line 307 to line 1728. That&amp;rsquo;s 1,421 lines of production state machine logic handling context compression, streaming tool execution, error recovery, and token budget management for millions of users.&lt;/p&gt;</description></item><item><title>Claude Code Deep Dive Part 4: Why It Uses Markdown Files Instead of Vector DBs</title><link>https://harrisonsec.com/blog/claude-code-memory-first-principles-tradeoffs/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/claude-code-memory-first-principles-tradeoffs/</guid><description>&lt;p&gt;&lt;em&gt;This is Part 4 of our Claude Code Architecture Deep Dive series. &lt;a href="https://harrisonsec.com/blog/claude-code-source-leaked-hidden-features/"&gt;Part 1: 5 Hidden Features&lt;/a&gt; | &lt;a href="https://harrisonsec.com/blog/claude-code-deep-dive-query-loop/"&gt;Part 2: The 1,421-Line While Loop&lt;/a&gt; | &lt;a href="https://harrisonsec.com/blog/claude-code-context-engineering-compression-pipeline/"&gt;Part 3: Context Engineering — 5-Level Compression Pipeline&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This article replaces and deepens our earlier analysis, &lt;a href="https://harrisonsec.com/blog/claude-code-memory-simpler-than-you-think/"&gt;Claude Code&amp;rsquo;s Memory Is Simpler Than You Think&lt;/a&gt;. The original focused on limitations. This one focuses on &lt;strong&gt;why&lt;/strong&gt; — the first-principles tradeoffs behind every design choice.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="the-core-principle-only-record-what-cannot-be-derived"&gt;The Core Principle: Only Record What Cannot Be Derived&lt;/h2&gt;
&lt;p&gt;This single constraint governs every decision in Claude Code&amp;rsquo;s memory system:&lt;/p&gt;</description></item><item><title>How Claude Code Compresses Context — The 5-Level Pipeline</title><link>https://harrisonsec.com/blog/claude-code-context-engineering-compression-pipeline/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/claude-code-context-engineering-compression-pipeline/</guid><description>&lt;p&gt;&lt;em&gt;This is Part 3 of our Claude Code Architecture Deep Dive series. &lt;a href="https://harrisonsec.com/blog/claude-code-source-leaked-hidden-features/"&gt;Part 1: 5 Hidden Features&lt;/a&gt; | &lt;a href="https://harrisonsec.com/blog/claude-code-deep-dive-query-loop/"&gt;Part 2: The 1,421-Line While Loop&lt;/a&gt; | &lt;a href="https://harrisonsec.com/blog/claude-code-memory-first-principles-tradeoffs/"&gt;Part 4: Memory Tradeoffs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="why-context-engineering-is-the-real-moat"&gt;Why Context Engineering Is the Real Moat&lt;/h2&gt;
&lt;p&gt;Every AI agent has the same fundamental constraint: a fixed-size context window. Claude&amp;rsquo;s is now up to 1M tokens. That sounds massive — until you realize a real coding session can easily generate multiples of that. Dozens of file reads, hundreds of tool calls, thousands of lines of output.&lt;/p&gt;</description></item><item><title>Claude Code Deep Dive Part 2: The 1,421-Line While Loop That Runs Everything</title><link>https://harrisonsec.com/blog/claude-code-deep-dive-query-loop/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/claude-code-deep-dive-query-loop/</guid><description>&lt;p&gt;&lt;em&gt;This is Part 2 of our Claude Code Architecture Deep Dive series. &lt;a href="https://harrisonsec.com/blog/claude-code-source-leaked-hidden-features/"&gt;Part 1: 5 Hidden Features&lt;/a&gt; | &lt;a href="https://harrisonsec.com/blog/claude-code-context-engineering-compression-pipeline/"&gt;Part 3: Context Engineering&lt;/a&gt; | &lt;a href="https://harrisonsec.com/blog/claude-code-memory-first-principles-tradeoffs/"&gt;Part 4: Memory Tradeoffs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;style&gt;
.responsive-video {
 position: relative;
 padding-bottom: 56.25%; 
 height: 0;
 overflow: hidden;
}

.responsive-video .youtube {
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
 background: #000 no-repeat center center;
 background-size: cover;
 cursor: pointer;
}

.responsive-video .youtube img {
 width: 100%;
 height: 100%;
 object-fit: cover;
}

.responsive-video .youtube .play-button {
 position: absolute;
 top: 50%;
 left: 50%;
 width: 80px;
 height: 80px;
 background: url('https://img.icons8.com/ios-filled/100/000000/play-button-circled.png') no-repeat center center;
 background-size: cover;
 transform: translate(-50%, -50%);
}

.responsive-video iframe {
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
}
&lt;/style&gt;

&lt;div class="responsive-video"&gt;
 &lt;div class="youtube" data-id="JreMNgpKkk0" style="background-image: url('https://img.youtube.com/vi/JreMNgpKkk0/hqdefault.jpg');"&gt;
 &lt;div class="play-button"&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;div class="video-description"&gt;
 &lt;h2&gt;Why Claude Code&amp;#39;s Agent Loop Is 1,421 Lines&lt;/h2&gt;
 &lt;p&gt;&lt;/p&gt;</description></item><item><title>Observability and Billing for AI API Calls: A T-Shaped Architecture</title><link>https://harrisonsec.com/blog/observability-billing-t-architecture-ai-api-calls/</link><pubDate>Wed, 01 Apr 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/observability-billing-t-architecture-ai-api-calls/</guid><description>&lt;p&gt;Adding AI API calls to an existing backend is where most teams&amp;rsquo; observability and billing instincts break. The calls look similar to any other RPC — send a JSON request, receive a JSON response. The difference is what happens to the meter. An ordinary RPC costs you deterministic compute: a few milliseconds of CPU, a few KB of network. An LLM API call costs you between $0.0001 and $1.50 depending on which model, which provider, how long the prompt was, how long the completion went, and whether the provider&amp;rsquo;s prompt cache kicked in. Same endpoint, same code path, two orders of magnitude of price variance per call.&lt;/p&gt;</description></item><item><title>Claude Code MEMORY.md Spec: The 4 Frontmatter Types Decoded (user / feedback / project / reference)</title><link>https://harrisonsec.com/blog/claude-code-memory-simpler-than-you-think/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/claude-code-memory-simpler-than-you-think/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Updated:&lt;/strong&gt; This analysis has been superseded by &lt;a href="https://harrisonsec.com/blog/claude-code-memory-first-principles-tradeoffs/"&gt;Part 4: Why It Uses Markdown Files Instead of Vector DBs&lt;/a&gt; — a deeper first-principles tradeoff analysis. The original article below focused on limitations; Part 4 focuses on &lt;em&gt;why&lt;/em&gt; those design choices were made.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="the-hype-vs-the-source-code"&gt;The Hype vs. The Source Code&lt;/h2&gt;
&lt;p&gt;After Claude Code&amp;rsquo;s &lt;a href="https://harrisonsec.com/blog/claude-code-source-leaked-hidden-features/"&gt;source leak&lt;/a&gt;, one of the most talked-about discoveries was &lt;strong&gt;Kairos&lt;/strong&gt; — a &amp;ldquo;permanent memory&amp;rdquo; system that consolidates your notes while you sleep. The AI community described it as a breakthrough in AI memory.&lt;/p&gt;</description></item><item><title>Claude Code Source Leaked: Kairos, Undercover Mode, Ultraplan — 5 Hidden Features (510K Lines)</title><link>https://harrisonsec.com/blog/claude-code-source-leaked-hidden-features/</link><pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/claude-code-source-leaked-hidden-features/</guid><description>&lt;p&gt;&lt;em&gt;This is Part 1 of our Claude Code Architecture Deep Dive series. &lt;a href="https://harrisonsec.com/blog/claude-code-deep-dive-query-loop/"&gt;Part 2: The 1,421-Line While Loop&lt;/a&gt; | &lt;a href="https://harrisonsec.com/blog/claude-code-context-engineering-compression-pipeline/"&gt;Part 3: Context Engineering&lt;/a&gt; | &lt;a href="https://harrisonsec.com/blog/claude-code-memory-first-principles-tradeoffs/"&gt;Part 4: Memory Tradeoffs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="what-happened"&gt;What Happened&lt;/h2&gt;
&lt;p&gt;Anthropic shipped Claude Code v2.1.88 to npm with a 60MB source map still attached. That single file contained 1,906 source files and 510,000 lines of fully readable TypeScript. No minification. No obfuscation. Just the raw codebase, sitting in a public registry for anyone to download.&lt;/p&gt;</description></item><item><title>The AI Stack Explained — Extended Podcast (22 min)</title><link>https://harrisonsec.com/videos/ai-stack-explained-extended-podcast/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/ai-stack-explained-extended-podcast/</guid><description>&lt;p&gt;Same first-principles framework as the 15-minute video — LLM talks, program walks — but with deeper exploration of each layer and the seams between them.&lt;/p&gt;
&lt;p&gt;For listeners who want the audio-first format.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/videos/ai-stack-explained/"&gt;Original 15-min video: The AI Stack Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/videos/complete-ai-architecture-deep-dive/"&gt;Even longer deep dive: The Complete AI Architecture (48 min)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/ai-stack-explained-llm-talks-program-walks/"&gt;Blog post: LLM talks, program walks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The Complete AI Architecture Deep Dive — From LLM to Autonomous Agent (48 min)</title><link>https://harrisonsec.com/videos/complete-ai-architecture-deep-dive/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/complete-ai-architecture-deep-dive/</guid><description>&lt;p&gt;The longest cut of the AI Stack material. Where the 15-minute video gives you the framework and the 22-minute podcast gives you the talking-points walkthrough, this version goes layer-by-layer through every concept — from how tokens stream out of the LLM to how a multi-agent orchestrator decides who acts next.&lt;/p&gt;
&lt;p&gt;For viewers who want the full mental model in one sitting.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/videos/ai-stack-explained/"&gt;15-min original: The AI Stack Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/videos/ai-stack-explained-extended-podcast/"&gt;22-min podcast: The AI Stack Explained — Extended&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/ai-stack-explained-llm-talks-program-walks/"&gt;Blog post: LLM talks, program walks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The Complete AI Architecture Deep Dive: From LLM to Autonomous Agent (48 min)</title><link>https://harrisonsec.com/podcast-ai/llm-token-agent-complete-deep-dive/</link><pubDate>Sat, 28 Mar 2026 09:00:00 +0000</pubDate><guid>https://harrisonsec.com/podcast-ai/llm-token-agent-complete-deep-dive/</guid><description>&lt;h2 id="episode-summary"&gt;Episode Summary&lt;/h2&gt;
&lt;p&gt;This is the extended version of Episode 1. Same first-principles framework — LLM talks, program walks — but with deeper exploration of each layer, more examples, and discussion of real-world implications.&lt;/p&gt;
&lt;p&gt;If Episode 1 is the executive summary, this is the full technical report.&lt;/p&gt;
&lt;h2 id="whats-different-from-episode-1"&gt;What&amp;rsquo;s Different From Episode 1&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Deeper exploration of tokenization and why it matters for costs&lt;/li&gt;
&lt;li&gt;More examples of Function Calling in production systems&lt;/li&gt;
&lt;li&gt;Detailed walkthrough of MCP server architecture&lt;/li&gt;
&lt;li&gt;Real-world agent implementations (Claude Code, Cursor, Copilot)&lt;/li&gt;
&lt;li&gt;Extended discussion on progressive disclosure and token economics&lt;/li&gt;
&lt;li&gt;Edge cases and failure modes at each layer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/giNERYV-X7k"&gt;Watch the video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/ai-stack-explained-llm-talks-program-walks/"&gt;Blog post with diagrams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/llm-talks-program-walks"&gt;GitHub demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Consistency in Distributed Systems: Scenarios, Trade-offs, and What Actually Works</title><link>https://harrisonsec.com/blog/consistency-scenarios-and-approaches-production/</link><pubDate>Sat, 28 Mar 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/consistency-scenarios-and-approaches-production/</guid><description>&lt;p&gt;There&amp;rsquo;s an impulse, when someone first learns about consistency models in distributed systems, to want to classify the taxonomy into neat drawers. Strong here. Eventual there. Linearizable above it. Read-your-writes below. Study the diagram, pass the interview.&lt;/p&gt;
&lt;p&gt;That taxonomy is real, but it&amp;rsquo;s not useful the way people think. Production systems don&amp;rsquo;t pick a consistency model and run with it. They pick a different model per feature, often per &lt;em&gt;type of operation&lt;/em&gt; within a feature, and spend most of their engineering effort on the gaps between what the model provides and what users actually expect. The taxonomy is the menu. The interesting question is which dish each scenario needs.&lt;/p&gt;</description></item><item><title>The AI Stack Explained: LLM Talks, Program Walks</title><link>https://harrisonsec.com/blog/ai-stack-explained-llm-talks-program-walks/</link><pubDate>Sat, 28 Mar 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/ai-stack-explained-llm-talks-program-walks/</guid><description>&lt;div class="video-primary"&gt;
 &lt;div class="responsive-video"&gt;
 &lt;div class="youtube" data-id="giNERYV-X7k" style="background-image: url('https://img.youtube.com/vi/giNERYV-X7k/hqdefault.jpg');"&gt;
 &lt;div class="play-button"&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 
 &lt;div class="video-description"&gt;
 &lt;h2&gt;LLM, Token, Agent — They&amp;#39;re All the Same Thing. (AI Stack Explained)&lt;/h2&gt;
 &lt;p&gt;Watch the full 15-minute video walkthrough with animations.&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;



&lt;style&gt;
.mobile-video { display: none; }
.desktop-video { display: block; }
@media only screen and (max-width: 768px) {
 .mobile-video { display: block; }
 .desktop-video { display: none; }
}

.responsive-video {
 position: relative;
 padding-bottom: 56.25%; 
 height: 0;
 overflow: hidden;
 margin-bottom: 20px;
}

.responsive-video .youtube {
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
 background: #000 no-repeat center center;
 background-size: cover;
 cursor: pointer;
}

.responsive-video .youtube .play-button {
 position: absolute;
 top: 50%;
 left: 50%;
 width: 80px;
 height: 80px;
 background: url('https://img.icons8.com/ios-filled/100/000000/play-button-circled.png') no-repeat center center;
 background-size: cover;
 transform: translate(-50%, -50%);
}

.responsive-video iframe {
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
}
&lt;/style&gt;

&lt;script&gt;
document.addEventListener("DOMContentLoaded", function() {
 var youtube = document.querySelectorAll('.youtube');

 for (var i = 0; i &lt; youtube.length; i++) {
 youtube[i].addEventListener('click', function() {
 var iframe = document.createElement('iframe');
 iframe.setAttribute('src', 'https://www.youtube.com/embed/' + this.dataset.id + '?autoplay=1');
 iframe.setAttribute('frameborder', '0');
 iframe.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture');
 iframe.setAttribute('allowfullscreen', '');
 this.innerHTML = '';
 this.appendChild(iframe);
 });
 }
});
&lt;/script&gt; 

&lt;p&gt;LLM. Token. Context. Prompt. Function Calling. MCP. Agent. Skill.&lt;/p&gt;</description></item><item><title>The AI Stack Explained: LLM, Token, Context, Function Calling, MCP, Agent, Skill — They're All the Same Thing</title><link>https://harrisonsec.com/podcast-ai/llm-token-agent-same-thing/</link><pubDate>Sat, 28 Mar 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/podcast-ai/llm-token-agent-same-thing/</guid><description>&lt;h2 id="episode-summary"&gt;Episode Summary&lt;/h2&gt;
&lt;p&gt;LLM. Token. Context. Prompt. Function Calling. MCP. Agent. Skill — 8 concepts that confuse every engineer, until you realize they&amp;rsquo;re all the same thing.&lt;/p&gt;
&lt;p&gt;An LLM can only output text. It can&amp;rsquo;t browse the web, call APIs, or take any action. The program around it does everything else. &lt;strong&gt;LLM talks, program walks.&lt;/strong&gt; That loop is how the entire AI world runs.&lt;/p&gt;
&lt;h2 id="what-we-cover"&gt;What We Cover&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LLM&lt;/strong&gt; — A word prediction machine. No thinking, no understanding.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context&lt;/strong&gt; — A genius with no memory. The program stitches history every time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prompt&lt;/strong&gt; — User Prompt + System Prompt. Just what you say to the LLM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function Calling&lt;/strong&gt; — The LLM outputs JSON text. The program executes it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP&lt;/strong&gt; — USB-C for AI tools. Build once, run everywhere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent&lt;/strong&gt; — The talks-and-walks loop on repeat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill&lt;/strong&gt; — Pre-written rules with progressive disclosure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Two Questions&lt;/strong&gt; — The buzzword shield that makes any concept transparent.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/giNERYV-X7k"&gt;Watch the video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/ai-stack-explained-llm-talks-program-walks/"&gt;Blog post with diagrams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/llm-talks-program-walks"&gt;GitHub demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The AI Stack Explained: LLM Talks, Program Walks</title><link>https://harrisonsec.com/videos/ai-stack-explained/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/ai-stack-explained/</guid><description>&lt;p&gt;LLM. Token. Context. Prompt. Function Calling. MCP. Agent. Skill — 8 concepts, 1 pattern.&lt;/p&gt;
&lt;p&gt;An LLM can only output text. It can&amp;rsquo;t browse the web, call APIs, or take any action. The program around it does everything else. &lt;strong&gt;LLM talks, program walks.&lt;/strong&gt; That loop is how the entire AI world runs.&lt;/p&gt;
&lt;p&gt;This video peels back every layer of the AI stack from the bottom up, building a mental model that makes any new buzzword transparent.&lt;/p&gt;</description></item><item><title>gRPC Interceptors in Production: Design Patterns That Survive Real Load</title><link>https://harrisonsec.com/blog/grpc-interceptors-design-patterns-production/</link><pubDate>Tue, 24 Mar 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/grpc-interceptors-design-patterns-production/</guid><description>&lt;p&gt;gRPC interceptors are the middleware pattern, specialized for gRPC. If you&amp;rsquo;ve written HTTP middleware before, the shape is familiar — a function that wraps a call, can observe or modify the request, pass to the next handler, then observe or modify the response. The difference: gRPC&amp;rsquo;s type system makes the flavors (unary, server-stream, client-stream, bidi) explicit, and chain ordering matters more than most people realize.&lt;/p&gt;
&lt;p&gt;Most online examples show a single toy interceptor. Production systems stack five to ten of them per service. Getting the composition right — ordering, concern separation, testability — is half of running a gRPC-based microservice well.&lt;/p&gt;</description></item><item><title>Go Generics, One Year In: Which Promises Held, Which Didn't</title><link>https://harrisonsec.com/blog/go-generics-one-year-in-production/</link><pubDate>Wed, 18 Mar 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/go-generics-one-year-in-production/</guid><description>&lt;p&gt;Go 1.18 shipped generics in March 2022. The two years before that were dominated by hopeful blog posts (&amp;ldquo;finally, a real type system!&amp;rdquo;) and the two years after by the predictable backlash (&amp;ldquo;why did we even bother, Go was simpler&amp;rdquo;). I&amp;rsquo;ve written production Go before and after. The honest answer is somewhere in the middle and closer to &amp;ldquo;useful for a narrower set of problems than we expected.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;This is a look back from someone who has shipped generic code in anger and reviewed a lot more of it. What held up. What didn&amp;rsquo;t. What habits to adopt and which to avoid.&lt;/p&gt;</description></item><item><title>Go Profiling in Anger: pprof, Escape Analysis, and Inlining Without Magic</title><link>https://harrisonsec.com/blog/go-profiling-pprof-escape-analysis-inlining/</link><pubDate>Thu, 12 Mar 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/go-profiling-pprof-escape-analysis-inlining/</guid><description>&lt;p&gt;Go&amp;rsquo;s performance culture has a ritual quality. &amp;ldquo;Use sync.Pool.&amp;rdquo; &amp;ldquo;Avoid interface boxing.&amp;rdquo; &amp;ldquo;Preallocate slices.&amp;rdquo; Copy-pasted from blog posts and applied without measurement. Sometimes helpful. Often hollow.&lt;/p&gt;
&lt;p&gt;The honest answer is that Go performance work is mostly &lt;strong&gt;just profiling&lt;/strong&gt;. Good profiling tells you what&amp;rsquo;s actually slow. Bad profiling — or no profiling — leaves you guessing. The toolchain that Go ships with is genuinely excellent; more engineers should use it, and fewer should follow checklist optimizations they haven&amp;rsquo;t measured.&lt;/p&gt;</description></item><item><title>sync.Pool in Go: When It Actually Helps, and When It Quietly Hurts</title><link>https://harrisonsec.com/blog/go-sync-pool-buffer-reuse-when-it-helps/</link><pubDate>Thu, 05 Mar 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/go-sync-pool-buffer-reuse-when-it-helps/</guid><description>&lt;p&gt;&lt;code&gt;sync.Pool&lt;/code&gt; is one of those Go features that shows up prominently in &amp;ldquo;how to write fast Go&amp;rdquo; blog posts and then gets applied to everything. The result is a codebase sprinkled with pools that don&amp;rsquo;t help and sometimes hurt. Most Go code I review does not need &lt;code&gt;sync.Pool&lt;/code&gt;. The code that does need it often uses it wrong.&lt;/p&gt;
&lt;p&gt;This is a working engineer&amp;rsquo;s take on when pooling actually helps, when it&amp;rsquo;s wasted effort, and the specific traps it creates.&lt;/p&gt;</description></item><item><title>Why Failing Fast Triggers Cascading Failures in Distributed Systems</title><link>https://harrisonsec.com/podcast/fail-fast-bounded-resilience/</link><pubDate>Wed, 04 Mar 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/podcast/fail-fast-bounded-resilience/</guid><description>&lt;h2 id="episode-summary"&gt;Episode Summary&lt;/h2&gt;
&lt;p&gt;Fail fast is widely accepted as a best practice in software engineering. But in distributed systems, blindly failing fast during infrastructure transitions — like Redis Sentinel failover, NATS leader election, or Kafka partition rebalancing — can turn a 12-second self-healing event into a 12-minute outage.&lt;/p&gt;
&lt;p&gt;In this episode, we break down why this happens and walk through a concrete architectural pattern called the Failure Boundary Model that solves it.&lt;/p&gt;</description></item><item><title>Why Your "Fail-Fast" Strategy is Killing Your Distributed System (and How to Fix It)</title><link>https://harrisonsec.com/blog/fail-fast-bounded-resilience-distributed-systems/</link><pubDate>Wed, 04 Mar 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/fail-fast-bounded-resilience-distributed-systems/</guid><description>&lt;p&gt;It&amp;rsquo;s 2 AM. PagerDuty fires. Redis master is down. Your application, trained to fail fast, dutifully fails — every single request, all at once. By the time Sentinel promotes a new master 12 seconds later, you&amp;rsquo;ve already generated 40,000 errors and three escalation calls. The system recovered on its own. Your application didn&amp;rsquo;t let it.&lt;/p&gt;
&lt;p&gt;This is the story of how &amp;ldquo;good engineering&amp;rdquo; can make a 12-second infrastructure event into a 12-minute outage — and how to design boundaries that prevent it.&lt;/p&gt;</description></item><item><title>RPC vs NATS: It's Not About Sync vs Async — It's About Who Owns Completion</title><link>https://harrisonsec.com/blog/rpc-vs-nats-who-owns-completion/</link><pubDate>Sat, 28 Feb 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/rpc-vs-nats-who-owns-completion/</guid><description>&lt;p&gt;A team I worked with once migrated an order-placement path from gRPC to NATS because &amp;ldquo;it&amp;rsquo;s decoupled and faster.&amp;rdquo; The old flow was simple: the web service called &lt;code&gt;PlaceOrder&lt;/code&gt; via gRPC, got back an order ID, rendered success to the user. The new flow: web service publishes &lt;code&gt;order.place&lt;/code&gt; to NATS, an order-service consumes it and processes asynchronously.&lt;/p&gt;
&lt;p&gt;Within three weeks they had three kinds of incidents on rotation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Duplicate orders&lt;/strong&gt; — retry on the publisher side meant the same order was placed twice when the first publish actually succeeded but the ack was slow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lost orders&lt;/strong&gt; — consumer crashed mid-process; no ack meant NATS redelivered, but the consumer had already partially committed state, so redelivery was rejected by a dedup check. The order just&amp;hellip; disappeared from the user&amp;rsquo;s perspective.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dark-failure support tickets&lt;/strong&gt; — users reported &amp;ldquo;I clicked buy and nothing happened.&amp;rdquo; From the publisher side, everything looked fine. From the consumer side, processing time had drifted from 50 ms to 45 seconds because a downstream DB had a slow query, and the web team had no telemetry on the consumer side.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The retro landed on a single sentence: &lt;em&gt;we thought we were changing the transport; we actually changed who owned the completion of the work&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>NATS vs Kafka vs MQTT: Same Category, Very Different Jobs</title><link>https://harrisonsec.com/blog/nats-kafka-mqtt-same-category-different-jobs/</link><pubDate>Tue, 24 Feb 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/nats-kafka-mqtt-same-category-different-jobs/</guid><description>&lt;p&gt;The number of times I&amp;rsquo;ve watched a team pick a message system based on &amp;ldquo;Company X uses it&amp;rdquo; is depressing. Right behind it: the team that picks the one they already know, regardless of whether it fits the workload. NATS, Kafka, and MQTT get lumped together because they all pass messages between processes. That&amp;rsquo;s like lumping trucks, sedans, and motorbikes together because they all have wheels.&lt;/p&gt;
&lt;p&gt;They are three different tools for three different shapes of problem. Once you know the axes that matter, the decision is usually easy.&lt;/p&gt;</description></item><item><title>Docker × Kubernetes: What They Really Changed (It's Not What You Think)</title><link>https://harrisonsec.com/blog/docker-kubernetes-what-they-really-changed/</link><pubDate>Sat, 21 Feb 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/docker-kubernetes-what-they-really-changed/</guid><description>&lt;p&gt;&amp;ldquo;A Docker container is basically a lightweight VM, right?&amp;rdquo; No. That sentence alone causes more architectural misunderstandings than any other in modern backend engineering. A VM virtualizes hardware. A container is a set of Linux kernel features — namespaces, cgroups, overlay filesystems — wrapped in a nicer CLI. Same host kernel, same memory space, same attack surface if the kernel has a bug. The marketing that says otherwise has cost teams real money in misconfigured production.&lt;/p&gt;</description></item><item><title>Scale-Up vs Scale-Out: Why Every Language Wins Somewhere</title><link>https://harrisonsec.com/blog/scale-up-scale-out-every-language-wins-somewhere/</link><pubDate>Fri, 20 Feb 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/scale-up-scale-out-every-language-wins-somewhere/</guid><description>&lt;p&gt;I worked with a team that rewrote a critical service from Go to Rust because &amp;ldquo;performance.&amp;rdquo; Six months later, the service was 30% faster, the team was miserable, and feature velocity had dropped to a crawl. Meanwhile the competitor team, still on Go, had shipped four new features.&lt;/p&gt;
&lt;p&gt;We did the postmortem eventually. The service handled maybe 2,000 requests per second on a 4-core machine. CPU utilization sat around 20%. Rust&amp;rsquo;s extra speed bought us exactly nothing — the bottleneck was downstream database latency. What it cost us was every feature we didn&amp;rsquo;t ship while writing unsafe, fighting the borrow checker, and nursing the team through the learning curve.&lt;/p&gt;</description></item><item><title>Testing Real-World Go Backends Isn't What Many People Think</title><link>https://harrisonsec.com/blog/testing-real-world-go-backends/</link><pubDate>Wed, 18 Feb 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/testing-real-world-go-backends/</guid><description>&lt;p&gt;I&amp;rsquo;ve reviewed enough Go backend test suites to notice a pattern. The services with the most unit tests are often the ones with the most production incidents. Not because unit tests cause incidents — because the teams writing unit tests and calling it a day weren&amp;rsquo;t testing the things that actually broke.&lt;/p&gt;
&lt;p&gt;Production bugs in distributed Go backends don&amp;rsquo;t usually look like &amp;ldquo;function computed wrong value.&amp;rdquo; They look like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;The context deadline didn&amp;rsquo;t propagate into the background goroutine, so under load it leaked.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Two services agreed on the happy path, but the error-shape contract diverged six months ago, and now one returns &lt;code&gt;status.Code(codes.Unavailable)&lt;/code&gt; where the other expects &lt;code&gt;codes.ResourceExhausted&lt;/code&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;The retry logic is race-y. With test-scale traffic it works; at 10x production it double-charges.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;The database migration works on SQLite (our test DB) but not Postgres 15&amp;rsquo;s stricter planner.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No unit test catches those. A different set of test shapes does.&lt;/p&gt;</description></item><item><title>Observability and Cost Attribution: Why One Pipeline Isn't Enough</title><link>https://harrisonsec.com/blog/observability-cost-attribution-dual-path-architecture/</link><pubDate>Sun, 15 Feb 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/observability-cost-attribution-dual-path-architecture/</guid><description>&lt;p&gt;A team I worked with tried to build their billing system on top of their tracing pipeline. The idea was clean: every operation already generates a span; spans already have duration and attributes; adding &lt;code&gt;user_id&lt;/code&gt; and &lt;code&gt;billable_units&lt;/code&gt; to each span lets finance query the trace store to compute invoices. One pipeline, less infrastructure. Beautiful.&lt;/p&gt;
&lt;p&gt;Six weeks before the first billing cycle, the wheels came off. The tracing system was sampling at 10% because full-capture was too expensive. The sampler was head-based, meaning whether a trace got kept was decided at request entry, long before the code knew whether the request was billable. Some users got charged for 10% of their actual usage; others got free service. Nobody&amp;rsquo;s invoice agreed with the other team&amp;rsquo;s report.&lt;/p&gt;</description></item><item><title>Go Context in Distributed Systems: What Actually Works in Production</title><link>https://harrisonsec.com/blog/go-context-distributed-systems-production/</link><pubDate>Fri, 13 Feb 2026 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/go-context-distributed-systems-production/</guid><description>&lt;p&gt;The bug was alive for three weeks. On a normal day it cost nothing. On the day it activated, it nearly took the service down.&lt;/p&gt;
&lt;p&gt;The pattern was simple. An HTTP handler had to fetch data from three downstream gRPC services and merge the results. The team had done the disciplined thing: set a 5-second deadline on the request context, propagate it all the way through to the handler, use &lt;code&gt;errgroup&lt;/code&gt; for parallelism. Except — and you&amp;rsquo;ve probably seen this one — the fan-out looked like this:&lt;/p&gt;</description></item><item><title>Go's Concurrency Is About Structure, Not Speed: chan and context as Lifecycle Primitives</title><link>https://harrisonsec.com/blog/go-chan-context-structure-not-speed/</link><pubDate>Fri, 21 Nov 2025 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/go-chan-context-structure-not-speed/</guid><description>&lt;p&gt;For a while, I thought channels were Go&amp;rsquo;s way of doing message passing. Something like Erlang processes or actors, except with a simpler syntax. That understanding is fine if you&amp;rsquo;re writing tutorials. It is not fine when you&amp;rsquo;ve just OOM-killed a pod for the third time in an hour because your worker pool wasn&amp;rsquo;t really a pool.&lt;/p&gt;
&lt;p&gt;The moment it clicked for me was during a production incident. A Kafka consumer service had been humming along for months at about 1,000 messages per second. Then an upstream team replayed twelve hours of events into the topic at once — roughly &lt;strong&gt;1.2 million messages in two minutes&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>IronSys: A Production Blueprint for Modern Concurrency</title><link>https://harrisonsec.com/blog/ironsys-blueprint-modern-concurrency-in-production/</link><pubDate>Wed, 22 Oct 2025 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/ironsys-blueprint-modern-concurrency-in-production/</guid><description>&lt;p&gt;In the last post I walked through the four concurrency pillars — shared memory + locks, CSP, actors, STM — and argued that real systems mix them on purpose. Someone reasonably asked: &lt;em&gt;okay, but what does that actually look like?&lt;/em&gt; Fair question. Abstract taxonomy is less useful than a worked example.&lt;/p&gt;
&lt;p&gt;IronSys is that worked example. It&amp;rsquo;s a composite blueprint — not a real service, but representative of a class of services I&amp;rsquo;ve designed, helped design, or debugged in production. Let&amp;rsquo;s say it&amp;rsquo;s a mid-sized backend system: public API, stateful user sessions, streaming data in, aggregation and reporting out. The kind of thing that appears in the middle of any serious platform.&lt;/p&gt;</description></item><item><title>From Locks to Actors: The Four Pillars of Modern Concurrency</title><link>https://harrisonsec.com/blog/four-pillars-modern-concurrency-locks-to-actors/</link><pubDate>Mon, 20 Oct 2025 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/four-pillars-modern-concurrency-locks-to-actors/</guid><description>&lt;p&gt;Most working engineers have spent ninety percent of their concurrent-programming life in one model: shared memory protected by locks. Threads that all see the same variables. Mutexes around the critical sections. Hope and care. It&amp;rsquo;s the model every OS textbook teaches, every mainstream language supports, and every senior engineer has a horror story about.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also not the only option. Or even the best one, for many of the problems it gets used for. Three other models — CSP, actors, and software transactional memory — have been around for decades, mature enough for production, and each solves a class of problems that lock-based designs handle poorly.&lt;/p&gt;</description></item><item><title>Why Go Handles Millions of Connections: User-Space Context Switching, Explained</title><link>https://harrisonsec.com/blog/go-millions-connections-user-space-context-switching/</link><pubDate>Mon, 13 Oct 2025 08:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/go-millions-connections-user-space-context-switching/</guid><description>&lt;p&gt;Somewhere around 40,000 concurrent connections, your Java service falls over. Not from CPU, not from network — from memory, because every connection is a thread and every thread wants its own megabyte of stack. By the time you&amp;rsquo;ve finished Googling whether this is a &lt;code&gt;-Xss&lt;/code&gt; problem or a &lt;code&gt;ulimit&lt;/code&gt; problem, Ops has already bumped the box to 64 GB and you&amp;rsquo;ve pushed the wall back another 20,000 connections. Linear in RAM. It never ends.&lt;/p&gt;</description></item><item><title>From Real Mode to Protected Mode: Building Custom GDT &amp; IDT for x86 Security</title><link>https://harrisonsec.com/videos/from-real-mode-to-protected-mode-gdt-idt/</link><pubDate>Wed, 13 Aug 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/from-real-mode-to-protected-mode-gdt-idt/</guid><description>&lt;p&gt;The single most consequential transition in x86: 16-bit real mode → 32-bit protected mode. Once you cross it, you get segment privilege levels, larger address space, and the foundation every OS layer above you takes for granted.&lt;/p&gt;
&lt;p&gt;This video walks the GDT and IDT setup from scratch, then performs the &lt;code&gt;lgdt&lt;/code&gt; / far jump that flips the CPU into the new mode. Hand-coded, no OS underneath.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/from-real-mode-to-protected-mode-gdt-idt/"&gt;Blog post: real mode → protected mode — GDT and IDT explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/NanoBoot"&gt;GitHub: NanoBoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Previous: &lt;a href="https://harrisonsec.com/videos/bootloader-from-scratch-assembly-no-os/"&gt;How to Build a Bootloader from Scratch — Just Assembly, No OS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How to Build &amp; Debug a Custom ARM64 Linux Kernel with Yocto, QEMU, and GDB</title><link>https://harrisonsec.com/videos/arm64-linux-kernel-debug-yocto-qemu-gdb/</link><pubDate>Tue, 05 Aug 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/arm64-linux-kernel-debug-yocto-qemu-gdb/</guid><description>&lt;p&gt;The full pipeline for someone who wants to debug ARM64 kernel code without sinking weeks into toolchain setup: Yocto for the build, QEMU as the target, GDB attached over the QEMU GDB stub. By the end you can break on any kernel function and inspect register state.&lt;/p&gt;
&lt;p&gt;Companion to the CoreTracer + SentinelEdge projects — the same toolchain that makes those experiments reproducible.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/arm64-linux-kernel-debug-yocto-qemu-gdb/"&gt;Blog post: ARM64 kernel debugging — Yocto/QEMU/GDB walkthrough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/CoreTracer"&gt;GitHub: CoreTracer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>eBPF on Linux: kprobe vs fentry (tracing) — Hooking Internals &amp; Assembly Analysis</title><link>https://harrisonsec.com/videos/ebpf-kprobe-vs-fentry-kernel-observability/</link><pubDate>Mon, 04 Aug 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/ebpf-kprobe-vs-fentry-kernel-observability/</guid><description>&lt;p&gt;Two ways to attach an eBPF program to a kernel function: kprobe (old, INT3-based, more overhead) and fentry (newer, BPF trampoline, lower overhead). This video disassembles both attachment paths so you can see exactly where the hook intercepts the function and why fentry is the production-grade choice.&lt;/p&gt;
&lt;p&gt;Foundation work for the SentinelEdge project — anything serious about kernel-level observability ends up here.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/ebpf-kprobe-vs-fentry-kernel-observability/"&gt;Blog post: kprobe vs fentry — the assembly-level difference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/SentinelEdge"&gt;GitHub: SentinelEdge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Rust vs C: Assembly Comparison — Ownership &amp; Bounds Checking</title><link>https://harrisonsec.com/videos/rust-vs-c-assembly-ownership-bounds-checking/</link><pubDate>Mon, 04 Aug 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/rust-vs-c-assembly-ownership-bounds-checking/</guid><description>&lt;p&gt;Two languages, same hardware, different machine code. This video disassembles a small benchmark in both Rust and C and walks through what the compiler actually emits for ownership transfers, array indexing with bounds checks, and immutability.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve heard &amp;ldquo;Rust is zero-cost&amp;rdquo; without seeing the assembly, this is where the claim either holds up or doesn&amp;rsquo;t.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/rust-vs-c-assembly-performance-safety-analysis/"&gt;Blog post: Rust vs C — what the assembly really shows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/rust-vs-c-asm"&gt;GitHub: rust-vs-c-asm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>SentinelEdge: Advanced eBPF Kernel Security &amp; Systems Architecture</title><link>https://harrisonsec.com/videos/sentineledge-ebpf-kernel-security/</link><pubDate>Mon, 04 Aug 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/sentineledge-ebpf-kernel-security/</guid><description>&lt;p&gt;A walkthrough of SentinelEdge — the project where I bring eBPF, kernel-level tracing, and production-style observability together into one framework. The video covers the architecture choices and how each component (loader, BPF programs, userspace consumer) fits.&lt;/p&gt;
&lt;p&gt;Background work for the AI Operator track too: many of the same observability ideas transfer directly to monitoring LLM call graphs at production scale.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/SentinelEdge"&gt;GitHub: SentinelEdge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Companion: &lt;a href="https://harrisonsec.com/videos/ebpf-kprobe-vs-fentry-kernel-observability/"&gt;eBPF kprobe vs fentry — hooking internals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Cache Miss, TLB Miss &amp; False Sharing — The Performance Killers in 3 Minutes</title><link>https://harrisonsec.com/videos/cache-miss-tlb-false-sharing-coretracer/</link><pubDate>Sun, 03 Aug 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/cache-miss-tlb-false-sharing-coretracer/</guid><description>&lt;p&gt;Same code, different cache layout, 10× performance gap. This video runs three benchmarks back-to-back to show how cache misses, TLB misses, and false sharing each show up in &lt;code&gt;perf&lt;/code&gt; counters — and why none of them are visible in a flame graph.&lt;/p&gt;
&lt;p&gt;Part of the CoreTracer project: the kind of bottleneck that you can only debug after you know to look for it.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/cache-miss-tlb-false-sharing-coretracer/"&gt;Blog post: cache miss / TLB miss / false sharing — what perf shows you&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/CoreTracer"&gt;GitHub: CoreTracer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Store→Load Reordering: x86 vs ARM64 Real-World Test</title><link>https://harrisonsec.com/videos/store-load-reordering-x86-vs-arm64/</link><pubDate>Sun, 03 Aug 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/store-load-reordering-x86-vs-arm64/</guid><description>&lt;p&gt;Same C code, two architectures, two different observable behaviors. x86-64&amp;rsquo;s TSO model hides store→load reordering most of the time; ARM64&amp;rsquo;s weaker model lets you see it directly. This video runs a minimal test that demonstrates the difference and prints the reorder count.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve written lock-free code that &amp;ldquo;worked on x86 but broke on ARM,&amp;rdquo; this is the underlying mechanism.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/store-load-reordering-x86-vs-arm64/"&gt;Blog post: store→load reordering — x86 vs ARM64 and what fences do&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Debugging Real-Mode Bootloader in GDB (CS Changed, Symbols Broken)</title><link>https://harrisonsec.com/videos/real-mode-bootloader-gdb-symbols-broken/</link><pubDate>Sat, 02 Aug 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/real-mode-bootloader-gdb-symbols-broken/</guid><description>&lt;p&gt;When CS changes mid-execution — for example, a far jump from your bootloader&amp;rsquo;s load address into your second-stage code — GDB&amp;rsquo;s symbol resolution silently breaks. You see addresses but no names, and stepping looks like it&amp;rsquo;s into the void.&lt;/p&gt;
&lt;p&gt;This video shows the workflow that keeps symbols valid across segment changes: explicit symbol-file loads at the new segment base, plus the &lt;code&gt;add-symbol-file&lt;/code&gt; trick that nobody writes down in tutorials.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/real-mode-bootloader-gdb-symbols-broken/"&gt;Blog post: real-mode bootloader debugging — the segment-symbol problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/NanoBoot"&gt;GitHub: NanoBoot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Debugging Ubuntu 6.8 x86_64 Kernel with GDB &amp; QEMU — Disable KASLR Without Rebuild</title><link>https://harrisonsec.com/videos/ubuntu-6-8-x86-64-kernel-debug-gdb-qemu/</link><pubDate>Sat, 02 Aug 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/ubuntu-6-8-x86-64-kernel-debug-gdb-qemu/</guid><description>&lt;p&gt;The x86_64 counterpart to the ARM64 walkthrough. Build Ubuntu 6.8 kernel from source with debug symbols, boot under QEMU, attach GDB. The interesting part: disabling KASLR via boot parameter so your symbol addresses actually match the running kernel — without recompiling.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve ever had GDB show wildly wrong line numbers in kernel debugging, KASLR is almost certainly why.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/ubuntu-6-8-x86-64-kernel-debug-gdb-qemu/"&gt;Blog post: Ubuntu 6.8 kernel debug — the KASLR-mismatch lesson&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How x86 Jumps REALLY Work: EFLAGS Truth with GDB + pwndbg</title><link>https://harrisonsec.com/videos/x86-jumps-eflags-gdb-pwndbg/</link><pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/x86-jumps-eflags-gdb-pwndbg/</guid><description>&lt;p&gt;Real reverse engineers know: every x86 conditional jump is decided by EFLAGS bits — ZF, SF, CF, OF — not by what your source code looked like. This short demonstration uses GDB + pwndbg to make the flags visible while stepping through a hand-crafted instruction sequence.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve ever wondered why a &lt;code&gt;jge&lt;/code&gt; fires when you expected a &lt;code&gt;jl&lt;/code&gt;, the answer is always in the flag register.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/x86-jumps-eflags-gdb-pwndbg/"&gt;Blog post: x86 jumps and EFLAGS — what GDB shows you&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Rust vs C Assembly: Complete Performance and Safety Analysis - Panic or Segfault?</title><link>https://harrisonsec.com/blog/rust-vs-c-assembly-performance-safety-analysis/</link><pubDate>Tue, 08 Jul 2025 10:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/rust-vs-c-assembly-performance-safety-analysis/</guid><description>&lt;h1 id="-rust-vs-c-assembly-performance-analysis-panic-or-segfault"&gt;🦀 Rust vs C Assembly Performance Analysis: Panic or Segfault?&lt;/h1&gt;
&lt;h2 id="complete-deep-dive-into-memory-safety-performance-and-compiler-behavior"&gt;Complete Deep Dive into Memory Safety, Performance, and Compiler Behavior&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;🔥 &lt;strong&gt;When your array goes out of bounds, does your program crash with a segfault or gracefully panic?&lt;/strong&gt;&lt;br&gt;
The answer reveals everything about modern systems programming languages and their runtime behavior.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="-the-ultimate-systems-programming-showdown"&gt;🚀 The Ultimate Systems Programming Showdown&lt;/h2&gt;
&lt;p&gt;In the arena of systems-level development, &lt;strong&gt;C&lt;/strong&gt; reigns as the battle-tested veteran with decades of proven performance, while &lt;strong&gt;Rust&lt;/strong&gt; emerges as the ambitious challenger promising memory safety without performance costs. Both languages can build operating systems, device drivers, and embedded firmware. But Rust boldly claims to be &amp;ldquo;memory-safe by default,&amp;rdquo; while C is often criticized as &amp;ldquo;the art of walking through a minefield.&amp;rdquo;&lt;/p&gt;</description></item><item><title>How to Build a Bootloader from Scratch — Just Assembly, No OS</title><link>https://harrisonsec.com/videos/bootloader-from-scratch-assembly-no-os/</link><pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/bootloader-from-scratch-assembly-no-os/</guid><description>&lt;p&gt;This is not GRUB. It&amp;rsquo;s a hand-written Stage-1 bootloader written in raw x86 assembly, booting directly from BIOS with no operating system and no standard library underneath it.&lt;/p&gt;
&lt;p&gt;Part of the NanoBoot project — building up from BIOS POST to a working protected-mode jump, one register at a time.&lt;/p&gt;
&lt;h2 id="related"&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://harrisonsec.com/blog/bootloader-from-scratch-assembly-no-os/"&gt;Blog post: Bootloader from scratch — what BIOS actually hands you&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harrison001/NanoBoot"&gt;GitHub: NanoBoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Next: &lt;a href="https://harrisonsec.com/videos/from-real-mode-to-protected-mode-gdt-idt/"&gt;From Real Mode to Protected Mode — Building Custom GDT &amp;amp; IDT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Legacy Compatibility Lab: My Full Stack for Reviving Dead Software</title><link>https://harrisonsec.com/blog/legacy-compatibility-lab-full-stack/</link><pubDate>Fri, 30 May 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/legacy-compatibility-lab-full-stack/</guid><description>&lt;h1 id="legacy-compatibility-lab-my-full-stack-for-reviving-dead-software"&gt;Legacy Compatibility Lab: My Full Stack for Reviving Dead Software&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;Fix software that shouldn&amp;rsquo;t be running anymore — and make it run again.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;























&lt;picture&gt;
 
 &lt;source srcset="https://harrisonsec.com/images/lab-environment-overview.webp" type="image/.webp..webp" media="(min-width: 601px)"&gt;
 &lt;img src="https://harrisonsec.com/images/lab-environment-overview.webp" alt="Screenshot showing an overview of the full virtualized lab environment, including multiple operating systems and developer toolchains used for compatibility testing and malware analysis." loading="eager" decoding="async" &gt;
&lt;/picture&gt;
&lt;p&gt;This is my custom-built stack for analyzing, patching, and rebuilding legacy Windows software — covering everything from &lt;strong&gt;VC++6/Delphi apps on Windows XP&lt;/strong&gt; to &lt;strong&gt;modern Win10/Win11 binaries&lt;/strong&gt; that must remain compatible with Win7 or even XP.&lt;/p&gt;</description></item><item><title>Placed 2nd at BSides Vancouver 2025 Blue Team CTF – With Just ChatGPT and Stubbornness</title><link>https://harrisonsec.com/blog/bsides-vancouver-2025-blue-team-ctf-2nd-place-chatgpt/</link><pubDate>Sun, 25 May 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/blog/bsides-vancouver-2025-blue-team-ctf-2nd-place-chatgpt/</guid><description>&lt;h1 id="placed-2nd-at-bsides-vancouver-2025-blue-team-ctf--with-just-chatgpt-and-stubbornness"&gt;Placed 2nd at BSides Vancouver 2025 Blue Team CTF – With Just ChatGPT and Stubbornness&lt;/h1&gt;
&lt;hr&gt;























&lt;picture&gt;
 
 &lt;source srcset="https://harrisonsec.com/images/BSides_Vancouver_2025_coreboard.webp" type="image/.webp..webp" media="(min-width: 601px)"&gt;
 &lt;img src="https://harrisonsec.com/images/BSides_Vancouver_2025_coreboard.webp" alt="Scoreboard from the BSides Vancouver 2025 Blue Team CTF with real-time progression graph and final ranking" loading="eager" decoding="async" &gt;
&lt;/picture&gt;
&lt;h2 id="summary"&gt;Summary&lt;/h2&gt;
&lt;p&gt;I placed 2nd at the &lt;strong&gt;BSides Vancouver 2025 Blue Team CTF&lt;/strong&gt; using nothing but ChatGPT and sheer persistence. This post covers how I tackled the competition with no team, no fancy toolkits, and a whole lot of stubborn curiosity. Here&amp;rsquo;s how it went.&lt;/p&gt;</description></item><item><title>HarrisonSec Lab Tour | A Journey Through Computing Evolution</title><link>https://harrisonsec.com/videos/security-lab-tour/</link><pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/security-lab-tour/</guid><description>&lt;h2 id="about-this-video"&gt;About This Video&lt;/h2&gt;
&lt;p&gt;In this lab tour, I share my personal journey through computing history and security evolution. From my first encounter with Windows 98 to modern AI-driven security research, this is a story of passion, persistence, and technical mastery.&lt;/p&gt;
&lt;h2 id="need-expert-help-with-security-or-legacy-systems"&gt;Need Expert Help with Security or Legacy Systems?&lt;/h2&gt;
&lt;p&gt;Facing security challenges with legacy systems or need advanced security consulting? I specialize in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Legacy system security and modernization (&lt;a href="https://harrisonsec.com/projects/legacyops/"&gt;Legacy Projects&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Advanced vulnerability research&lt;/li&gt;
&lt;li&gt;Custom exploit development&lt;/li&gt;
&lt;li&gt;Enterprise security architecture&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="mailto:consult@harrisonsec.com?subject=Security%20Consulting"&gt;Email Me&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Complete Secure Company Network Design</title><link>https://harrisonsec.com/videos/secure-company-network-design/</link><pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/secure-company-network-design/</guid><description>&lt;h2 id="video-presentation"&gt;Video Presentation&lt;/h2&gt;
&lt;h2 id="why-this-video-is-worth-your-time"&gt;Why This Video is Worth Your Time&lt;/h2&gt;
&lt;p&gt;This extensive tutorial presents a complete enterprise network security design and implementation using Cisco Packet Tracer. At over 3 hours long, it&amp;rsquo;s a comprehensive resource that&amp;rsquo;s particularly valuable for security professionals, network engineers, and IT students looking to understand how proper network segmentation works in practice.&lt;/p&gt;
&lt;p&gt;What makes this video exceptional is that it demonstrates a complete working implementation of several critical security concepts including:&lt;/p&gt;</description></item><item><title>Buffer Overflow Attack Explained</title><link>https://harrisonsec.com/videos/buffer-overflow-attack/</link><pubDate>Sat, 10 May 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/videos/buffer-overflow-attack/</guid><description>&lt;h2 id="why-this-video-is-worth-watching"&gt;Why This Video Is Worth Watching&lt;/h2&gt;
&lt;p&gt;This is one of the clearest and most intuitive explanations of buffer overflow attacks I&amp;rsquo;ve seen. Dr. Mike Pound not only covers the theoretical foundations but demonstrates the complete attack implementation process, from stack memory manipulation to successfully gaining root privileges on a Linux system. The step-by-step approach makes complex memory security concepts accessible to viewers with various technical backgrounds.&lt;/p&gt;
&lt;h2 id="technical-analysis"&gt;Technical Analysis&lt;/h2&gt;
&lt;h3 id="1-buffer-overflow-fundamentals"&gt;1. Buffer Overflow Fundamentals&lt;/h3&gt;
&lt;p&gt;Dr. Pound explains the essence of buffer overflows with exceptional clarity - when a program attempts to write data beyond pre-allocated memory space, the excess data overwrites adjacent memory regions. In security, this isn&amp;rsquo;t just a bug; it&amp;rsquo;s a vulnerability that can be weaponized to execute arbitrary code. The video demonstrates how writing past the end of a buffer can overwrite critical stack data, including the return address.&lt;/p&gt;</description></item><item><title>LegacyOps™ | Expert Legacy Software Recovery &amp; Security</title><link>https://harrisonsec.com/projects/legacyops/</link><pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate><guid>https://harrisonsec.com/projects/legacyops/</guid><description>&lt;script type="application/ld+json"&gt;
{
 "@context": "https://schema.org",
 "@type": "ProfessionalService",
 "name": "LegacyOps™",
 "url": "https://harrisonsec.com/projects/legacyops/",
 "description": "Rescue and secure legacy software systems such as Delphi, VB6, Win32, COM, and Access.",
 "areaServed": {
 "@type": "Country",
 "name": "Canada"
 },
 "provider": {
 "@type": "Person",
 "name": "Harrison Guo"
 },
 "serviceType": "Legacy Software Recovery",
 "offers": {
 "@type": "Offer",
 "priceSpecification": {
 "@type": "PriceSpecification",
 "minPrice": "5000",
 "maxPrice": "10000",
 "priceCurrency": "USD"
 }
 },
 "hasOfferCatalog": {
 "@type": "OfferCatalog",
 "name": "Legacy Software Services",
 "itemListElement": [
 {
 "@type": "Offer",
 "itemOffered": {
 "@type": "Service",
 "name": "Bugfix &amp; Patching"
 }
 },
 {
 "@type": "Offer",
 "itemOffered": {
 "@type": "Service",
 "name": "Reverse &amp; Recover"
 }
 },
 {
 "@type": "Offer",
 "itemOffered": {
 "@type": "Service",
 "name": "Retainer Support"
 }
 }
 ]
 }
}
&lt;/script&gt;
&lt;h1 style="color: #00ff00;" id="legacyops"&gt;LegacyOps™ — Fixing What Others Fear to Touch&lt;/h1&gt;
&lt;p style="color: #00ff00;"&gt;Legacy systems are everywhere. They're running hospitals, factories, universities, and old ERP suites.&lt;br&gt;
But nobody wants to maintain them — until they break.&lt;/p&gt;</description></item></channel></rss>