Professional notes by Craig Johnston
long-form, short-form, working drafts · since 2008
long-form, short-form, working drafts · since 2008
VOL. XIX · MMXXVI
86 NOTES IN PRINT
86 NOTES IN PRINT
Build a Better Platform Than You're Renting
Cloud-grade data platforms from FOSS on Kubernetes, now that agents run the hard part
→ Read this noteLatest note · folio diagram
mindmap
root((Self-hosted platform))
Instead of Snowflake
Trino plus Iceberg
object storage
Instead of managed search
OpenSearch
Instead of Confluent
Kafka with KRaft
Instead of Workato
Apache NiFi
Instead of managed databases
Postgres
Cassandra
Operated by
Kubernetes
AI agents
In 2020, Apress published my book, Advanced Platform Development with Kubernetes. It runs about five hundred pages and builds a complete data-centric platform end to end: streaming ingestion, search and analytics, data …
Recent Notes
LXXXV
Running Ollama and pgvector on Kubernetes
Vector Search Without the Vector Database, Part 3
2026-06-07
LXXXIVThe Embedding Pipeline on Postgres and Ollama
Vector Search Without the Vector Database, Part 2
2026-05-23
LXXXIIIWhy Data MCPs Need Vector Search
Vector Search Without the Vector Database, Part 1
2026-05-08
LXXXIIThe Pre-Commit Review Gate
AI on a Leash: Mechanical Self-Review for Claude Code
2026-04-22
LXXXIThe Two Failure Modes That Break Your AI Data Agent
A Case Study in Agent Psychology
2026-02-26
LXXXPostgreSQL to OpenSearch with PySpark on Kubernetes
Date-windowed ETL, idempotent upserts, and CronJob scheduling
2026-02-25
LXXIXGoReleaser with Cosign Signing and Syft SBOM
Signed Builds and Supply Chain Security for Go Projects
2026-02-11
LXXVIIIAI on a Leash: Complete Go Project Configuration
AI on a Leash for Go
2026-02-09
LXXVIIRalph's Uncle
AI on a Leash
2026-02-06
LXXVIGo's Constraints and Idioms Make AI Coding Better
From Vibe Coding to Vibe Engineering
2026-02-04
LXXVMCP Is Flawed. Build With It Anyway.
Context has always been the hard problem. MCP forces you to solve it.
2026-01-20
LXXIVAI Data Lake Access with MCP and S3
Building composable MCP servers for object storage
2026-01-19
LXXIIIAI Data Warehouse Access with MCP and Trino
Building composable MCP servers for enterprise data
2026-01-17
LXXIIkubefwd: Forward Kubernetes Services to Localhost by Name
One command, no configuration, automatic reconnection
2026-01-04
LXXIkubefwd in 2026: Interactive TUI and Auto-Reconnect
The complete guide to kubefwd's new features
2026-01-04
LXXAI-Assisted Kubernetes Development with kubefwd
Let your AI assistant manage cluster connections
2026-01-04
LXIXApache NiFi: Dynamic HTTP Listeners with portpxy
Apache NiFi Part 5
2023-04-20
LXVIIIApache NiFi: JOLT Transformations Part 2
Apache NiFi Part 4
2023-02-15
LXVIIApache NiFi: JOLT Transformations Part 1
Apache NiFi Part 3
2022-12-10
LXVIApache NiFi: Securing Your Data Flows
Apache NiFi Part 2
2022-10-05
LXVApache NiFi: Production Kubernetes Deployment
Apache NiFi Part 1
2022-07-30
LXIVLinear Algebra in Go: High-Performance Computing
Linear Algebra in Go Part 10
2022-05-25
LXIIILinear Algebra in Go: Neural Network Foundations
Linear Algebra in Go Part 9
2022-03-20
LXIILinear Algebra in Go: PCA Implementation
Linear Algebra in Go Part 8
2022-01-15
LXILinear Algebra in Go: Building a Regression Library
Linear Algebra in Go Part 7
2021-11-10
LXLinear Algebra in Go: Statistics and Data Analysis
Linear Algebra in Go Part 6
2021-09-05
LIXLinear Algebra in Go: SVD and Decompositions
Linear Algebra in Go Part 5
2021-06-30
LVIIILinear Algebra in Go: Eigenvalue Problems
Linear Algebra in Go Part 4
2021-04-25
LVIILinear Algebra in Go: Solving Linear Systems
Linear Algebra in Go Part 3
2021-02-20
LVILinear Algebra in Go: Matrix Fundamentals
Linear Algebra in Go Part 2
2020-12-15