<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Work on Jack Mordaunt</title><link>https://mordaunt.dev/site/work/</link><description>Recent content in Work on Jack Mordaunt</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 17 Jul 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://mordaunt.dev/site/work/index.xml" rel="self" type="application/rss+xml"/><item><title>Plato desktop client</title><link>https://mordaunt.dev/site/work/plato/</link><pubDate>Thu, 17 Jul 2025 00:00:00 +0000</pubDate><guid>https://mordaunt.dev/site/work/plato/</guid><description>&lt;div class="shots"&gt;
 &lt;img src="https://mordaunt.dev/site/images/Plato/PlatoHome.webp" alt="The home window" width="560"&gt;
 &lt;img src="https://mordaunt.dev/site/images/Plato/PlatoGame.webp" alt="A game window" width="560"&gt;
 &lt;img src="https://mordaunt.dev/site/images/Plato/PlatoMulti.webp" alt="Several windows open at once" width="560"&gt;
&lt;/div&gt;
&lt;p&gt;A cross-platform desktop client for Plato&amp;rsquo;s games: a primary chat window
and any number of independent game windows, on Windows, macOS and Linux.
Built in Go with the Gio immediate-mode toolkit, and bound directly to
the C and C++ libraries it needed: ANGLE for OpenGL ES, V8 for the game
runtime, SQLite for state, libwebp for images. The product is
discontinued; the architecture is the part worth describing.&lt;/p&gt;</description></item><item><title>Sprig</title><link>https://mordaunt.dev/site/work/sprig/</link><pubDate>Thu, 17 Mar 2022 00:00:00 +0000</pubDate><guid>https://mordaunt.dev/site/work/sprig/</guid><description>&lt;div class="shots"&gt;
 &lt;img src="https://mordaunt.dev/site/images/sprig/sprig.webp" alt="Sprig" width="560"&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://git.sr.ht/~whereswaldon/sprig"&gt;Sprig&lt;/a&gt; is a client for
&lt;a href="https://man.sr.ht/~whereswaldon/arborchat"&gt;Arbor&lt;/a&gt;, a federated chat
platform, written in Go with Gio and shipped to five platforms from one
codebase. Its author has since put it on ice; the work below is from
2022.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;Sprig stored every chat message as its own file. Linux tolerated that.
Windows did not: reading thousands of small files at startup made the
client take seconds to open, and the cost grew with every conversation.&lt;/p&gt;</description></item><item><title>icnsify</title><link>https://mordaunt.dev/site/work/icnsify/</link><pubDate>Wed, 21 Feb 2018 00:00:00 +0000</pubDate><guid>https://mordaunt.dev/site/work/icnsify/</guid><description>&lt;div class="shots"&gt;
 &lt;img src="https://mordaunt.dev/site/images/icnsify/icns-macos-preview.webp" alt="The preview on macOS" width="560"&gt;
 &lt;img src="https://mordaunt.dev/site/images/icnsify/icns-windows-preview.webp" alt="The preview on Windows" width="560"&gt;
&lt;/div&gt;
&lt;p&gt;Apple&amp;rsquo;s &lt;code&gt;.icns&lt;/code&gt; format has one official tool, &lt;code&gt;iconutil&lt;/code&gt;, which runs
only on macOS, resists scripting, and wants a rigid folder of pre-sized
PNGs. icnsify replaces it with one command that runs anywhere:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;brew install jackmordaunt/tap/icnsify
icnsify -i logo.png -o Icon.icns
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It takes a single image, produces every size the format wants, converts
common formats on the way in, and pipes like a Unix tool. A small GUI
previews an &lt;code&gt;.icns&lt;/code&gt; on any operating system.&lt;/p&gt;</description></item></channel></rss>