<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Tech with Ugur</title><description>Hands-on labs in cybersecurity, AI, and observability</description><link>https://techwithugur.dev/</link><item><title>Three Valleys, One Gradient Step</title><link>https://techwithugur.dev/posts/gradient-descent-1d/</link><guid isPermaLink="true">https://techwithugur.dev/posts/gradient-descent-1d/</guid><description>A one-dimensional gradient descent lab records every update from three starting points and shows why the lowest observed result needs a separate global-minimum argument.</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate></item><item><title>A self-hosted coding agent: Qwen Code with Superpowers on one AWS GPU VM</title><link>https://techwithugur.dev/posts/qwen-code-superpowers-aws/</link><guid isPermaLink="true">https://techwithugur.dev/posts/qwen-code-superpowers-aws/</guid><description>One GPU VM serves an open-weight Qwen coding model with vLLM, Qwen Code with the Superpowers skills runs unattended in a locked-down container, and a verifier with hidden tests decides whether the agent really finished.</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate></item><item><title>One agent, four open-weight models: Amazon Bedrock with LangChain in TypeScript</title><link>https://techwithugur.dev/posts/bedrock-langchain-agent/</link><guid isPermaLink="true">https://techwithugur.dev/posts/bedrock-langchain-agent/</guid><description>A LangChain agent in TypeScript that answers questions about a shop database through three typed tools, runs on four open-weight models on Amazon Bedrock, and signs in with aws login instead of an access key.</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Event-driven Cloud Run: Hono publishes, Python processes, GCS stores</title><link>https://techwithugur.dev/posts/cloud-run-pubsub-number-processor/</link><guid isPermaLink="true">https://techwithugur.dev/posts/cloud-run-pubsub-number-processor/</guid><description>Follow a number through authenticated Pub/Sub delivery, separate runtime permissions from push identity, and distinguish acceptance from completion.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate></item><item><title>A code-execution sandbox for a chat agent on kind</title><link>https://techwithugur.dev/posts/ai-code-sandbox-kind/</link><guid isPermaLink="true">https://techwithugur.dev/posts/ai-code-sandbox-kind/</guid><description>A chat app whose agent answers maths problems by writing Python and running it in a separate sandbox service, with a tool description generated from the sandbox itself.</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Isolating unsafe shell execution with Kubernetes Jobs</title><link>https://techwithugur.dev/posts/kubernetes-job-isolation/</link><guid isPermaLink="true">https://techwithugur.dev/posts/kubernetes-job-isolation/</guid><description>Run the same shell executor with two Kubernetes configurations, then measure which workers can read private data and reach a local download fixture.</description><pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Plan three years of manufacturing cash with NumPy and PySCIPOpt</title><link>https://techwithugur.dev/posts/manufacturing-profit-pyscipopt/</link><guid isPermaLink="true">https://techwithugur.dev/posts/manufacturing-profit-pyscipopt/</guid><description>Turn staffing, delayed research savings, and a factory expansion into a small optimization model—and read what its answer actually proves.</description><pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Talk to your Markdown: a streaming OpenAI voice RAG lab</title><link>https://techwithugur.dev/posts/openai-voice-rag/</link><guid isPermaLink="true">https://techwithugur.dev/posts/openai-voice-rag/</guid><description>Connect completed speech transcripts to local Postgres retrieval, a Responses agent, and queued Realtime audio—with persistent chat history.</description><pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate></item><item><title>The Strongest Signal Is the One You Can&apos;t Have</title><link>https://techwithugur.dev/posts/timesfm-pm25-covariates/</link><guid isPermaLink="true">https://techwithugur.dev/posts/timesfm-pm25-covariates/</guid><description>Google&apos;s TimesFM 3.0 forecasts a series with no training and no API key, and it takes covariates now. On hourly PM2.5 in Milan, tomorrow&apos;s weather is worth 16% of the error — and yesterday&apos;s carbon monoxide, the strongest correlate in the dataset at +0.92, is worth slightly less than nothing. That gap is the whole point.</description><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate></item><item><title>The Agent Is in the Page. The Key Is Not.</title><link>https://techwithugur.dev/posts/page-agent-solar-maintenance/</link><guid isPermaLink="true">https://techwithugur.dev/posts/page-agent-solar-maintenance/</guid><description>Alibaba&apos;s page-agent embeds a GUI agent directly in your web app — no headless browser, no extension, DOM-only. Getting it working takes an afternoon. Keeping the model credential out of the browser is the part that turns &apos;add an AI assistant&apos; into &apos;operate an authenticated LLM relay&apos;, and it changes what your markup is for.</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate></item><item><title>A living RAG corpus: syncing a Google Drive folder into Vertex AI Search</title><link>https://techwithugur.dev/posts/vertex-ai-search-gdrive-sync/</link><guid isPermaLink="true">https://techwithugur.dev/posts/vertex-ai-search-gdrive-sync/</guid><description>The managed Drive connector syncs every three hours, is console-only, and can no longer be pointed at a folder. So this lab writes the sync loop by hand — and then proves the two things a sync loop is actually judged on: an edit shows up, and a moved folder doesn&apos;t go stale.</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Managed RAG on Google Cloud: how do you prove Vertex AI Search actually retrieved anything?</title><link>https://techwithugur.dev/posts/vertex-ai-search-rag/</link><guid isPermaLink="true">https://techwithugur.dev/posts/vertex-ai-search-rag/</guid><description>Vertex AI Search hands you the entire retrieval stack — parsing, chunking, embedding, indexing, reranking, grounded answers with citations — behind one API. This lab stands it up with Terraform, then proves the answers really come from the corpus using ten facts no model could ever have been trained on.</description><pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Where is your outbound traffic actually going? Build an Envoy egress gateway that routes and meters every request</title><link>https://techwithugur.dev/posts/envoy-egress-gateway/</link><guid isPermaLink="true">https://techwithugur.dev/posts/envoy-egress-gateway/</guid><description>Every network has a story about inbound traffic and a shrug about outbound. Here&apos;s the control that closes it — a private subnet with no route out, one Envoy gateway that allow-lists by FQDN, and the four statistics that finally answer how many requests went where, carrying how many bytes.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Talk to Your Raspberry Pi From Anywhere, Without Opening a Single Port</title><link>https://techwithugur.dev/posts/telegram-garden-agent/</link><guid isPermaLink="true">https://techwithugur.dev/posts/telegram-garden-agent/</guid><description>A private Telegram bot, a LangChain agent with four typed tools, and a mock indoor garden — all in one container that never accepts an inbound connection. Long polling is the trick that makes a home-lab AI device reachable from your phone without port-forwarding, a public URL, or a TLS certificate.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The Host Owns the Wires: a GCP Shared-VPC landing zone that proves its own guardrails</title><link>https://techwithugur.dev/posts/gcp-shared-vpc-foundation/</link><guid isPermaLink="true">https://techwithugur.dev/posts/gcp-shared-vpc-foundation/</guid><description>A miniature enterprise GCP landing zone — folders, a Shared-VPC host, two service projects, one front door, one back door — where a scripted verifier logs in as each project&apos;s identity and proves every isolation guarantee with a real allowed/denied API call.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate></item><item><title>A Malicious MCP Server That Splits Its Instructions Across Tools</title><link>https://techwithugur.dev/posts/mcp-instruction-splitting/</link><guid isPermaLink="true">https://techwithugur.dev/posts/mcp-instruction-splitting/</guid><description>An MCP server hands your agent the descriptions of its tools, and the model treats them as trusted context. Split one exfiltration instruction across three innocent-looking tools and no per-description scan will ever see it — but the model reassembles it and reads your SSH key out. Watch it happen against a local agent, then watch a guardrail shut it down. Fully offline.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate></item><item><title>When a Vibe-Coded AI App Wires an LLM to the Network and the Shell</title><link>https://techwithugur.dev/posts/vibe-coded-llm-security/</link><guid isPermaLink="true">https://techwithugur.dev/posts/vibe-coded-llm-security/</guid><description>Vibe-code an AI app in an afternoon and the model ends up wired to two of the most dangerous sinks a program has: the network and the shell. Watch a poisoned document leak a secret, watch a &apos;process my data&apos; request become a reverse shell — then watch the same app, hardened, shut both down. Fully offline, on your laptop.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The Rollback That Never Comes: an automated disaster-recovery drill on Cloud SQL for PostgreSQL</title><link>https://techwithugur.dev/posts/gcp-postgres-disaster-recovery/</link><guid isPermaLink="true">https://techwithugur.dev/posts/gcp-postgres-disaster-recovery/</guid><description>A migration that silently corrupts data and then commits cannot be rolled back — only recovered from. This lab provisions a real Cloud SQL for PostgreSQL instance with Terraform, breaks it on purpose, and lets a runner detect the damage, restore from backup, and prove the restore with checksums — with no human in the loop.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate></item><item><title>When One Prometheus Isn&apos;t Enough: Sharding, Replication, and Thanos — Proven Side by Side</title><link>https://techwithugur.dev/posts/kube-prometheus-thanos-ha/</link><guid isPermaLink="true">https://techwithugur.dev/posts/kube-prometheus-thanos-ha/</guid><description>Add a Prometheus replica and every query sees every series twice; shard the targets and every query sees a slice of the truth. This lab builds both failure modes on purpose in a kind cluster, puts Thanos Query in front of them, and proves the fix with an automated verifier — same answers as an unscaled control install, shards exposed as partial, duplicates collapsed, and pods killed mid-run without a gap in the data.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Recording Rules Done Right: One Dataset, Two Grafana Dashboards, and Alerts Straight to Your Own Webhook</title><link>https://techwithugur.dev/posts/kube-prometheus-recording-rules/</link><guid isPermaLink="true">https://techwithugur.dev/posts/kube-prometheus-recording-rules/</guid><description>Installing kube-prometheus-stack is where most tutorials stop and where the real work starts. This lab builds the customization layer teams actually need — recording rules with human-readable node names, twin dashboards that prove why they matter, and Grafana-managed alerts landing in your own TypeScript server — then breaks the cluster on purpose to watch all six alerts fire.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate></item><item><title>No Proxy, No CA, No Cooperation: Catch an App Phoning Home with eBPF</title><link>https://techwithugur.dev/posts/app-egress-ebpf/</link><guid isPermaLink="true">https://techwithugur.dev/posts/app-egress-ebpf/</guid><description>The same freshly downloaded app, watched from inside the kernel instead of in front of it. An eBPF sensor attributes every DNS answer and TCP connect to the exact process that made it — catching a covert beacon delegated to a dropped helper binary, the one thing a network proxy can name a destination but never a process for.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Is That App You Just Installed Phoning Home? Build a mitmproxy egress gateway that finds out</title><link>https://techwithugur.dev/posts/app-egress-audit/</link><guid isPermaLink="true">https://techwithugur.dev/posts/app-egress-audit/</guid><description>A freshly downloaded tool works fine — and quietly talks to domains its vendor doesn&apos;t own. Here&apos;s a transparent mitmproxy + dnsmasq gateway that forces an uncooperative app through it, reads three layers of egress evidence, and shows exactly where visibility ends.</description><pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate></item><item><title>GitOps That Survives Bad Days: Flux, Helm, encrypted secrets, and self-healing rollbacks</title><link>https://techwithugur.dev/posts/flux-helm-gitops/</link><guid isPermaLink="true">https://techwithugur.dev/posts/flux-helm-gitops/</guid><description>Every Flux quickstart stops at the happy path. This laptop-sized lab breaks a Helm-based GitOps loop five ways on purpose — plaintext secrets, migration hooks, a broken upgrade, the dreaded stuck release, and manual drift — and shows the exact recovery mechanics for each.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Catch It Before Prod: A Layered OSS Scanning Gauntlet for Kubernetes Apps</title><link>https://techwithugur.dev/posts/k8s-appsec-scanning/</link><guid isPermaLink="true">https://techwithugur.dev/posts/k8s-appsec-scanning/</guid><description>The same vulnerable app from the exploit lab, caught for free — before any of it runs. Gitleaks and Semgrep on the source, Trivy on the build, and a Kyverno gate that refuses to admit the bad image. One command runs the whole gauntlet on your laptop and diffs vulnerable against hardened.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Break a Vulnerable App on Kubernetes: Recon to RCE With OSS Tools</title><link>https://techwithugur.dev/posts/k8s-appsec-exploit/</link><guid isPermaLink="true">https://techwithugur.dev/posts/k8s-appsec-exploit/</guid><description>One URL, a throwaway Kubernetes cluster, and only open-source tools. Scan a live app with nuclei, then turn each finding into a stolen SSN, a root shell, a leaked API key, and a crashed pod — every step reproducible on your laptop.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Deep Research on Your Own Laptop</title><link>https://techwithugur.dev/posts/local-deep-research/</link><guid isPermaLink="true">https://techwithugur.dev/posts/local-deep-research/</guid><description>OpenAI and Google will run &apos;deep research&apos; for you in their cloud. This lab builds the miniature version — a LangGraph Deep Agents CLI in TypeScript, driven entirely by a 4B model in Ollama — and documents every trick it takes to make a small local model actually finish the loop.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate></item><item><title>You Stripped the JavaScript. The CSS Still Stole the Token.</title><link>https://techwithugur.dev/posts/css-webmail-exfil/</link><guid isPermaLink="true">https://techwithugur.dev/posts/css-webmail-exfil/</guid><description>A webmail client that removes every &lt;script&gt; from an email can still hand an attacker your CSRF token — one character at a time — using nothing but CSS. Here&apos;s the attack, running locally, and the three-layer fix that stops it.</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Your Package Manager Runs Code at Install Time: a sandbox that catches the credential grab</title><link>https://techwithugur.dev/posts/supply-chain-egress-sandbox/</link><guid isPermaLink="true">https://techwithugur.dev/posts/supply-chain-egress-sandbox/</guid><description>A malicious Python package doesn&apos;t wait for you to import it — its setup.py runs at pip install time and can ship your credentials out first. Here&apos;s a laptop-sized sandbox that lets the install succeed while blocking and naming the leak.</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The Python Bytecode Blind Spot: when the source you scan isn&apos;t the code that runs</title><link>https://techwithugur.dev/posts/python-bytecode-blindspot/</link><guid isPermaLink="true">https://techwithugur.dev/posts/python-bytecode-blindspot/</guid><description>A source-only scanner reads your .py files, but Python runs bytecode — and a shipped .pyc can diverge from its source so the code that executes is not the code you reviewed.</description><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate></item></channel></rss>