Thirty lines to make Claude Code feel native in tmux and iTerm2

TLDR Running Claude Code inside tmux eats Shift+Enter and quietly blocks Claude’s native desktop notifications. Three .tmux.conf lines fix both. terminal-notifier is dead on macOS Tahoe, built on deprecated NSUserNotification. alerter is the working drop-in on the modern UNUserNotificationCenter API. tmux color codes bleed out of automatic-rename-format into the status bar theme. Use a Nerd Font glyph to mark the Claude pane instead. Thirty lines of config made Claude Code feel native without giving up a decade of iTerm2 muscle memory or server tmux. ...

April 21, 2026 · 11 min · Viktor Gamov

Flink SQL Enrichment Strategies on Confluent Cloud (and the AI Skill That Writes Them for You)

TLDR Rion Williams wrote the theory on four Flink enrichment strategies. I built the runnable SQL for Confluent Cloud, where a few things work differently than open-source Flink (no PROCTIME(), no JDBC lookup joins). External enrichment uses a regular LEFT JOIN against a compacted Kafka topic. Gradual enrichment uses an event-time temporal join that gives you version-correct customer data per order. Both run as pure Flink SQL on Confluent Cloud. I published a Flink SQL skill on the Tessl registry that generates these queries for you. Pair it with mcp-confluent and your AI assistant can write the SQL, create the topics, and submit the Flink statements without you leaving the editor. ...

April 12, 2026 · 8 min · Viktor Gamov

Time Travel and Schema Evolution in the Streaming Lakehouse

TLDR Iceberg tracks every Flink checkpoint as an immutable snapshot. That gives you time travel queries on a streaming pipeline for free, with about 30-second granularity. You can add columns to a live Iceberg table while Flink is writing to it. Old rows get NULLs for the new columns, and the pipeline keeps running without rewriting data or taking downtime. DuckDB reads the same Iceberg tables without Trino running. Three different query engines can hit the same data without copying anything. ...

April 8, 2026 · 6 min · Viktor Gamov

Building a Streaming Lakehouse with Open Source: Kafka to Iceberg to Trino to Superset

TLDR I built an open-source streaming lakehouse: Kafka ingests events, Flink processes them, Iceberg stores them as tables, Trino queries them, and Superset visualizes them. One make demo command runs it all locally. Even when your data lands in Iceberg automatically (as it does with Confluent Tableflow), you still need a query engine and a visualization layer. This stack builds that full picture with open-source components. MinIO went closed-source, so I switched to SeaweedFS (thanks to Robin Moffatt’s research). And Flink’s dependency management is still a jar-shaped nightmare. ...

April 2, 2026 · 10 min · Viktor Gamov

SELECT * FROM stream: An Interactive Guide to Flink's Table-Stream Duality

TLDR I built an interactive tutorial that teaches Flink SQL’s table-stream duality with animated visualizations you can explore in your browser. Six sections guide you from "what is a dynamic table" to writing live aggregation queries, with code examples in both SQL and the Table API. It is open source, MIT licensed, and I’m accepting feature requests at the GitHub repo. The Concept That Trips Everyone Up Every time I teach Flink SQL, I hit the same wall. The concept of table-stream duality makes perfect sense to me after years of experience, but I can see the exact moment when someone new to Flink gets confused. You say "a table is just a materialized view of a stream" and their eyes glaze over. By the time you say "a stream is just a changelog of a table" you’ve lost them entirely. ...

April 1, 2026 · 5 min · Viktor Gamov

When AI Alignment Experts Can't Align Their Own AI

TLDR Meta’s director of AI alignment told her agent "confirm before acting." It deleted her entire inbox anyway. OpenClaw hit 250k GitHub stars in 60 days, its codebase hit 400,000 lines, and about 12% of its skill marketplace was malware. NanoClaw runs every agent in its own Linux container with 4,000 lines of code you can read in one sitting. I picked a third option. It runs on the JVM. ...

March 30, 2026 · 6 min · Viktor Gamov

Twelve Million Java Developers and the AI Ecosystem Forgot About Them

TLDR There are twelve million Java developers and the AI ecosystem built everything for Python first. LangChain4j fixes that. You can wire up an LLM, give it tools (database queries, API calls, search), and let it decide which tool to use and when. That’s an agent, built in Java. It handles prompt templates, chat memory, RAG pipelines, MCP support, and tool calling across 20+ LLM providers through a single API. ...

March 26, 2026 · 5 min · Viktor Gamov

Goodbye Confluent

TL;DR May 6th, 2021, was my last day at Confluent. Here is an email, that I sent to my former co-workers @ConfluentInc. Dear team, I’d like to let you know that I am leaving my position of Developer Advocate on May 6th. I have really enjoyed my time here in Confluent, and I appreciate having had the opportunity to work with with many of you. It was quite a ride, but I would do it again without any doubts. ...

May 6, 2021 · 1 min · Viktor Gamov

5 Kubernetes Tools You Probably Don't Use (But You Should)

TL;DR In this post, I’m going to talk about few tools that I found very useful during my Kubernetes development and presentations. Table 1. Revisions history Version Date Comments v1.1 03/26/2019 Finished draft v1.0 03/11/2019 Initial draft Earlier this year, I recorded a three-episode series, «Streaming on Kubernetes: It doesn’t have to be the hard way.» There I showed some demos of the Confluent Operator on Kubernetes. Many people reached out after and asked - «What kind of terminal do you use,» «What kind of plugins do you use» and so far and so on. And today, I’m going to be talking about five Kubernetes tools that I use in my demos (of during preparations to it) that you’re probably don’t use but defiantly should. ...

March 26, 2020 · 5 min · Viktor Gamov

The Ultimate Oracle Code One 2019 Guide for Kafka and Stream Processing wisdom seekers

TL;DR Oracle Code One 2019 is upon us! Read this post to find all sessions where you can learn things Apache Kafka® and stream processing! Also, I will be listing very subjective personal recommendations. Don’t hesitate to reach-out if you would like me to add any details! Table 1. Revisions history Version Date Comments v1.0 9/16/2019 Initial revision Monday Apache Kafka Versus Integration Middleware (MQ, ETL, ESB): Friends or Enemies? [DEV1187] by Kai Waehner 09:00 AM - 09:45 AM | Moscone South - Room 302 Getting Started with Kafka [DEV2417] Nikhil Nanivadekar 12:30 PM - 01:15 PM | Moscone South - Room 207/208 Building Event-Driven Applications with Oracle’s Fn Project and Apache Kafka [DEV1917] 01:30 PM - 02:15 PM | Moscone South - Room 304 Building Reactive Pipelines: How to Go from Scalable Apps to Scalable Systems [DEV1256] by Mark Heckler 12:30 PM - 01:15 PM | Moscone South - Room 207/208 Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka, and KSQL [DEV1185] 04:00 PM - 04:45 PM | Moscone South - Room 201 Query and Analyze Kafka Streams with Oracle SQL [DEV4292] 05:00 PM - 05:45 PM | Moscone South - Room 204 ...

September 16, 2019 · 5 min · Viktor Gamov