CI Gates, Test Result Caches, and the Code Graph That Might Tell Us What to Test
What I learned from splitting Rails CI by risk, caching exact test results, and exploring whether AI and code graphs can make test selection safer.
What I learned from splitting Rails CI by risk, caching exact test results, and exploring whether AI and code graphs can make test selection safer.
A REX production incident exposed the gap between a successful Kubernetes rollout and a working application, and what we changed to close it.
I am exploring how a one-person company can use agents, observability, and market intelligence without turning automation into an ungoverned second company.
A practical, architectural comparison of Hermes, OpenClaw, NanoClaw, ZeroClaw, and IronClaw, and why a layered agent system beats picking one winner.
Two years after publishing a guide to restricting OpenVPN clients to specific IPs, I audited the server it built, and most of the findings trace back to the guide.
A practical comparison of Graft, Graphify, and codebase-memory-mcp: what each indexes, how each feeds coding agents, and when to use one instead of another.
A practical way for small education and SaaS teams to diagnose Rails or LMS platform friction and decide whether a rewrite is actually justified.
Why a Rails test suite can fail on Ubuntu because of an older native libvips, and how to upgrade it safely without confusing it with the ruby-vips gem.
A repeatable way to download, serve, benchmark, and choose small GGUF models for Hermes and coding-agent work across different CPU and memory budgets.
A practical guide to using Hermes Agent with a local Gemma model for routine coding work, while reserving cloud models for tasks that genuinely need them.
从 Prime Agent、Cloudflare Computer、agent-skills、mattpocock/skills 和 Superpowers 看 Agent 基础设施正在如何从聊天框走向持久工作台、长任务运行时和工程方法论。
What a routine security audit found on a small always-on dev VM: passwordless databases, no host firewall, over-privileged jobs, and how it got fixed.
Notes on turning repeated AI workflows into scripts, skills, cron jobs, and guardrails so agents become cheaper, safer, and more useful over time.
A practical reflection on prompt, context, memory, loop, and graph engineering, and what each layer reveals about working with LLMs day to day.
What Oracle's smaller Ampere A1 Always Free limits mean for a self-hosted ARM server, and how I redesigned mine around a 12 GB, 2-core budget.
How a moving set of Rails CI flakes exposed shared download state, Selenium stale-node retries, and specs asserting before the browser settled.
Notes from wiping an old single-node k3s setup and rebuilding it with a smaller, cleaner baseline for ingress, certificates, and persistent storage.
A practical note on promoting repeated AI workflows into slash commands, scripts, and cron jobs, weighing judgment, cost, and safety trade-offs.
A practical look at Alibaba OpenCodeReview, why diff-only AI review is not enough, and how to use AI reviewers without trusting them too much.
How I gave Hermes a persistent local code graph, semantic diagnostics, and stable project instructions without turning agent memory into a stale symbol index.
Notes on building an AI speaking practice app: STT, TTS, Gemini, ElevenLabs, latency, topic control, and useful feedback for oral English learners.
How I wired Hermes Agent on a remote Linux box into Telegram, email, calendar, error monitoring, GitHub, and a daily morning briefing routine.
A progressive escalation guide to debugging Ruby applications in Kubernetes production without restarting: rbspy, kubectl debug, signals, rbtrace, and gdb.
Small probe tasks for testing local AI agents: function calling, skill awareness, prompt-length pressure, cache behavior, and layer-by-layer debugging.
A step-by-step runbook for wiring LM Studio as a local OpenAI-compatible backend for Pi agents and OpenCode, with config examples and troubleshooting.
How LLM coding agents actually build software: the model, the tool loop, context management, precise patching, and verification against real tests.
Using LM Studio and Gemma as a local OpenAI-compatible backend for coding agents: what broke, which settings mattered, and where it still falls short.
A field guide for AI-heavy early adopters on when subagents in Codex speed work up, when they slow it down, and how to use them without creating chaos.
How to use git worktree to run parallel AI coding sessions safely, with practical patterns for isolating gems, databases, ports, and runtime state.
A practical introduction to the main building blocks of modern AI development, with diagrams that show how MCP, skills, agents, rulesets, and hooks work together.
The closing piece of a 12-part series on how software is shifting from apps you click through to intelligent systems and a personal OS that act for you.
A week of testing OpenHands, the autonomous AI coding agent, on real projects: what worked, what failed, and the setup that made it reliable.
How to fix Sentry's GitHub integration when it shows connected but issues won't create, plus why linking Sentry errors to GitHub issues is worth the setup.
A macOS Terminal script that reads the I/O Kit registry to check negotiated wattage and voltage, so you can tell a fast USB-C cable from a slow one.
Stacked Git (StGit) separates the messy work of thinking through code from the clean history Git commits are for, using a patch-stack workflow.
A keyword-argument mismatch between Ruby 3.4 and connection_pool 3.x breaks RedisCacheStore at Rails 8.1.1 boot, fixed with a patch loaded before initializers run.
Static CSS color values vs. variables: why hard-coded colors bite you later, and how to structure colors so they stay maintainable.
How to cut the latency cost of moving from a shared database to an API-driven architecture, using caching, request aggregation, and async writes.
A working comparison of how Python, JavaScript, Ruby, PHP, Rust, and Go implement closures and lazy iteration, with a runnable counter and generator example for each.
React Native's default JS engine moved from JSC to Hermes for faster startup and lower memory use, and here is how to control which one your build uses.
Comparing srcset and picture, the native HTML approach to responsive images, against JavaScript solutions like jQuery Foundation Interchange.
The difference between Web Workers and Service Workers: one offloads CPU work, the other intercepts network requests, and most apps eventually need both.
How Ruby's Global VM Lock limits threaded CPU-bound code, and how Ractor bypasses it entirely by trading shared memory for message passing.
How to tell whether a slow endpoint is I/O bound or CPU bound, using system monitors, timing, and cProfile, and why the fix differs for each.
Catch-all exception handlers hide the real bug. Debuggers that pause on every thrown exception, caught or not, find it faster than logging ever will.
Why Sentry and Bugsnag catch more JavaScript errors than custom try/catch logic, and how to close the gap with global handlers and rejection listeners.
Why Nokogiri XPath queries failed in Docker but not on an M1 Mac: a libxml2 version mismatch caused by indirect dynamic library loading in Ruby.
How British Summer Time breaks Ruby tests, cron schedules, and cloud functions that assume UTC, and how to write timezone-aware specs instead.
The code review anti-patterns that slow teams down most: giant PRs, style-war comments, and reviews that skip the business context entirely.
本文用 Ruby 代码示例,剖析 DRY 与 AHA、YAGNI 与可扩展性设计、继承与组合等几对看似冲突的编程原则,说明该如何在实践中权衡取舍。
A Rails test suite hung intermittently until transactional tests, ActiveJob, and ActiveStorage turned out to be racing over the same locked rows.
Runtime method overrides work very differently in PHP and Ruby: one has no rollback mechanism, the other builds aliasing and scoping in from the start.
npm ci is not the script-free install it looks like; it still runs prepare scripts for Git-based dependencies, which broke Husky in CI.
When async updates to the same record can finish in any order, the oldest write can silently overwrite the newest one; here is how to stop that.
Poetry and uv solve overlapping problems in Python dependency management; here is where each one wins, and how to use them together.
Two ways to avoid CORS errors in local React development: the package.json proxy field for one backend, or http-proxy-middleware for several.
Compares Ruby's byebug, Python's pdb, and PHP's Xdebug side by side, with the core commands and a working example for each language.
Comparing Ruby retry patterns, exception-based retry, conditional checks, and exponential backoff, and when each keeps performance acceptable.
How to design a booking API that replaces regular time slots with alternatives, using server-side merging, cache versioning, and idempotency keys.
Five parameter-related code smells, from boolean flags to long argument lists, and the refactor that turns each function into one that does one thing.
A framework for deciding how much to test: the testing pyramid, layered test responsibility by architecture tier, and what makes test data good.
When Laravel's save() silently returns false versus when saveOrFail() throws, and how to pair both with validation and database transactions.
How to debug Unicode font rendering in Ruby's Prawn PDF library and work around PDF::Inspector's limits when testing non-ASCII characters like it.
Ruby's filter_map cuts a multi-pass select/map/uniq chain to one pass, and a plain each loop goes further still when performance actually matters.
Practical notes on Android build and debug workflow: managing Java versions with jenv, wireless ADB debugging, release signing, and logcat filtering.
Setting up Neovim, Fugitive, and Delta for three-way merges gives you a fast, keyboard-driven way to resolve Git conflicts without leaving the terminal.
How to inject a Sass variable, like a theme's primary color, at build time using a SASS_OPTIONS environment variable and a custom webpack additionalData function.
What changes when you upgrade React 17 to 18: the new root API, automatic batching, Strict Mode's double-invoked effects, and test setup fixes.
A practical walkthrough of upgrading a React 16 app to React 17, covering dependency updates, Jest and Enzyme test fixes, and new ESLint warnings.
How to use adb shell pm to list, install, uninstall, disable, and inspect Android packages, including removing bloatware without root.
Comparing rufus-scheduler's in-process polling loop with sidekiq-scheduler's Redis-backed queue to pick the right one for single-process vs distributed apps.
How rufus-scheduler's single-threaded main loop triggers, times out, and runs jobs, and where a timer-based rewrite would scale better.
Rack is the standard interface between Ruby web servers and frameworks, traced here through its middleware stack from request to response.
A rundown of debugging React apps: React Developer Tools in the browser, inspecting React Native, and running Jest tests under a real debugger.
Why 0.1 + 0.2 doesn't equal 0.3, how Ruby's arbitrary-precision integers avoid overflow, and how JavaScript's BigInt does the same for large integers.
SCORM is the packaging and tracking standard that lets e-learning content run and report progress consistently across different learning platforms.
Rounding the same float, 2.675, to two decimal places gives different answers in C#, PHP, Go, Python, JavaScript, and Ruby, for concrete reasons.
Ruby's 0.1 + 0.33 does not equal 0.43 because of binary floating-point rounding, and Rational, BigDecimal, and tolerance comparisons each fix it differently.
A collection of .irbrc helpers for tracing method calls, logging SQL queries, profiling code, and inspecting Ruby objects during Rails console debugging.
When two services share one database, a schema change in either one can silently break the other, and here is how to split ownership with APIs or events.
FFmpeg one-liners to scale and compress images: fixed dimensions, percentage scaling, and aspect-ratio-safe resizing.