<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>David Gray — Writing</title><description>I secure and scale Kubernetes and cloud-native systems, with a focus on reliable delivery, infrastructure-as-code, and security embedded in the platform.</description><link>https://davidmgray.com/</link><language>en-us</language><item><title>Connecting the Dots: How a Sign Language Capstone Got Me Hooked on AI</title><link>https://davidmgray.com/blog/connecting-the-dots-sign-language-ai/</link><guid isPermaLink="true">https://davidmgray.com/blog/connecting-the-dots-sign-language-ai/</guid><description>Looking back at my senior capstone project at Missouri State — building a real-time American Sign Language smart home controller with MediaPipe, custom CNNs, and networking — and how it sparked my path in machine learning.</description><pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate><category>ai</category><category>machine-learning</category><category>computer-vision</category><category>tensorflow</category><category>mediapipe</category><category>capstone</category></item><item><title>GPU vs. CPU: Roofline Benchmarks on Apple Silicon MPS with neural-cost v0.2.0</title><link>https://davidmgray.com/blog/neural-cost-gpu-benchmark/</link><guid isPermaLink="true">https://davidmgray.com/blog/neural-cost-gpu-benchmark/</guid><description>The neural-cost v0.2.0 GPU benchmark moves from CPU roofline analysis to Apple Silicon&apos;s MPS GPU backend — measuring PyTorch and JAX across five architectures, four batch sizes, and both eager and compiled execution modes.</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>ml</category><category>performance</category><category>benchmarks</category><category>pytorch</category><category>jax</category><category>gpu</category><category>apple-silicon</category></item><item><title>PyTorch vs. JAX vs. TensorFlow: A Roofline Benchmark Across 5 Architectures</title><link>https://davidmgray.com/blog/ml-framework-comparison/</link><guid isPermaLink="true">https://davidmgray.com/blog/ml-framework-comparison/</guid><description>An empirical investigation comparing PyTorch 2.14, JAX 0.11, and TensorFlow across five model architectures and four batch sizes, measuring compiler speedups, kernel overheads, and hardware limits on Apple Silicon.</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><category>ml</category><category>performance</category><category>benchmarks</category><category>pytorch</category><category>jax</category><category>tensorflow</category></item><item><title>neural-cost: Roofline Analysis Across PyTorch, JAX, and TensorFlow</title><link>https://davidmgray.com/blog/neural-cost/</link><guid isPermaLink="true">https://davidmgray.com/blog/neural-cost/</guid><description>A framework-neutral Python library that estimates a neural network&apos;s FLOPs and tensor traffic, measures its runtime, and uses a roofline model to tell you exactly where performance is being left on the table.</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><category>ml</category><category>performance</category><category>python</category><category>pytorch</category><category>jax</category><category>tensorflow</category></item><item><title>I rebuilt this site so that publishing costs one file</title><link>https://davidmgray.com/blog/why-i-rebuilt-this-site/</link><guid isPermaLink="true">https://davidmgray.com/blog/why-i-rebuilt-this-site/</guid><description>The old site was a single 41,000-character index.html. Every change was archaeology. Here is what I replaced it with and why the constraint was maintenance, not design.</description><pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate><category>astro</category><category>web</category><category>tooling</category></item></channel></rss>