AI & LLM
Agent Loops in Claude Code: Knowing When to Stop
Jason Yang · 22 Jul, 2026
The hard part of a Claude Code agent loop isn't repeating work. It's a stop condition you can trust: convergent vs exploratory, and who enforces the verdict.
Field notes from production.
Hard-won lessons from production systems — backend, cloud, AI integration, and system design — backed by working code and real debugging stories.
AI & LLM
Jason Yang · 22 Jul, 2026
The hard part of a Claude Code agent loop isn't repeating work. It's a stop condition you can trust: convergent vs exploratory, and who enforces the verdict.
AI & LLM
Jason Yang · 22 Jul, 2026
Claude Code's /goal decides it's done from the worker's self-report. Add a Stop hook that verifies completion with exit codes, not the model's word.
AI & LLM
Jason Yang · 22 Jul, 2026
Karpathy's autoresearch pattern rebuilt for Claude Code: a Bash loop that scores each AI-tried hypothesis, keeps improvements, and rolls back failures with git.
Tools
Jason Yang · 19 Jul, 2026
Imgur's OAuth flow stopped working, so I moved my Obsidian attachments local: the /assets + UUID setup, the migration, and the settings that cost me an evening.
AI & LLM
Jason Yang · 12 Jul, 2026
Three Claude Code skills for downloading YouTube captions as SRT, transcribing audio with a local Whisper server, and translating embedded subtitle tracks.
AI & LLM
Jason Yang · 08 Jul, 2026
AI engineering is more than prompts. A practical frame — prompt, context, harness, loop — walked through one example: an AI that reviews every PR.
Coding Interview
Jason Yang · 31 Mar, 2026
Longest Substring Without Repeating Characters (LeetCode 3): the sliding-window O(n) approach, and why the int[128] version can jump the left pointer instead of stepping — with interactive visuals.
Coding Interview
Jason Yang · 31 Mar, 2026
Valid Palindrome (LeetCode 125): the two-pointer O(n) check that skips non-alphanumerics in place, why it beats building a cleaned string, and the edge cases.
Coding Interview
Jason Yang · 27 Mar, 2026
3Sum (LeetCode 15): sort then two-pointer for an O(n^2) solution, why sorting unlocks it, and the three places duplicate triplets sneak in — with an interactive visualization.
Coding Interview
Jason Yang · 27 Mar, 2026
Container With Most Water (LeetCode 11): the two-pointer O(n) approach, and the short proof for why moving the shorter line never skips a better answer — with an interactive visualization.
Linux
Jason Yang · 05 Dec, 2025
Run an Ubuntu laptop in clamshell mode — lid closed on an external monitor — while it still sleeps normally in your bag. The conditional HandleLidSwitchDocked fix, plus the display and input setup.
Coding Interview
Jason Yang · 29 Nov, 2025
Maximum Subarray (LeetCode 53): Kadane's algorithm explained as one decision — extend or restart — plus the O(n) to O(1) space drop and a full worked trace.
Coding Interview
Jason Yang · 27 Nov, 2025
Contains Duplicate (LeetCode 217): compare the brute-force, sorting, and hash-set approaches — and why 'just use a hash set' isn't always the right reflex.
Linux
Jason Yang · 22 Nov, 2025
Run an old Ubuntu laptop as a 24/7 headless server with the lid closed: stop it sleeping from the lid, idle timeout, and every sleep target — the logind.conf fix plus systemctl mask (20.04/22.04/24.04).
Linux
Jason Yang · 13 Nov, 2025
Remove ^M (carriage return) characters from text files on Linux/Unix after transfer from Windows — fixes with dos2unix, sed, tr, and Vim, how to verify, and why they appear.
Coding Interview
Jason Yang · 11 Nov, 2025
Two Sum (LeetCode 1) two ways: the brute-force O(n^2) scan vs the hash-map O(n) approach — with the intuition, edge cases, and the space-time trade-off.
AI & LLM
Jason Yang · 04 Jan, 2026
Claude Code Skills package repeatable workflows so Claude automates code reviews, enforces project conventions, and keeps quality consistent across a team.
Homelab
Jason Yang · 04 Jul, 2026
Move a self-hosted Ghost blog on Synology NAS from port forwarding to a Cloudflare Tunnel: no open inbound ports, home IP hidden, ads.txt via a free Worker.
AI & LLM
Jason Yang · 02 Jul, 2026
Screenshots won't paste into Claude Code on Wayland? Install wl-clipboard (not xclip), then restart the CLI. Same fix works for Codex.
Homelab
Jason Yang · 14 Jun, 2026
Bitwarden extension can't log into your self-hosted Vaultwarden? Update the Docker image on Synology NAS to fix the compatibility error.
System Design
Jason Yang · 12 May, 2026
The Interface Segregation Principle in Java: why one fat interface forces empty methods and UnsupportedOperationException, and how small focused interfaces fix it — with phone, printer, and backend examples.
System Design
Jason Yang · 12 May, 2026
The Liskov Substitution Principle in Java: why a subclass that breaks its parent's contract violates LSP, shown with bird, Flyable, and discount policy examples.
System Design
Jason Yang · 12 May, 2026
The Open-Closed Principle in Java: add new behavior without touching stable code, shown with payment methods, interfaces, and Spring Boot style examples.
System Design
Jason Yang · 12 May, 2026
The Single Responsibility Principle in Java: what 'one reason to change' actually means in practice, with backend service and Spring Boot style examples.
System Design
Jason Yang · 12 May, 2026
Dependency Inversion Principle in Java, explained with notification, payment gateway, Spring Boot, and testing examples.
Tools
Jason Yang · 20 Apr, 2026
tmux keeps your sessions alive through dropped SSH connections and closed terminals. Here’s how to install and set it up on Ubuntu/Kubuntu, plus a Ghostty workflow.
AI & LLM
Jason Yang · 06 Dec, 2025
Ubuntu desktop crashing under heavy dev workloads? You're likely hitting the OOM killer. The exact swap and swappiness setup that stops the crashes.
AI & LLM
Jason Yang · 12 Apr, 2026
Pair Claude Code with Codex in one workflow: how I set it up, and why using one model to generate code and another to review it leads to better results.
Tools
Jason Yang · 30 Mar, 2026
Migrate from SecureCRT to Ghostty: SSH config, key-based auth, and shell scripts for a developer-friendly SSH workflow with clean log management.
Coding Interview
Jason Yang · 28 Nov, 2025
Product of Array Except Self (LeetCode 238): the prefix and suffix product trick that avoids division for an O(n) solution, with an interactive visual.
Coding Interview
Jason Yang · 26 Nov, 2025
Best Time to Buy and Sell Stock (LeetCode 121): the single-pass O(n) solution that tracks the lowest price so far, with an interactive step-by-step visual.
Coding Interview
Jason Yang · 03 Dec, 2025
Search in Rotated Sorted Array (LeetCode 33): a modified O(log n) binary search that finds which half is sorted, with an interactive step visual.
Coding Interview
Jason Yang · 28 Nov, 2025
Prefix Sum and Suffix Product explained: what these algorithm terms really mean, why they beat naive recomputation, and where they show up in problems.
Coding Interview
Jason Yang · 27 Nov, 2025
One-pass and greedy algorithms: how a single scan and greedy choices process large data with minimal memory — the core ideas and when they're optimal.
Tools
Jason Yang · 01 Jan, 2026
Format JSON in Vim on Ubuntu with jq — install it, then prettify or minify a buffer with a single `:%!jq` filter, or straight from the command line.
Coding Interview
Jason Yang · 01 Dec, 2025
Maximum Product Subarray (LeetCode 152): why you track max and min together to handle negatives and zeros, and the O(n) dynamic-programming solution.
Coding Interview
Jason Yang · 02 Dec, 2025
Find Minimum in Rotated Sorted Array (LeetCode 153): the O(log n) binary search that locates the rotation pivot, explained step by step with examples.
Coding Interview
Jason Yang · 03 Dec, 2025
Divide and Conquer is more than Merge Sort: the 3-step design paradigm, how it differs from plain recursion, and the interview patterns that use it.
Cloud & DevOps
Jason Yang · 22 Nov, 2025
Change the hostname on Amazon Linux so it survives a reboot — edit /etc/sysconfig/network, /etc/hostname, and /etc/hosts so the change persists.
Homelab
Jason Yang · 22 Nov, 2025
Blocked from updating BIOS due to low battery? Here is a workaround to bypass the restriction on ASUS laptops using the F11 trick.
System Design
Jason Yang · 22 Nov, 2025
Rate Limiting vs Throttling: often used interchangeably but different — rate limiting controls user quotas, throttling protects system health. The key differences.
System Design
Jason Yang · 17 Nov, 2025
Reliability vs availability: reliability is how long a system runs without failing; availability is how much of the time it's up. Examples and how to raise each.
Programming Language
Jason Yang · 22 Mar, 2026
When to use HashSet, LinkedHashSet, or TreeSet in Java: their differences explained simply, and how they map to Python's set, dict, and sorted().
Framework
Jason Yang · 26 Jan, 2026
MapStruct is a compile-time mapping tool for Spring projects that reduces boilerplate, improves safety, and makes DTO mapping cleaner and more testable.
Linux
Jason Yang · 12 Nov, 2025
Set Terminator as the default terminal on Ubuntu. This step-by-step developer guide covers installation, setup, and integration with VS Code.
Programming Language
Jason Yang · 08 Jan, 2026
FastAPI dependency injection is a request-scoped resource engine, not just object passing. Covers lifecycles, dependency chains, testing, and clean architecture.
Programming Language
Jason Yang · 08 Jan, 2026
The Python Singleton pattern ensures one instance per process. Here are the Pythonic ways to do it (module-level, decorator, metaclass), plus thread safety and when not to use it.
Linux
Jason Yang · 12 Nov, 2025
Install and manage a WireGuard VPN client on Ubuntu: set it up, connect with wg-quick up, verify the status, and safely disconnect.
Programming Language
Jason Yang · 27 Nov, 2025
Understand Java's Throwable hierarchy — Error vs Exception, checked vs unchecked, and RuntimeException — to write safer error handling in production apps.
Linux
Jason Yang · 05 Dec, 2025
Still using grep? Meet ripgrep (rg), the ultra-fast Rust search tool that respects .gitignore by default and searches your codebase in seconds.
Linux
Jason Yang · 04 Dec, 2025
Fix "Address already in use" errors on Ubuntu/Linux. Quickly identify port-hogging processes with ss, lsof, or netstat and terminate them safely.
Cloud & DevOps
Jason Yang · 04 Dec, 2025
TCP explained: how the segment header, the 3-way handshake, and flow control build a reliable connection over an unreliable network.
Programming Language
Jason Yang · 28 Nov, 2025
Why real Spring Boot developers prefer unchecked exceptions over the textbook rules — modern exception-handling patterns for clean, maintainable service code.
Programming Language
Jason Yang · 29 Nov, 2025
Design effective custom exceptions in Java: structure them well, separate business and system errors, and integrate cleanly with Spring Boot error handling.
Programming Language
Jason Yang · 29 Nov, 2025
Exception logging in Java done right: catch errors in the correct layer, log them once, and keep clear context — practical patterns for real systems.
Programming Language
Jason Yang · 14 Nov, 2025
Checked exceptions are enforced by the Java compiler; unchecked ones aren't — here's the difference, with the class hierarchy, code examples, and when each applies.
Linux
Jason Yang · 11 Nov, 2025
Fix Vim keeping your IME active in Normal mode (stray Korean/Japanese on j or dd): set up vim-im-select with ibus for automatic, seamless IME switching.
Framework
Jason Yang · 22 Nov, 2025
Integrate Swagger (OpenAPI) into Spring Boot with springdoc: secure your endpoints with JWT auth and auto-generate the API docs.
Framework
Jason Yang · 22 Nov, 2025
Spring Boot 'required a bean of type String' error? It often hits when switching to constructor injection. How to correctly inject @Value into constructors.
Linux
Jason Yang · 26 Nov, 2025
Set up Vim with vim-plug on Ubuntu step by step: create the required directories, configure your .vimrc for a better coding setup, and install plugins.
Linux
Jason Yang · 14 Nov, 2025
Install the latest Vim 9.x on Ubuntu/Linux via PPA and turn the terminal into an IDE: plugin manager setup, a ready .vimrc, and essential plugins.
Cloud & DevOps
Jason Yang · 29 Nov, 2025
The OSI 7-layer model reference: each layer's function, protocols (HTTP, TCP/IP), PDUs, and devices in one table — great for CCNA and CompTIA prep.
Tools
Jason Yang · 01 Dec, 2025
Easily download YouTube videos as high-quality MP3s on Ubuntu. Use yt-dlp and FFmpeg to convert audio and embed thumbnails with simple commands.
Programming Language
Jason Yang · 02 Dec, 2025
Add a gRPC endpoint to a Spring Boot order-service: define .proto files, generate stubs, implement the RPC logic, and expose a new CreateOrder API.
Linux
Jason Yang · 03 Dec, 2025
Need a static WiFi IP on Ubuntu without router access? Learn how to use nmcli for laptops (GUI-safe) or Netplan for servers to set a fixed IP.
Linux
Jason Yang · 04 Dec, 2025
SSH lag on Ubuntu? Your Wi-Fi card may be entering sleep mode. Disable Wi-Fi power management to keep the connection responsive — quick step-by-step.
Linux
Jason Yang · 05 Dec, 2025
Install and configure OpenSSH Server on Ubuntu: the install steps, UFW firewall setup, and connection testing for Ubuntu 22.04, 24.04, and newer.
Linux
Jason Yang · 03 Dec, 2025
Safely open a specific port on Ubuntu with UFW: check status, enable the firewall without losing SSH access, and verify your rules — step by step.
Troubleshooting
Jason Yang · 29 Nov, 2025
Fix the ACPI BIOS Error when installing Ubuntu 22.04 on an ASUS GA502GU: bypass the install freeze with GRUB parameters and repair the bootloader after.
Linux
Jason Yang · 13 Nov, 2025
Set an SSH login banner on Ubuntu 24.04 to warn unauthorized users and hide OS version info — configure /etc/issue.net and sshd_config the right way.
Linux
Jason Yang · 10 Nov, 2025
Chrome breaking Bluetooth audio on Ubuntu 24? Permanently fix the stutter by locking your device to the high-fidelity A2DP profile with pavucontrol.
Framework
Jason Yang · 05 Nov, 2025
React Query (TanStack Query) manages server state: smart query-key design, useQuery caching, and the 3-step optimistic update flow.
Programming Language
Jason Yang · 17 Nov, 2025
Manage FastAPI projects with Poetry: project setup, dependency locking, virtual environments, and testing — the full pyproject.toml workflow for teams.
Programming Language
Jason Yang · 17 Nov, 2025
Migrating Pydantic v1 to v2 in a FastAPI project? Here's the full v1→v2 checklist plus the validator, settings, and config changes that break.
Programming Language
Jason Yang · 30 Nov, 2025
Pydantic vs dataclass: use Pydantic to validate incoming data, dataclasses for internal structures. Real examples and where each one breaks.
Cloud & DevOps
Jason Yang · 18 Nov, 2025
Connect to GCP Cloud SQL (PostgreSQL) from your local machine with Cloud SQL Auth Proxy — an IAM-authenticated TLS tunnel, no public IP or static passwords.
Cloud & DevOps
Jason Yang · 25 Nov, 2025
Publish private Python libraries to GCP Artifact Registry with Poetry: the critical publish-vs-install URL distinction that avoids 404s, plus auth tokens.
Cloud & DevOps
Jason Yang · 07 Dec, 2025
GCP Service Account Impersonation lets your MFA-authenticated account borrow a service account's permissions with short-lived tokens instead of risky key.json files. Here's the 3-step setup.
Coding Interview
Jason Yang · 01 Dec, 2025
Dynamic Programming demystified: at its core, DP is just Divide and Conquer plus memory. See the connection and it gets far easier to explain in interviews.
Coding Interview
Jason Yang · 02 Dec, 2025
Binary Search runs in O(log n) because it halves the search space every step. Here's the intuition, the math proof, and how it compares to linear search.
Linux
Jason Yang · 12 Nov, 2025
Bulk-rename files in Linux with the rename command and Perl regex: normalize whitespace, strip unwanted metadata, and batch-rename in one quick command.
Homelab
Jason Yang · 02 Dec, 2025
Enable SSH on Synology NAS and log in as root using 'sudo -i'. A quick guide for advanced DSM administration and secure terminal access.
Linux
Jason Yang · 12 Nov, 2025
Does your set guifont in .vimrc work on Windows but break on Ubuntu? Learn the critical syntax difference (colons vs. backslashes) for gVim fonts.
Homelab
Jason Yang · 24 Nov, 2025
Add math rendering to Ghost with KaTeX: lightweight LaTeX support via Code Injection to display algorithm complexity like O(n) and equations beautifully.
Tools
Jason Yang · 01 Dec, 2025
Convert WAV or MP4 audio to MP3 with FFmpeg — the exact command-line options for input, bitrate, and quality, with examples you can copy and run.
Tools
Jason Yang · 01 Dec, 2025
Batch convert video (MKV, MP4, AVI) to MP3 on Ubuntu with a simple FFmpeg shell script — no manual re-encoding, run it once on a whole folder.
Tools
Jason Yang · 01 Dec, 2025
Easily merge two mono audio files into a single stereo track using FFmpeg on Ubuntu. Perfect for syncing dual-mic interviews and podcasts.
Tools
Jason Yang · 01 Dec, 2025
Batch trim MP3s on Ubuntu with FFmpeg. Use this simple shell script to cut audio files instantly without re-encoding or quality loss.
Tools
Jason Yang · 26 Nov, 2025
Automate SecureCRT logins to a PostgreSQL database over SSH with a Python Logon Actions script — full setup, the script itself, and jump-server tips.
Tools
Jason Yang · 03 Dec, 2025
Back up and restore your full SecureCRT configuration on Ubuntu with simple terminal commands so you never lose saved sessions when migrating or reinstalling.
Tools
Jason Yang · 26 Nov, 2025
Install SecureCRT on Ubuntu 24.04 LTS and fix the libxcb-cursor0 dependency error — the .deb steps plus the one command that resolves it.
Tools
Jason Yang · 01 Dec, 2025
Fix the SecureCRT "Key exchange failed" error on Ubuntu 22.04. Learn how to enable compatible algorithms like curve25519-sha256 for a successful connection.
Tools
Jason Yang · 02 Dec, 2025
Set up a serial console connection in SecureCRT to HP servers (DL380/DL580, HP-UX) — the exact baud rate, data bits, parity, and flow-control settings.
System Design
Jason Yang · 16 Dec, 2025
Secure PostgreSQL by separating admin and app roles: SQL scripts for schema hardening and automated permissions, for Cloud SQL, AWS RDS, or self-hosted.
System Design
Jason Yang · 20 Dec, 2025
PostgreSQL TIMESTAMP WITH TIME ZONE (timestamptz) normalizes everything to UTC and prevents timezone bugs that only surface in production. Here's why it should be your default and how to migrate safely.
AI & LLM
Jason Yang · 26 Dec, 2025
Claude Code forgets everything when a session ends. Install claude-mem to persist context, fix common issues, and enable long-term memory for real workflows.
AI & LLM
Jason Yang · 28 Dec, 2025
Claude Code can add Co-authored-by metadata to your commits, causing Claude to appear in GitHub Contributors. Here’s why it happens and how to disable it.
Homelab
Jason Yang · 01 Jan, 2026
Vaultwarden (Bitwarden) on Synology NAS with Docker: a secure, lightweight, free LastPass alternative with HTTPS. Here's the full setup.
Homelab
Jason Yang · 01 Jan, 2026
Docmost on Synology NAS with Docker, step by step — including the reverse proxy + WebSocket setup that fixes the 'Real-time editor connection lost' error.
Programming Language
Jason Yang · 01 Jan, 2026
Lombok's @Builder ignores your field defaults — use @Builder.Default or final to keep them. Here's why it happens and how to fix it.
AI & LLM
Jason Yang · 03 Jan, 2026
Generate speaker-labeled subtitles on Ubuntu 24.04 with Whisper and pyannote.audio (CUDA GPU) — a full working setup from Python 3.10 to a combined transcript + speaker SRT.