<rss xmlns:source="http://source.scripting.com/" version="2.0">
  <channel>
    <title>Leon Mika</title>
    <link>https://lmika.org/</link>
    <description></description>
    
    <language>en</language>
    
    <lastBuildDate>Fri, 08 May 2026 11:05:58 +1000</lastBuildDate>
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/08/wattle-glen-station.html</link>
      <pubDate>Fri, 08 May 2026 11:05:58 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/08/wattle-glen-station.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://maps.google.com/?q=-37.664276,145.181973&#34;&gt;📍&lt;/a&gt; Wattle Glen Station, Vic.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/pxl-20260508-010152885.jpg&#34; alt=&#34;Auto-generated description: A quiet, empty train platform with benches and greenery on a cloudy day.&#34;&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/pxl-20260508-005617812.jpg&#34; alt=&#34;Auto-generated description: A railway crossing with multiple signs and signals is situated near a road bordered by dense trees.&#34;&gt;&lt;/p&gt;
</description>
      <source:markdown>[📍](https://maps.google.com/?q=-37.664276,145.181973) Wattle Glen Station, Vic.

&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/pxl-20260508-010152885.jpg&#34; alt=&#34;Auto-generated description: A quiet, empty train platform with benches and greenery on a cloudy day.&#34;&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/pxl-20260508-005617812.jpg&#34; alt=&#34;Auto-generated description: A railway crossing with multiple signs and signals is situated near a road bordered by dense trees.&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/08/manton-reece-inkwell-app-review.html</link>
      <pubDate>Fri, 08 May 2026 07:55:04 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/08/manton-reece-inkwell-app-review.html</guid>
      <description>&lt;p&gt;🔗 &lt;a href=&#34;https://www.manton.org/2026/05/07/inkwell-app-review-history.html&#34;&gt;Manton Reece: Inkwell app review history&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Get it together, Apple! This is an app I&amp;rsquo;m interested in using, and your review process is getting in the way. What the heck is the problem?!&lt;/p&gt;
</description>
      <source:markdown>🔗 [Manton Reece: Inkwell app review history](https://www.manton.org/2026/05/07/inkwell-app-review-history.html)

Get it together, Apple! This is an app I&#39;m interested in using, and your review process is getting in the way. What the heck is the problem?!
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/07/end-of-the-path.html</link>
      <pubDate>Thu, 07 May 2026 16:55:03 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/07/end-of-the-path.html</guid>
      <description>&lt;p&gt;End of the path.&lt;/p&gt;
&lt;p&gt;&lt;video src=&#34;https://cdn.uploads.micro.mov/25293/2026/pxl-20260507-004505661/playlist.m3u8&#34; poster=&#34;https://cdn.uploads.micro.blog/25293/2026/frames/1742959-0-8b1d10.jpg&#34; width=&#34;1920&#34; height=&#34;1080&#34; controls=&#34;controls&#34; preload=&#34;metadata&#34;&gt;&lt;/video&gt;&lt;/p&gt;
</description>
      <source:markdown>End of the path.

&lt;video src=&#34;https://cdn.uploads.micro.mov/25293/2026/pxl-20260507-004505661/playlist.m3u8&#34; poster=&#34;https://cdn.uploads.micro.blog/25293/2026/frames/1742959-0-8b1d10.jpg&#34; width=&#34;1920&#34; height=&#34;1080&#34; controls=&#34;controls&#34; preload=&#34;metadata&#34;&gt;&lt;/video&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/07/powelltown-vic-went-on-what.html</link>
      <pubDate>Thu, 07 May 2026 12:37:00 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/07/powelltown-vic-went-on-what.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://maps.google.com/?q=-37.863066,145.751461&#34;&gt;📍&lt;/a&gt; Powelltown, Vic.&lt;/p&gt;
&lt;p&gt;Went on what could generously be described as a ramble. Wanted to walk the Reids Tramway Walk, but took a wrong turn and walked Big Burtha Track instead. Still, it was nice to get out, despite the weather.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/baf4a9be0b.jpg&#34; alt=&#34;An old, weathered rail cart sits on rusty tracks surrounded by green grass and trees in a park-like setting.&#34;&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/f4f14c8bfd.jpg&#34; alt=&#34;A narrow metal bridge with railings crosses over a muddy river surrounded by lush green foliage.&#34;&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/828b2221f5.jpg&#34; alt=&#34;A forest path is surrounded by lush green ferns and tall trees.&#34;&gt;
</description>
      <source:markdown>[📍](https://maps.google.com/?q=-37.863066,145.751461) Powelltown, Vic.

Went on what could generously be described as a ramble. Wanted to walk the Reids Tramway Walk, but took a wrong turn and walked Big Burtha Track instead. Still, it was nice to get out, despite the weather.

&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/baf4a9be0b.jpg&#34; alt=&#34;An old, weathered rail cart sits on rusty tracks surrounded by green grass and trees in a park-like setting.&#34;&gt;

&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/f4f14c8bfd.jpg&#34; alt=&#34;A narrow metal bridge with railings crosses over a muddy river surrounded by lush green foliage.&#34;&gt;

&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/828b2221f5.jpg&#34; alt=&#34;A forest path is surrounded by lush green ferns and tall trees.&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/07/it-just-occurred-to-me.html</link>
      <pubDate>Thu, 07 May 2026 08:05:33 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/07/it-just-occurred-to-me.html</guid>
      <description>&lt;p&gt;It just occurred to me that the Terminal may have been the original superapp. 😛&lt;/p&gt;
</description>
      <source:markdown>It just occurred to me that the Terminal may have been the original superapp. 😛
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/06/salvation-from-doomscrolling-doesnt-go.html</link>
      <pubDate>Wed, 06 May 2026 12:45:26 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/06/salvation-from-doomscrolling-doesnt-go.html</guid>
      <description>&lt;p&gt;Salvation from doom-scrolling doesn&amp;rsquo;t go through saving RSS posts to read later. Instead, it&amp;rsquo;s ensuring you&amp;rsquo;ve subscribed to enough RSS feeds that post frequently enough that you don&amp;rsquo;t need to doom-scroll. It&amp;rsquo;s a demand problem, or lack thereof.&lt;/p&gt;
</description>
      <source:markdown>Salvation from doom-scrolling doesn&#39;t go through saving RSS posts to read later. Instead, it&#39;s ensuring you&#39;ve subscribed to enough RSS feeds that post frequently enough that you don&#39;t need to doom-scroll. It&#39;s a demand problem, or lack thereof.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/06/well-the-search-may-have.html</link>
      <pubDate>Wed, 06 May 2026 10:11:02 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/06/well-the-search-may-have.html</guid>
      <description>&lt;p&gt;Well, the search may have been fruitless, but it&amp;rsquo;s ultimately not about the destination. What&amp;rsquo;s important is all the tools we made along the way.&lt;/p&gt;
</description>
      <source:markdown>Well, the search may have been fruitless, but it&#39;s ultimately not about the destination. What&#39;s important is all the tools we made along the way.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/06/listening-to-flying-totems-movement.html</link>
      <pubDate>Wed, 06 May 2026 06:51:57 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/06/listening-to-flying-totems-movement.html</guid>
      <description>&lt;p&gt;Listening to &lt;a href=&#34;https://www.deezer.com/track/583389472&#34;&gt;FLYING TOTEMS (movement 2)&lt;/a&gt; by Jean-Michel Jarre from Equinoxe Infinity 🎵&lt;/p&gt;
&lt;p&gt;This is usually a Friday listen, but it&amp;rsquo;s been a bit of an earworm this week.&lt;/p&gt;
</description>
      <source:markdown>Listening to [FLYING TOTEMS (movement 2)](https://www.deezer.com/track/583389472) by Jean-Michel Jarre from Equinoxe Infinity 🎵

This is usually a Friday listen, but it&#39;s been a bit of an earworm this week.
</source:markdown>
    </item>
    
    <item>
      <title>Release: Dequoter 0.1.9</title>
      <link>https://lmika.org/2026/05/05/release-dequoter.html</link>
      <pubDate>Tue, 05 May 2026 20:58:38 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/05/release-dequoter.html</guid>
      <description>&lt;p&gt;I figured it was time to start releasing some of the small apps I make to assist me. I&amp;rsquo;ll start with Dequoter, one of the smaller ones. Until today, it was not in a fit enough state to release: the code wasn&amp;rsquo;t signed, there was no app icon, and certain niceties like dark mode were not working. Those have been addressed, and while I&amp;rsquo;m not claiming this app to be a marvel of software engineering, I&amp;rsquo;m releasing it anyway on the off chance that someone else would find it useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download:&lt;/strong&gt; &lt;a href=&#34;https://lmika-public-files.s3.ap-southeast-2.amazonaws.com/Apps/Dequoter/0.1.9/Dequoter-0.1.9.app.zip&#34;&gt;Dequoter 0.1.9&lt;/a&gt; for MacOS&lt;/p&gt;
&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;
&lt;p&gt;So what is Dequoter? It&amp;rsquo;s a single buffer text processor, where you can write or paste in text, perform some operation on it — like down-case — and then use that text elsewhere. It&amp;rsquo;s somewhat similar to Boop if you&amp;rsquo;re familiar with that. I built it mainly to convert quoted JSON strings into formatted JSON text that I could read (that&amp;rsquo;s where the name came from), and over time I added a few other processors that I found useful. It&amp;rsquo;s not as full featured as Boop, and realistically I probably could&amp;rsquo;ve just implemented what I needed as a Boop extension. But I had a few weekends free, and I figured it would be a small thing I could start and just improve over time. Plus it has a few niceties that Boop doesn&amp;rsquo;t offer, like multi-cursor support.&lt;/p&gt;
&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;
&lt;img src=&#34;uploads/2026/out-20260505-205025.png&#34; width=&#34;600&#34; height=&#34;478&#34; alt=&#34;Auto-generated description: A software interface displays a dropdown menu with options for converting and formatting text, alongside a text area containing placeholder text and a JSON snippet.&#34;&gt;
&lt;p&gt;Launching the app will bring you into a text buffer. Write or paste in text from anywhere. To perform an operation, press &lt;kbd&gt;Cmd&lt;/kbd&gt;+&lt;kbd&gt;P&lt;/kbd&gt;. This will bring up a picker of processors you can invoke. Start typing to filter and press &lt;kbd&gt;Enter&lt;/kbd&gt; to invoke the one that appears on the top. The processor will apply to the contents of the buffer, or if any text is selected, it will only apply to the selected text.&lt;/p&gt;
&lt;p&gt;The processor name gives a hint as to how the processor handles the text, or &amp;ldquo;input&amp;rdquo;. For example, processors beginning with &lt;code&gt;Lines&lt;/code&gt; will operate on a per-line basis, where-as &lt;code&gt;String&lt;/code&gt; will operate on the input as a whole. Some, like &lt;code&gt;Lines: Count&lt;/code&gt; will actually calculate a value, which will appear in the status bar. Others, like &lt;code&gt;Generate: Lorem Ipsum&lt;/code&gt; won&amp;rsquo;t take any input at all, and will instead produce text at the caret. Processors that have a trailing &lt;code&gt;…&lt;/code&gt; will require an additional argument, that you&amp;rsquo;ll be prompted to provide when selecting.&lt;/p&gt;
&lt;p&gt;Undo is supported, so you can back out of any transformations by pressing &lt;kbd&gt;Cmd&lt;/kbd&gt;+&lt;kbd&gt;Z&lt;/kbd&gt;. To repeat the last invoked processor, press &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Cmd&lt;/kbd&gt;+&lt;kbd&gt;P&lt;/kbd&gt;.&lt;/p&gt;
&lt;p&gt;The rest is just the regular text editing features you know and love. The app uses Coding Mirror so if you know the key bindings for that, you&amp;rsquo;ll be right at home. Multi-caret support is enabled, and to spawn a new caret, press either &lt;kbd&gt;Opt&lt;/kbd&gt;+&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Up&lt;/kbd&gt; or &lt;kbd&gt;Opt&lt;/kbd&gt;+&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Down&lt;/kbd&gt;.&lt;/p&gt;
&lt;h2 id=&#34;tech-stack&#34;&gt;Tech Stack&lt;/h2&gt;
&lt;p&gt;If it isn&amp;rsquo;t obvious, this is not a Mac-arsed Mac app. This was built using &lt;a href=&#34;https://wails.io&#34;&gt;Wails&lt;/a&gt;, which could be described as Electron for Go. However, the apps built with Wails used the built-in HTML renderer, rather than bundle Chromium, so they end up being a fair bit smaller. The text editor used is &lt;a href=&#34;https://codemirror.net/&#34;&gt;Code Mirror&lt;/a&gt;. Much of the core is hand rolled, although I&amp;rsquo;ve started using coding agents for the more recent changes, especially the processors. The logo was made using Affinity Designer.&lt;/p&gt;
&lt;p&gt;Anyway, if you&amp;rsquo;re looking for a simple text processor, give this a try. I hope you find it useful.&lt;/p&gt;
</description>
      <source:markdown>I figured it was time to start releasing some of the small apps I make to assist me. I&#39;ll start with Dequoter, one of the smaller ones. Until today, it was not in a fit enough state to release: the code wasn&#39;t signed, there was no app icon, and certain niceties like dark mode were not working. Those have been addressed, and while I&#39;m not claiming this app to be a marvel of software engineering, I&#39;m releasing it anyway on the off chance that someone else would find it useful.

{{&lt; marginalia &#34;/custom/dequoter-app-icon.png&#34; &gt;}}

**Download:** [Dequoter 0.1.9](https://lmika-public-files.s3.ap-southeast-2.amazonaws.com/Apps/Dequoter/0.1.9/Dequoter-0.1.9.app.zip) for MacOS

## About

So what is Dequoter? It&#39;s a single buffer text processor, where you can write or paste in text, perform some operation on it — like down-case — and then use that text elsewhere. It&#39;s somewhat similar to Boop if you&#39;re familiar with that. I built it mainly to convert quoted JSON strings into formatted JSON text that I could read (that&#39;s where the name came from), and over time I added a few other processors that I found useful. It&#39;s not as full featured as Boop, and realistically I probably could&#39;ve just implemented what I needed as a Boop extension. But I had a few weekends free, and I figured it would be a small thing I could start and just improve over time. Plus it has a few niceties that Boop doesn&#39;t offer, like multi-cursor support.

## Usage

&lt;img src=&#34;uploads/2026/out-20260505-205025.png&#34; width=&#34;600&#34; height=&#34;478&#34; alt=&#34;Auto-generated description: A software interface displays a dropdown menu with options for converting and formatting text, alongside a text area containing placeholder text and a JSON snippet.&#34;&gt;

Launching the app will bring you into a text buffer. Write or paste in text from anywhere. To perform an operation, press &lt;kbd&gt;Cmd&lt;/kbd&gt;+&lt;kbd&gt;P&lt;/kbd&gt;. This will bring up a picker of processors you can invoke. Start typing to filter and press &lt;kbd&gt;Enter&lt;/kbd&gt; to invoke the one that appears on the top. The processor will apply to the contents of the buffer, or if any text is selected, it will only apply to the selected text.

The processor name gives a hint as to how the processor handles the text, or &#34;input&#34;. For example, processors beginning with `Lines` will operate on a per-line basis, where-as `String` will operate on the input as a whole. Some, like `Lines: Count` will actually calculate a value, which will appear in the status bar. Others, like `Generate: Lorem Ipsum` won&#39;t take any input at all, and will instead produce text at the caret. Processors that have a trailing `…` will require an additional argument, that you&#39;ll be prompted to provide when selecting.

Undo is supported, so you can back out of any transformations by pressing &lt;kbd&gt;Cmd&lt;/kbd&gt;+&lt;kbd&gt;Z&lt;/kbd&gt;. To repeat the last invoked processor, press &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Cmd&lt;/kbd&gt;+&lt;kbd&gt;P&lt;/kbd&gt;.

The rest is just the regular text editing features you know and love. The app uses Coding Mirror so if you know the key bindings for that, you&#39;ll be right at home. Multi-caret support is enabled, and to spawn a new caret, press either &lt;kbd&gt;Opt&lt;/kbd&gt;+&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Up&lt;/kbd&gt; or &lt;kbd&gt;Opt&lt;/kbd&gt;+&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Down&lt;/kbd&gt;.

## Tech Stack

If it isn&#39;t obvious, this is not a Mac-arsed Mac app. This was built using [Wails](https://wails.io), which could be described as Electron for Go. However, the apps built with Wails used the built-in HTML renderer, rather than bundle Chromium, so they end up being a fair bit smaller. The text editor used is [Code Mirror](https://codemirror.net/). Much of the core is hand rolled, although I&#39;ve started using coding agents for the more recent changes, especially the processors. The logo was made using Affinity Designer.

Anyway, if you&#39;re looking for a simple text processor, give this a try. I hope you find it useful.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/05/pixel-envy-knowledge-fight-is.html</link>
      <pubDate>Tue, 05 May 2026 11:22:29 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/05/pixel-envy-knowledge-fight-is.html</guid>
      <description>&lt;p&gt;🔗 &lt;a href=&#34;https://pxlnv.com/linklog/knowledge-fight-rip/&#34;&gt;Pixel Envy: &amp;lsquo;Knowledge Fight&amp;rsquo; Is Over&lt;/a&gt;:&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Sometimes, periodical media is created with an elaborate plan or story arc. Often, though, there is no predetermined structure and, especially in the case of reactive or commentary media, the next entry feels almost inevitable. Until it stops. Then we get to feel what our world is like without it and, if it leaves a void, it is a sign it was valued.&lt;/p&gt;

  &lt;/blockquote&gt;
&lt;p&gt;Knowledge Fight has been a guilty pleasure of mine. The subject matter is awful, yet Dan or Jordan approached it with the attitude it deserves, namely mockery. I still have the back catalogue to enjoy, but I will miss this.&lt;/p&gt;
</description>
      <source:markdown>🔗 [Pixel Envy: &#39;Knowledge Fight&#39; Is Over](https://pxlnv.com/linklog/knowledge-fight-rip/):

&gt; Sometimes, periodical media is created with an elaborate plan or story arc. Often, though, there is no predetermined structure and, especially in the case of reactive or commentary media, the next entry feels almost inevitable. Until it stops. Then we get to feel what our world is like without it and, if it leaves a void, it is a sign it was valued.

Knowledge Fight has been a guilty pleasure of mine. The subject matter is awful, yet Dan or Jordan approached it with the attitude it deserves, namely mockery. I still have the back catalogue to enjoy, but I will miss this.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/05/while-were-adding-features-to.html</link>
      <pubDate>Tue, 05 May 2026 09:15:22 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/05/while-were-adding-features-to.html</guid>
      <description>&lt;p&gt;While we&amp;rsquo;re adding features to public web services, here&amp;rsquo;s another one: request durations in Stripe&amp;rsquo;s Workbench. I&amp;rsquo;m seeing some pretty slow subscription update calls and it would be nice to see if it&amp;rsquo;s impacting the timeout of our integration.&lt;/p&gt;
</description>
      <source:markdown>While we&#39;re adding features to public web services, here&#39;s another one: request durations in Stripe&#39;s Workbench. I&#39;m seeing some pretty slow subscription update calls and it would be nice to see if it&#39;s impacting the timeout of our integration.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/05/a-nice-feature-search-engines.html</link>
      <pubDate>Tue, 05 May 2026 08:02:35 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/05/a-nice-feature-search-engines.html</guid>
      <description>&lt;p&gt;A nice feature search engines like Kagi could add is a way for users to filter certain domains from the results, sort of like a personal blocklist. That way, if I were to stumble on a site which engages in shitty SOE and ads, I&amp;rsquo;ll never have to visit them again.&lt;/p&gt;

  &lt;blockquote class=&#34;alert alert-followup&#34;&gt;
    &lt;p class=&#34;alert-heading&#34;&gt;
      
        Follow up
      
    &lt;/p&gt;
    &lt;p&gt;Apparently &lt;a href=&#34;https://blog.kagi.com/tips/domain-ranking&#34;&gt;this is already possible in Kagi&lt;/a&gt;.&lt;/p&gt;
  &lt;/blockquote&gt;
</description>
      <source:markdown>A nice feature search engines like Kagi could add is a way for users to filter certain domains from the results, sort of like a personal blocklist. That way, if I were to stumble on a site which engages in shitty SOE and ads, I&#39;ll never have to visit them again.

&gt;[!FOLLOWUP]
&gt; Apparently [this is already possible in Kagi](https://blog.kagi.com/tips/domain-ranking).
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/04/yep-tram-bunching-ftw-pro.html</link>
      <pubDate>Mon, 04 May 2026 16:22:13 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/04/yep-tram-bunching-ftw-pro.html</guid>
      <description>&lt;p&gt;Yep, tram bunching FTW. (Pro tip: if a tram is significantly delayed, and when it arrives it&amp;rsquo;s packed to the rafters, wait for the next one. It&amp;rsquo;s probably going to be on time, and most likely very empty.)&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/pxl-20260504-061857448.jpg&#34; width=&#34;600&#34; height=&#34;451&#34; alt=&#34;A person is riding a tram with green-patterned seats, looking out the window.&#34;&gt;
</description>
      <source:markdown>Yep, tram bunching FTW. (Pro tip: if a tram is significantly delayed, and when it arrives it&#39;s packed to the rafters, wait for the next one. It&#39;s probably going to be on time, and most likely very empty.)

&lt;img src=&#34;https://cdn.uploads.micro.blog/25293/2026/pxl-20260504-061857448.jpg&#34; width=&#34;600&#34; height=&#34;451&#34; alt=&#34;A person is riding a tram with green-patterned seats, looking out the window.&#34;&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/04/well-didnt-take-long-before.html</link>
      <pubDate>Mon, 04 May 2026 16:05:34 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/04/well-didnt-take-long-before.html</guid>
      <description>&lt;p&gt;Well, didn&amp;rsquo;t take long before I ran into my first roadblock with Zed. I couldn&amp;rsquo;t find a way to connect a debugger via TCP. The presets are either launching the app, or attaching to a local process. Nothing around launching Delve itself. Surely there&amp;rsquo;s a way to do this (haven&amp;rsquo;t consulted LLMs yet).&lt;/p&gt;
</description>
      <source:markdown>Well, didn&#39;t take long before I ran into my first roadblock with Zed. I couldn&#39;t find a way to connect a debugger via TCP. The presets are either launching the app, or attaching to a local process. Nothing around launching Delve itself. Surely there&#39;s a way to do this (haven&#39;t consulted LLMs yet).
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/04/might-be-time-to-take.html</link>
      <pubDate>Mon, 04 May 2026 12:22:12 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/04/might-be-time-to-take.html</guid>
      <description>&lt;p&gt;Might be time to take another look at Zed. Got &lt;a href=&#34;https://zed.dev/docs/languages/go&#34;&gt;Go properly setup&lt;/a&gt; in it and used it to fix a small bug. I have to do something about the font, but it feels pretty featureful compared to the last time I looked. Shows some decent promise.&lt;/p&gt;

</description>
      <source:markdown>Might be time to take another look at Zed. Got [Go properly setup](https://zed.dev/docs/languages/go) in it and used it to fix a small bug. I have to do something about the font, but it feels pretty featureful compared to the last time I looked. Shows some decent promise.

{{&lt; marginalia &#34;/fluentui-emoji/triangular_ruler_3d.png&#34; &gt;}}
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/04/might-be-too-late-for.html</link>
      <pubDate>Mon, 04 May 2026 11:36:28 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/04/might-be-too-late-for.html</guid>
      <description>&lt;p&gt;Might be too late for Jira, but for anyone else making workflow software: multiple assignees on a single ticket is a nice feature to have. Maybe that&amp;rsquo;s what sub-tasks are for. 🤔&lt;/p&gt;
</description>
      <source:markdown>Might be too late for Jira, but for anyone else making workflow software: multiple assignees on a single ticket is a nice feature to have. Maybe that&#39;s what sub-tasks are for. 🤔
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/03/forking-mad-disparaging-nouns-i.html</link>
      <pubDate>Sun, 03 May 2026 08:46:22 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/03/forking-mad-disparaging-nouns-i.html</guid>
      <description>&lt;p&gt;🔗 &lt;a href=&#34;https://forkingmad.blog/disparaging-nouns/&#34;&gt;Forking Mad: Disparaging Nouns&lt;/a&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;I might use the word walloper to refer to someone. I think it is quite common parlance. &amp;ldquo;He&amp;rsquo;s a walloper&amp;rdquo; - an unkind reference to his annoying character. […] Apparently in Australia it means Policeman! In Ireland it&amp;rsquo;s a cudgel (short heavy implement, used as a weapon). I guess that one could be phallic &amp;hellip; but Policeman‽&lt;/p&gt;
&lt;p&gt;How about Twat. I love this word. Again, derogatory towards someone who is a fool. It can also mean to hit or slap! (new to me). Our cousins down-under seem to think a Twat is a vulgar term for [censored].&lt;/p&gt;

  &lt;/blockquote&gt;
&lt;p&gt;Speaking as someone who grew up in Australia, I&amp;rsquo;ve never heard &amp;ldquo;walloper&amp;rdquo; or &amp;ldquo;twat&amp;rdquo; used in that way. Probably just the circles I travel in, or just the amount of British TV I watch, but I tend to associated them with the Irish and British meanings respectively.&lt;/p&gt;
&lt;p&gt;Now, vulgarity out of the way, this is a useful frame of reference for me to explain that I&amp;rsquo;m not really one to alter my language to make it understandable for an international audience. The subheading makes it clear that I&amp;rsquo;m someone from Melbourne, Australia, and I tend to be a little precious about the importation of words from other English speaking nations squashing those I grew up with (a futile activity, I agree, but that doesn&amp;rsquo;t change my feelings). So take this as a general reminder to anyone reading just to keep this context in mind.&lt;/p&gt;
</description>
      <source:markdown>🔗 [Forking Mad: Disparaging Nouns](https://forkingmad.blog/disparaging-nouns/)

&gt; I might use the word walloper to refer to someone. I think it is quite common parlance. &#34;He&#39;s a walloper&#34; - an unkind reference to his annoying character. […] Apparently in Australia it means Policeman! In Ireland it&#39;s a cudgel (short heavy implement, used as a weapon). I guess that one could be phallic ... but Policeman‽
&gt; 
&gt; How about Twat. I love this word. Again, derogatory towards someone who is a fool. It can also mean to hit or slap! (new to me). Our cousins down-under seem to think a Twat is a vulgar term for [censored].

Speaking as someone who grew up in Australia, I&#39;ve never heard &#34;walloper&#34; or &#34;twat&#34; used in that way. Probably just the circles I travel in, or just the amount of British TV I watch, but I tend to associated them with the Irish and British meanings respectively.

Now, vulgarity out of the way, this is a useful frame of reference for me to explain that I&#39;m not really one to alter my language to make it understandable for an international audience. The subheading makes it clear that I&#39;m someone from Melbourne, Australia, and I tend to be a little precious about the importation of words from other English speaking nations squashing those I grew up with (a futile activity, I agree, but that doesn&#39;t change my feelings). So take this as a general reminder to anyone reading just to keep this context in mind.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/02/stumbled-upon-a-way-to.html</link>
      <pubDate>Sat, 02 May 2026 11:06:05 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/02/stumbled-upon-a-way-to.html</guid>
      <description>&lt;p&gt;Stumbled upon a way to add newlines to the prompt in Claude Code: type &lt;kbd&gt;\&lt;/kbd&gt; (backslash), then press &lt;kbd&gt;Enter&lt;/kbd&gt;.&lt;/p&gt;
</description>
      <source:markdown>Stumbled upon a way to add newlines to the prompt in Claude Code: type &lt;kbd&gt;\\&lt;/kbd&gt; (backslash), then press &lt;kbd&gt;Enter&lt;/kbd&gt;.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/02/why-do-i-use-cicd.html</link>
      <pubDate>Sat, 02 May 2026 09:36:56 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/02/why-do-i-use-cicd.html</guid>
      <description>&lt;p&gt;Why do I use CI/CD for my personal stuff at all? One reason: I don&amp;rsquo;t want to think about it. I want to do the work to setup build and release pipelines once, then not think about it until something breaks. I&amp;rsquo;ll complain like a toddler at the time, but it&amp;rsquo;s still better than doing releases manually.&lt;/p&gt;
</description>
      <source:markdown>Why do I use CI/CD for my personal stuff at all? One reason: I don&#39;t want to think about it. I want to do the work to setup build and release pipelines once, then not think about it until something breaks. I&#39;ll complain like a toddler at the time, but it&#39;s still better than doing releases manually.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/02/not-willing-to-give-ai.html</link>
      <pubDate>Sat, 02 May 2026 09:31:06 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/02/not-willing-to-give-ai.html</guid>
      <description>&lt;p&gt;Not willing to give AI agents every coding task I do on the side, but one thing it absolutely can have is all the rubbish involving CI/CD runners and code signing. That&amp;rsquo;s one avenue of software development I&amp;rsquo;d glady offload to something else.&lt;/p&gt;
</description>
      <source:markdown>Not willing to give AI agents every coding task I do on the side, but one thing it absolutely can have is all the rubbish involving CI/CD runners and code signing. That&#39;s one avenue of software development I&#39;d glady offload to something else.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/02/its-kind-of-strange-but.html</link>
      <pubDate>Sat, 02 May 2026 08:02:05 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/02/its-kind-of-strange-but.html</guid>
      <description>&lt;p&gt;It&amp;rsquo;s kind of strange, but while poking around Inkwell, I had flashbacks of using &lt;a href=&#34;https://en.wikipedia.org/wiki/Inbox_by_Gmail&#34;&gt;Google Inbox&lt;/a&gt;. I do sort of miss it, but in the end, I&amp;rsquo;m glad they killed it as it forced me to move to Fastmail.&lt;/p&gt;
</description>
      <source:markdown>It&#39;s kind of strange, but while poking around Inkwell, I had flashbacks of using [Google Inbox](https://en.wikipedia.org/wiki/Inbox_by_Gmail). I do sort of miss it, but in the end, I&#39;m glad they killed it as it forced me to move to Fastmail.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/01/forking-mad-who-knows-that.html</link>
      <pubDate>Fri, 01 May 2026 18:53:53 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/01/forking-mad-who-knows-that.html</guid>
      <description>&lt;p&gt;🔗 &lt;a href=&#34;https://forkingmad.blog/who-knows-that-you-blog/&#34;&gt;Forking Mad: Who knows that you blog?&lt;/a&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;Question for the audience: Do you tell people you blog?&lt;/p&gt;

  &lt;/blockquote&gt;
&lt;p&gt;I found this post via &lt;a href=&#34;https://kevquirk.com/who-knows-that-you-blog&#34;&gt;Kev Quirk&lt;/a&gt; who posted his own answer to this question. Mine are quite similar: I don&amp;rsquo;t really make a point of telling people I have a blog. It&amp;rsquo;s not like I keep it a complete secret: if someone talks about writing or keeping a blog of their own, I do mention that I also have one. And I may say a few words on what I tend to write about. But I rarely mention the URL or send links to people.&lt;/p&gt;
&lt;p&gt;That said, I know of a few people that are aware of it. I have a link to it on my LinkedIn profile and one or two people I work closely with stumbled upon it that way (hi, K.K. 👋). And I don&amp;rsquo;t think that&amp;rsquo;s necessarily a bad thing. It keeps me honest, and resident of the fact that whatever is written here is public. That&amp;rsquo;s always been true, but it becomes quite tangible if you know the people who can read it.&lt;/p&gt;
&lt;p&gt;But no, I generally don&amp;rsquo;t make it a point that I keep a blog.&lt;/p&gt;
</description>
      <source:markdown>🔗 [Forking Mad: Who knows that you blog?](https://forkingmad.blog/who-knows-that-you-blog/)

&gt; Question for the audience: Do you tell people you blog?

I found this post via [Kev Quirk](https://kevquirk.com/who-knows-that-you-blog) who posted his own answer to this question. Mine are quite similar: I don&#39;t really make a point of telling people I have a blog. It&#39;s not like I keep it a complete secret: if someone talks about writing or keeping a blog of their own, I do mention that I also have one. And I may say a few words on what I tend to write about. But I rarely mention the URL or send links to people.

That said, I know of a few people that are aware of it. I have a link to it on my LinkedIn profile and one or two people I work closely with stumbled upon it that way (hi, K.K. 👋). And I don&#39;t think that&#39;s necessarily a bad thing. It keeps me honest, and resident of the fact that whatever is written here is public. That&#39;s always been true, but it becomes quite tangible if you know the people who can read it.

But no, I generally don&#39;t make it a point that I keep a blog.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/01/its-always-dns-jim-mitchell.html</link>
      <pubDate>Fri, 01 May 2026 07:58:38 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/01/its-always-dns-jim-mitchell.html</guid>
      <description>&lt;blockquote class=&#34;quoteback&#34; data-author=&#34;Jim Mitchell&#34; data-avatar=&#34;https://micro.blog/jimmitchell@indieweb.social/avatar.jpg&#34; cite=&#34;https://indieweb.social/@jimmitchell/116495877702405424&#34;&gt;&lt;p&gt;It’s always DNS…&lt;/p&gt;&lt;footer&gt;Jim Mitchell &lt;cite&gt;&lt;a href=&#34;https://indieweb.social/@jimmitchell/116495877702405424&#34; class=&#34;u-in-reply-to&#34;&gt;https://indieweb.social/@jimmitchell/116495877702405424&lt;/a&gt;&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;&lt;script src=&#34;https://cdn.micro.blog/quoteback.js&#34;&gt;&lt;/script&gt;
&lt;p&gt;Sometimes it&amp;rsquo;s NTP (if you know, you know).&lt;/p&gt;
</description>
      <source:markdown>&lt;blockquote class=&#34;quoteback&#34; data-author=&#34;Jim Mitchell&#34; data-avatar=&#34;https://micro.blog/jimmitchell@indieweb.social/avatar.jpg&#34; cite=&#34;https://indieweb.social/@jimmitchell/116495877702405424&#34;&gt;&lt;p&gt;It’s always DNS…&lt;/p&gt;&lt;footer&gt;Jim Mitchell &lt;cite&gt;&lt;a href=&#34;https://indieweb.social/@jimmitchell/116495877702405424&#34; class=&#34;u-in-reply-to&#34;&gt;https://indieweb.social/@jimmitchell/116495877702405424&lt;/a&gt;&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;&lt;script src=&#34;https://cdn.micro.blog/quoteback.js&#34;&gt;&lt;/script&gt;

Sometimes it&#39;s NTP (if you know, you know).
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://lmika.org/2026/05/01/a-gentle-reminder-that-just.html</link>
      <pubDate>Fri, 01 May 2026 07:56:17 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/05/01/a-gentle-reminder-that-just.html</guid>
      <description>&lt;p&gt;A gentle reminder that just because you have a coding agent, doesn&amp;rsquo;t mean everything needs to go through the coding agent. If something can achieved using a traditional command invocation, just use that. It&amp;rsquo;ll burn zero tokens and would end up being faster in the long run.&lt;/p&gt;
</description>
      <source:markdown>A gentle reminder that just because you have a coding agent, doesn&#39;t mean everything needs to go through the coding agent. If something can achieved using a traditional command invocation, just use that. It&#39;ll burn zero tokens and would end up being faster in the long run.
</source:markdown>
    </item>
    
    <item>
      <title>Could Swift&#39;s Guard Statement Work in Go?</title>
      <link>https://lmika.org/2026/04/30/could-swifts-guard-statement-work.html</link>
      <pubDate>Thu, 30 Apr 2026 22:26:05 +1000</pubDate>
      
      <guid>http://lmika.micro.blog/2026/04/30/could-swifts-guard-statement-work.html</guid>
      <description>&lt;p&gt;While writing yet another &lt;code&gt;if&lt;/code&gt; block to check whether a map had a value, I asked myself a question: could Swift&amp;rsquo;s  &lt;code&gt;guard&lt;/code&gt; statement work in Go?&lt;/p&gt;
&lt;p&gt;Go is such an &lt;code&gt;if&lt;/code&gt; heavy language. You&amp;rsquo;re adding &lt;code&gt;if&lt;/code&gt; statements pretty much everywhere: after you receive an error, after you do a type assertion, when you want to verify that a map has a value. All of these come to you in the form of tuples, with the last one being the value to switch on:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;thing&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doSomething&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Having a way to switch like this within an expression would be amazing. It could be an operator that would strip out the last value and pass it through to an &lt;code&gt;else&lt;/code&gt; block when it&amp;rsquo;s either non-nil (for errors) or false (for bools). Otherwise, it would simply return everything else:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;thing&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;guard&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;doSomething&lt;/span&gt;() } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; { &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I believe this is achievable in Swift using &lt;code&gt;guard&lt;/code&gt; or &lt;code&gt;guard let&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;guard&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; thing = doSomething() &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; { &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But thinking about it for more than a few minutes, I can&amp;rsquo;t really see this workable in Go. It&amp;rsquo;s easy enough for Swift to have this, with it&amp;rsquo;s nullability baked into the type system. If a value is either something or nothing, then simply returning that something as the result of an expression is a natural thing to do.&lt;/p&gt;
&lt;p&gt;And because there&amp;rsquo;s only one variable, there&amp;rsquo;s no need to do things like declare that &lt;code&gt;err&lt;/code&gt; is the variable to receive the last parameter. That&amp;rsquo;s right, there&amp;rsquo;s no variable declaration of &lt;code&gt;err&lt;/code&gt; in that &lt;code&gt;else&lt;/code&gt; branch in that first example. Could you assume that the variable name would be &lt;code&gt;err&lt;/code&gt; if the last tuple value is of type &lt;code&gt;error&lt;/code&gt; (likewise, for &lt;code&gt;bool&lt;/code&gt; types, the implicit name would be &lt;code&gt;ok&lt;/code&gt;)? Well, you could, but it&amp;rsquo;d be pretty ugly. You&amp;rsquo;re now relying on knowledge not evident in the code, a property that goes against Go&amp;rsquo;s effort to be clear.&lt;/p&gt;
&lt;p&gt;Another problem is the use of blocks over function calls. In Go, the &lt;code&gt;defer&lt;/code&gt; and &lt;code&gt;go&lt;/code&gt; statements actually takes a function call. The semantics of a regular function call are the same, it&amp;rsquo;s just when the function is dispatched that differs. One could argue that in order to keep the design consistent, a &lt;code&gt;guard&lt;/code&gt; statement would need similar semantics: a function which returns at least two results. This is probably not a deal breaker, but it would be a little limiting, and would break the ability to nest these in a single expression without making lambdas.&lt;/p&gt;
&lt;p&gt;The closest plausible solution I could come up with is a new statement that uses this property, and combines it with an assignment and &lt;code&gt;else&lt;/code&gt; block. Something along the lines of:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;guard&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;thing&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doSomething&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; { &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;While this looks like it includes a regular assignment, its presence will actually be baked into the syntax, and would be used to declare the variables that would accept the function result. Once called, and the tuple returned, the statement will assign it to the declared variables, and branch to &lt;code&gt;else&lt;/code&gt; based on the last value&amp;rsquo;s type. If it&amp;rsquo;s &lt;code&gt;error&lt;/code&gt;, it will branch when it&amp;rsquo;s non-nil; if it&amp;rsquo;s &lt;code&gt;bool&lt;/code&gt;, it&amp;rsquo;ll branch when it&amp;rsquo;s false (anything else will be a type error). If the branch isn&amp;rsquo;t taken, the other variables will be available to anything beyond it (this is one of the key differences with the existing assignment based &lt;code&gt;if&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Because the assignment is required to declare the necessary variables, this has to be a statement, and cannot be nested. Such limitation feels critical to the usefulness of this, and if proposed, its worth in the language would probably be questioned. That&amp;rsquo;s a lot of new syntax for something that&amp;rsquo;s marginally better than an &lt;code&gt;if&lt;/code&gt; block.&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;m doubtful something like this will see its presence in Go anytime soon. But it&amp;rsquo;s been an interesting exercise.&lt;/p&gt;
</description>
      <source:markdown>While writing yet another `if` block to check whether a map had a value, I asked myself a question: could Swift&#39;s  `guard` statement work in Go?

Go is such an `if` heavy language. You&#39;re adding `if` statements pretty much everywhere: after you receive an error, after you do a type assertion, when you want to verify that a map has a value. All of these come to you in the form of tuples, with the last one being the value to switch on:

```go
thing, err := doSomething()
if err != nil {
  return err
}
```
Having a way to switch like this within an expression would be amazing. It could be an operator that would strip out the last value and pass it through to an `else` block when it&#39;s either non-nil (for errors) or false (for bools). Otherwise, it would simply return everything else:

```go
thing := guard { doSomething() } else { return err }
```
I believe this is achievable in Swift using `guard` or `guard let`: 

```swift
guard let thing = doSomething() else { return }
```
But thinking about it for more than a few minutes, I can&#39;t really see this workable in Go. It&#39;s easy enough for Swift to have this, with it&#39;s nullability baked into the type system. If a value is either something or nothing, then simply returning that something as the result of an expression is a natural thing to do.

And because there&#39;s only one variable, there&#39;s no need to do things like declare that `err` is the variable to receive the last parameter. That&#39;s right, there&#39;s no variable declaration of `err` in that `else` branch in that first example. Could you assume that the variable name would be `err` if the last tuple value is of type `error` (likewise, for `bool` types, the implicit name would be `ok`)? Well, you could, but it&#39;d be pretty ugly. You&#39;re now relying on knowledge not evident in the code, a property that goes against Go&#39;s effort to be clear.

Another problem is the use of blocks over function calls. In Go, the `defer` and `go` statements actually takes a function call. The semantics of a regular function call are the same, it&#39;s just when the function is dispatched that differs. One could argue that in order to keep the design consistent, a `guard` statement would need similar semantics: a function which returns at least two results. This is probably not a deal breaker, but it would be a little limiting, and would break the ability to nest these in a single expression without making lambdas.

The closest plausible solution I could come up with is a new statement that uses this property, and combines it with an assignment and `else` block. Something along the lines of:

```go
guard thing, err := doSomething() else { return err }
```
While this looks like it includes a regular assignment, its presence will actually be baked into the syntax, and would be used to declare the variables that would accept the function result. Once called, and the tuple returned, the statement will assign it to the declared variables, and branch to `else` based on the last value&#39;s type. If it&#39;s `error`, it will branch when it&#39;s non-nil; if it&#39;s `bool`, it&#39;ll branch when it&#39;s false (anything else will be a type error). If the branch isn&#39;t taken, the other variables will be available to anything beyond it (this is one of the key differences with the existing assignment based `if`).

Because the assignment is required to declare the necessary variables, this has to be a statement, and cannot be nested. Such limitation feels critical to the usefulness of this, and if proposed, its worth in the language would probably be questioned. That&#39;s a lot of new syntax for something that&#39;s marginally better than an `if` block.

So I&#39;m doubtful something like this will see its presence in Go anytime soon. But it&#39;s been an interesting exercise.
</source:markdown>
    </item>
    
  </channel>
</rss>
