Your HTML Comments Are More Powerful Than You Think: Building Custom Validation Grammars with HtmlAgilityPackPublished on October 1, 2025 in 20 minutes to read We were getting ready to redesign and simplify phobos.petabridge.com - our Akka.NET observability platform documentation site. The plan was to remove a bunch of old pages, restructure the information architecture, and redirect everything properly so we wouldn’t break any inbound links from Google, Stack Overflow, or the blog posts referencing our documentation. The problem: how do we know we’re not blowing up external links during this restructuring? We needed full, measurable, observable control over the sitemap as we made changes. Every redirect had to work. Every removed page needed a destination. One broken link could cost us traffic and credibility. At its core, this is a continuous integration problem. So I built LinkValidator - a CLI tool to validate all internal and external links in our statically generated sites during CI/CD on Azure DevOps and GitHub Actions. The goal: fail the build if we break anything. Crawl the site, validate every link, and catch problems before they reach production. Then I hit an immediate problem. Our documentation has links to localhost resources - Grafana dashboards at I needed a way to selectively suppress link validation, and I wanted it to be contextual - right there in the HTML where the “broken” link lives, not buried in some global configuration file that’s completely divorced from the context of the page itself. Here’s how I built that in C# using HtmlAgilityPack and a little sprinkling of Akka.NET. ... |
I write about .NET, open source software, the Microsoft ecosystem, my adventures with startups, and outer space.
Stop Failing The `git clone && run` Test Published on October 17, 2025 in 10 minutes to read I’ve done a ton of consulting as part of my work at Petabridge over the past 10 years and I run into developer onboarding problems constantly with new clients. It takes much longer than it should to clone a customer’s application from source control and successfully run it. Continuous deployment and continuous integration (CI/CD) get a ton of attention in the DevOps space, but improving the “first...
There Has Never Been a Better Time to be a Junior Developer - And It Won't Last Forever Published on August 22, 2025 in 11 minutes to read Everyone in tech is convinced that AI will eliminate junior developers first. “Why hire a junior when AI can write code?” they ask. The prevailing wisdom is that entry-level developers are most vulnerable to automation. They’re dead wrong. I wrote “The Future of AI Belongs to Experienced Operators with Good Taste” a few months back and that’s still...
So Microsoft Deleted Some of Our Packages From NuGet.org Without Notice Published on July 11, 2025 in 7 minutes to read “Software supply chain management” is one of those terms that sounds like Venture Capital-funded vendor marketing bullshit right up until it isn’t. In 2016 the npm left-pad incident taught many of us in the software industry the importance of: The fragility of depending directly on central package management systems, such as npm or nuget.org, hence why artifact proxying...