{"generator":"Jekyll","link":[{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/feed.xml","rel":"self","type":"application\/atom+xml"}},{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/","rel":"alternate","type":"text\/html"}}],"updated":"2026-05-02T15:15:50+00:00","id":"https:\/\/frankhaugen.github.io\/feed.xml","title":"Frank Haugen","subtitle":"Open-source .NET libraries, compilers, and tooling \u2014 plus a dev log.","author":{"name":"Frank R. Haugen"},"entry":[{"title":{"@attributes":{"type":"html"}},"link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2026\/05\/02\/2026-03-30-channel-t-in-di-is-a-pipe-not-a-trick\/","rel":"alternate","type":"text\/html","title":""}},"published":"2026-05-02T15:15:50+00:00","updated":"2026-05-02T15:15:50+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2026\/05\/02\/2026-03-30-channel-t-in-di-is-a-pipe-not-a-trick","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"}},{"title":"Bad security is worse than admitting you have none","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2026\/05\/02\/bad-security-is-worse-than-none\/","rel":"alternate","type":"text\/html","title":"Bad security is worse than admitting you have none"}},"published":"2026-05-02T00:00:00+00:00","updated":"2026-05-02T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2026\/05\/02\/bad-security-is-worse-than-none","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"security"}},{"@attributes":{"term":"networking"}},{"@attributes":{"term":"opinions"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Ten rules I break on purpose","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2026\/04\/20\/ten-rules-i-break-on-purpose\/","rel":"alternate","type":"text\/html","title":"Ten rules I break on purpose"}},"published":"2026-04-20T00:00:00+00:00","updated":"2026-04-20T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2026\/04\/20\/ten-rules-i-break-on-purpose","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"opinions"}},{"@attributes":{"term":"dotnet"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"If you can watch it compile, you might actually learn","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2026\/02\/22\/if-you-can-watch-it-compile-you-might-learn\/","rel":"alternate","type":"text\/html","title":"If you can watch it compile, you might actually learn"}},"published":"2026-02-22T00:00:00+00:00","updated":"2026-02-22T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2026\/02\/22\/if-you-can-watch-it-compile-you-might-learn","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"compilers"}},{"@attributes":{"term":"education"}},{"@attributes":{"term":"RoboSharp"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"The Frank.* prefix and other naming crimes","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2026\/01\/18\/the-frank-prefix-and-other-naming-crimes\/","rel":"alternate","type":"text\/html","title":"The Frank.* prefix and other naming crimes"}},"published":"2026-01-18T00:00:00+00:00","updated":"2026-01-18T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2026\/01\/18\/the-frank-prefix-and-other-naming-crimes","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"dotnet"}},{"@attributes":{"term":"open-source"}},{"@attributes":{"term":"opinions"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"WPF without XAML","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2024\/06\/01\/wpf-without-xaml\/","rel":"alternate","type":"text\/html","title":"WPF without XAML"}},"published":"2024-06-01T00:00:00+00:00","updated":"2024-06-01T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2024\/06\/01\/wpf-without-xaml","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"WPF"}},{"@attributes":{"term":"dotnet"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"I just wanted to make an IRC client\/server library","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2024\/02\/04\/irc-client-server-journey\/","rel":"alternate","type":"text\/html","title":"I just wanted to make an IRC client\/server library"}},"published":"2024-02-04T00:00:00+00:00","updated":"2024-02-04T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2024\/02\/04\/irc-client-server-journey","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"blog"}},{"@attributes":{"term":"story"}},{"@attributes":{"term":"project"}},{"@attributes":{"term":"IRC"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Why I hate that I don\u2019t document things","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2024\/01\/20\/why-i-hate-that-i-dont-document-things\/","rel":"alternate","type":"text\/html","title":"Why I hate that I don\u2019t document things"}},"published":"2024-01-20T00:00:00+00:00","updated":"2024-01-20T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2024\/01\/20\/why-i-hate-that-i-dont-document-things","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"documentation"}},{"@attributes":{"term":"opinions"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"ML.NET video tutorials (notes)","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2023\/08\/15\/mldotnet-video-tutorials-notes\/","rel":"alternate","type":"text\/html","title":"ML.NET video tutorials (notes)"}},"published":"2023-08-15T00:00:00+00:00","updated":"2023-08-15T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2023\/08\/15\/mldotnet-video-tutorials-notes","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"ML.NET"}},{"@attributes":{"term":"tutorials"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Falling into madness during the 2020 ML.NET hackathon","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2020\/11\/20\/mldotnet-hackathon-falling-into-madness\/","rel":"alternate","type":"text\/html","title":"Falling into madness during the 2020 ML.NET hackathon"}},"published":"2020-11-20T00:00:00+00:00","updated":"2020-11-20T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2020\/11\/20\/mldotnet-hackathon-falling-into-madness","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"ML.NET"}},{"@attributes":{"term":"hackathon"}},{"@attributes":{"term":"story"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Thoughts on time and date in applications","link":{"@attributes":{"href":"https:\/\/frankhaugen.github.io\/blog\/2020\/10\/22\/thoughts-on-time-and-date-in-applications\/","rel":"alternate","type":"text\/html","title":"Thoughts on time and date in applications"}},"published":"2020-10-22T00:00:00+00:00","updated":"2020-10-22T00:00:00+00:00","id":"https:\/\/frankhaugen.github.io\/blog\/2020\/10\/22\/thoughts-on-time-and-date-in-applications","content":{"@attributes":{"type":"html"}},"author":{"name":"Frank R. Haugen"},"category":[{"@attributes":{"term":"DateTime"}},{"@attributes":{"term":"opinions"}}],"summary":{"@attributes":{"type":"html"}}}]}