<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>David Mkrtchian — Writing</title>
        <link>https://www.davidmcarati.info/blog/</link>
        <atom:link href="https://www.davidmcarati.info/feed.xml" rel="self" type="application/rss+xml"/>
        <description>Long-form engineering essays on Unity, WebGL, WebAssembly, JavaScript architecture, and real-time systems — by David Mkrtchian, Tech Lead and senior engineer.</description>
        <language>en</language>
        <managingEditor>davidmcarati@gmail.com (David Mkrtchian)</managingEditor>
        <item>
            <title>Two Float Arrays and a Function Call</title>
            <link>https://www.davidmcarati.info/blog/two-float-arrays-and-a-function-call/</link>
            <guid isPermaLink="true">https://www.davidmcarati.info/blog/two-float-arrays-and-a-function-call/</guid>
            <pubDate>Thu, 13 Aug 2026 09:00:00 GMT</pubDate>
            <description>How I replaced string-based interop with shared memory between a Unity WebAssembly build and the JavaScript driving it</description>
            <category>webassembly</category>
            <category>unity</category>
            <category>javascript</category>
            <category>webgl</category>
            <category>performance</category>
        </item>
        <item>
            <title>Four Attempts at Water</title>
            <link>https://www.davidmcarati.info/blog/four-attempts-at-water/</link>
            <guid isPermaLink="true">https://www.davidmcarati.info/blog/four-attempts-at-water/</guid>
            <pubDate>Thu, 13 Aug 2026 09:00:00 GMT</pubDate>
            <description>Order-independent transparency, a per-fragment colour ramp, and the three approaches I had to throw away first</description>
            <category>unity</category>
            <category>shaders</category>
            <category>webgl</category>
            <category>graphics</category>
            <category>webassembly</category>
        </item>
        <item>
            <title>Eighty Lines Instead of a Container</title>
            <link>https://www.davidmcarati.info/blog/eighty-lines-instead-of-a-container/</link>
            <guid isPermaLink="true">https://www.davidmcarati.info/blog/eighty-lines-instead-of-a-container/</guid>
            <pubDate>Thu, 13 Aug 2026 09:00:00 GMT</pubDate>
            <description>Our Unity WebGL build resolves its services through a static locator — the textbook anti-pattern. Here is the derivation that got us there, and why I think the derivation matters more than the answer.</description>
            <category>unity</category>
            <category>architecture</category>
            <category>dependency-injection</category>
            <category>webgl</category>
            <category>csharp</category>
        </item>
        <item>
            <title>A Constraint Solver With No Equations</title>
            <link>https://www.davidmcarati.info/blog/a-constraint-solver-with-no-equations/</link>
            <guid isPermaLink="true">https://www.davidmcarati.info/blog/a-constraint-solver-with-no-equations/</guid>
            <pubDate>Thu, 13 Aug 2026 09:00:00 GMT</pubDate>
            <description>How a scene written as intent becomes exact metres and degrees — sixteen pure functions, one priority ladder, and no simultaneous system anywhere</description>
            <category>javascript</category>
            <category>architecture</category>
            <category>geometry</category>
            <category>computational-geometry</category>
            <category>compilers</category>
        </item>
        <item>
            <title>Undo When You Cannot Re-Simulate</title>
            <link>https://www.davidmcarati.info/blog/undo-when-you-cannot-re-simulate/</link>
            <guid isPermaLink="true">https://www.davidmcarati.info/blog/undo-when-you-cannot-re-simulate/</guid>
            <pubDate>Thu, 13 Aug 2026 09:00:00 GMT</pubDate>
            <description>Stepping backwards through a physics-driven lab, where the authored state, the simulated state, and the state on screen are three different things</description>
            <category>unity</category>
            <category>architecture</category>
            <category>javascript</category>
            <category>state-management</category>
            <category>webgl</category>
        </item>
        <item>
            <title>Ordering Is the API</title>
            <link>https://www.davidmcarati.info/blog/ordering-is-the-api/</link>
            <guid isPermaLink="true">https://www.davidmcarati.info/blog/ordering-is-the-api/</guid>
            <pubDate>Thu, 13 Aug 2026 09:00:00 GMT</pubDate>
            <description>Five load-bearing constraints in one wiring file, three different mechanisms, and not one of them expressible in a type system</description>
            <category>javascript</category>
            <category>architecture</category>
            <category>unity</category>
            <category>webgl</category>
            <category>frontend</category>
        </item>
        <item>
            <title>A State Machine With a Border Running Through It</title>
            <link>https://www.davidmcarati.info/blog/state-machine-with-a-border-running-through-it/</link>
            <guid isPermaLink="true">https://www.davidmcarati.info/blog/state-machine-with-a-border-running-through-it/</guid>
            <pubDate>Thu, 13 Aug 2026 09:00:00 GMT</pubDate>
            <description>Ten phases per step, split across a JavaScript orchestrator and a C# runtime, with three completely different ways of finishing</description>
            <category>javascript</category>
            <category>unity</category>
            <category>architecture</category>
            <category>webassembly</category>
            <category>state-management</category>
        </item>
        <item>
            <title>An Engine Inside the Engine</title>
            <link>https://www.davidmcarati.info/blog/an-engine-inside-the-engine/</link>
            <guid isPermaLink="true">https://www.davidmcarati.info/blog/an-engine-inside-the-engine/</guid>
            <pubDate>Thu, 13 Aug 2026 09:00:00 GMT</pubDate>
            <description>One Unity WebGL binary serves a lab player and a 3D scene editor. The trick was not unifying them — it was knowing which layer to share and which to leave alone.</description>
            <category>unity</category>
            <category>webgl</category>
            <category>architecture</category>
            <category>webassembly</category>
            <category>javascript</category>
        </item>
        <item>
            <title>Your Designer Learned to Vibe-Code? Give Him a Playground</title>
            <link>https://www.davidmcarati.info/blog/your-designer-learned-to-vibe-code-give-him-a-playground/</link>
            <guid isPermaLink="true">https://www.davidmcarati.info/blog/your-designer-learned-to-vibe-code-give-him-a-playground/</guid>
            <pubDate>Thu, 13 Aug 2026 09:00:00 GMT</pubDate>
            <description>Thirty-nine widgets and a design system, written by someone who is not an engineer, inside a boundary that makes it safe</description>
            <category>architecture</category>
            <category>frontend</category>
            <category>javascript</category>
            <category>design-systems</category>
            <category>ai</category>
        </item>
    </channel>
</rss>
