<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Tom&apos;s Site</title><description>Hi, I&apos;m Tom. I&apos;m a software engineer from Estonia who is bad at landing page text. This is my blog.</description><link>https://thom.ee/</link><item><title>A clean way to use required value types in ASP.NET Core</title><link>https://thom.ee/blog/clean-way-to-use-required-value-types-in-asp-net-core/</link><guid isPermaLink="true">https://thom.ee/blog/clean-way-to-use-required-value-types-in-asp-net-core/</guid><description>Dealing with required non-nullable value types in input models without making your integers nullable. Using nullable ints everywhere is ugly, so what can we do?</description><pubDate>Sun, 17 Sep 2023 00:00:00 GMT</pubDate></item><item><title>Deciding between CRDTs and OT for data synchronization</title><link>https://thom.ee/blog/crdt-vs-operational-transformation/</link><guid isPermaLink="true">https://thom.ee/blog/crdt-vs-operational-transformation/</guid><description>CRDTs and OT algorithms are two of the most popular approaches to automatic data synchronization. Which one fits your use case best?</description><pubDate>Tue, 20 Aug 2024 00:00:00 GMT</pubDate></item><item><title>Adding cycles to a tree-based dungeon generator</title><link>https://thom.ee/blog/procedural-generation/</link><guid isPermaLink="true">https://thom.ee/blog/procedural-generation/</guid><description>Building a dungeon generator for Runebind that produces varied layouts without sacrificing hand-crafted quality.</description><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate></item><item><title>What makes or breaks agency in roguelikes</title><link>https://thom.ee/blog/what-makes-or-breaks-agency-in-roguelikes/</link><guid isPermaLink="true">https://thom.ee/blog/what-makes-or-breaks-agency-in-roguelikes/</guid><description>A look at agency, mastery, and randomness in roguelike games.</description><pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate></item></channel></rss>