<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>John Hodge · Blog</title><description>Technical notes on applied ML, physics-based modeling, and engineering decisions for physical systems.</description><link>https://john-hodge.com/</link><language>en-us</language><item><title>slopscore 0.9.0 adds a dimension for manufactured sincerity</title><link>https://john-hodge.com/blog/slopscore-0-9-0-performative-candor/</link><guid isPermaLink="true">https://john-hodge.com/blog/slopscore-0-9-0-performative-candor/</guid><description>Candor-heavy prose scored 0.0 on every slop dimension and earned credit as human writing. Version 0.9.0 adds performative_candor and ten rules to score it.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><category>performative candor</category><category>manufactured sincerity</category><category>AI writing tells</category><category>prose linter</category><category>slopscore</category><category>AI slop</category><category>writing quality</category><category>non-native English bias</category><category>pre-commit</category><category>static analysis</category><category>Python</category><category>open source</category></item><item><title>Auditing tool-call traces in MCP agents</title><link>https://john-hodge.com/blog/auditing-tool-call-traces-mcp-agents/</link><guid isPermaLink="true">https://john-hodge.com/blog/auditing-tool-call-traces-mcp-agents/</guid><description>An outcome grader tells you the refund never happened. Only the trace tells you which of the four layers between the model and the payment API broke.</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><category>MCP tracing</category><category>Model Context Protocol</category><category>tool call audit</category><category>agent observability</category><category>agent debugging</category><category>MCP Inspector</category><category>OpenTelemetry GenAI</category><category>trace redaction</category><category>agent evals</category><category>tool call errors</category><category>isError</category><category>agent telemetry</category></item><item><title>How to measure a grader</title><link>https://john-hodge.com/blog/how-to-measure-a-grader/</link><guid isPermaLink="true">https://john-hodge.com/blog/how-to-measure-a-grader/</guid><description>A grader is a role in an eval rather than a technology. Deterministic checks and LLM judges both fill it, and each carries a different measurement cost.</description><pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate><category>grader</category><category>LLM-as-judge</category><category>agent evals</category><category>eval harness</category><category>judge calibration</category><category>inter-annotator agreement</category><category>Cohen&apos;s kappa</category><category>position bias</category><category>verbosity bias</category><category>eval validity</category><category>deterministic grading</category><category>reward hacking</category></item><item><title>Failure taxonomies for ML and decision systems</title><link>https://john-hodge.com/blog/failure-taxonomies-ml-decision-systems/</link><guid isPermaLink="true">https://john-hodge.com/blog/failure-taxonomies-ml-decision-systems/</guid><description>Aggregate scores detect that behavior changed. Bucketing failures by stage, causal role, and opportunity rate is what routes a fix to the right owner.</description><pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate><category>failure taxonomy</category><category>error analysis</category><category>ML evaluation</category><category>failure modes</category><category>agent evals</category><category>root cause analysis</category><category>model debugging</category><category>slice discovery</category><category>benchmark validity</category><category>decision systems</category><category>failure bucketing</category><category>eval metrics</category></item><item><title>phased-array-systems 0.9.0: validated physics and multi-objective trade studies</title><link>https://john-hodge.com/blog/phased-array-systems-0-9-0/</link><guid isPermaLink="true">https://john-hodge.com/blog/phased-array-systems-0-9-0/</guid><description>v0.9.0 brings NSGA-II multi-objective optimization and Sobol sensitivity to phased-array trade studies, on top of ITU-R propagation, real clutter models, and exact detection statistics.</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><category>phased array trade study</category><category>MDAO</category><category>NSGA-II</category><category>Pareto front</category><category>radar detection range</category><category>link budget</category><category>ITU-R P.676</category><category>Sobol sensitivity analysis</category><category>digital beamforming architecture</category><category>RF system engineering</category><category>requirements verification</category><category>Python radar modeling</category></item><item><title>phased-array-modeling 1.4.0: polarized patterns for phased arrays</title><link>https://john-hodge.com/blog/phased-array-modeling-1-4-0/</link><guid isPermaLink="true">https://john-hodge.com/blog/phased-array-modeling-1-4-0/</guid><description>v1.4.0 adds a vector pattern engine: polarized element models, co/cross-pol cuts, axial ratio and XPD maps, measured pattern import, and polarization-correct conformal arrays.</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><category>phased array polarization</category><category>co-pol cross-pol pattern</category><category>axial ratio</category><category>cross-polarization discrimination</category><category>Ludwig-3</category><category>polarized element pattern</category><category>conformal array</category><category>antenna array Python</category><category>phased array modeling</category><category>measured element pattern</category><category>Python antenna library</category><category>XPD</category></item><item><title>The state of the OpenTelemetry GenAI semantic conventions (July 2026)</title><link>https://john-hodge.com/blog/opentelemetry-genai-semantic-conventions/</link><guid isPermaLink="true">https://john-hodge.com/blog/opentelemetry-genai-semantic-conventions/</guid><description>The OTel GenAI conventions moved to a dedicated repository with no versioned release yet, nothing GenAI-specific is stable, and frameworks emit several generations at once. The current map.</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><category>OpenTelemetry GenAI semantic conventions</category><category>gen_ai attributes</category><category>gen_ai.provider.name</category><category>gen_ai.system</category><category>LLM observability</category><category>agent tracing</category><category>OTEL_SEMCONV_STABILITY_OPT_IN</category><category>gen_ai.evaluation.result</category><category>invoke_agent span</category><category>LLM telemetry</category><category>semantic conventions update</category><category>GenAI observability</category></item><item><title>metasurface-py: a Python toolkit for programmable electromagnetic surfaces</title><link>https://john-hodge.com/blog/metasurface-py-python-metasurface-design/</link><guid isPermaLink="true">https://john-hodge.com/blog/metasurface-py-python-metasurface-design/</guid><description>An open-source Python toolkit for RIS, reflectarray, and metasurface antenna design: beam steering, phase quantization, hardware constraints, link budgets, sensing, and optimization.</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><category>Python metasurface design</category><category>RIS simulation Python</category><category>reflectarray Python</category><category>metasurface optimization</category><category>reconfigurable intelligent surface software</category><category>beam steering Python</category><category>phase quantization</category><category>RIS link budget</category><category>ISAC sensing</category><category>metasurface antenna</category><category>open source RF engineering</category><category>metasurface-py</category></item><item><title>OpenEM Wave Lab: an interactive browser lab for electromagnetic wave physics</title><link>https://john-hodge.com/blog/openem-wave-lab-interactive-em-physics/</link><guid isPermaLink="true">https://john-hodge.com/blog/openem-wave-lab-interactive-em-physics/</guid><description>An open-source browser lab for EM wave physics: plane waves, Fresnel coefficients, phase vs group velocity, and standing waves, computed live from validated closed-form models.</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><category>electromagnetic wave simulation</category><category>interactive electromagnetics</category><category>EM wave visualization</category><category>Fresnel equations</category><category>Brewster angle</category><category>total internal reflection</category><category>phase velocity vs group velocity</category><category>standing wave ratio</category><category>RF engineering education</category><category>plane wave polarization</category><category>Poynting vector</category><category>physics education tools</category></item><item><title>Programming the aperture: my PhD research on reconfigurable intelligent metasurfaces</title><link>https://john-hodge.com/blog/reconfigurable-intelligent-metasurfaces-phd-research/</link><guid isPermaLink="true">https://john-hodge.com/blog/reconfigurable-intelligent-metasurfaces-phd-research/</guid><description>A retrospective on my Virginia Tech PhD: reconfigurable intelligent metasurfaces (RIS) for beam steering and index modulation, a fabricated two-bit prototype, and generative deep learning for inverse design.</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><category>reconfigurable intelligent metasurfaces</category><category>reconfigurable intelligent surface</category><category>RIS</category><category>programmable metasurface</category><category>reflectarray</category><category>index modulation</category><category>metasurface beamforming</category><category>inverse design</category><category>generative deep learning electromagnetics</category><category>6G wireless</category><category>metasurface hardware prototype</category><category>PhD research</category></item><item><title>How to build an eval harness for LLM agents</title><link>https://john-hodge.com/blog/llm-agent-eval-harness/</link><guid isPermaLink="true">https://john-hodge.com/blog/llm-agent-eval-harness/</guid><description>A working recipe for evaluating agentic workflows: isolated trials, outcome-first grading, invariant gates, reliability across repeated runs, and a benchmark you can trust.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>LLM agent evals</category><category>eval harness</category><category>agent evaluation</category><category>agent benchmarks</category><category>pass^k</category><category>LLM-as-judge</category><category>agent testing</category><category>reward hacking</category><category>trace grading</category><category>agent reliability</category><category>AI agent testing</category><category>evaluating AI agents</category></item><item><title>Agentic systems change what engineers review</title><link>https://john-hodge.com/blog/what-engineers-review-in-agentic-systems/</link><guid isPermaLink="true">https://john-hodge.com/blog/what-engineers-review-in-agentic-systems/</guid><description>When a model chooses tools and actions at runtime, requirements and code review do not disappear. Engineers review the decision environment: tools, permissions, traces, and evals.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>agentic systems</category><category>AI agents</category><category>agentic workflows</category><category>code review for AI agents</category><category>agent observability</category><category>agent evaluation</category><category>LLM tool use</category><category>agent harness</category><category>AI requirements</category><category>human oversight of AI</category><category>software engineering with AI</category><category>agent traces</category></item><item><title>Tracing a local LLM agent end to end: Strands Agents, Ollama, and OpenTelemetry</title><link>https://john-hodge.com/blog/strands-ollama-opentelemetry-local-agent-tracing/</link><guid isPermaLink="true">https://john-hodge.com/blog/strands-ollama-opentelemetry-local-agent-tracing/</guid><description>Instrument a fully local tool-calling agent with OpenTelemetry: Strands Agents plus Ollama, traces in Jaeger or Grafana, no cloud APIs and no observability SaaS.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Strands Agents</category><category>Ollama</category><category>OpenTelemetry</category><category>LLM observability</category><category>local LLM agent</category><category>agent tracing</category><category>Jaeger</category><category>Grafana</category><category>GenAI semantic conventions</category><category>agent evals</category><category>tool calling</category><category>LLM agent tutorial</category></item><item><title>planner-lab: a financial planning agent where the LLM never does the math</title><link>https://john-hodge.com/blog/auditable-financial-planning-agent/</link><guid isPermaLink="true">https://john-hodge.com/blog/auditable-financial-planning-agent/</guid><description>planner-lab turns a typed household case file into a retirement-readiness memo. Deterministic code does the math; a critic gate blocks any memo with untraceable numbers.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>auditable LLM agents</category><category>agent verification</category><category>LLM critic gate</category><category>financial planning agent</category><category>retirement planning software</category><category>funded ratio</category><category>Monte Carlo retirement simulation</category><category>Strands Agents</category><category>Model Context Protocol</category><category>local LLM</category><category>Ollama agent</category><category>open source Python</category></item><item><title>APAB 0.3.0: observability and provenance for agentic phased-array design</title><link>https://john-hodge.com/blog/apab-0-3-0/</link><guid isPermaLink="true">https://john-hodge.com/blog/apab-0-3-0/</guid><description>APAB 0.3.0 makes agentic phased-array design auditable: OpenTelemetry traces of every MCP tool call, runtime provenance manifests, real LLM providers with uniform cost tracking, and a golden-task eval harness.</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><category>agentic phased-array design</category><category>AI antenna design</category><category>LLM agent for RF engineering</category><category>Model Context Protocol</category><category>MCP engineering tools</category><category>phased array design automation</category><category>agentic workflow</category><category>APAB</category><category>OpenTelemetry LLM tracing</category><category>agent observability</category><category>run provenance</category><category>reproducible AI workflow</category><category>phased array antenna design</category></item><item><title>Gumline, a private dental habit tracker</title><link>https://john-hodge.com/blog/gumline-dental-habit-tracker/</link><guid isPermaLink="true">https://john-hodge.com/blog/gumline-dental-habit-tracker/</guid><description>A private, on-device iPhone app for logging your dental routine and remembering the exact spots your dentist flagged. Why I built it and how it works.</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><category>dental habit tracker</category><category>brushing tracker</category><category>floss reminder</category><category>oral hygiene app</category><category>dentist notes app</category><category>tooth map</category><category>private health app</category><category>on-device</category><category>iOS app</category><category>habit streak</category></item><item><title>Model-based engineering for phased arrays: from a radar project to open-source tools</title><link>https://john-hodge.com/blog/model-based-engineering-phased-arrays/</link><guid isPermaLink="true">https://john-hodge.com/blog/model-based-engineering-phased-arrays/</guid><description>A graduate radar project led me to MBSE and MDAO, then to model-based engineering of AESA phased-array radar systems, and finally to a set of open-source phased-array design tools.</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><category>model-based engineering</category><category>MBSE</category><category>MDAO</category><category>multidisciplinary design optimization</category><category>phased array design</category><category>AESA radar</category><category>model-based systems engineering</category><category>SWaP-C</category><category>digital engineering</category><category>radar systems</category><category>open-source phased array</category><category>antenna design</category><category>trade study</category><category>ModelCenter</category><category>metasurface</category><category>reconfigurable intelligent surface</category></item><item><title>pitchphys, a baseball pitch physics simulator</title><link>https://john-hodge.com/blog/pitchphys-baseball-pitch-simulator/</link><guid isPermaLink="true">https://john-hodge.com/blog/pitchphys-baseball-pitch-simulator/</guid><description>A browser simulator for the physics of a thrown baseball: gravity, drag, and the Magnus effect. Built to understand why spin moves a pitch, and where the model stops.</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><category>Magnus effect</category><category>baseball physics</category><category>pitch trajectory</category><category>spin rate</category><category>induced vertical break</category><category>active spin</category><category>gyro spin</category><category>drag coefficient</category><category>aerodynamics</category><category>Streamlit</category></item><item><title>Connect Four AI: the minimax algorithm behind Neon Drop</title><link>https://john-hodge.com/blog/connect-four-ai-minimax/</link><guid isPermaLink="true">https://john-hodge.com/blog/connect-four-ai-minimax/</guid><description>How the Connect Four AI in Neon Drop works: minimax with alpha-beta pruning, a window-scoring heuristic, tunable difficulty, and what it reveals about four-in-a-row strategy.</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><category>connect four AI</category><category>connect four algorithm</category><category>connect four minimax</category><category>alpha-beta pruning</category><category>connect four strategy</category><category>four in a row AI</category><category>connect four evaluation function</category><category>is connect four solved</category><category>how to build a connect four AI</category><category>game tree search</category></item><item><title>Physics, learning, and control, in one helicopter simulator</title><link>https://john-hodge.com/blog/helicopter-ml-simulator/</link><guid isPermaLink="true">https://john-hodge.com/blog/helicopter-ml-simulator/</guid><description>An interactive browser simulator of the Abbeel-Coates-Ng autonomous helicopter: flight physics, apprenticeship trajectory learning, system identification, and LQR control.</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><category>apprenticeship learning</category><category>learning from demonstration</category><category>helicopter dynamics</category><category>system identification</category><category>LQR control</category><category>imitation learning</category><category>physics simulation</category><category>machine learning for control</category><category>robotics</category><category>Abbeel Coates Ng</category></item><item><title>The antenna is the modulator: index modulation with reconfigurable metasurfaces</title><link>https://john-hodge.com/blog/metasurface-index-modulation/</link><guid isPermaLink="true">https://john-hodge.com/blog/metasurface-index-modulation/</guid><description>A plain-language explainer of our IEEE JSTSP paper: reconfigurable metasurfaces that perform index modulation for 6G, encoding bits in which beam or frequency harmonic is active, grounded in full-wave EM.</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><category>reconfigurable intelligent surface</category><category>RIS</category><category>index modulation</category><category>metasurface</category><category>6G wireless</category><category>beam steering</category><category>frequency harmonics</category><category>mmWave</category><category>reflectarray</category><category>wireless communications</category></item><item><title>Modeling Roasted Coffee as a Perishable Asset</title><link>https://john-hodge.com/blog/modeling-roasted-coffee-as-a-perishable-asset/</link><guid isPermaLink="true">https://john-hodge.com/blog/modeling-roasted-coffee-as-a-perishable-asset/</guid><description>Roasted coffee has a hump-shaped quality curve: it improves while resting, peaks, then stales. That makes it a clean toy problem for perishable-inventory pricing, storage economics, and a small client-side model.</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate><category>perishable inventory</category><category>dynamic pricing</category><category>revenue management</category><category>newsvendor</category><category>coffee freshness</category><category>client-side modeling</category><category>TypeScript</category><category>open source</category></item><item><title>opensatcom: an open toolkit for satcom link budgets and trade studies</title><link>https://john-hodge.com/blog/opensatcom/</link><guid isPermaLink="true">https://john-hodge.com/blog/opensatcom/</guid><description>An open-source Python toolkit for satellite communications: snapshot link budgets, ITU-R propagation, a DVB-S2 modem, multibeam payloads, and Pareto trade studies.</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><category>satellite communications</category><category>link budget</category><category>ITU-R propagation</category><category>DVB-S2</category><category>rain fade</category><category>phased array</category><category>trade study</category><category>Pareto optimization</category><category>RF engineering</category><category>Python</category></item><item><title>slopscore: a transparent linter for AI-slop writing patterns</title><link>https://john-hodge.com/blog/slopscore/</link><guid isPermaLink="true">https://john-hodge.com/blog/slopscore/</guid><description>A rule-based prose linter that scores formulaic, generic, low-specificity writing patterns with visible evidence spans. It scores patterns rather than authorship.</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><category>AI slop</category><category>prose linter</category><category>writing quality</category><category>AI detection</category><category>non-native English bias</category><category>SARIF</category><category>pre-commit</category><category>continuous integration</category><category>open source</category><category>Python</category></item><item><title>An open MDO toolkit for axial-flux robot actuators</title><link>https://john-hodge.com/blog/mdo-for-axial-flux-actuators/</link><guid isPermaLink="true">https://john-hodge.com/blog/mdo-for-axial-flux-actuators/</guid><description>axfluxmdo: fast analytical models, 2.5D annular analysis, Pareto trade studies, and FEA hooks for early-stage axial-flux motor design, aimed at robot actuators.</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><category>axial-flux motor</category><category>robot actuator</category><category>multidisciplinary design optimization</category><category>Pareto optimization</category><category>torque density</category><category>pole pairs</category><category>electric machine design</category><category>OpenMDAO</category><category>pymoo</category><category>direct-drive actuator</category></item><item><title>An agentic workflow for phased-array design, from unit cell to link margin</title><link>https://john-hodge.com/blog/agentic-workflow-for-phased-arrays/</link><guid isPermaLink="true">https://john-hodge.com/blog/agentic-workflow-for-phased-arrays/</guid><description>I built APAB, an LLM that orchestrates a chain of phased-array physics tools through MCP and emits an auditable run bundle. The agent drives; the solvers compute.</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate><category>phased array</category><category>LLM agent</category><category>MCP</category><category>Model Context Protocol</category><category>agentic workflow</category><category>EdgeFEM</category><category>mutual coupling</category><category>provenance</category><category>RF engineering</category><category>Ollama</category></item><item><title>Predicting the next pitch, by decomposition</title><link>https://john-hodge.com/blog/predicting-the-next-pitch/</link><guid isPermaLink="true">https://john-hodge.com/blog/predicting-the-next-pitch/</guid><description>A baseball pitch-prediction package as a lab: separate pitcher pitch-mix, count, fatigue, and sequence memory, and test which models actually use each.</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate><category>pitch sequencing</category><category>baseball analytics</category><category>sequence modeling</category><category>baseline ladder</category><category>model calibration</category><category>data leakage</category><category>cross-validation</category><category>machine learning evaluation</category><category>log loss</category><category>Statcast</category></item><item><title>Modeling phased arrays in Python, from physics to trade study</title><link>https://john-hodge.com/blog/modeling-phased-arrays-in-python/</link><guid isPermaLink="true">https://john-hodge.com/blog/modeling-phased-arrays-in-python/</guid><description>Two open Python tools for phased arrays: one computes the beam pattern, the other asks whether a design meets its link, radar, cost, and reliability margins.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><category>phased array</category><category>antenna pattern</category><category>array factor</category><category>beam steering</category><category>grating lobes</category><category>radar equation</category><category>link budget</category><category>trade study</category><category>Pareto frontier</category><category>RF systems engineering</category></item><item><title>Sizing AI training by its bottleneck resource</title><link>https://john-hodge.com/blog/sizing-ai-training-by-bottleneck/</link><guid isPermaLink="true">https://john-hodge.com/blog/sizing-ai-training-by-bottleneck/</guid><description>A small open model for AI hardware: find whether a workload is compute-, memory-, or network-bound, then price the resource that actually binds it.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><category>AI training hardware</category><category>GPU sizing</category><category>memory bandwidth</category><category>roofline model</category><category>arithmetic intensity</category><category>HBM</category><category>cost per TB/s</category><category>KV cache</category><category>LLM inference</category><category>tokens per second</category></item><item><title>Orbital data centers, by the numbers</title><link>https://john-hodge.com/blog/orbital-data-centers-by-the-numbers/</link><guid isPermaLink="true">https://john-hodge.com/blog/orbital-data-centers-by-the-numbers/</guid><description>An open, physics-based model of space-based AI data centers: why inter-satellite links are easy, the downlink is hard, and orbit runs about 19x Earth&apos;s cost today.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>space-based AI data centers</category><category>orbital data centers</category><category>Project Suncatcher</category><category>Starcloud</category><category>levelized cost of compute</category><category>optical downlink bandwidth</category><category>thermal management in space</category><category>delivered compute</category><category>AI infrastructure</category></item></channel></rss>