<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://rob.rho.org.uk/">
  <title>rob.rho.org.uk</title>
  <link rel="alternate" type="text/html" href="https://rob.rho.org.uk/"/>
  <link type="application/atom+xml" rel="self" href="https://rob.rho.org.uk/atom.xml"/>
  <updated>2026-05-16T17:32:58+00:00</updated>
  <id>https://rob.rho.org.uk/</id>
  <icon>http://rob.rho.org.uk/favicon.png</icon>

  <author>
    <name>Rob Hague</name>
    <email>rob@rho.org.uk</email>
  </author>

  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2026-04-25:out_on_a_limb</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2026/04/out_on_a_limb.html"/>
    <title>Out on a Limb</title>
    <updated>2026-04-25T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;Reading &lt;a href=&quot;https://openai.com/index/introducing-gpt-5-5/&quot;&gt;OpenAI’s recent announcement of GPT 5.5&lt;/a&gt;, I was struck by the following pull-quote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;One engineer at NVIDIA who had early access to the model went as far as to say: “Losing access to GPT‑5.5 feels like I’ve had a limb amputated.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They presumably intended this to be taken as an endorsement, but I read it as a warning. I don’t &lt;em&gt;want&lt;/em&gt; to come to rely on a tool from a single vendor to such an extent that I can’t work without it. As demonstrated recently by OpenAI’s competitor Anthropic, that vendor can &lt;a href=&quot;https://www.anthropic.com/engineering/april-23-postmortem&quot;&gt;unilaterally degrade the service&lt;/a&gt;, by accident or design, or perhaps &lt;a href=&quot;https://simonwillison.net/2026/Apr/22/claude-code-confusion/&quot;&gt;jack up the price by five times&lt;/a&gt;. Given the staggering expense in serving increasingly complicated models in increasingly complicated ways, both of these seem less like &lt;em&gt;if&lt;/em&gt; then &lt;em&gt;when&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;A similar criticism could be levelled at cloud providers like &lt;a href=&quot;https://aws.amazon.com&quot;&gt;AWS&lt;/a&gt;, and many other things, and it’s always wise to approach any such entanglement with eyes open. However, AI seems like a special case, as the alternative that it’s foreclosing is not another vendor, but your own skills. Despite the myriad problems with and around LLM-based coding tools, there definitely seems to be something useful there. Leaning on them too much, though, seems like a recipe for ending up in a very uncomfortable place when the music stops.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2026-04-05:all_quiet</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2026/04/all_quiet.html"/>
    <title>All Quiet</title>
    <updated>2026-04-05T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;It’s been a bit quiet here of late; I’ve not put anything up anything since my now-annual &lt;a href=&quot;/2025/12/books_of_2025.html&quot;&gt;New Year’s Eve book post&lt;/a&gt;. At time of writing, that’s ninety-five days ago, which is the longest gap I’ve had since 2022 into &lt;a href=&quot;/2023/02/write-less.html&quot;&gt;2023&lt;/a&gt;. The reason is prosaic — there’s been a lot going on both at work and at home, and I’ve simply not been able to carve out the time. I don’t plan to go into either on here, but I wanted to plant a flag in the ground to encourage me to get back to writing. I have a couple of pieces in mind, so hopefully this declaration will act as additional motivation to get them over the line.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-12-31:books_of_2025</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/12/books_of_2025.html"/>
    <title>Books of 2025</title>
    <updated>2025-12-31T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;In the same way that two points make a line, I’m going to say that two posts make a tradition. This time last year I wrote about the &lt;a href=&quot;/2024/12/books_of_2024.html&quot;&gt;books I read in 2024&lt;/a&gt;, and suggested it might become an annual thing. Making good on that threat, here’s my reading in 2025:&lt;/p&gt;

&lt;div style=&quot;overflow-x: scroll;&quot;&gt;
    &lt;object data=&quot;/2025/12/books2025.svg&quot; type=&quot;image/svg+xml&quot; style=&quot;max-width: none; width:1440px;&quot;&gt;
    &lt;/object&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;(The yellow bars indicate when I started and finished each book; the open ones are for books I was reading when the year started, or still have on the go.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The biggest through-line has been the &lt;a href=&quot;https://marthawells.com/murderbot.htm&quot;&gt;Matha Well’s &lt;em&gt;MurderBot Diaries&lt;/em&gt;&lt;/a&gt; (highlighted in &lt;span style=&quot;color: black; background: #afd&quot;&gt;green&lt;/span&gt;). I added these to my list about the same time as last year’s favourite Hild, but I only got around to starting at the beginning of the year&lt;sup id=&quot;fnref:cool&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:cool&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Once I had started, I devoured them at a breakneck pace, having to make a conscious effort to read other stuff in between to avoid running out too quickly.&lt;/p&gt;

&lt;p&gt;They’re for the most part short (novellas rather than novels), and the style is a fantastically readable inner monologue. What really makes the series, though, is the combination of kinetic set pieces with emotional literacy and an engaging main character. If you’ve not tried them out yet, I definitely recommend that you do so. Don’t let the title put you off; it sounds like it’s about a murderous robot, but they’re actually more of a cyborg.&lt;/p&gt;

&lt;p&gt;When I wasn’t reading about everyone’s favourite telenovela-loving Security Unit, I tried to hit a reasonable mix of fiction and non-fiction, with variety within each. &lt;a href=&quot;https://en.wikipedia.org/wiki/Careless_People&quot;&gt;Careless People&lt;/a&gt;, &lt;a href=&quot;https://appleinchina.com/&quot;&gt;Apple in China&lt;/a&gt; and &lt;a href=&quot;https://thisisforeveryone.timbl.com/&quot;&gt;This is for Everyone&lt;/a&gt; were all interesting both in their own right and in the context of the public discussion they sparked; I’m usually late to such things, but I’m glad I pulled my finger out in these cases, and will look to do so in the future. I also revisited old classics and familiar authors, and spent some enjoyable and thought-provoking hours with vintage computer texts.&lt;/p&gt;

&lt;p&gt;Looking back, I’m happy that the time I spent reading over the last twelve months was time well spent, and it also provides me with a prompt to think about next year. Maybe more history? Some new fiction authors, maybe new genres? In any case, now that I’ve established a tradition, I’ll share all next December.&lt;/p&gt;

&lt;p&gt;Happy New Year.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;For reference, here’s a full list of the 38 books I read in 2025:&lt;/p&gt;

&lt;ul&gt;



  
  &lt;li&gt;Various:
  
        &lt;a href=&quot;https://www.rwjf.org/en/about-rwjf/how-we-work/learning-and-evaluation/ideas-for-an-equitable-future/take-us-to-a-better-place-stories.html&quot;&gt;
        &lt;i&gt;Take Us to a Better Place&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Douglas Adams:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy&quot;&gt;
        &lt;i&gt;The Hitchhiker&apos;s Guide to the Galaxy&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Naomi Alderman:
  
        &lt;a href=&quot;https://harpercollins.co.uk/products/the-future-naomi-alderman?variant=41289344876622&quot;&gt;
        &lt;i&gt;The Future&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Isaac Asimov:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/I,_Robot&quot;&gt;
        &lt;i&gt;I, Robot&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Tim Berners-Lee:
  
        &lt;a href=&quot;https://thisisforeveryone.timbl.com/&quot;&gt;
        &lt;i&gt;This Is For Everyone&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Alan Blackwell:
  
        &lt;a href=&quot;https://direct.mit.edu/books/oa-monograph/5814/Moral-CodesDesigning-Alternatives-to-AI&quot;&gt;
        &lt;i&gt;Moral Codes: Designing Alternatives to AI&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Leo Brodie:
  
        &lt;a href=&quot;https://thinking-forth.sourceforge.net&quot;&gt;
        &lt;i&gt;Thinking FORTH&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Clayton M. Christensen:
  
        &lt;a href=&quot;https://www.hbs.edu/faculty/Pages/item.aspx?num=46&quot;&gt;
        &lt;i&gt;The Innovator&apos;s Dilemma&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Lindsey Davis:
  
        &lt;a href=&quot;https://lindseydavis.co.uk/publications/the-silver-pigs/&quot;&gt;
        &lt;i&gt;The Silver Pigs&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Claire Dederer:
  
        &lt;a href=&quot;https://www.hodder.co.uk/titles/claire-dederer-2/monsters/9781399715072/&quot;&gt;
        &lt;i&gt;Monsters: What Do We Do with Great Art by Bad People?&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Richard deGrandis-Harrison:
  
        &lt;a href=&quot;https://archive.org/details/forthonbbcmicroc0000degr&quot;&gt;
        &lt;i&gt;FORTH on the BBC Microcomputer&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;F. Scott Fitzgerald:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Great_Gatsby&quot;&gt;
        &lt;i&gt;The Great Gatsby&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;William Gibson:
  
        &lt;a href=&quot;https://www.penguin.co.uk/books/23649/all-tomorrows-parties-by-william-gibson/9780241953518&quot;&gt;
        &lt;i&gt;All Tomorrow&apos;s Parties&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Nicola Griffith:
  
        &lt;a href=&quot;https://nicolagriffith.com/the-blue-place-aud-torvingen-1/&quot;&gt;
        &lt;i&gt;The Blue Place&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Kazuo Ishiguru:
  
        &lt;a href=&quot;https://www.faber.co.uk/product/9780571283897-the-unconsoled/&quot;&gt;
        &lt;i&gt;The Unconsoled&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Beth Lincoln:
  
        &lt;a href=&quot;https://www.penguin.co.uk/books/445968/the-swifts-by-lincoln-beth/9780241536452&quot;&gt;
        &lt;i&gt;The Swifts&lt;/i&gt;
        &lt;/a&gt;
         (I don&apos;t usually record books I&apos;m reading with the girls, but this one
is so good I&apos;m making an exception.
)
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Jeph Loeb, Tim Sale, Bjarne Hansen:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/Superman_for_All_Seasons&quot;&gt;
        &lt;i&gt;Superman For All Seasons&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Tim Marshall:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/Prisoners_of_Geography&quot;&gt;
        &lt;i&gt;Prisoners of Geography&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Scott McCloud:
  
        &lt;a href=&quot;https://scottmccloud.com/2-print/1-uc/&quot;&gt;
        &lt;i&gt;Understanding Comics: The Invisible Art&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Patrick McGee:
  
        &lt;a href=&quot;https://appleinchina.com/&quot;&gt;
        &lt;i&gt;Apple in China&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;John Muir:
  
        &lt;a href=&quot;https://archive.org/details/myfirstsummerins00muir&quot;&gt;
        &lt;i&gt;My First Summer in the Sierra&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Haruki Murakami:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/What_I_Talk_About_When_I_Talk_About_Running&quot;&gt;
        &lt;i&gt;What I Talk About When I Talk About Running&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/1Q84&quot;&gt;
        &lt;i&gt;1Q84&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Arthur Norman and Gillian Cattell:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/Acornsoft_LISP&quot;&gt;
        &lt;i&gt;LISP on the BBC Microcomputer&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Lewis Packwood:
  
        &lt;a href=&quot;https://curiousvideogamemachines.com/&quot;&gt;
        &lt;i&gt;Curious Video Game Machines&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Terry Pratchett:
  
        &lt;a href=&quot;https://www.terrypratchettbooks.com/books/the-wee-free-men/&quot;&gt;
        &lt;i&gt;The Wee Free Men&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Martha Wells:
  
        &lt;a href=&quot;https://www.marthawells.com/murderbot1.htm&quot;&gt;
        &lt;i&gt;All Systems Red&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://www.marthawells.com/murderbot2.htm&quot;&gt;
        &lt;i&gt;Artificial Condition&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://www.marthawells.com/murderbot3.htm&quot;&gt;
        &lt;i&gt;Rogue Protocol&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://www.marthawells.com/murderbot4.htm&quot;&gt;
        &lt;i&gt;Exit Strategy&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://www.marthawells.com/networkeffect.htm&quot;&gt;
        &lt;i&gt;Network Effect&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Murderbot_Diaries#%22Compulsory%22&quot;&gt;
        &lt;i&gt;Compulsory&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Murderbot_Diaries#%22Home:_Habitat,_Range,_Niche,_Territory%22&quot;&gt;
        &lt;i&gt;Home: Habitat, Range, Niche, Territory&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://www.marthawells.com/murderbot6.htm&quot;&gt;
        &lt;i&gt;Fugitive Telemtry&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://www.marthawells.com/murderbot7.htm&quot;&gt;
        &lt;i&gt;System Collapse&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://reactormag.com/rapport-martha-wells/&quot;&gt;
        &lt;i&gt;Rapport: Friendship, Solidarity, Communion, Empathy&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Christina Wodtke:
  
        &lt;a href=&quot;https://cwodtke.com/writing-2/&quot;&gt;
        &lt;i&gt;Radical Focus&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Sarah Wynn-Williams:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/Careless_People&quot;&gt;
        &lt;i&gt;Careless People&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

&lt;/ul&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:cool&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;This was, by coincidence rather than design, a few months before the great-but-different &lt;a href=&quot;https://tv.apple.com/gb/show/murderbot/umc.cmc.5owrzntj9v1gpg31wshflud03&quot;&gt;Apple TV adaptation&lt;/a&gt; brought the series to a much wider audience, so I can still claim to have been into MurderBot (just) before it was cool. &lt;a href=&quot;#fnref:cool&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-11-17:3d_year</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/11/3d_year.html"/>
    <title>A 3D Year</title>
    <updated>2025-11-17T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/11/3d_dragons.jpg" alt="3D-printed articulated dragons, sitting in a spool"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;A year ago, I &lt;a href=&quot;/2024/11/adventures_in.html&quot;&gt;got a 3D printer&lt;/a&gt;. A year later, is it gathering dust, or am I still using it?&lt;/p&gt;

&lt;p&gt;I’m happy to report, while it’s not quite as busy as it was for the first few weeks, it is still in regular use. While I’ve made quite a few posts over the year (collected at the end of this one), I thought it might be interesting to look back and see what kinds of things I’ve been using it for.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2025/11/3d_wheelchair.jpg&quot; class=&quot;sidebar&quot; /&gt;&lt;/p&gt;

&lt;p&gt;One obvious category (indeed, the thing the printer is doing as I type this) is toys. This was the original impetus for pushing the button on a 3D printer. Specifically, articulated dragons — our youngest in particular loves these. While they’re cool in their way, if this was all the girls were using the printer for I’d be disappointed. However, they’ve been substantially more creative, in particular with doll’s furniture and accessories. The eldest has got very into &lt;a href=&quot;https://www.tinkercad.com&quot;&gt;TinkerCad&lt;/a&gt;, and has custom designed numerous pieces, the most ambitious being a working wheelchair for a doll with a broken leg. &lt;a href=&quot;https://www.heroforge.com&quot;&gt;HeroForge&lt;/a&gt; is also proving a hit.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2025/11/3d_splitter.jpg&quot; class=&quot;sidebar left&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Another cliché is that the main use of 3D printers is to print accessories for 3D printers, and I’ve done my fair share of that. Along with the usual scrapers and buckets, I’ve printed out quite a few mounts for hygrometers&lt;sup id=&quot;fnref:hygro&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:hygro&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, and most recently a &lt;a href=&quot;https://makerworld.com/en/models/700390-filament-y-splitter-for-printers-with-ams&quot;&gt;Y-splitter&lt;/a&gt; to allow me to keep the external spool connected at the same time as the AMS. Printing things to better print things is a bit circular, but a nice fringe benefit.&lt;/p&gt;

&lt;p&gt;I’ve also found it surprisingly useful for things around the house. Sometimes I find myself printing out things that are better and cheaper mass-produced, like curtain hooks. The benefit of using the printer is that you can get one or two rather than buying an entire pack, and you can get it in ten minutes rather than making a trip to the shops. More often, though, I’m printing something that I &lt;em&gt;couldn’t&lt;/em&gt; buy, as it’s custom designed to meet a specific need. An example would be the wall mount for our kitchen scales — we have something that exactly fits the scales we have, and the location where we want to put it. I’ve picked up enough basic CAD skills (OpenSCAD and FreeCAD) that I can create pieces to solve particular problems without too much effort, and doing so is immensely satisfying.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2025/11/3d_skadis.jpg&quot; class=&quot;sidebar&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I recently got a Skadis pegboard to display some of my retro computing bits and pieces. 3D printing is the ideal way to get mounting hooks and other attachment to support things of all shapes and sizes, either designed from scratch, downloaded from communities like &lt;a href=&quot;https://www.thingiverse.com&quot;&gt;Thingiverse&lt;/a&gt; and &lt;a href=&quot;https://makerworld.com&quot;&gt;Makerworld&lt;/a&gt; (where Skadis accessories are a thriving subgenre), or a custom combination of the two. I can see retro computing being another area where the ability to make custom 3D printed parts will be handy; I’ve only done one project in this vein so far, but I can see more on the horizon.&lt;/p&gt;

&lt;p&gt;One thing that I’ve &lt;em&gt;not&lt;/em&gt; used the printer for much, at least yet, is making parts for &lt;a href=&quot;/keyboards.html&quot;&gt;keyboards&lt;/a&gt;. I’ve made keycaps, but I’ve just not been able devote the time needed for a bigger project. Hopefully, I will soon.&lt;/p&gt;

&lt;p&gt;Overall, I’m glad that our 3D printer has continued to prove its worth. It’s not in action every day, or even every week, but it’s great to have on hand, and I certainly don’t regret taking the plunge.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;3D printing posts this year:&lt;/p&gt;

&lt;ul&gt;







&lt;li&gt;17 Nov 2024: &lt;a href=&quot;/2024/11/adventures_in.html&quot;&gt;Adventures in the Third Dimension&lt;/a&gt;&lt;/li&gt;






&lt;li&gt;23 Nov 2024: &lt;a href=&quot;/2024/11/colourful.html&quot;&gt;Multicolour Waste&lt;/a&gt;&lt;/li&gt;






&lt;li&gt;29 Nov 2024: &lt;a href=&quot;/2024/11/first_functional_print.html&quot;&gt;First Functional Print&lt;/a&gt;&lt;/li&gt;






&lt;li&gt;22 Dec 2024: &lt;a href=&quot;/2024/12/the_cat_is_lying.html&quot;&gt;The Cat is Lying To You&lt;/a&gt;&lt;/li&gt;






&lt;li&gt;24 Dec 2024: &lt;a href=&quot;/2024/12/deck_the_halls.html&quot;&gt;Deck the Halls&lt;/a&gt;&lt;/li&gt;






&lt;li&gt; 4 Jan 2025: &lt;a href=&quot;/2025/01/keyboard_tray_and_freecad.html&quot;&gt;Keyboard Tray and FreeCAD&lt;/a&gt;&lt;/li&gt;






&lt;li&gt;12 Jan 2025: &lt;a href=&quot;/2025/01/steal_a_boat.html&quot;&gt;You Wouldn&apos;t Steal a Boat&lt;/a&gt;&lt;/li&gt;






&lt;li&gt;31 Jan 2025: &lt;a href=&quot;/2025/01/three_shots.html&quot;&gt;Three Shots&lt;/a&gt;&lt;/li&gt;






&lt;li&gt;18 Jul 2025: &lt;a href=&quot;/2025/07/coffee_sleeve.html&quot;&gt;Coffee Cup Sleeve&lt;/a&gt;&lt;/li&gt;






&lt;li&gt;10 Aug 2025: &lt;a href=&quot;/2025/08/miniature_maxiature.html&quot;&gt;Miniature, Maxiature&lt;/a&gt;&lt;/li&gt;






&lt;li&gt; 3 Sep 2025: &lt;a href=&quot;/2025/09/cable_clip.html&quot;&gt;A Customisable Cable Clip&lt;/a&gt;&lt;/li&gt;






&lt;li&gt;19 Oct 2025: &lt;a href=&quot;/2025/10/new_material.html&quot;&gt;A New Material&lt;/a&gt;&lt;/li&gt;








&lt;/ul&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:hygro&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;3D printer filaments are, to a greater or lesser extent, sensitive to humidity, so unless you live in the Sahara you need to keep an eye on it, especially for storage. &lt;a href=&quot;#fnref:hygro&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-11-08:confession</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/11/confession.html"/>
    <title>A Confession</title>
    <updated>2025-11-08T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;I have a bit of a confession to make. I don’t get &lt;a href=&quot;https://en.wikipedia.org/wiki/Forth_(programming_language)&quot;&gt;Forth&lt;/a&gt;. It’s a language I’ve admired from afar, and its approach is genuinely novel and intuitively appealing. However, every time I try to dig deeper, I just… don’t get it.&lt;/p&gt;

&lt;p&gt;It’s not that I don’t like different languages; on the contrary, I’m fascinated by them. You’re unlikely to come across Forth these days if you’re not. Nor is my experience limited to mainstream C-alikes; I’m familiar with Lisp and Scheme, ML and Haskell, assembler and SQL. I’ve played with SmallTalk and Prolog and TeX and Scratch. My last job revolved around Verilog and TCL.&lt;/p&gt;

&lt;p&gt;I mention that to emphasise the fact that I come to Forth with an open mind. More than that, I come with eager anticipation, as there are a lot of aspects that look good. I like the lack of extraneous syntax — I don’t think I’ve seen a language with &lt;em&gt;less&lt;/em&gt; boilerplate and ceremony than Forth — and the use of the stack takes this further by making the flow of data largely implicit. It reminds me of the point-free style in Haskell, putting the focus on what you’re trying to achieve rather than the mechanism by which you’re achieving it. I’m also a fan of the way it erases the barrier between runtime and compile time, and offers an interactive, malleable environment without the overhead that usually entails.&lt;/p&gt;

&lt;p&gt;Forth has a reputation of offering both low-level performance and high-level structure, and this is where I run into problems. It certainly has the former, but the more I dig into the details the less convinced I am of the latter. Perhaps this was true when it was conceived. It’s certainly more structured than assembler or BASIC (at least the basic versions), and less rigid that earlier languages like FORTRAN and COBOL. However, even at the time of Forth’s inception in late 60s these weren’t the only options. Its near-contemporary C offers a similar combination of flexibility and performance, with somewhat different tradeoffs, and Lisp was hitting many of the same bullet points almost a decade earlier.&lt;/p&gt;

&lt;p&gt;Both of those languages were both useful at the time of their invention, but their core concepts were solid and flexible enough to grow and spawn entire families of progeny and imitators, going far beyond their original scope. Forth, in contrast, seems to have stayed largely in its lane of writing efficient, close-to-the-metal code on a small scale. From what I’ve seen so far, as you move to more complex applications — in particular, more &lt;em&gt;dynamic&lt;/em&gt; ones that operate on less uniform data — it feels like Forth’s flexibility and minimalism are working against it.&lt;/p&gt;

&lt;p&gt;I’m not giving up, though — enough smart people have extolled the virtues of Forth that I remain convinced that there’s something there. I’m just not getting it. To try and get into the mindset of its heydey, I’ve been exploring  Acornsoft FORTH on the Electron, aided by Richard De Grandis-Harrison’s extensive book &lt;a href=&quot;https://www.acornelectron.co.uk/info/electron/acornsoft_adder/Forth.html&quot;&gt;FORTH on the BBC Microcomputer&lt;/a&gt;. Maybe it will click, and even if it doesn’t it’s definitely something different.&lt;/p&gt;


    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-10-25:opening_esun_ebox</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/10/opening_esun_ebox.html"/>
    <title>Opening the eSun eBox Lite</title>
    <updated>2025-10-25T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;As mentioned in my &lt;a href=&quot;/2025/10/new_material.html&quot;&gt;last post&lt;/a&gt;, I recently purchased an &lt;a href=&quot;https://www.esun3d.com/ebox-product/&quot;&gt;eSun eBox Lite&lt;/a&gt; filament drier. All was good at first, and it performed well drying out a roll of PETG, but the next time I came to use it I noticed that the fan wasn’t running. It was still within the return window, but as it’s both pretty bulky and pretty cheap, I decided to have a go at fixing the problem instead. This proved straightforward, and so I’d still recommend this as a low-cost and effective drier.&lt;/p&gt;

&lt;p&gt;I came across &lt;a href=&quot;https://www.reddit.com/r/3Dprinting/comments/c92im9/esun_ebox_fan_not_working/&quot;&gt;this Reddit post&lt;/a&gt; describing a similar problem. It pointed me in the right direction, but the thread is a few years old and doesn’t include any pictures, so I thought it worth writing a quick post to illustrate the process of taking the box apart.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2025/10/ebox.jpg&quot; alt=&quot;eSun eBox Lite screw locations&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Doing so is pretty straightforward:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Open the drier and remove the two small screws in the heating plate with a Phillips 0 screwdriver (left hand photo).&lt;/li&gt;
  &lt;li&gt;Close the drier and put it on its side, with the bottom facing you.&lt;/li&gt;
  &lt;li&gt;Remove the four rubber feet at the corners (right hand photo; you don’t need to remove the middle one), and remove the screws underneath these with a Phillips 1 screwdriver.&lt;/li&gt;
  &lt;li&gt;Gently slide the bottom of the drier out. Be careful of the wires connecting to the circuit board to the heating element, the control panel and the fan. The panel and the fan can be removed from the upper housing; these just slot into the plastic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the device is open, it’s easy to check the connectors for the various components on the circuit board, which it seems have a tendency to work lose if it’s moved around too much. Sure enough, I reseated the fan connecter and everything was back to working as normal. It’s safe to (briefly) power it up to test it while disassembled, and when you’re happy reassembly is just matter of reversing the above steps.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-10-19:new_material</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/10/new_material.html"/>
    <title>A New Material</title>
    <updated>2025-10-19T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/10/petg_benchy.jpeg" alt="Two 3D printed tugboats, one black and one red."/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;Since getting a 3D printer almost a year ago, I’ve stuck to &lt;a href=&quot;https://en.wikipedia.org/wiki/Polylactic_acid&quot;&gt;PLA&lt;/a&gt;. This is the default material for FDM printers, and for good reason. It’s produced from starch rather than petrochemicals, it prints at low temperatures, and it has decent aesthetic and mechanical properties. It’s a great all-rounder. But it’s not all there is.&lt;/p&gt;

&lt;p&gt;My &lt;a href=&quot;https://uk.store.bambulab.com/products/a1&quot;&gt;Bambu A1&lt;/a&gt; isn’t enclosed, which rules out higher temperature filaments such as ASA and Nylon. However, there are still a few options. I decided to try &lt;a href=&quot;https://en.wikipedia.org/wiki/Polyethylene_terephthalate#PETG&quot;&gt;PETG&lt;/a&gt;, which is similar to PLA but less sensitive to UV and temperature fluctuations, and thus better suited to outdoor applications.&lt;/p&gt;

&lt;p&gt;The main downside of PETG is that it’s much more hygroscopic: it absorbs moisture from the environment. Keeping PLA dry is advisable, but with PETG it’s essential. Knowing this, I invested in a basic filament drier (the &lt;a href=&quot;https://www.esun3d.com/ebox-product/&quot;&gt;eSun eBox&lt;/a&gt; which also allows you to print with the spool in the box) and some desiccant beads. After a full eight hours of drying, I printed out the traditional test.&lt;/p&gt;

&lt;p&gt;The results are shown above; the PETG is the black one, next to one I printed a while ago in red Bambu PLA Basic. I’m pretty happy. First off, the drying seems to have been worth it; I had none of the stringing or popping problems that often come with PETG. The quality is up there with the best I’ve had with PLA, without needing to tweak settings. I also like the glossy finish (but couldn’t manage to get a good photo that showed that off).&lt;/p&gt;

&lt;p&gt;So, successful test. Next I’ll try some practical prints; one of my car charger holders is looking a little worse for wear, so a replacement for that is likely to be first on the list. I imagine I’ll still be using PLA for most things, but it’s good to have other tools in the toolbox.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-09-14:language_of_ai</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/09/language_of_ai.html"/>
    <title>The Language of AI</title>
    <updated>2025-09-14T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/08/distracted_by_lisp.jpg" alt=""Distracted Boyfriend" meme, with the girlfriend as the book "Understanding Deep Learning" and the distraction "LISP on the BBC Microcomputer"."/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/John_McCarthy_(computer_scientist)&quot;&gt;John McCarthy&lt;/a&gt; is credited with two major contributions to Computer Science. The first is the term “Artificial Intelligence”, and the second is the programming language LISP. In part due to this entwined history, and in part due to its particular strength, LISP was long though of as the language of AI, but it’s more than that — it’s not an exaggeration to say that pretty much every programming language in use today borrows from LISP to a greater or lesser degree, and LISP itself is still in alive and well in various forms. There’s a lot of history to delve into, but recently I decided to try out something almost equidistant from today and LISP’s origin in 1960: LISP on the &lt;a href=&quot;/2023/08/1983.html&quot;&gt;Acorn Electron&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This isn’t actually the first time I’ve used that particular implementation. As a child in the 80s, I remember being intrigued and picking up a copy on cassette from a market stall for a few pounds. Unfortunately, the experiment was short-lived, as the software didn’t come with any documentation. I fumbled around trying to get the enigmatic “Evaluate:” prompt to do something useful, but didn’t get anywhere, and soon moved on to less obtuse pursuits.&lt;/p&gt;

&lt;p&gt;A few decades later, and I’m returning to it better prepared. Not only do I have both a reasonable grasp of the theoretical foundations and a degree of practical experience with a variety of LISPs, I also managed to find a decent second-hand copy of &lt;a href=&quot;https://en.wikipedia.org/wiki/Acornsoft_LISP&quot;&gt;&lt;em&gt;LISP on the BBC Microcomputer&lt;/em&gt; by Arthur Norman and Gillian Cattell&lt;/a&gt;, the very documentation I was missing the first time round. So, with the barriers out of the way, what is LISP on an 80s micro actually like?&lt;/p&gt;

&lt;p&gt;To my surprise, pretty good. The Electron is a far cry from the Lisp Machines that were its contemporaries, or the mainframes and minicomputers that LISP grew up on. In particular, it has little RAM, and a CPU built around bytes rather than words. To fit inside these constraints, Acornsoft LISP is an interpreter rather than a compiler (as more fully-fledged LISPs tend to be), and it only includes the essentials — so no arbitrary-precision arithmetic, no macros, no conditions. What’s left, however, is a flexible and well-thought-through environment that captures the flavour of LISP, especially for learning and exploration.&lt;/p&gt;

&lt;p&gt;This environment is both interactive and transparent, in the best traditions of the REPL&lt;sup id=&quot;fnref:repl&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:repl&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. This provides the immediacy of BASIC with a far more structured and powerful underpinning. An upside of the interpreter approach is that it puts the equivalence of code and data, one of LISP’s strengths, front and centre. Functions are just lists starting with the symbol &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LAMBDA&lt;/code&gt;, and can be manipulated as such with no intermediaries.&lt;sup id=&quot;fnref:lisp1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:lisp1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;This transparency forms the basis of one of the more interesting aspects of the system: the interactive code editor. For most people familiar with LISP, “editor” immediately conjures up the image of &lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt; and similar editors, but this isn’t that. It’s more akin to the long-obsolete concept of interactive &lt;a href=&quot;https://en.wikipedia.org/wiki/Line_editor&quot;&gt;line editors&lt;/a&gt; such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ed&lt;/code&gt;&lt;sup id=&quot;fnref:ed&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:ed&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ex&lt;/code&gt;&lt;sup id=&quot;fnref:ex&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:ex&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;. Instead of moving a cursor around a visible display of the source code, you issue a series of commands to manipulate it, and then print out some or all of the modified text.&lt;/p&gt;

&lt;p&gt;What makes the Acornsoft LISP editor different is that, unlike &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ed&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ex&lt;/code&gt;, it’s a &lt;em&gt;structured&lt;/em&gt; editor — instead of manipulating lines of text, the commands manipulate lists. As functions are, like pretty much everything else, just nested lists, this provides an immensely powerful way to both navigate and edit the code, with the added bonus that introducing syntax errors is impossible. It’s somewhat akin to block-based programming languages like &lt;a href=&quot;https://scratch.mit.edu&quot;&gt;Scratch&lt;/a&gt;, and while it takes a little getting used to it’s a great interface when it does click, so much so that I find myself wondering what a modern take would be.&lt;/p&gt;

&lt;p&gt;The documentation is equally inspiring. Norman and Cattell start with a thorough and well-paced walk through the fundamentals, and then move on to some more substantial examples. The first, as is required by law in any book on LISP, is a LISP interpreter, followed by some other LISP-related facilities such as a pretty printer, a correct-but-slow implementation of arbitrary precision integer arithmetic, and the internals of the aforementioned structured editor. They then broaden out to more general parsing, evaluation and generation of machine code, demonstrating the suitability of LISP for building compilers (and the authors’ interest in that field). The chapter is rounded off with a bare-bones implementation of a text adventure. This is clear, general and extensible, and shows off the expressiveness and power of LISP.&lt;/p&gt;

&lt;p&gt;So, after all that, is Acornsoft LISP a good choice for programming the Electron? If your aim is to produce something for others to use, probably not — aside from the fact that they’d also need to have the interpreter, the overhead is likely to be too much. With such limited resources, you usually want to squeeze as much performance out of the hardware as possible, and that’s not where LISP’s strength lies. However, if you’re programming a one-off solution for yourself, or exploring a problem interactively, it seems like an excellent choice. A modern analogue would be something like &lt;a href=&quot;https://jupyter.org&quot;&gt;Jupyter&lt;/a&gt; notebooks. Not bad for a little computer from the early 80s, even if I didn’t realise it at the time. I’m glad I revisited it.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;The original photograph behind the Distracted Boyfriend meme is by &lt;a href=&quot;https://www.wired.com/story/distracted-boyfriend-meme-photographer-interview/&quot;&gt;Antonio Guillem&lt;/a&gt;. The books pictured are&lt;/em&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Acornsoft_LISP&quot;&gt;LISP on the BBC Microcomputer &lt;em&gt;by Arthur Norman and Gillian Cattell&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, referenced in the text, and&lt;/em&gt; &lt;a href=&quot;https://udlbook.github.io/udlbook/&quot;&gt;Understanding Deep Learning &lt;em&gt;by Simon J. D. Prince&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, a somewhat more recent take on AI.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:repl&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;REPL: Read-Eval-Print Loop, the interface by which you can type in an expression and see the result of evaluating it. This is nearly ubiquitous for modern languages, but was pioneered in LISP, and and name comes from the implementation in early LISP: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(loop (print (eval (read))))&lt;/code&gt; (read it from the inside out). &lt;a href=&quot;#fnref:repl&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:lisp1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Interestingly, Acornsoft LISP is a &lt;a href=&quot;https://wiki.c2.com/?SingleNamespaceLisp&quot;&gt;Lisp1&lt;/a&gt; like &lt;a href=&quot;https://www.scheme.org&quot;&gt;Scheme&lt;/a&gt;, rather than a Lisp2 like &lt;a href=&quot;https://lisp-lang.org/&quot;&gt;Common LISP&lt;/a&gt; and its immediate ancestors. &lt;a href=&quot;#fnref:lisp1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:ed&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ed&lt;/code&gt; is the standard text editor. &lt;a href=&quot;#fnref:ed&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:ex&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Now better known for the visual editing mode that was built on top of it, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vi&lt;/code&gt;. &lt;a href=&quot;#fnref:ex&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-09-03:cable_clip</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/09/cable_clip.html"/>
    <title>A Customisable Cable Clip</title>
    <updated>2025-09-03T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/09/customise.jpg" alt="A cable clip model in OpenSACD Customizer"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;This design came about because I wanted a clip to attach a car-charging cable to the wall. You can, of course, easily buy these, but I only needed one, and for an unusually thick cable. 3D printing means I can get exactly the part I want, in the quantity I want, and saves a trip to a DIY store or a wait for the postman.&lt;/p&gt;

&lt;p&gt;As this is probably not the last time I’ll want to secure a cable somewhere, I decided to do something a bit more general. OpenSCAD’s built-in &lt;a href=&quot;https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Customizer&quot;&gt;Customizer&lt;/a&gt; allows you to define parameters for your model, which can then be easily and interactively tweaked as shown in the image above.&lt;/p&gt;

&lt;p&gt;More importantly, this has become a de facto standard of sorts, and sites such as &lt;a href=&quot;https://makerworld.com&quot;&gt;MakerWorld&lt;/a&gt; directly support it. If you upload an OpenSCAD file alongside your finished project, users can customise the model right there on the site before downloading it.&lt;/p&gt;

&lt;p&gt;Providing this UI for your model is almost comically easy. You just add appropriate comments to your top-level variables like so:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// Diameter of the cable
Bore      = 15;

// Width of the clip (parallel to the cable)
Width     = 15;

// Thickness of the clip
Thickness = 5;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(In fact, it’s marginally harder to &lt;em&gt;stop&lt;/em&gt; things being customisable; you need to add a special &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/* [Hidden] */&lt;/code&gt; comment. I didn’t originally plan to &lt;a href=&quot;/2025/07/coffee_sleeve.html&quot;&gt;coffee cup sleeve&lt;/a&gt; design customisable, but it was as little effort to tidy up and document the variables as it would have been to prevent it.)&lt;/p&gt;

&lt;p&gt;The effortless way this falls out of normal use of OpenSCAD is incredibly powerful, and demonstrates the benefits of rich representations. Rather than just being, say, a list of triangles, like an STL file, an OpenSCAD file is a program to produce your design. More importantly, it’s a &lt;em&gt;declarative&lt;/em&gt; program, which lends itself to reuse in contexts other than the one in which it was originally created. OpenSCAD itself looks a lot like a traditional programming environment, with a syntax-highlighted text editor and a “run” button, but there’s no reason that this needs to be the case. With a bit of thought, all sorts of formats could have this level of abstraction, and benefit from the flexibility that it provides.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://makerworld.com/en/models/1751912-customisable-cable-clip&quot;&gt;Cable clip on MakerWorld&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/09/cableclip.scad&quot;&gt;cableclip.scad&lt;/a&gt; OpenSCAD file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/2025/09/cableclip.jpg&quot; alt=&quot;A thick cable attached to a brick wall by a 3D-printed clip&quot; /&gt;&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-08-10:miniature_maxiature</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/08/miniature_maxiature.html"/>
    <title>Miniature, Maxiature</title>
    <updated>2025-08-10T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;&lt;img src=&quot;/2025/08/rosalind_mini.jpg&quot; alt=&quot;A 3D printed 25mm miniature and a 400% scaled up version, in front of the 1983 D&amp;amp;D Basic Set&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’ve been running a traditional Dungeons &amp;amp; Dragons game with my daughters&lt;sup id=&quot;fnref:version&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:version&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. The fundamentals of table-top roleplaying haven’t changed very much since I was doing it at their age, but we came across one thing that definitely wasn’t available back then: &lt;a href=&quot;https://www.heroforge.com&quot;&gt;HeroForge&lt;/a&gt;. It’s a website (we didn’t have those in the 80s) where you can create a 3D model of your character (would be a push on the &lt;a href=&quot;/2023/08/1983.html&quot;&gt;Electron&lt;/a&gt;) and download a file for your 3D printer (we &lt;em&gt;definitely&lt;/em&gt; didn’t have those in the 80s).&lt;/p&gt;

&lt;p&gt;Imagine a character customiser from a game like Skyrim and you have the basic idea, but the thing that makes it is the breadth and quality of the execution. You could select a few basic attributes, costume items and equipment, but you can also customise every detail, including minutiae of pose and expression. Once you’re happy, you can buy the STL file for printing for about $8 (£6) — costly if you want to build an army&lt;sup id=&quot;fnref:unique&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:unique&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;, but for a few player characters it’s a very fair price for what you’re getting.&lt;/p&gt;

&lt;p&gt;The girls each made a miniature of their character, and we’ve been pretty pleased with the 25mm scale ones for actual play. I printed these on the Bambu A1 with a 0.2mm nozzle; I’m sure I could get better detail with resin printing, but it’s pretty good and to be frank I’ve seen worse in commercially produced metal ones back in the day. Last week, they asked for bigger versions, so I printed them out at 400%. Worked a treat (after a bit of experimenting with supports), and really shows off the models.&lt;/p&gt;

&lt;p&gt;Custom miniatures aren’t going to change the game that much, but they’re definitely add an extra point of enjoyment, and aren’t something I’d have even imagined being able to do forty years ago. Living in the future isn’t all bad.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2025/08/shearsies_mini.jpg&quot; alt=&quot;A 3D printed 25mm miniature and a 400% scaled up version, in front of the 1983 D&amp;amp;D Expert Set&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:version&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Using the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_Basic_Set#1983_revision&quot;&gt;one true version&lt;/a&gt; from 1983, of course. I’m not (yet) giving money to those Johny-come-lately Magic the Gathering upstarts. &lt;a href=&quot;#fnref:version&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:unique&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;At least, if you want build an army of unique individuals. Once you have the file you can print out as many copies as you want. &lt;a href=&quot;#fnref:unique&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-08-09:plus1mini</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/08/plus1mini.html"/>
    <title>Plus 1 Mini</title>
    <updated>2025-08-09T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/08/plus1mini.jpg" alt="An Acorn Electron with a Plus 1 Mini expansion connected to the back."/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;In a &lt;a href=&quot;/2025/07/lisp_mode.html&quot;&gt;recent post&lt;/a&gt;, I alluded to my “newly tricked-out Electron”, and promised more detail in a future post. This is that post, and pictured above is the Electron in question, with its new friend the &lt;a href=&quot;http://www.ramtop-retro.uk/Plus-1-Mini.html&quot;&gt;Plus 1 Mini&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While of course dear to my heart, the Acorn Electron was never what you’d call a powerhouse. Its 32K of RAM wasn’t terrible on paper, but the lack of a true text mode meant that much of it was given over to the screen. Moreover, the base unit had limited connectivity, only video (RF, composite and RGB) and a cassette interface for mass storage. What there &lt;em&gt;was&lt;/em&gt; was an expansion slot on the back of the machine that gave access to almost all of the internals, and this offered a way forward.&lt;/p&gt;

&lt;p&gt;Due to the Electron’s limited success in the market, and the more general problems they were facing, Acorn only released two expansions (the multi-purpose Plus 1 — more on that below — and the Plus 3 disc drive). However, third parties such as Slogger and Cumana picked up the mantle, producing a wider range of peripherals and keeping the ecosystem going for a few years longer than it might have.&lt;/p&gt;

&lt;p&gt;More recently, the retro community (such as the fine people on &lt;a href=&quot;https://www.stardot.org.uk&quot;&gt;StarDot&lt;/a&gt;) have continued this tradition, and there are numerous more modern options that open up interesting possibilities. I’d been eyeing up various of these for a while, but was inspired to take the plunge by &lt;a href=&quot;https://mas.to/@markmoxon@universeodon.com/114564614733245049&quot;&gt;this post&lt;/a&gt; from Mark Moxon (who’s &lt;a href=&quot;https://www.bbcelite.com&quot;&gt;work on Elite&lt;/a&gt; is well worth checking out if you haven’t already).&lt;/p&gt;

&lt;p&gt;The Plus 1 Mini, unlike some other options, doesn’t exactly ape the physical form of the Acorn Plus 1 — as you can see in the photo, it’s not quite as wide as the Electron itself — but is similar in spirit in that it offers a grab-bag of useful capabilities in a single package. There are the obvious and characteristic dual cartridge slots, and a joystick port (Atari-style, rather than analogue). Inside are headers to connect a Raspberry Pi Zero to emulate the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tube_(BBC_Micro)&quot;&gt;Tube&lt;/a&gt; second processor interface, which is definitely something I want to try out in the future. However, there are two items in particular that make a night-and-day difference to the capability of the machine: 128K of sideways RAM, and an SD card slot.&lt;/p&gt;

&lt;p&gt;What makes the RAM &lt;a href=&quot;https://en.wikipedia.org/wiki/Sideways_address_space&quot;&gt;sideways&lt;/a&gt; is a whole topic in itself, but suffice to say that it’s not just more of the same. The 16-bit address bus means the 6502 can only reference a 64K address space, which needs to cover both RAM and ROM, including the OS. To make use of more than 64K, a fair amount of &lt;a href=&quot;https://en.wikipedia.org/wiki/Bank_switching&quot;&gt;bank switching&lt;/a&gt; is required. Fortunately, &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_MOS&quot;&gt;Acorn MOS&lt;/a&gt; provides a well developed system for doing this. An added bonus is that the sideways RAM isn’t subject to the compromises the Electron makes to share the main RAM with video, and so access is twice as fast.&lt;/p&gt;

&lt;p&gt;The biggest benefit, though, is the SD card slot, which essentially emulates a stack of floppy disks&lt;sup id=&quot;fnref:BlueSCSI&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:BlueSCSI&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Previously I’d been using the excellent &lt;a href=&quot;https://www.8bitkick.cc/playuef.html&quot;&gt;PlayUEF&lt;/a&gt; to load cassette images, which allows you to pick from a vast library of software and load it with a great facsimile of my 1980s experience. However, I never figured out a good way to get the reverse process working, and thus never had a way to &lt;em&gt;save&lt;/em&gt; work from the Electron. This severely limits the kind of experimentation you can do with the machine.&lt;/p&gt;

&lt;p&gt;With the Plus 1 Mini, I can not only try out an even wider range of software (including ROM images, which can be loaded into sideways RAM), but can actually do things that last across multiple sessions. I’m excited to see what possibilities this opens up. I’ve already found that the expanded Electron is a significantly more capable (even useful) machine, and it seems clear that it could indeed have been the basis for a thriving ecosystem if history had gone a little differently.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:BlueSCSI&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Not far from the &lt;a href=&quot;https://bluescsi.com&quot;&gt;BlueSCSI&lt;/a&gt; I used to &lt;a href=&quot;/2024/01/41st_anniversary.html&quot;&gt;resurrect the Mac SE last year&lt;/a&gt; &lt;a href=&quot;#fnref:BlueSCSI&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-07-18:coffee_sleeve</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/07/coffee_sleeve.html"/>
    <title>Coffee Cup Sleeve</title>
    <updated>2025-07-18T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/07/cups.jpg" alt="Starbucks reusable coffee cups with 3D printed sleeves"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;I’ve just got round to uploading a quick model I made a few weeks ago: sleeves for reusable coffee cups. We have a couple of these basic cups in the car for when we get coffee on long journeys, but they can get a bit hot, and it’s not always clear whose drink is whose. Printing a couple of these in different colours makes them both easier to identify and more comfortable to hold. Not exactly earth-shattering, but a tiny quality of life improvement.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://makerworld.com/en/models/1617941-reusable-coffee-cup-sleeve#profileId-1707527&quot;&gt;Coffee cup sleeve on MakerWorld&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/07/CoffeeCupSleeve.scad&quot;&gt;CoffeeCupSleeve.scad&lt;/a&gt; OpenSCAD file&lt;/li&gt;
&lt;/ul&gt;


    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-07-06:lisp_mode</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/07/lisp_mode.html"/>
    <title>lisp-mode</title>
    <updated>2025-07-06T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;I’m having an unexpectedly parentheses-heavy weekend. As well as experimenting with &lt;a href=&quot;https://en.wikipedia.org/wiki/Acornsoft_LISP&quot;&gt;Acornsoft LISP&lt;/a&gt; on my newly-tricked-out Electron (more on that in a future post), I had a minor itch at work, and I decided to turn to &lt;a href=&quot;https://www.gnu.org/software/emacs/emacs.html&quot;&gt;Emacs&lt;/a&gt; to scratch it.&lt;/p&gt;

&lt;p&gt;I wanted a quick tool to track what I’m working on, to get a clearer picture of where my time is going. Specifically, I wanted a list of tasks and time spent each day, in a form that I could collate and generate statistics from.&lt;/p&gt;

&lt;p&gt;There are innumerable ways this could be done, and I have plenty of experience in quite a few of them. For something that’s just for personal use, a full application toolkit is almost certainly overkill. The last time I did this exercise I used Excel, which worked pretty well on the statistics side but left the entry of the data more manual than I wanted, so this time I wanted to try something else. I decided to return to an old staple.&lt;/p&gt;

&lt;p&gt;Within about half an hour, I’d put together something serviceable — a new editing mode for an simple, ad hoc format that allowed me to quickly enter timestamped entries in a few keystrokes, while retaining all of Emacs’ more general editing facilities. Reading this into a Python notebook to analyse will be similarly easy when I get to it.&lt;/p&gt;

&lt;p&gt;As mentioned, I &lt;em&gt;could&lt;/em&gt; have done all of this in a more powerful and general application toolkit, but that would have probably taken longer than I could justify. The advantage of Emacs (and Excel, and a few other similar systems) is that they provide a rich structure to tweak to your specific needs. The interesting question is in the details; in this case, Emacs’ system of editable text buffers was a better fit that Excel’s grid of cells, but often the converse is true. It makes me wonder, are there other useful structures with similar properties? It’s a space that seems both fertile and under explored.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-07-01:surprise_and_delight</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/07/surprise_and_delight.html"/>
    <title>Surprise and Delight</title>
    <updated>2025-07-01T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/07/screensaver.jpg" alt="Screenshot of the Macintosh screensaver"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;The Aerial screensaver has always been one of my favourite quality-of-life details of the Apple TV box, and I was happy to see it arrive on macOS, with the bonus touch of slowing and becoming the desktop background when you unlock the computer.&lt;/p&gt;

&lt;p&gt;For a long while I stuck with the default Sequoia forest video, but recently I fancied a change, and opening up Settings I came across an absolute gem that I had no idea was there, the “Macintosh” screensaver.&lt;/p&gt;

&lt;p&gt;This consists of extreme, animated close-ups of UI from the original 1984 Mac, slowly panning over a colour gradient background. Not only is the effect superbly executed, but the content is well chosen — recognisable applications such as MacPaint and MacWrite, the iconic cursive “hello”, and (slightly anachronistically) the “here’s to the crazy ones…” text.&lt;/p&gt;

&lt;p&gt;I’m not entirely sure how this ended up in macOS. Apple are now a globe-spanning behemoth serving an incredibly broad customer base. Most of their customers weren’t born in 1984, and I’d imagine most of those who were wouldn’t recognise what they were seeing. The fact that something so niche made it through the big company machinery is surprising, and it delights me a little every time I open my computer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update 2025-07-18:&lt;/strong&gt; This morning I noticed another nice touch; the time on the virtual Mac is correct, and updates live. I’d assumed it was basically a layered motion graphic, but apparently they’ve gone to even more effort than I thought. Brilliant.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-03-29:sandwiches</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/03/sandwiches.html"/>
    <title>Don&apos;t Finish My Sandwiches</title>
    <updated>2025-03-29T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/03/sandwich.jpg" alt="Components of a sandwich in an exploded vertical stack, including lettuce and a spanner."/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;When they first came along, I was &lt;a href=&quot;/2022/07/flying_solo.html&quot;&gt;sceptical&lt;/a&gt; about the merits of using an AI (specifically, a Large Language Model) to help you code. However, the world doesn’t stand still, especially the world of technology, and it’s been a busy two and a half years. Coding assistants have become more sophisticated and widespread, and for a while I’ve been dipping my toe into the water and trying them out myself. As such, I thought it was time for an update.&lt;/p&gt;

&lt;p&gt;My assistant of choice is Github Copilot, not through any sophisticated evaluation process, but purely through convenience. As a user of both Github and VS Code, things have reached the point where it’s more effort &lt;em&gt;not&lt;/em&gt; to try it out in some capacity. I’ve been doing so on and off for a few months, on small tasks.&lt;/p&gt;

&lt;p&gt;One thing that quickly struck me was poor performance in the functionality most people would first think of when thinking of coding assistants: autocomplete. As with many things LLM, this produces results that at first appear beguiling, verging on the miraculous, but fall apart on closer inspection.&lt;/p&gt;

&lt;p&gt;To illustrate, here’s a recent example from my book log (which I happen to edit in VS Code). First, an example of it producing a result that genuinely impressed me (autocomplete suggestion in italics):&lt;/p&gt;

&lt;pre&gt;
- title: &quot;All Systems Red: The Murderbot Diaries&quot;
  author: Martha Wells
  url: https://www.marthawells.com/murderbot1.htm
  start: 2025-01-28
  end: 2025-01-30

- title: &lt;i&gt;&quot;Artificial Condition: The Murderbot Diaries&quot;&lt;/i&gt;
&lt;/pre&gt;

&lt;p&gt;Here, Copilot has suggested the title of the next book I’m reading based on the data in the previous entry. Not only has it formatted it correctly, it’s also factually accurate — “Artificial Condition” is indeed the next entry in &lt;a href=&quot;https://www.marthawells.com/murderbot.htm&quot;&gt;Martha Well’s excellent MurderBot series&lt;/a&gt;. While it’s &lt;em&gt;possible&lt;/em&gt; that someone else keeps a log of the books they’ve read in a YAML, using the same keys and structure as me, is also making their way reading through The MurderBot Diaries, and Copilot is just regurgitating an item from its training set, that seems unlikely. More likely, it’s actually working as advertised, and weaving together several different patterns (YAML syntax, properties of books, and the sequence of titles in that particular series) in a complex, multi-dimensional way. This is great demonstration of how LLMs go way beyond simpler statistical techniques.&lt;/p&gt;

&lt;p&gt;It turned out that in this case the prediction, while entirely reasonable, was incorrect, as I wasn’t reading the next MurderBot book immediately (I like to spread these things out). No big deal — even if autocomplete doesn’t get it right every time, it’s still useful, and I can just ignore the suggestion and I’m no worse off. However, when I supplied the title of the next book I was reading, the suggestion was somewhat less helpful:&lt;/p&gt;

&lt;pre&gt;
- title: &quot;Monsters: What Do We Do with Great Art by Bad People?&quot;
  author: &quot;Claire Dederer&quot;
  &lt;i&gt;url: https://www.penguinrandomhouse.com/books/669579/monsters-by-claire-dederer/&lt;/i&gt;
&lt;/pre&gt;

&lt;p&gt;If Copilot had done what it appeared to do — found a URL for a site about the book in question — it would have been at least as impressive as the previous example, if not more so. Fortunately, I had sufficient remaining scepticism to check the link, and confirmed that this was not the case. Instead, it produced something that &lt;em&gt;looks&lt;/em&gt; like the right URL (this is the format of URLs used by Penguin), and it’s inserted the title and author in the way you’d expect them to appear. However, this is done without any reference to what’s on the other end of that link; the sequence of digits is basically random, and happens to resolve to “The Count of Monte Cristo”.&lt;/p&gt;

&lt;p&gt;This is absolutely the way you’d expect an LLM to fail — in their basic form the way they work is to to produce a probable (and thus plausible) continuation of their input, with no reference to external reality. There’s some correlation between this probability and truth, but the correspondence is far from complete. More recent techniques ground the LLM with factual information in various ways, but as this example (by no means usual) shows the gap remains.&lt;/p&gt;

&lt;p&gt;The above example is perhaps unfair, as it’s not really the kind of coding task that Copilot is targeted at. However, in my experience, using Copilot’s autocomplete while programming is &lt;em&gt;worse&lt;/em&gt;. The kind of errors that turn up are the same, but have the potential to be both subtler and with more widespread impact. More damningly, LLM-based autocompletion compares very poorly with what it’s replacing.&lt;/p&gt;

&lt;p&gt;I clearly remember code completion coming into the mainstream with the advent of Intellisense in the late 90s. Those of us who were already used to programming without it derided the idea as wasting more time than it saved, and we had a point. The predictions were often wrong, either in absolute terms or being non-idiomatic and overly verbose. However, Microsoft and many others didn’t stand still, and the quality of these systems steadily improved. Fast forward twenty-five years, and traditional (non-LLM) code completion is astounding; fast, reliable and idiomatic. Advances in areas like type systems and static analysis (even in dynamic languages like Python and TypeScript) mean that suggestions are not only correct but &lt;em&gt;informative&lt;/em&gt; — while it doesn’t obviate the need for documentation or understanding, code completion can serve as a valuable aide-mémoire, avoiding the need to look up minor details and giving you the confidence that your recollection is correct.&lt;/p&gt;

&lt;p&gt;Replacing the traditional, structured approach with an LLM completely undermines this benefit. If it offers a list of named parameters for a function I’m calling, I can no longer view that as a reference, as &lt;em&gt;it might have made some of them up&lt;/em&gt;. It will, of course, &lt;em&gt;seem&lt;/em&gt; plausible, but that makes it more dangerous, not less. After a few days of trying to do actual programming work with Copilot completions, I turned them off and went back to the old kind. I’ve been very happy with that decision.&lt;/p&gt;

&lt;p&gt;Does that mean that, for me, Copilot is a bust? Not at all. There’s another mode of interaction that feels like a far better fit to the strengths and limitations of generative AI, and the more I use it the more I’m convinced that it could live up to the hype. I’ve become a big fan of Copilot Chat.&lt;/p&gt;

&lt;p&gt;Here, instead of code completion, you interact with Copilot in a separate dialogue in a sidebar. “Chat” is absolutely the right name, as it looks and feels like a text conversation with a human being (and, absurd as it may sound, &lt;a href=&quot;https://arxiv.org/abs/2402.14531&quot;&gt;treating it as such may well yield better results&lt;/a&gt;). You can ask it how to perform a task or use an API, and it will produce a lucid, coherent answer with examples. Because it’s running in the context of the IDE, it has access to your own code as context, and this is evident both in the incidentals (variable names and so on) and in the fact that it incorporates relevant information not explicitly stated in the question, such as the libraries you’re already using.&lt;/p&gt;

&lt;p&gt;Crucially, this isn’t a one-shot process. You can ask questions about the results, ask for changes or clarifications, and even correct mistakes. This last point is, I think, the one that makes it feel like a better interface to Copilot. Today’s LLM-based systems are prone to hallucinations, and it may well be that this is a fundamental property that will never go away. With autocomplete, these render individual suggestions useless and the system as a whole untrustworthy. In the context of a chat, you still need to be aware of them, but there’s a way forward with that awareness.&lt;/p&gt;

&lt;p&gt;The first attempt to exploit a new technology is usually to use it as a drop-in replacement for an existing application. &lt;a href=&quot;https://stratechery.com&quot;&gt;Ben Thompson&lt;/a&gt; frequently cites the example of advertising on the Internet, which initially aped print advertising in placing display ads alongside content. In most cases, it’s a poor substitute, and the new technology only really takes off with the advent of a &lt;em&gt;different&lt;/em&gt; approach that plays to the strengths of the new medium (in that example, feed and search ads).&lt;/p&gt;

&lt;p&gt;Of course, it’s not a given that such an approach will be found; most technological developments turn out to have little or no long term impact, whatever their boosters may think. For a while, I thought generative AI may fall into that camp, and my experience with code completion backed that theory. However, taking a step back, I’m now coming round to the idea that that is just the technology being misapplied. Chat interfaces, on the other hand, may or may not be turn out to be the best way to take advantage of the capabilities of LLMs, but they’re enough to suggest that there’s some there there.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;i&gt;The header image is a combination of photos by &lt;a href=&quot;https://unsplash.com/@saracervera?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Sara Cervera&lt;/a&gt; (&lt;a href=&quot;https://unsplash.com/photos/green-and-brown-leaf-plant-0X6sEvSJxas?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;sandwich&lt;/a&gt;) and &lt;a href=&quot;https://unsplash.com/@mattartz?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Matt Artz&lt;/a&gt; (&lt;a href=&quot;https://unsplash.com/photos/two-gray-wrenches-dh3zAdGGOIY?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;spanner&lt;/a&gt;) from &lt;a href=&quot;https://unsplash.com&quot;&gt;UnSplash&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-02-10:the_beginners_mind</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/02/the_beginners_mind.html"/>
    <title>The Beginner&apos;s Mind</title>
    <updated>2025-02-10T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;One of the things I’m enjoying about dipping my toe into CAD is the chance to approach something as a beginner. I rarely get — or perhaps make — the opportunity to do something that’s both unfamiliar, and low enough stakes that I can take risks and take my time. I’m making a conscious effort to not bring my preconceptions from adjacent fields, and not rush towards the first thing that will achieve my practical ends (although I freely admit that I sometimes fall short on both counts). There’s a wide world of new concepts and ideas, and it would be a waste to simply give the ones I already have a fresh coat of paint. Once I know the lay of the land, I imagine I’ll be able to put my old experience to work alongside the new, but for now I’m going to go slowly, keep my eyes open and fresh, and learn.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-01-31:three_shots</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/01/three_shots.html"/>
    <title>Three Shots</title>
    <updated>2025-01-31T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;Most keys on most keyboards are labelled in some way. Usually, these labels (“legends”) are just printed on top of the keycap, the bit of the key you actually touch. But &lt;em&gt;because&lt;/em&gt; you’re actually touching it, the legend wears off over time. As you move into fancier keyboards, there are various ways to remedy this. The most indestructible are &lt;em&gt;double-shot&lt;/em&gt; keycaps, where the legend is actually a separate piece of plastic that goes through the main keycap like the letters in a stick of &lt;a href=&quot;https://en.wikipedia.org/wiki/Rock_(confectionery)&quot;&gt;Blackpool rock&lt;/a&gt;. This can let your tasteful RGB lighting shine through, but more importantly means the legend will never wear out.&lt;/p&gt;

&lt;p&gt;Producing intricately-enmeshed plastic shapes is an area where 3D printing in general, and multi-material 3D printing in particular, stand out, so since getting my printer I’ve been itching to try and make some keycaps of my own. It also offered a perfect opportunity to try out my new 0.2mm hotend (the default is 0.4mm).&lt;/p&gt;

&lt;p&gt;Rather than trying a full set straight off the bat, I decided to go for something more modest. I occasionally use &lt;a href=&quot;/keyboards#mbuk&quot;&gt;my first mini-keyboard&lt;/a&gt; as a macropad, but recently realised that the otherwise-unused outer rows of my &lt;a href=&quot;/keyboards#corne&quot;&gt;Corne&lt;/a&gt; would do just as well. Updating the firmware was straightforward&lt;sup id=&quot;fnref:macro&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:macro&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, so I just needed half a dozen keycaps with custom symbols.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://openscad.org&quot;&gt;OpenSCAD&lt;/a&gt; coupled with &lt;a href=&quot;https://github.com/jschobben/colorscad&quot;&gt;colorscad&lt;/a&gt; seemed like the tools for the job, and the comprehensive &lt;a href=&quot;https://github.com/rsheldiii/KeyV2&quot;&gt;KeyV2&lt;/a&gt; project on GitHub provided a flexible way to create keycaps in a wide variety of profiles. Importantly, this includes the &lt;a href=&quot;https://www.daskeyboard.com/blog/types-of-keycap-profiles/#dsa-profile-keycaps&quot;&gt;DSA&lt;/a&gt; profile that I was already using, so I started with that.&lt;/p&gt;

&lt;p&gt;It was easy enough to add an embedded shape in a contrasting colour, but when I printed it I ran into an in-retrospect-obvious issue; the dish at the top of the key produces some very obvious layer artefacts when sliced:&lt;/p&gt;

&lt;p class=&quot;image_display&quot;&gt;
    &lt;img alt=&quot;Rendering of a DSA keycap, showing layer lines&quot; src=&quot;/2025/01/dsa_sliced.jpg&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;These kind of artefacts are unavoidable in FDM printing when making a surface at a shallow angle to the plane of the layers. You can sometimes minimise the impact by positioning your model at an angle, but that often introduces other problems — for example, here the sides of the keys aren’t flat, so I’d need to add support. A more general approach is post-processing the print. I had a go at sanding my test prints down, but while this produced a decent &lt;em&gt;feeling&lt;/em&gt; keycap, I couldn’t get a visual finish I was happy with. At this point I could have moved on to more advanced finishing techniques like vapour smoothing, but I decided to think laterally.&lt;/p&gt;

&lt;p&gt;I decided to forgo the dish, and make the top of the key flat. The keycaps could then be printed face down, which not only solves the layer artefacts, but picks up a nice texture from the build plate. Moreover, as the legend only needs to go through the top surface rather than the entire height of the key, only the first few layers contain multiple colours. This significantly reduces both &lt;a href=&quot;/2024/11/colourful.html&quot;&gt;time and waste&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With this approach in mind, I started putting together the symbols. Looking at my first double-shot design, a thought occurred to me: why stop at two? Putting together three or more different colours would be tricky using conventional production techniques, but not for 3D printing. With nothing stopping me, I went ahead with a red-and-white colour scheme on black keys, and I’m pretty pleased with the result:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2025/01/keycaps.jpg&quot; alt=&quot;Five black keycaps with custom red and white legends&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The keycaps look great straight from the printer, and have a nice feel thanks to the texture. The lack of a dish might make them less comfortable for regular typing (or perhaps not — most modern, mass produced keyboards have flat keys and get away with it), but these are function keys and so it’s not an issue.&lt;/p&gt;

&lt;p&gt;The OpenSCAD source file is here: &lt;a href=&quot;/2025/01/CorneExtras.scad&quot;&gt;CorneExtras.scad&lt;/a&gt;. I’ll not hold it out as an example of good style; in particular, there’s more boilerplate and repetition than I’d like. I’m not sure if this is due to my own lack of experience with the language, or its limitations. Regardless, it should hopefully serve as a useful starting point if you want to have a go at making something similar yourself.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2025/01/corne_with_extras.jpg&quot; alt=&quot;A split Corne keyboard with the above keycaps installed in the outermost columns&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:macro&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Generally speaking, I don’t hard-code key sequences into the firmware, but instead configure the macro keys as high-number function keys (F13, F14…) and map them to functions in &lt;a href=&quot;https://folivora.ai&quot;&gt;BetterTouchTool&lt;/a&gt;. This allows for more advanced actions, and avoids the need to re-flash the firmware every time I want to reconfigure them. &lt;a href=&quot;#fnref:macro&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-01-12:steal_a_boat</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/01/steal_a_boat.html"/>
    <title>You Wouldn&apos;t Steal a Boat</title>
    <updated>2025-01-12T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/01/sign.jpg" alt="3D-printed sign reading "You Wouldn't Steal A Boat""/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;A quick, tongue-in-cheek joke about the current absurdity surrounding the licensing of &lt;a href=&quot;https://en.wikipedia.org/wiki/3DBenchy&quot;&gt;3DBenchy&lt;/a&gt;, the until recently beloved de facto mascot of 3D printing. Available on &lt;a href=&quot;https://makerworld.com/en/models/980330#profileId-953866&quot;&gt;MakerWorld&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-nc-sa/4.0/&quot;&gt;CC BY-NC-SA&lt;/a&gt;, of course).&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2025-01-04:keyboard_tray_and_freecad</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2025/01/keyboard_tray_and_freecad.html"/>
    <title>Keyboard Tray and FreeCAD</title>
    <updated>2025-01-04T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2025/01/brace.jpg" alt="FreeCAD rendering of a monitor arm brace"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;Since going remote at the start of the pandemic, I’ve had a standing desk setup at home. Rather than an adjustable height desk, I kept my existing desk and put the monitor on a tall VESA mounting arm. Combined with this, I’ve used a variety of stands to sit on the desk and raise the keyboard and trackball to elbow height. These work fine, are a bit cumbersome to move out of the way when you want to use the desk at normal height. So, as a little holiday project, I decided to upgrade to an &lt;a href=&quot;https://duronic.com/products/duronic-keyboard-platform-dm0k1-drawer-for-keyboard-and-mouse-attachment-keyboard-support-ergonomic-workstation-solution-adjustable-tray-for-monitor-arm-mounts-easy-assembly-universal&quot;&gt;arm-mounted keyboard tray&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My initial plan was to mount this on the same pole as the monitor, but it ran into a snag — the arm I’d found was from different manufacturer, and was designed for a pole a few millimetres thicker. What I needed was a plastic sleeve, and as it happens I now have a way to make random plastic parts on demand. A few lines of &lt;a href=&quot;https://openscad.org&quot;&gt;OpenSCAD&lt;/a&gt; and twenty minutes of printing, and I had a simple sleeve to adapt the arm to the existing pole. Problem solved. Well, the first problem, anyway.&lt;/p&gt;

&lt;p&gt;When I connected everything back up, it became rapidly apparent that the action of typing caused the monitor to wobble quite a bit. This would be annoying at the best of times, and even worse on video calls (as the camera is on top of the monitor). I reconfigured everything so that the keyboard was on a separate pole, but this didn’t solve the issue; both were attached to the desk, and the vibrations from typing still wobbled the screen to an unacceptable degree. Clearly more was needed.&lt;/p&gt;

&lt;p&gt;Taking a step back and looking at it, I concluded that the best approach would be to add an additional brace attaching the top of the pole to the wall (the bottom remains fixed to the desk; I didn’t want to ditch the pole entirely as it allows the height of the keyboard to be adjusted). Again, the ability to make custom parts to the exact specifications needed saved the day — I’m starting to see that this will be a complete game changer for DIY jobs around the house.&lt;/p&gt;

&lt;p&gt;I could have designed the brace in OpenSCAD, but I took the opportunity to try out &lt;a href=&quot;https://www.freecad.org/&quot;&gt;FreeCAD&lt;/a&gt;. Where OpenSCAD is essentially a programming environment for &lt;a href=&quot;https://en.wikipedia.org/wiki/Constructive_solid_geometry&quot;&gt;Constructive Solid Geometry&lt;/a&gt;, FreeCAD is a lot closer to a traditional CAD system. Given my background and prior experience, I’d expect the former to be more natural, but to my surprise I found the latter to be a better fit for more complex designs. It’s early days, and I suspect that I’ll end up using both packages in different contexts, but from what I’ve seen so far the extra power and flexibility of FreeCAD is worthwhile even for a beginner like me.&lt;/p&gt;

&lt;p&gt;This capability comes at the cost of complexity; my mental model of how FreeCAD actually works is very much a work in progress, and the UI is a mass of toolbars, views and states that I’m still groping around as if blindfolded. How much of this complexity is inherent to a “real” CAD package, and how much of it is due to shortcomings specific to FreeCAD, remains to be seen. I might take a look at &lt;a href=&quot;https://www.autodesk.com/products/fusion-360/overview&quot;&gt;Fusion 360&lt;/a&gt; as a point of comparison, but its “free for hobbyists” license makes me wary of investing too much time into it, at least at this stage.&lt;/p&gt;

&lt;p&gt;Back to the keyboard tray problem, I got a first version designed pleasingly quickly, but on printing it out realised that I’d based it on the measurements of the narrower pole and so the piece wouldn’t fit. Suitably chastened, I fixed the mistake, and while I was there added a few refinements like countersinking the screw holes and adding fillets. This time, I stopped the print after the first few layers to provide a piece that could physically confirm the sizing. It was spot on, so I printed the whole thing, and installed it.&lt;/p&gt;

&lt;p&gt;I’m pleased to report that it worked like a charm — a rock solid keyboard tray arm, and no vibration of the monitor. It was a bit more of a roundabout route than originally intended, but I got there in the end, and learned some things along the way. I’ll call that a win.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2024-12-31:books_of_2024</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/12/books_of_2024.html"/>
    <title>Books of 2024</title>
    <updated>2024-12-31T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;I’ve always enjoyed reading, both fiction and non-fiction, and try to make time for it as much as I can. A few years ago I thought it would be nice to keep a record of what I’ve read, but I’ve never got on with reading-based social services such as &lt;a href=&quot;https://www.goodreads.com&quot;&gt;GoodReads&lt;/a&gt; and &lt;a href=&quot;https://bookwyrm.social&quot;&gt;BookWyrm&lt;/a&gt;. Hence, I decided to go for something more basic: for a while now, I’ve recorded what I’m reading, and when, in a simple &lt;a href=&quot;https://jekyllrb.com/docs/datafiles/&quot;&gt;Jekyll data file&lt;/a&gt; as part of this site. This is mainly for my own notes, but also helps generate the &lt;a href=&quot;/now&quot;&gt;/now&lt;/a&gt; page. What’s more, now that I’ve been using the system for a full calendar year (I started mid-2023), I can use it to look back on what I’ve read over the last twelve months.&lt;/p&gt;

&lt;div style=&quot;overflow-x: scroll;&quot;&gt;
    &lt;object data=&quot;/2024/12/books2024.svg&quot; type=&quot;image/svg+xml&quot; style=&quot;max-width: none; width:1440px;&quot;&gt;
    &lt;/object&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;(The yellow bars indicate when I started and finished each book; the open ones are the end are for books I still have on the go.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This year, the standout discovery was &lt;a href=&quot;https://nicolagriffith.com&quot;&gt;Nichola Griffith&lt;/a&gt;. I picked up &lt;a href=&quot;https://nicolagriffith.com/2014/02/26/hild/&quot;&gt;Hild&lt;/a&gt; in January as it’s set in a part of the world with which I’m a little familiar, at an interesting period in history. Hild delivered on that, but more importantly it’s enormously evocative of a very alien period, has a plot that rattles along, and one of the best cast of characters I’ve read in a long while. A truly surprisingly bombshell dropped literally in the last couple of pages make the follow-up &lt;a href=&quot;https://nicolagriffith.com/books/menewood-coming-october-3-2023/&quot;&gt;Menewood&lt;/a&gt; pretty much non-optional. I also read and enjoyed Griffith’s first novel, &lt;a href=&quot;https://nicolagriffith.com/2014/02/24/ammonite/&quot;&gt;Ammonite&lt;/a&gt;, and will definitely be returning to her again.&lt;/p&gt;

&lt;p&gt;I’ve also returned to a familiar author: &lt;a href=&quot;https://williamgibsonbooks.com&quot;&gt;William Gibson&lt;/a&gt;. He’s mostly know for his pioneering role in the development of cyberpunk, in particular &lt;a href=&quot;https://en.wikipedia.org/wiki/Neuromancer&quot;&gt;Neuromancer&lt;/a&gt; and its sequels. The Bridge trilogy (&lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_Light&quot;&gt;Virtual Light&lt;/a&gt;, &lt;a href=&quot;https://www.penguin.co.uk/books/21548/idoru-by-william-gibson/9780241953525&quot;&gt;Idoru&lt;/a&gt; and &lt;a href=&quot;https://www.penguin.co.uk/books/23649/all-tomorrows-parties-by-william-gibson/9780241953518&quot;&gt;All Tomorrow’s Parties&lt;/a&gt;) is less well known, but reading it for the first time I’ve been struck how many ideas that are real today — cybercrime franchises, social media, deep-fake sextortion — turn up pretty much fully-formed in fiction from a quarter-century ago. They’re also excellent books in their own right, and I’m very much looking forward to the concluding part of the &lt;a href=&quot;https://www.penguinrandomhouse.com/series/TJ3/the-jackpot-trilogy/&quot;&gt;Jackpot trilogy&lt;/a&gt; coming out (hopefully) in 2025.&lt;/p&gt;

&lt;p&gt;Moving to non-fiction, &lt;a href=&quot;https://en.wikipedia.org/wiki/The_High_Frontier:_Human_Colonies_in_Space&quot;&gt;The High Frontier&lt;/a&gt; and &lt;a href=&quot;https://diversionbooks.com/books/the-new-world-on-mars/&quot;&gt;The New World on Mars&lt;/a&gt; was an interesting look at the arguments in favour of humanity moving beyond this planet, and made an good counterpoint to the more sceptical &lt;a href=&quot;https://www.smbc-comics.com/comic/a-city-on-mars&quot;&gt;A City on Mars&lt;/a&gt; that I read at the and of last year (my &lt;a href=&quot;https://planetocracy.org&quot;&gt;brother&lt;/a&gt; was keen I got both sides of the picture). Rereading &lt;a href=&quot;https://dl.acm.org/doi/book/10.5555/333103&quot;&gt;The Humane Interface&lt;/a&gt; provided an interesting perspective on the &lt;a href=&quot;/2024/01/41st_anniversary.html&quot;&gt;40th anniversary of the Mac&lt;/a&gt;, and I’m working on-and-off through both &lt;a href=&quot;https://udlbook.github.io/udlbook/&quot;&gt;Understanding Deep Learning&lt;/a&gt; and Google’s &lt;a href=&quot;https://sre.google/sre-book/table-of-contents/&quot;&gt;Site Reliability Engineering&lt;/a&gt; in the context of work. Both are available online for free if you’re interested in the subjects.&lt;/p&gt;

&lt;p&gt;Overall, I’m glad I started recording what I’m reading, and have enjoyed taking the time to look back over it as I write this review. I think this might become an annual feature.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;For reference, here’s a full 2024 list:&lt;/p&gt;

&lt;ul&gt;



  
  &lt;li&gt;Margaret Atwood:
  
        &lt;a href=&quot;https://www.amazon.co.uk/Cut-Thirst-Short-Margaret-Atwood-ebook/dp/B0CRJGKXBS/&quot;&gt;
        &lt;i&gt;Cut &amp;amp; Thirst&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://www.amazon.co.uk/My-Evil-Mother-Short-Story-ebook/dp/B09T971KPQ/&quot;&gt;
        &lt;i&gt;My Evil Mother&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Betsy Beyer, Chris Jones, Jennifer Petoff and Niall Richard Murphy (Editors):
  
        &lt;a href=&quot;https://sre.google/sre-book/table-of-contents/&quot;&gt;
        &lt;i&gt;Site Reliability Engineering&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Octavia E. Butler:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/Parable_of_the_Sower_(novel)&quot;&gt;
        &lt;i&gt;Parable of the Sower&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Christopher Evans:
  
        &lt;a href=&quot;https://www.computinghistory.org.uk/det/4236/The-Mighty-Micro&quot;&gt;
        &lt;i&gt;The Mighty Micro&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Neil Gaiman:
  
        &lt;a href=&quot;https://www.neilgaimannorsemythology.com&quot;&gt;
        &lt;i&gt;Norse Mythology&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;William Gibson:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_Light&quot;&gt;
        &lt;i&gt;Virtual Light&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://www.penguin.co.uk/books/21548/idoru-by-william-gibson/9780241953525&quot;&gt;
        &lt;i&gt;Idoru&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://www.penguin.co.uk/books/23649/all-tomorrows-parties-by-william-gibson/9780241953518&quot;&gt;
        &lt;i&gt;All Tomorrow&apos;s Parties&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Nicola Griffith:
  
        &lt;a href=&quot;https://nicolagriffith.com/2014/02/26/hild/&quot;&gt;
        &lt;i&gt;Hild&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://nicolagriffith.com/books/menewood-coming-october-3-2023/&quot;&gt;
        &lt;i&gt;Menewood&lt;/i&gt;
        &lt;/a&gt;
        
        ,
  
        &lt;a href=&quot;https://nicolagriffith.com/2014/02/24/ammonite/&quot;&gt;
        &lt;i&gt;Ammonite&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Kazuo Ishiguro:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/When_We_Were_Orphans&quot;&gt;
        &lt;i&gt;When We Were Orphans&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Steve Jobs:
  
        &lt;a href=&quot;https://stevejobsarchive.com/book#&quot;&gt;
        &lt;i&gt;Make Something Wonderful&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Cal Newport:
  
        &lt;a href=&quot;https://calnewport.com/slow/&quot;&gt;
        &lt;i&gt;Slow Productivity&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Gerard K. O&apos;Neill:
  
        &lt;a href=&quot;https://en.wikipedia.org/wiki/The_High_Frontier:_Human_Colonies_in_Space&quot;&gt;
        &lt;i&gt;The High Frontier&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Lewis Packwood:
  
        &lt;a href=&quot;https://curiousvideogamemachines.com/&quot;&gt;
        &lt;i&gt;Curious Video Game Machines&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Simon J. D. Prince:
  
        &lt;a href=&quot;https://udlbook.github.io/udlbook/&quot;&gt;
        &lt;i&gt;Understanding Deep Learning&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Jef Raskin:
  
        &lt;a href=&quot;https://dl.acm.org/doi/book/10.5555/333103&quot;&gt;
        &lt;i&gt;The Humane Interface&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Eric Ries:
  
        &lt;a href=&quot;https://theleanstartup.com&quot;&gt;
        &lt;i&gt;The Lean Startup&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;N. K. Sanders (translator):
  
        &lt;a href=&quot;https://www.penguin.co.uk/books/180202/the-epic-of-gilgamesh-by-trans-n-sandars/9780141907185&quot;&gt;
        &lt;i&gt;The Epic of Gilgamesh&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Janelle Shane:
  
        &lt;a href=&quot;https://www.janelleshane.com/book-you-look-like-a-thing&quot;&gt;
        &lt;i&gt;You Look Like a Thing and I Love You&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Steven Vickers:
  
        &lt;a href=&quot;https://worldofspectrum.net/ZX81BasicProgramming/&quot;&gt;
        &lt;i&gt;ZX81 BASIC Programming&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Gordon Welchman:
  
        &lt;a href=&quot;https://archive.org/details/hutsixstorybreak00welc&quot;&gt;
        &lt;i&gt;The Hut Six Story&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Alex Wiltshire &amp;amp; John Short:
  
        &lt;a href=&quot;https://mitpress.mit.edu/9780262044011/home-computers/&quot;&gt;
        &lt;i&gt;Home Computers: 100 Icons that Defined a Digital Generation&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Gabrielle Zevin:
  
        &lt;a href=&quot;https://gabriellezevin.com/tomorrowx3/&quot;&gt;
        &lt;i&gt;Tomorrow and Tomorrow and Tomorrow&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

  
  &lt;li&gt;Robert Zubrin:
  
        &lt;a href=&quot;https://diversionbooks.com/books/the-new-world-on-mars/&quot;&gt;
        &lt;i&gt;The New World on Mars&lt;/i&gt;
        &lt;/a&gt;
        
        
  
  &lt;/li&gt;

&lt;/ul&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2024-12-30:nerd_trifecta</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/12/nerd_trifecta.html"/>
    <title>A Nerd Trifecta</title>
    <updated>2024-12-30T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;A little while ago, I came across a video that combines three of my current nerdish interests, namely retro computers, mechanical keyboards and 3D printing:&lt;/p&gt;

&lt;iframe class=&quot;youtube_embed&quot; src=&quot;https://www.youtube.com/embed/Grd_a4oi7qU&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;If you’re not already seen it, I highly recommend giving it the time. The sheer amount of effort and attention to detail that goes into the project is incredible. Note that this isn’t a restoration of an old machine, or a recreation of a classic with new parts. This is a Mac that &lt;em&gt;never existed&lt;/em&gt; as anything more than a non-functional model. The Flat Mac could not have been made in 1984, due to the limitations of battery technology if nothing else, but it’s now in the world, albeit as a one-off.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2024-12-24:deck_the_halls</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/12/deck_the_halls.html"/>
    <title>Deck the Halls</title>
    <updated>2024-12-24T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2024/12/bowserholly.jpg" alt="A holly garland featuring Mario's nemesis Bowser"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;I was listening to the youngest practice Christmas songs on the piano, and I had a terrible idea. In any case, Merry Christmas.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2024-12-22:the_cat_is_lying</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/12/the_cat_is_lying.html"/>
    <title>The Cat is Lying To You</title>
    <updated>2024-12-22T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2024/12/catfood.jpg" alt="A "morning/evening" label on a canister of cat food."/&gt;
        &lt;/div&gt;
      
      &lt;blockquote&gt;
  &lt;p&gt;The cat needs to be fed. The cat is very insistent on this point. The cat can’t believe that you think someone else might have already fed her.&lt;/p&gt;

  &lt;p&gt;THE CAT IS LYING TO YOU.&lt;/p&gt;

  &lt;p&gt;Get one step ahead of feline deception with this handy print-in-place marker; attach it to the cat food canister, or mount it near the food bowl, and it will be clear at a glance if it’s time to feed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve published my &lt;a href=&quot;https://makerworld.com/en/models/903651#profileId-863255&quot;&gt;first model&lt;/a&gt; — a flipping label to indicate when you last fed the cat — to &lt;a href=&quot;https://makerworld.com/&quot;&gt;MakerWorld&lt;/a&gt;, Bambu Labs’ model sharing community. It’s not that complex, and the top-layer print quality is frankly appalling, but I was pleased to make something useful, especially with the print-in-place mechanism.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2024-12-16:middle</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/12/middle.html"/>
    <title>Stuck in the Middle</title>
    <updated>2024-12-16T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;On a recent episode of &lt;a href=&quot;https://atp.fm&quot;&gt;ATP&lt;/a&gt;, Casey mentioned that one of the issues with an ultrawide Mac display, such as the one now provided by the Vision Pro, is the long trek to the left side of the screen to access the menu bar. This wasn’t an issue in 1984 when the screen was only 9”, but as displays have grown it’s become more and more of a factor. This apparently lodged somewhere in the back of the brain, and percolated up again in the form of a strange idea:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/2024/12/barmenu_full.png&quot;&gt;
  &lt;img alt=&quot;A macOS menu bar, growing from the middle&quot; src=&quot;/2024/12/barmenu.png&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Click for a full width version — this is of course a mockup, rather than implemented software.)&lt;/p&gt;

&lt;p&gt;The idea is hopefully simple and obvious; the menus, starting with the Apple menu, starts in the centre of the menu bar and goes left, whereas notification area, starting with the clock, grows to the right, again from the centre. On modern Mac laptops this means they grown from either side of the notch, as shown, but on older hardware and external displays the Apple menu could act as an anchor.&lt;/p&gt;

&lt;p&gt;This design stems from the observation the the easiest place to reach on the menu bar is the centre, rather than either end. Traditionally, the most used items are placed at the extremes (for example, the application and File menus, and the clock and control centre) — these end up closest to the centre&lt;sup id=&quot;fnref:clock&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:clock&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;The only downside of this change is that you only have half the available width for each side of the menu bar, but Apple have largely crossed that bridge by introducing the notch, and in my experience it doesn’t seem to be a major problem in practice. The new design would require a different solution (perhaps an overflow menu?), but it seems like a win overall.&lt;/p&gt;

&lt;p&gt;I don’t expect that Apple will make this change, but if they did it wouldn’t be entirely without precedent. Way back at the turn of the millennium, &lt;a href=&quot;https://betawiki.net/wiki/Mac_OS_X_Developer_Preview_3&quot;&gt;Mac OS X Developer Preview 3&lt;/a&gt; put the Apple menu squarely in the middle of the menu bar, mirroring the placement on the iconic &lt;a href=&quot;https://en.wikipedia.org/wiki/IMac_G3&quot;&gt;iMac&lt;/a&gt;. That never made it to the final release, but perhaps it’s an idea who’s time has come.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:clock&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;As an added bonus, putting the clock right next to the webcam means you can check how long your meeting is dragging on for while appearing to be really engaged. &lt;a href=&quot;#fnref:clock&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2024-12-14:hacking</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/12/hacking.html"/>
    <title>Hacking Like It&apos;s 1981</title>
    <updated>2024-12-14T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;Back in July, I encountered &lt;a href=&quot;/2024/07/mystery-ram.html&quot;&gt;a bit of weirdness in the way that the ZX81 addresses RAM&lt;/a&gt; when it only has a single kilobyte. I was reminded of this listening to the &lt;a href=&quot;https://risky.biz/RB774/&quot;&gt;latest episode of Risky Business&lt;/a&gt;, which reported on an interesting and decidedly 21st-century attack.&lt;/p&gt;

&lt;p&gt;AMD’s recent processors offer &lt;a href=&quot;https://www.amd.com/en/developer/sev.html&quot;&gt;SEV&lt;/a&gt;, a suite of features to protect Virtual Machines from compromise even when the attacker (say, a cloud hosting provider) has physical access to the processor. The &lt;a href=&quot;https://arstechnica.com/information-technology/2024/12/new-badram-attack-neuters-security-assurances-in-amd-epyc-processors/&quot;&gt;BadRAM&lt;/a&gt; undermines a key plank of this in a pleasingly straightforward way, by causing the system to report that it has twice as much RAM as it actually has. Just as with the ZX81, the additional bit of the address (just the one in this case) is ignored, meaning each physical location can be referenced by two address. One of these is correctly protected by SEV, but the other is up for grabs.&lt;/p&gt;

&lt;p&gt;It’s some fascinating security research in its own right, but also highlights the similarity of computers today and those of forty (and more) years ago. We’ve added many layers of capability and complexity, and scaled up by orders of magnitude on every axis, but underneath all of that many of the fundamentals are unchanged. Understanding those fundamentals is still important.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    
    <id>tag:rho.org.uk,2024-11-29:first_functional_print</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/11/first_functional_print.html"/>
    <title>First Functional Print</title>
    <updated>2024-11-29T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2024/11/seplate.jpg" alt="An SE Slot plate, in OpenSCAD (left), Bambu Studio (middle) and reality (right)"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;About the same time as my &lt;a href=&quot;/2024/11/colourful.html&quot;&gt;educational foray into multicolour printing&lt;/a&gt;&lt;sup id=&quot;fnref:chronology&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:chronology&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, I decided to put the printer to work doing something useful: my first functional print. I had an almost-complete design already, that I’d produced while getting started with &lt;a href=&quot;https://openscad.org&quot;&gt;OpenSCAD&lt;/a&gt;, so it was just a matter of turning it into reality.&lt;/p&gt;

&lt;p&gt;Regular readers may recall my project at the start of the year to &lt;a href=&quot;/2024/01/41st_anniversary.html&quot;&gt;revive a Mac SE&lt;/a&gt; in honour of the 40th anniversary of the Mac itself. At the heart of that was a &lt;a href=&quot;https://bluescsi.com&quot;&gt;BlueSCSI&lt;/a&gt; SCSI emulator. I chose to mount this internally in the location of the old hard drive, which was great for preserving the feel of the machine, but made access to the SD card storing the data an issue. I alleviated this somewhat by adding a simple extension adapter, but there was no easy way to mount it, and so it just dangled out of the back of the case.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;obvious&lt;/em&gt; solution was to make a custom blanking plate to fit into SE slot in the back of the Mac (if you’re not familiar, picture a PCI slot and you’re in the right ball park), with a hole sized to fit the extension cable’s card reader. This turned out to be pretty straightforward and a good started project in OpenSCAD (the leftmost image). I exported the design, imported it into &lt;a href=&quot;https://bambulab.com/en/download/studio&quot;&gt;Bambu Studio&lt;/a&gt; (the middle image), and sliced and printed it without issue.&lt;/p&gt;

&lt;p&gt;I tried the finished piece in the bracket into which it would be installed, and found a few things. Firstly, I’d assumed I’d be using small self-tapping screws to fix the plate in place, and designed in a couple of pilot holes. On the off chance I tried a couple of M2 bolts I had laying around, and these fit perfectly. Less positive was that my measurements had been a bit off — the screw holes were a few millimetres too close to the centre, and the slot for the card reader was a little too small.&lt;/p&gt;

&lt;p&gt;I grabbed a set of files and started to try and correct the latter problem, but the realised that I didn’t need to. I could just go back into OpenSCAD, adjust the model, and print out another version. While there, I made the whole panel a little thicker as well. This new version was spot on, and I epoxied the reader in place (the rightmost image), and reassembled the Mac with its new, tidier storage.&lt;/p&gt;

&lt;p&gt;This workflow wasn’t something that I’d thought about, but on reflection is a major advantage of having your own 3D printer rather than using a service or MakerSpace. A key use case for 3D printing has always been rapid prototyping, and this still applies when the final item is 3D printed itself. Printing another version of a part isn’t as light-weight or cheap as recompiling software, but it’s a hell of a lot cheaper than fabricating a silicon wafer or retooling a factory. Having a (relatively) rapid turnaround means you can iterate on a design and get to the best final version quickly, rather than try to anticipate every problem up front, and bodge the ones you don’t catch for a sub-optimal result. It brings some of the agility of software into the real world.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:chronology&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;A note of chronological clarification: I’m a bit behind on writing things up, and both this and the previous post relate to the weekend of the 10th of November. &lt;a href=&quot;#fnref:chronology&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    <id>id:/2024/11/colourful</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/11/colourful.html"/>
    <title>Multicolour Waste</title>
    <updated>2024-11-23T14:28:50+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2024/11/multicolour.jpg" alt="A multi-colour Benchy sailing on a sea of poop"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;When I &lt;a href=&quot;/2024/11/adventures_in.html&quot;&gt;took the plunge&lt;/a&gt; and bought a &lt;a href=&quot;https://bambulab.com/en/a1&quot;&gt;Bambu A1&lt;/a&gt;, I got the &lt;a href=&quot;https://uk.store.bambulab.com/products/ams-lite&quot;&gt;AMS Lite&lt;/a&gt; multi-material system that allows you to load four different filaments at once and automatically switch between them. I decided to go for this as it’s significantly cheaper to get it bundled that buy it at a later date, and it seemed like a big step up in quality-of-life in terms of not having to swap spools all the time, and automatically switch over to a new one when the old one runs out.&lt;/p&gt;

&lt;p&gt;The headline capability of the AMS Lite, though, is multicolour printing. I don’t see myself doing much of this, but it’s nice to have the option, and after I’d tried a few standard prints with the included filament sample I decided to give it a go. The way the AMS implements multicolour printing, namely swapping multiple filaments in a single print head, entails quite a bit of overhead both in time, and in waste plastic as the printer flushes out the previous one. However, I’d not quite steeled myself for just how much an overhead this was.&lt;/p&gt;

&lt;p&gt;Firstly, time. The standard, single-colour Benchy that was my first print took 21 minutes. In contrast, the identically sized four-colour Benchy I found as a test&lt;sup id=&quot;fnref:model&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:model&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; took &lt;em&gt;over nine hours&lt;/em&gt; — so long that we had to pause overnight (on the plus side, the print resumed perfectly in the morning). This is a massive increase, but in the grand scheme of things is probably manageable.&lt;/p&gt;

&lt;p&gt;More striking is the amount of waste plastic. Every time the printer feeds in a new filament, it needs to extrude a small amount of plastic to clear out the nozzle. Each poop (this appears to be the term of art) is only a fraction of a gram, but if you need to do up to four for each layer, over hundreds of layers, it adds up. Moreover, when printing multicolour, it’s also advisable to print a priming tower, an extra area on each layer to ensure the new colour is coming through cleanly before printing the model itself. Together, the tower and the poop added up to &lt;em&gt;more than ten times the material used in the model itself&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2024/11/waste.jpg&quot; alt=&quot;Model: 12g, Priming tower: 17g, Poop: 113g&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This model is intentionally a bit of a stress test for multicolour prints, but nevertheless isn’t doing anything pathological — it’s probably a good analogue of what you’d get if you applied colour to an existing model without any particular thought about optimising it. That said, I also didn’t put any effort into the print settings; I just hit go.&lt;/p&gt;

&lt;p&gt;The amount of waste in this print is somewhat shocking, but it represents a worst case. &lt;a href=&quot;https://www.youtube.com/watch?v=p3ZIM3megIU&quot;&gt;This video&lt;/a&gt; contains some tips to significantly reduce waste, and the latest version of Bambu Studio is smarter about the purge amounts between different pairs of colours (basically, you need to purge less going from a lighter colour to a darker one). What’s clear is that this isn’t going to be something that works straight out of the box; a bit of effort and thought is required.&lt;/p&gt;

&lt;p&gt;One key takeaway is that the waste is very dependent on the number of layers, rather than the volume of the model as a whole. Hence, I can see myself using it for things like signs — large, flat pieces that would benefit from embedded colour changes but have relatively few layers. This seems like an instance of a larger point; you need to consider the printability of your model throughout the whole process, rather than just throwing it into the slicer at the end and assuming you’ll get good results. It’s this kind of lesson that makes picking up a new hobby enjoyable.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:model&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;“3D Benchy AMS test - 4 colors”, remixed by Liam Meakins — this appears to have been removed from MakerWorld since I printed it. &lt;a href=&quot;#fnref:model&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    <id>id:/2024/11/mail_trick</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/11/mail_trick.html"/>
    <title>Self-host Your Email on the Modern Internet With This One Weird Trick</title>
    <updated>2024-11-23T09:46:58+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;Back in the early 2000s, when I first bought this domain and started this site, self-hosting your own email was common. If you were running a personal web server, it was just something you did. Over the years, though, things got more complicated. An arms race developed between spammers and anti-spam technology, and for your email to be useful you needed to keep up. Encryption became an increasing requirement, bringing with it the hassle of managing certificates. Later, an alphabet soup of technologies (DKIM, DMARC, SPF) sprang up that you needed to follow to prove you were a legitimate sender. All of this happened against a background of email becoming increasingly centralised — if you weren’t one of the big providers, it was hard to get your mail delivered at all. By the start of this decade, the received wisdom was that hosting your own email wasn’t a practical option.&lt;/p&gt;

&lt;p&gt;Through a combination of inertia and ill-advised pigheadedness, I’ve been a holdout. However, I was starting to waver — even though I jumped through all of the hoops, and was careful not to be running an &lt;a href=&quot;https://en.wikipedia.org/wiki/Open_mail_relay&quot;&gt;open relay&lt;/a&gt;, my mail was still finding itself on the naughty list more than occasionally, and I was contemplating throwing in the towel and moving to &lt;a href=&quot;https://www.fastmail.com&quot;&gt;Fastmail&lt;/a&gt; or similar. Then I came across this one weird trick that solves the problem, and with the &lt;a href=&quot;2024/11/a-change-of-host.html&quot;&gt;move to Mythic Beasts&lt;/a&gt; I finally got around to fully implementing it.&lt;/p&gt;

&lt;p&gt;I’ve been using &lt;a href=&quot;https://mailroute.net&quot;&gt;Mailroute&lt;/a&gt; for years for spam filtering. The integration is incredibly simple and clean — you just point your MX record to their servers, which scan and filter the incoming mail and then pass the legitimate messages on to your own server via normal SMTP. About a year ago I decided to investigate their &lt;em&gt;outbound&lt;/em&gt; service, included in the subscription, and realised it would address the deliverability problem.&lt;/p&gt;

&lt;p&gt;Again, it’s a very simple integration; you just configure your MTA to send all outbound mail to theirs, and they’ll route it on. The mail clients on your laptop or phone still talk to your own server; Mailroute’s is limited to specific IP addresses to prevent abuse. The net result is that your mail gets sent with their reputation, and maintaining that reputation is the responsibility of experts who are paid to do it. Even better, it means you no longer have to run an MTA accepting connections from the entire internet, and so can sleep a little easier.&lt;/p&gt;

&lt;p&gt;When setting up my new VM, I decided to ditch my decades-old, crufty &lt;a href=&quot;https://www.exim.org&quot;&gt;Exim&lt;/a&gt; configuration and start afresh. I’ve now got a largely stock “smarthost”, with a few local tweaks, and everything is running like clockwork.&lt;/p&gt;

&lt;p&gt;Mailroute isn’t the solution for everyone; in particular, the price quickly mounts up if you have multiple users. Self-hosting email itself is probably not the right option for most, either — there are plenty of good managed email providers, and as long as you own your domain you’re not tied to the first you pick — but, if you &lt;em&gt;do&lt;/em&gt; want to give it a go, Mailroute or a similar intermediary solves a lot of the problems that have cropped up over the years. There aren’t many of us left, but we can hold out at least a little longer.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    <id>id:/2024/11/adventures_in</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/11/adventures_in.html"/>
    <title>Adventures in the Third Dimension</title>
    <updated>2024-11-17T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2024/11/benchy.jpg" alt="A white, 3D printed tugboat"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;3D printing has, for a few years now, been something that I’ve watched with interest from a distance, but never quite felt compelled to plunge into. This began to change when the girls found some cute articulated dragons in a souvenir shop. When they learned that these had been made by a machine that you could actually have in your house, they were immediately hooked on the concept. This turned out to be the push I needed to start looking more seriously.&lt;/p&gt;

&lt;p&gt;The world of hobbyist 3D printing has come a long way in the 15 years since the patent on &lt;a href=&quot;https://en.wikipedia.org/wiki/Fused_filament_fabrication&quot;&gt;FDM&lt;/a&gt; lapsed. The printers of today are leaps and bounds ahead of those from even a few years ago, in terms of quality, reliability, and, in particular, ease of use. While it’s still possible to get a printer that is also a project, I decided that (for the moment, at least), we were more interested in the capabilities than the device itself. Hence, I wanted something simple, dependable and beginner friendly. &lt;a href=&quot;https://bambulab.com/&quot;&gt;Bambu Lab&lt;/a&gt; kept cropping up in both personal recommendations and reviews as a stand-out in these areas, and they happened to have an early Black Friday sale on. I bit the bullet and ordered their entry-to-mid-range &lt;a href=&quot;https://bambulab.com/en/a1&quot;&gt;A1 Combo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Delivery took a week or so, which gave me time to clear out a bit of space in the spare room, and reinforce the desk to make sure the printer had a solid home. Unpacking and setting it up was a breeze, and (with a quick check on my thinking on &lt;a href=&quot;https://www.reddit.com/r/BambuLab/s/jNGz4gUEqp&quot;&gt;Reddit&lt;/a&gt;) I was soon holding my first &lt;a href=&quot;https://www.3dbenchy.com/&quot;&gt;Benchy&lt;/a&gt;, pictured above.&lt;/p&gt;

&lt;p&gt;The A1 itself lived up to the hype in terms of ease of use. In fact, it was so straightforward that it felt like cheating, with none of the manual calibration, tweaking of settings and crossed fingers traditionally associated with 3D printing. Modern printers in general, and Bambu Lab’s in particular, have really reached the point where you can just &lt;em&gt;use&lt;/em&gt; them. There’s still plenty of tweaking and learning that’s possible, but you get pretty good results out of the box with a minimum of fuss. The question remains, though: why?&lt;/p&gt;

&lt;p&gt;When you get, say, an upgraded iPhone, it does basically the same things as your old one, just better and more. In contrast, getting a 3D printer opens up something entirely novel, a new capability that you didn’t have before. This is exciting, and increasingly rare in the realm of technology. The ability to design something unique on screen, and then press a button and have it in your hands&lt;sup id=&quot;fnref:shortened&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:shortened&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; feels truly magical.&lt;/p&gt;

&lt;p&gt;3D printing is not yet quite mainstream, either in terms of cost or ease, but it’s not far off. In some ways, it’s reminiscent of the microcomputer revolution of the late 70s and early 80s, where home computers went from something that you had to build to something that you could buy ready to use. This kicked off a flowering of creativity and exploration, making it (then and now) an interesting time to be getting into the area.&lt;/p&gt;

&lt;p&gt;More important than the big picture, though, is the happy surprise of the degree to which it’s fired my imagination (and the girl’s). My mind is fizzing with what to make next.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:shortened&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Some sequences shortened. &lt;a href=&quot;#fnref:shortened&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
  <entry>
    
    
    <id>id:/2024/11/caddy</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/11/caddy.html"/>
    <title>Moving to Caddy</title>
    <updated>2024-11-08T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;As part of my &lt;a href=&quot;/2024/11/a-change-of-host.html&quot;&gt;recent host move&lt;/a&gt;, I decided it was time to review my web server situation. Specifically, I decided to move on from &lt;a href=&quot;https://httpd.apache.org&quot;&gt;Apache&lt;/a&gt;. It’s served me well over twenty years, and adapted to all of the changes I’ve thrown at it (most notably HTTPS), but my configuration was a tangle of two decade’s of cruft, and since I started other options have emerged that would be more directly applicable to my use case. The switch presented an opportunity to start with a clean slate, so I took it.&lt;/p&gt;

&lt;p&gt;My initial plan was to move to &lt;a href=&quot;https://nginx.org/en/&quot;&gt;nginx&lt;/a&gt;, as I’m already very familiar with it, and was confident it would do what I need. However, my friend and colleague &lt;a href=&quot;https://calbryant.uk&quot;&gt;Cal&lt;/a&gt; suggested I take a look at &lt;a href=&quot;https://caddyserver.com&quot;&gt;Caddy&lt;/a&gt;, and this turned out to be a very good call.&lt;/p&gt;

&lt;p&gt;Caddy is a relatively new kid on the block, and I’d only previously looked at it in its very early days. Coming back to it, it’s now a fully-fledged, production-ready web server, with a few tricks up its sleeve. The most obvious, and most widely applicable, is that it automates the serving of HTTPS, right down to requesting certificates from &lt;a href=&quot;https://letsencrypt.org&quot;&gt;Let’s Encrypt&lt;/a&gt;. Moreover, it touts streamlined configuration that’s so simple you can be up and running in minutes, rather than hours.&lt;/p&gt;

&lt;p&gt;This all sounded too good to be true, but I gave it a go and it was 100% on the money. I had a fully working copy of this site, including HTTPS, up in well under 15 minutes (including installing Caddy itself), and by the end of half an hour had sorted out all of the weird redirection and legacy HTTP stuff I wanted to and switch over the DNS. It really is as easy as they claim, at least for the sort of things I want to do.&lt;/p&gt;

&lt;p&gt;Of course, nothing is perfect. I suspect there are plenty of edge cases that it can’t handle as well as other options, and for very high volume usage you can find better performing options. Those caveats only apply to a small minority of users, though. If you are within the (very wide) range of what Caddy can do, it’s hard to beat.&lt;/p&gt;

    </content>
  </entry>
  
  <entry>
    
    
    <id>id:/2024/11/whats_in_a_name</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/11/whats_in_a_name.html"/>
    <title>What&apos;s In A Name?</title>
    <updated>2024-11-02T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
      &lt;p&gt;My &lt;a href=&quot;/2024/11/a-change-of-host.html&quot;&gt;recent post&lt;/a&gt; was accompanied by a picture of the Lion and the Unicorn from &lt;a href=&quot;https://en.wikipedia.org/wiki/Through_the_Looking-Glass&quot;&gt;Through the Looking Glass&lt;/a&gt;, flanking Alice holding a cake. This isn’t as random as it might seem. My new server is called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unicorn&lt;/code&gt; (partly in a nod to &lt;a href=&quot;https://www.mythic-beasts.com&quot;&gt;Mythic Beast&lt;/a&gt;’s traditional branding), and the old server was called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cake&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Those names aren’t random either; I follow the venerable sysadmin tradition of naming computers according to a theme. In fact, I have &lt;em&gt;two&lt;/em&gt; schemes; one for my personal machines, and one for my work ones. See if you can guess what they are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unicorn&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cake&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cheshire&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dodo&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tweedle&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;redqueen&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hatter&lt;/code&gt;…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Work:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gnoll&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;carrion&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kobold&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bugbear&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;owlbear&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hobgoblin&lt;/code&gt;…&lt;/p&gt;

&lt;p&gt;The first is probably pretty obvious, but the latter less so (it’s &lt;em&gt;very&lt;/em&gt; specific). As an extra point of clarification, my current personal laptop is called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gryphon&lt;/code&gt;, and that’s &lt;em&gt;not&lt;/em&gt; ambiguous.&lt;/p&gt;

&lt;details&gt;
  &lt;summary&gt;&lt;b&gt;Answer:&lt;/b&gt;&lt;/summary&gt;
  &lt;p&gt;The personal machine are characters from Alice&apos;s Adventure&apos;s Underground and Through the Looking Glass, as befits this the theme of this post. The work ones are a bit more subtle; they&apos;re Dungeons and Dragons monsters, but specifically from the 1983 Basic Set (which includes the classic dungeon-dwelling monsters like Carrion Crawlers). &quot;Gryphon&quot;, being an outdoor creature, doesn&apos;t appear until the Expert Set, and so doesn&apos;t clash with the Alice character.&lt;/p&gt;
&lt;/details&gt;

    </content>
  </entry>
  
  <entry>
    
    
    <id>id:/2024/11/a-change-of-host</id>
    
    <link type="text/html" rel="alternate"
          href="https://rob.rho.org.uk/2024/11/a-change-of-host.html"/>
    <title>A Change of Host</title>
    <updated>2024-11-01T00:00:00+00:00</updated>
    <author>
      <name>Rob Hague</name>
      <email>rob@rho.org.uk</email>
    </author>
    <content type="html">
      
        &lt;div class="hero_image"&gt;
          &lt;img src="/2024/11/lion_unicorn.jpg" alt="The Lion and The Unicorn (with Alice holding a cake), by John Tenniel"/&gt;
        &lt;/div&gt;
      
      &lt;p&gt;A long while ago, when I first moved this domain to its own server&lt;sup id=&quot;fnref:think&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:think&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, I went with &lt;a href=&quot;https://www.bytemark.co.uk&quot;&gt;ByteMark&lt;/a&gt;, on the basis of recommendations from a few people I knew and who’s opinion I trusted. This trust turned out to be well-founded, and I was a happy customer for a long while.&lt;/p&gt;

&lt;p&gt;However, in 2018, they were acquired by &lt;a href=&quot;https://www.iomart.com&quot;&gt;IOMart&lt;/a&gt;. This was uneventful at first, but then prices started to creep up, and I started to hear grumblings from other customers about the service going downhill. However, I didn’t hit any problems myself (my needs are very simple), so inertia kept me where I was.&lt;/p&gt;

&lt;p&gt;Things came to a head last February, which ByteMark (“An IOMart Company”) announced that they were shutting down BigV, the virtual hosting product I used, with three month’s notice. This put the wind up me and many of their other customers, and I started to look around for alternatives. Ultimately, on that occasion, they relented and kept the service going, but my confidence in them was gone. When they made a similar announcement again a few months ago, I pulled my finger out and actually started to move things.&lt;/p&gt;

&lt;p&gt;After a brief search, I’ve gone with the strongly Cambridge-connected &lt;a href=&quot;https://www.mythic-beasts.com&quot;&gt;Mythic Beats&lt;/a&gt;, again on the basis of many personal recommendations. Not only has this cut my monthly bill in half, but I’ve so far been impressed with the service, the support, and the general ease with getting everything set up. As of this evening, all of my web, mail and DNS presence has been migrated over to a brand-new virtual server, and I can wind down the old one.&lt;/p&gt;

&lt;p&gt;I’ve also used the opportunity to revisit and modernise my setup (some of the configuration was literally two decades old; time tested, but due a refresh). I’ll be following up with some more posts over the next few weeks, going over some of the highlights of what’s changed. Overall, though, it was a very straightforward process, and my only regret was not doing it sooner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; — Posts about the move:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/11/whats_in_a_name.html&quot;&gt;What’s In a Name?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/11/caddy.html&quot;&gt;Moving to Caddy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;2024/11/mail_trick.html&quot;&gt;Self-host Your Email on the Modern Internet With This One Weird Trick&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:think&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I &lt;em&gt;think&lt;/em&gt; this was a few years in, having used a shared host previously, but I can’t recall for certain, or find any certain evidence. &lt;a href=&quot;#fnref:think&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;[back]&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </content>
  </entry>
  
 
</feed>
