<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Tom Hill's Microblog</title>
        <link>https://hill.xyz/micro</link>
        <description>Short posts, links, quotes and screenshots.</description>
        <lastBuildDate>Mon, 07 Sep 2026 03:34:05 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Tom Hill's Microblog</title>
            <url>https://hill.xyz/favicon-96.png</url>
            <link>https://hill.xyz/micro</link>
        </image>
        <copyright>All rights reserved 2026, Tom Hill</copyright>
        <atom:link href="https://hill.xyz/micro/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Farmer's Market Software]]></title>
            <link>https://hill.xyz/micro/2026/09/07/farmer-s-market-software</link>
            <guid isPermaLink="false">https://hill.xyz/micro/2026/09/07/farmer-s-market-software</guid>
            <pubDate>Mon, 07 Sep 2026 03:34:05 GMT</pubDate>
            <description><![CDATA[I am very excited for the day where the vast majority of software becomes farmer's market software : small, community-focussed tools and project that serve the needs of a small group of people really well. I currently have a messaging app called "yapchat" built on elixir with a perfect interface…]]></description>
            <content:encoded><![CDATA[<p>I am very excited for the day where the vast majority of software becomes <em>farmer’s market software</em>:
small, community-focussed tools and project that serve the needs of a small group of people really well.</p>
<p>I currently have a messaging app called <a href="https://yap.hill.xyz">“yapchat”</a> built on elixir with a perfect interface that matches the needs of the people that use it exactly.</p>
<p><img src="/media/micro/2026/2026-09-07-farmer-s-market-software-1.png" alt="yapchat screenshot"></p>
<p>In australia, everyone 25-30 seems to use facebook messenger for some reason but fb messenger REALLY SUCKS and they just
seem to have broken the web interface. Meta is being really annoying. So i’m just recreating messenger features and hosting
it myself. Its fully vibecoded but for a low stakes application like this i think its fine!
It also has cool features like seeing what your interlocutors are typing as they type it - which allows you to interrupt,
and automatic transcription of voice notes.</p>
<p><a href="https://stream.thesephist.com/updates/1752294908">Linus Lee describes this as “Non-industrial Software”</a>:</p>
<blockquote>
<p>Most of modern software is industrially produced for mass-market use, so people get used to lazily thinking that is all that is possible. If you can write software, you can build your own kitchen where you can cook your own food. You can host your friends and feed them too. Maybe it will inspire your friends to cook for themselves and invest in their own metaphorical kitchens, too. Hopefully it can be something that grows with you and becomes a part of your every day.</p>
</blockquote>
<p>Also related, Robin Sloan’s <a href="https://www.robinsloan.com/notes/home-cooked-app/">“An app can be a home cooked meal”</a>:</p>
<blockquote>
<p>I am the programming equivalnent of a home cook.</p>
</blockquote>
<blockquote>
<p>When you liberate programming from the requirement to be professional and scalable,
it becomes a different activity altogether, just as cooking at home is really
nothing like cooking in a commercial kitchen.
I can report to you: not only is this different activity rewarding in almost exactly the same way that
cooking for someone you love is rewarding, there’s another feeling, too, spe­cific to this realm.
I have strug­gled to find words for this, but/and I think it might be the crux of the whole thing:
This messaging app I built for, and with, my family, it won’t change unless we want it to change.
There will be no sudden redesign, no flood of ads, no pivot to chase a userbase inscrutable to us.
It might go away at some point, but that will be our decision. What is this feeling?
Independence? Security? Sovereignty?</p>
</blockquote>
<p>Is it simply … the feeling of being home?</p>
]]></content:encoded>
            <author>tom@hill.xyz (Tom Hill)</author>
            <category>HCI</category>
            <category>software</category>
            <category>futurism</category>
            <category>yapchat</category>
            <category>farmers-market-software</category>
        </item>
        <item>
            <title><![CDATA[hello, world. just setting up my microblog. I'm aiming for this vibe:…]]></title>
            <link>https://hill.xyz/micro/2026/09/07/hello-world-just-setting-up-my</link>
            <guid isPermaLink="false">https://hill.xyz/micro/2026/09/07/hello-world-just-setting-up-my</guid>
            <pubDate>Mon, 07 Sep 2026 02:56:04 GMT</pubDate>
            <description><![CDATA[hello, world. just setting up my microblog. I'm aiming for this vibe: https://simonwillison.net/ http://stream.thesephist.com/ https://osmarks.net/feed/ ideally a low-pressure way to share interesting things/ideas i come across and keep a log of it all.]]></description>
            <content:encoded><![CDATA[<p>hello, world.</p>
<p>just setting up my microblog. I’m aiming for this vibe:</p>
<ul>
<li><a href="https://simonwillison.net/">https://simonwillison.net/</a></li>
<li><a href="http://stream.thesephist.com/">http://stream.thesephist.com/</a></li>
<li><a href="https://osmarks.net/feed/">https://osmarks.net/feed/</a></li>
</ul>
<p>ideally a low-pressure way to share interesting things/ideas i come across
and keep a log of it all.</p>
]]></content:encoded>
            <author>tom@hill.xyz (Tom Hill)</author>
            <category>microblog</category>
        </item>
        <item>
            <title><![CDATA[Speeding up Rust builds on macOS]]></title>
            <link>https://hill.xyz/micro/2025/09/05/speed-up-rust-build-times-mac</link>
            <guid isPermaLink="false">https://hill.xyz/micro/2025/09/05/speed-up-rust-build-times-mac</guid>
            <pubDate>Fri, 05 Sep 2025 02:00:00 GMT</pubDate>
            <description><![CDATA[Via Nicholas Nethercote: On macOS, XProtect (part of Gatekeeper) scans every newly created executable for malware. These scans can slow Rust builds down a lot. \[mac\]OS scans every executable for malware on the first run. This makes sense for executables downloaded from the internet. It's arguably…]]></description>
            <content:encoded><![CDATA[<p>Via <a href="https://nnethercote.github.io/2025/09/04/faster-rust-builds-on-mac.html">Nicholas Nethercote</a>:</p>
<p>On macOS, <strong><a href="https://support.apple.com/en-gb/guide/security/sec469d47bd8/web">XProtect</a></strong> (part of Gatekeeper) scans every newly created executable for malware. These scans can slow Rust builds down a lot.</p>
<blockquote>
<p>[mac]OS scans every executable for malware on the first run. This makes sense for executables downloaded from the internet. It’s arguably less sensible for executables you compiled yourself.</p>
</blockquote>
<p>According to the <a href="https://nexte.st/docs/installation/macos/#gatekeeper">nexte.st docs</a>, you can disable these scans for your terminal apps:</p>
<ul>
<li>You can stop XProtect scans on your terminal (and other terminal emulators - Ghostty etc) by running <code>sudo spctl developer-mode enable-terminal</code>.</li>
<li>You can then navigate to System Preferences &gt; Security &amp; Privacy and see a new item called Developer Tools. Add Yyour terminal emulators there.</li>
<li>Restart your terminal apps.</li>
</ul>
<p>Anacdotelly, this <em>significantly</em> reduced my build times from ~30s per run to &lt; 5s.</p>
<p>Discaimer: I’m a novice at Rust and not a security expert - so don’t trust my advice here.</p>
<p>Extra TIL! You can use <code>cargo build --timings</code> to get a <a href="https://doc.rust-lang.org/nightly/cargo/reference/timings.html">nice little html report on build times</a>.</p>
]]></content:encoded>
            <author>tom@hill.xyz (Tom Hill)</author>
            <category>til</category>
            <category>rust</category>
        </item>
        <item>
            <title><![CDATA[Bun has a built-in shell with template literal syntax]]></title>
            <link>https://hill.xyz/micro/2025/08/31/bun-shell</link>
            <guid isPermaLink="false">https://hill.xyz/micro/2025/08/31/bun-shell</guid>
            <pubDate>Sun, 31 Aug 2025 02:00:00 GMT</pubDate>
            <description><![CDATA[Just discovered that Bun has a built-in shell with the most intuitive syntax I've seen: No more spawning child processes or dealing with callbacks. It even handles pipes: Very cool!]]></description>
            <content:encoded><![CDATA[<p>Just discovered that Bun has a <a href="https://bun.com/docs/runtime/shell">built-in shell</a> with the most intuitive syntax I’ve seen:</p>
<pre class="shiki shiki-themes ayu-dark ayu-dark" style="background-color:#0d1017;--shiki-dark-bg:#0d1017;color:#bfbdb6;--shiki-dark:#bfbdb6" tabindex="0"><code class="language-javascript"><span class="line"><span style="color:#FF8F40;--shiki-dark:#FF8F40">import</span><span style="color:#BFBDB6;--shiki-dark:#BFBDB6"> { $ } </span><span style="color:#FF8F40;--shiki-dark:#FF8F40">from</span><span style="color:#AAD94C;--shiki-dark:#AAD94C"> "bun"</span><span style="color:#BFBDB6B3;--shiki-dark:#BFBDB6B3">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#FF8F40;--shiki-dark:#FF8F40">const</span><span style="color:#BFBDB6;--shiki-dark:#BFBDB6"> response </span><span style="color:#F29668;--shiki-dark:#F29668">=</span><span style="color:#FF8F40;--shiki-dark:#FF8F40"> await</span><span style="color:#FFB454;--shiki-dark:#FFB454"> fetch</span><span style="color:#BFBDB6;--shiki-dark:#BFBDB6">(</span><span style="color:#AAD94C;--shiki-dark:#AAD94C">"https://hill.xyz"</span><span style="color:#BFBDB6;--shiki-dark:#BFBDB6">)</span><span style="color:#BFBDB6B3;--shiki-dark:#BFBDB6B3">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#5A6673;--shiki-light-font-style:italic;--shiki-dark:#5A6673;--shiki-dark-font-style:italic">// Use Response as stdin.</span></span>
<span class="line"><span style="color:#FF8F40;--shiki-dark:#FF8F40">await</span><span style="color:#FFB454;--shiki-dark:#FFB454"> $</span><span style="color:#AAD94C;--shiki-dark:#AAD94C">`cat &#x3C; </span><span style="color:#FF8F40;--shiki-dark:#FF8F40">${</span><span style="color:#BFBDB6;--shiki-dark:#BFBDB6">response</span><span style="color:#FF8F40;--shiki-dark:#FF8F40">}</span><span style="color:#AAD94C;--shiki-dark:#AAD94C"> | wc -c`</span><span style="color:#BFBDB6B3;--shiki-dark:#BFBDB6B3">;</span><span style="color:#5A6673;--shiki-light-font-style:italic;--shiki-dark:#5A6673;--shiki-dark-font-style:italic"> // 1256</span></span></code></pre>
<p>No more spawning child processes or dealing with callbacks. It even handles pipes:</p>
<pre class="shiki shiki-themes ayu-dark ayu-dark" style="background-color:#0d1017;--shiki-dark-bg:#0d1017;color:#bfbdb6;--shiki-dark:#bfbdb6" tabindex="0"><code class="language-javascript"><span class="line"><span style="color:#FF8F40;--shiki-dark:#FF8F40">await</span><span style="color:#FFB454;--shiki-dark:#FFB454"> $</span><span style="color:#AAD94C;--shiki-dark:#AAD94C">`cat file.txt | grep pattern | wc -l`</span><span style="color:#F29668;--shiki-dark:#F29668">.</span><span style="color:#FFB454;--shiki-dark:#FFB454">text</span><span style="color:#BFBDB6;--shiki-dark:#BFBDB6">()</span><span style="color:#BFBDB6B3;--shiki-dark:#BFBDB6B3">;</span></span></code></pre>
<p>Very cool!</p>
]]></content:encoded>
            <author>tom@hill.xyz (Tom Hill)</author>
            <category>til</category>
            <category>bun</category>
            <category>devtools</category>
        </item>
    </channel>
</rss>