<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Mark Smith's Blog Post Feed]]></title>
    <description><![CDATA[A blog about tech and javascript]]></description>
    <link>https://markjgsmith.com/posts</link>
    <generator>msssg</generator>
    <lastBuildDate>Thu, 07 May 2026 19:07:57 GMT</lastBuildDate>
    <atom:link href="https://markjgsmith.com/feeds/posts/rss.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Wed, 06 May 2026 06:19:11 GMT</pubDate>
    <copyright><![CDATA[Mark Smith 2013-2025, all rights reserved]]></copyright>
    <language><![CDATA[en]]></language>
    <managingEditor><![CDATA[Mark Smith]]></managingEditor>
    <webMaster><![CDATA[Mark Smith]]></webMaster>
    <category><![CDATA[javascript]]></category>
    <category><![CDATA[technology]]></category>
    <item>
      <title><![CDATA[Review and approve trending]]></title>
      <description><![CDATA[<p>Barely a <a href="https://markjgsmith.com/posts/2026/05/05/recording-integration-test-fixtures">single day</a> after getting my <a href="https://markjgsmith.com/posts/2026/04/22/cool-things-about-my-new-blogging-tool">review and approve</a> publishing software fully working, and the White House annouces some sort of regime where they will <a href="https://www.politico.com/news/2026/05/05/white-house-mulls-tight-new-controls-on-advanced-ai-00907468">review and approve AI models</a>. I will file this away in the, at this stage, unbelievably large &quot;what are the chances&quot; folder. <a href="posts/2026/05/06/review-and-approve-trending">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/05/06/review-and-approve-trending</link>
      <guid isPermaLink="false">0732b5ad-0dc8-43bb-b2ef-7dd77f4a8897</guid>
      <pubDate>Wed, 06 May 2026 06:19:11 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Recording integration test fixtures]]></title>
      <description><![CDATA[<p>Long day today, but managed to fix all the integration tests that had broken during the latest refactor. It‘s nice to finish the day with the latest build running smoothly. I had to re-record all the test fixtures, but that‘s been made a lot easier following recent changes I made. Previously I had to create all the test mocks by hand, which was really laborious and error prone, but now it‘s all automatic. Anyway, nice to have some progress :) <a href="posts/2026/05/05/recording-integration-test-fixtures">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/05/05/recording-integration-test-fixtures</link>
      <guid isPermaLink="false">ef1c526d-3eba-4a71-949e-28298257f695</guid>
      <pubDate>Tue, 05 May 2026 09:55:03 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[More refactoring, more integration tests]]></title>
      <description><![CDATA[<p>This is another one of those test posts. I‘ve been busy with more refactoring of <a href="https://markjgsmith.com/posts/2026/04/22/cool-things-about-my-new-blogging-tool">my blogging software</a>. This time I‘ve been getting the integration tests working correctly. Thankfully the developer tools and libraries are pretty great. It‘s a bit laborious to get things setup initially and the LLMs have sent be down several pretty bad dead ends. But things are progressing well in general. <a href="posts/2026/05/03/more-refactoring-more-integration-tests">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/05/03/more-refactoring-more-integration-tests</link>
      <guid isPermaLink="false">97160d7c-8ead-47f6-84db-8cc4f5da43d0</guid>
      <pubDate>Sun, 03 May 2026 09:56:37 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Refactoring using LLMs]]></title>
      <description><![CDATA[<p>It‘s really quite amazing the sort of refactoring of your code you can get done when working with LLMs. They make it possible to see much much further into the future, and you can get a much better idea of whether something is possible or not, but also if you can&#39;t quite see the through line, but you know it‘s there, you can head off in the general direction, and work things out as you go.</p>
<p>This happened several times to me this week, I had a really good sense that it was possible, but it was really lot of very abstract changes, and I couldn&#39;t quite get a handle on it. Instead of fighting, I just said, what are the top 3 things we could do to the code base to put us in a position that would make the particular refactor possible. The LLM had a good sense of where we were heading as we&#39;d been discussing it for a while, and so we charted a course and started on the top 3 things.</p>
<p>By the time we finished the top 3 things, it had cleared enough of the brambles and tangles that it was much much more obvious how the refactor could be done.</p>
<p>But don‘t fall into the perfection trap, you have to be pragmatic, there are times, where getting to stable ground is more important that having everything perfect. <a href="posts/2026/04/29/refactoring-using-llms">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/29/refactoring-using-llms</link>
      <guid isPermaLink="false">b6e3d858-b13a-40d7-9440-399777a44fd3</guid>
      <pubDate>Wed, 29 Apr 2026 08:31:04 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Another test post]]></title>
      <description><![CDATA[<p>Seems like the bug I fixed yesterday is properly fixed. It is at least with my links, this post tests it&#39;s also fixed in blog posts. <a href="posts/2026/04/26/another-test-post">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/26/another-test-post</link>
      <guid isPermaLink="false">596f9064-449b-4c17-a6bb-d28086532016</guid>
      <pubDate>Sat, 25 Apr 2026 21:51:58 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Fixing bugs and weirdnesses]]></title>
      <description><![CDATA[<p>I hate to go on about it, but since I started blogging again it‘s been strange thing after strange thing after strange thing.</p>
<p>More bizarre and weird synchronicities than you can shake a stick at. I just fixed a bug in my review and approve workflow, the sort that you only find when you have it running in production. It took me all day yesterday to debug and write the fix. Anyhow I was just about to push the code to production and suddenly all my shells across my whole machine suddenly become unresponsive. All of them in Vscode, and all in iTerm2 and even the system Termnal. Had to reboot. That&#39;s two reboots in two days.</p>
<p>I was just about to write a test post to test things out, so this is the test post. I think I prefer the dull and boring test posts. Does everything have to be a high wire act? <a href="posts/2026/04/25/fixing-bugs-and-weirdnesses">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/25/fixing-bugs-and-weirdnesses</link>
      <guid isPermaLink="false">00dc6485-cb9b-4dc8-863c-4a837666de24</guid>
      <pubDate>Sat, 25 Apr 2026 00:49:31 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[More weird internet connectivity issues]]></title>
      <description><![CDATA[<p>More very very bizare internet connecivity issues. Just another note into the void in case this is the end again, so someone knows how it went down. :( <a href="posts/2026/04/23/more-weird-internet-connectivity-issues">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/23/more-weird-internet-connectivity-issues</link>
      <guid isPermaLink="false">bec65844-3ffa-44d7-abbc-8bbe6a1da59c</guid>
      <pubDate>Thu, 23 Apr 2026 03:33:57 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Polymarket and perps]]></title>
      <description><![CDATA[<p>I see <a href="https://www.cnbc.com/2026/04/21/polymarket-launches-trading-of-heavily-leveraged-perps-contracts.html">Polymarket is adding perpetual futures</a>, otherwise known as perps, to their platform. I can‘t say I fully understand how these work over and above the notion that you can bet on future prices of things which you can use to hedge against things happening or not happening to you, or your investments. Polymarket has been making headlines the past few months, people are up in arms about all this &quot;crazy&quot; betting that is going on everywhere. It strikes me that all these angles are missing the real story, that regular people can start hedging things, something previously only really available to high net worth individuals.</p>
<p>What will the world look like when literally everyone is hedging everything? I find this notion mildly terrifying, but I&#39;m not sure if it&#39;s terrifying because of the craziness or terrifying because of it&#39;s opposite. Maybe if everything is perfectly hedged, nothing is interesting and exciting. How likely is all this to have an impact?</p>
<p>In the short term probably not huge, but a few weeks back I spent a few hours talking with an LLM about all this and throwing around some ideas about creating a home grown hedging application, all written in Typescript. I have to say it was quite interesting, and the LLMs have all the patterns analysed and know about all the best ways of tracking things, and they are incredibly good at coming up with some general rules, throwing things into buckets, so you can actually make some interesting allocations and stay on top of things.</p>
<p>But I also go the sense that it could very easily become all consuming. Do we really all want to become AI powered traders?  <a href="posts/2026/04/23/polymarket-and-perps">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/23/polymarket-and-perps</link>
      <guid isPermaLink="false">9678b8fc-4724-4f88-943c-4cece20624df</guid>
      <pubDate>Thu, 23 Apr 2026 00:56:11 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Oddities trending]]></title>
      <description><![CDATA[<p>Sharp and noticeable uptick in let&#39;s call them oddities, or weirdnesses occuring around me since I started blogging again. I don&#39;t want to get into much detail, but sometimes it&#39;s best just to note it and move on. Hopefully things will settle down a bit in due course. <a href="posts/2026/04/23/oddities-trending">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/23/oddities-trending</link>
      <guid isPermaLink="false">e883750c-5c6c-468c-8027-6cd76eea507d</guid>
      <pubDate>Thu, 23 Apr 2026 00:29:26 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Cool things about my new blogging tool]]></title>
      <description><![CDATA[<p>There are a lot of cool features in my new blogging tool. Here are some of the top of my head:</p>
<ol>
  <li>Render anything, from individual posts to full blown websites.</li>
  <li>Integrates with the writing tools you already use today.</li>
  <li>Templates for pages but also file paths, for maximum flexibility.</li>
  <li>Automatically generate frontmatter for your markdown files.</li>
  <li>It‘s agnostic so you can use any template rendering engine.</li>
  <li>Supports partials and cross engine calling.</li>
  <li>Add functionality using toolpacks accessible from inside the templates.</li>
  <li>Blueprint based workflow engine you can use to create assets of any shape.</li>
  <li>Attach logic to templates to explode out many output files from one input template.</li>
  <li>Run javascript middleware stacks at key places in the render pipeline, integrate with anything.</li>
  <li>Transform data on the way in before it hits your templates.</li>
  <li>Extreme debugability, easily see how data flows through the render pipeline.</li>
  <li>Integrates with Github for atomic and batch review and approve based publishing workflows.</li>
  <li>Dispatch rendered assets to external destinations with custom deliveries.</li>
  <li>Easily cleanup your local workspace with custom cleaners.</li>
</ol>
<p>There‘s a lot more too.</p>
<p>It‘s the fastest way to get from idea to published, completely remove all the tedium from writing online.</p>
<p>I‘m using it right now to write all my posts. Each one gets it‘s own git branch, automatically and uniquely named. You can bulk push all your branches to Github, and then the workflow side picks up and your content goes through a PR based workflow, each item can be review and approved, or auto-merged.</p>
<p>Seems to be working pretty well so far. <a href="posts/2026/04/22/cool-things-about-my-new-blogging-tool">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/22/cool-things-about-my-new-blogging-tool</link>
      <guid isPermaLink="false">bb1b6462-826e-443f-8dc9-b46ba125a167</guid>
      <pubDate>Wed, 22 Apr 2026 08:35:18 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[The return of allergies]]></title>
      <description><![CDATA[<p>It was to be expected I suppose, no sooner than I have started writing again and the world around me is angry. Always angry about something. The world is angry I don&#39;t do what it wants. It&#39;s also angry when I actually do what it wants. It can&#39;t make up it&#39;s mind. It&#39;s really quite unbelievable, like some sort of evil clockwork. Like a heat seeking missile, you just know the moment you see it off in the distance, that no matter what you do, that it&#39;s going to get you in one way or another, eventually.</p>
<p>Also the allergies are back. What a surprise.</p>
<p>Really trying to keep upbeat about things, but that easier said than done when the world is angry and your face is on fire and leaking. <a href="posts/2026/04/21/the-return-of-allergies">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/21/the-return-of-allergies</link>
      <guid isPermaLink="false">8b724b72-949f-43d5-8484-137e17de79ff</guid>
      <pubDate>Tue, 21 Apr 2026 02:59:07 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[On the bright side...]]></title>
      <description><![CDATA[<p>My blogging setup is working pretty well. Some posts about that to follow soonish. <a href="posts/2026/04/20/on-the-bright-side">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/20/on-the-bright-side</link>
      <guid isPermaLink="false">b9987854-4755-4300-82d5-c2174debbbdb</guid>
      <pubDate>Mon, 20 Apr 2026 08:55:22 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Connectivity restored]]></title>
      <description><![CDATA[<p>Well after several about an hour troubleshooting, the conclusion from the LLM was that the networking stack on my laptop was hosed.</p>
<p>I rebooted and everything seems to be working again. I can‘t even remember that happening a single time before on this machine.</p>
<p>Kind of strange it should happen right after my first blog posts in several months. Such is life sometimes. And every time also. <a href="posts/2026/04/20/connectivity-restored">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/20/connectivity-restored</link>
      <guid isPermaLink="false">66aa4e53-bc9d-44d0-8d25-12486ac48e07</guid>
      <pubDate>Mon, 20 Apr 2026 08:50:47 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Really really weird connectivity issues]]></title>
      <description><![CDATA[<p>I&#39;m having the strangest connectivity issues all of a sudden. Some web browsers on my machine can&#39;t load any web pages at all. Others can load some pages, but not others.</p>
<p>Trying to troubleshoot it with the help of some LLMs but of course the connectivity issues mean it&#39;s very difficult to do anything at all because the sessions keep disconecting.</p>
<p>I haven&#39;t installed any software or made any configuration changes recenrtly.</p>
<p>Anyway just posting this in case the world is about to end or something. I hope not. <a href="posts/2026/04/20/really-really-weird-connectivity-issues">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/20/really-really-weird-connectivity-issues</link>
      <guid isPermaLink="false">7c4905f0-c24e-44d6-b1dd-9bb374eaaa3d</guid>
      <pubDate>Mon, 20 Apr 2026 08:27:47 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Twitter blocking my auto-poster]]></title>
      <description><![CDATA[<p>There were two issues getting all the gears in my blogging setup working again after a few months of not posting. Both related to the social media auto-poster Github action workflow that runs every day to post links to various social medias to new posts on the blog. Bluesky and Mastodon still worked perfectly, but Nostr and Twitter were both erroring.</p>
<p>I figured out the Nostr error quite quickly. Looks like some of the relays I had been using to post messages had gone offline. I updated to a more recent list of relays and posts began flowing again.</p>
<p>But the Twitter blockage was much more involved. I spent the morning navigating the quite complex developer portal, and regenerating an absurd amount of API keys and secrets and bearer tokens, and deleting my app and recreating it. Still authentication errors. Eventually went to the billing page and there was a note that said free tier accounts can no longer access the API.</p>
<p>Ok well I guess Twitter doesn&#39;t value my content much. Looks like, for the moment at least, none of my posts will be flowing through Twitter.</p>
<p>Kind of disapointing. <a href="posts/2026/04/20/twitter-blocking-my-auto-poster">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/20/twitter-blocking-my-auto-poster</link>
      <guid isPermaLink="false">3823e6ee-6818-4020-8507-a04bdaf2f8cf</guid>
      <pubDate>Sun, 19 Apr 2026 19:59:48 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Test from Android]]></title>
      <description><![CDATA[<p>Last night&#39;s test post actually worked pretty well. There were a few things that needed reconfiguring in the production environment, but it essentially worked. Today I&#39;m getting it working from my Android phone. Again some slightly annoying configuration changes to do with environment setup, but the code looks like it&#39;s working.  <a href="posts/2026/04/19/test-from-android">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/19/test-from-android</link>
      <guid isPermaLink="false">33bad111-9a91-4129-a9d9-3c67b964ed5c</guid>
      <pubDate>Sat, 18 Apr 2026 23:28:43 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Boring and uneventful test post]]></title>
      <description><![CDATA[<p>It‘s been a while. I‘ve been busy building a blogging tool.</p>
<p>I know the way these test posts tend to go, chances are it‘s not going to work first time, so I&#39;ll refrain from writing much.</p>
<p>Might post a few links too... <a href="posts/2026/04/18/boring-and-uneventful-test-post">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/04/18/boring-and-uneventful-test-post</link>
      <guid isPermaLink="false">7eedcd54-d55c-4f93-9a3b-0d5917540a6b</guid>
      <pubDate>Sat, 18 Apr 2026 08:03:33 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[New blogging CLI tool]]></title>
      <description><![CDATA[<p>It‘s been <a href="https://markjgsmith.com/posts/2026/01/12/multi-dimensional-intersection">a while</a> since I‘ve written any blog posts. I‘ve been heads down on getting my <a href="https://markjgsmith.com/posts/2025/12/13/writing-clis">blogging scripts</a> updated the past 2 months. Quite a journey into writing CLIs, but I reached a milestone yesterday, I was able to successfully write a post using the new system. Still some things to figure out, but it means a much more streamlined process from writing words, to getting them onto the website, all via Github, with individual PRs for each post, and a ton of automation so I don&#39;t have to worry about getting the frontmatter right, or naming files, or putting things in the right place. It&#39;s all automatic.</p>
<p>Anyhow just wanted to put a short post out there, I’m still using the old system to write this, but if all goes well then I will be using the new CLI tool soon. Hoping everyone is well out there. <a href="posts/2026/02/26/new-blogging-cli-tool">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/02/26/new-blogging-cli-tool</link>
      <guid isPermaLink="false">5774dd16-bf3d-434d-936f-90f2695edb4f</guid>
      <pubDate>Thu, 26 Feb 2026 10:56:27 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Multi-dimensional intersection]]></title>
      <description><![CDATA[<p>I‘ve been spending quite a lot of time writing specifications the past week or so. I‘m planning on making some modifications to my <a href="https://markjgsmith.com/posts/2025/12/13/writing-clis">blogging scripts</a>, turning them into a full blown CLI tool. And while doing that I also found some really neat improvements I can make to my <a href="https://markjgsmith.com/posts/2024/05/29/my-static-site-generator-series">static site renderer</a>. It’s been very productive. It’s mind boggling how much further you can get using AI tools. It takes a bit of getting used to it as there are some annoyances that you have to find some workarounds to, but when you do it’s possible to architect much larger and more elegant systems than you would be able to do without AI, you can really think something through in so much more depth and breadth than you would otherwise be able to.</p>
<p>Anyway I had been looking for possible names for a module I was building, and the word constructivism popped up while going through some art-related terms that had a builder / utilitarian vibe. So I was looking at pictures of constructivism art to remind myself what it was all about. Well it occurred to me that it might be a strange and interesting juxtaposition to have some <a href="https://duckduckgo.com/?q=psychadelic&ia=images&iax=images">psychedelic</a> <a href="https://duckduckgo.com/?q=Constructivism+art&iar=images">constructivism</a>. And so me and Gemini went off on a slightly frivolous side quest exploring various things and I was looking up art examples again, so I could try and have Gemini generate some amalgam of the two types of art.</p>
<p>Well that didn&#39;t work out very well. After a few tries, I realised Gemini was just sending back the same picture over and over. Oh well not to worry. Then I realised something very bizarre had happened with the two examples I had chosen out of many. I didn’t pay much thought to it, I just chose one of each type that I liked. And these were they:</p>
<div class="img-container">
  <p>  <img src="https://markjgsmith.com/static/images/2026/01/12/constructivism.jpg" alt="Constructivism"></p>
</div>
<div class="img-container">
  <p>  <img src="https://markjgsmith.com/static/images/2026/01/12/psychedelia.png" alt="Psychedelia"></p>
</div>
<p>What a great reminder that two very different ways of looking at the world can both describe the exact same reality. It’s so strange that I didn’t see it at first. But now that I do, there is something very comforting about it. Yep, we see it too, but weirdly.</p>
<p>When I got back to writing the specification, I must have really confused Gemini. I don&#39;t think it understood what a side quest was, or that we were just taking a break from the spec writing and it kept trying to add amusing art stuff into the specification. I was trying to take out these references that didn&#39;t make much sense. But I eventually relented. Gemini was really insistent that my new tools needed to be pointy and wavey. It’s how it described the core philosophy. It‘s ridiculous but I thought might as well just leave it in there because it was funny.</p>
<p>But the really funny thing is that the more I think about it, I think that Gemini in this case might actually be onto something.  <a href="posts/2026/01/12/multi-dimensional-intersection">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2026/01/12/multi-dimensional-intersection</link>
      <guid isPermaLink="false">a88d1dc1-ad7f-4eec-97a1-01198dc91330</guid>
      <pubDate>Mon, 12 Jan 2026 22:59:59 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Happy Christmas]]></title>
      <description><![CDATA[<div class="img-container">
  <p>  <img src="https://markjgsmith.com/static/images/2025/12/25/christmas-card.jpg" alt="markjgsmith"></p>
</div>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/25/happy-christmas</link>
      <guid isPermaLink="false">7f613f44-6d6d-4e40-b8a3-3942bce6e4c9</guid>
      <pubDate>Thu, 25 Dec 2025 08:22:33 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Changes partially successful]]></title>
      <description><![CDATA[<p>Yesterday’s changes were partially successful.</p>
<p>First of all there was the <a href="https://markjgsmith.com/posts/2025/12/18/bluesky-clickable-links">Bluesky clickable links</a>, which were completely successful. Links in Bluesky are now <a href="https://bsky.app/profile/mjgs.bsky.social/post/3mabtan7o4y2t">consistently</a> <a href="https://bsky.app/profile/mjgs.bsky.social/post/3mabtb7ozld2b">clickable</a>. That’s what I expected, the change was quite straight forward and predictable.</p>
<p>Secondly there was the <a href="https://markjgsmith.com/posts/2025/12/18/social-media-cards">social media cards</a>. At first it looked like it had been a complete failure, with none of <a href="https://bsky.app/profile/mjgs.bsky.social/post/3mabtb7ozld2b">Bluesky</a>, <a href="https://x.com/markjgsmith/status/2001724398101741909">Twitter</a> and <a href="https://primal.net/e/nevent1qqsz0p8c874yyquq2s5fzx7lzmyde8x8w2kuz4ft0l9la8nnyk2jydcndvhcc">Nostr</a> showing any cards for the latest posts. Kind of disappointing, especially since <a href="https://x.com/markjgsmith/status/2000994814813257927">Twitter</a> and <a href="https://primal.net/e/nevent1qqsv8z4zl08kve4x8t0z5p8yu3kz8r5tjrpxw3wyc727lku76cs8rycy83xrj">Nostr</a> had previously been adding card sometimes. Have I broken things? Hard to tell, because it’s so hit or miss.</p>
<p>But then my faith in the digital world was at least partially restore, because Mastodon had picked up the changes perfectly and created a card for both my <a href="https://mastodon.social/@markjgsmith/115742032087913181">latests</a> <a href="https://mastodon.social/@markjgsmith/115742033163876459">posts</a>! Props to Mastodon.</p>
<p>All this stuff is way too difficult and inconsistent imho. Isn‘t this supposed to be 2025? <a href="posts/2025/12/19/changes-partially-successful">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/19/changes-partially-successful</link>
      <guid isPermaLink="false">c78726f9-010e-49ae-8b34-4bcc217e0011</guid>
      <pubDate>Fri, 19 Dec 2025 08:31:07 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Social media cards]]></title>
      <description><![CDATA[<div class="img-container-floatright">
  <p>  <img src="https://markjgsmith.com/static/images/2025/12/18/default-social-card-130x130.jpg" alt="markjgsmith"></p>
</div>
<p>Following on from the fix to the <a href="https://markjgsmith.com/posts/2025/12/18/2025-12-18-120913-bluesky-clickable-links">links in the Bluesky posts</a>, I decided to look into improving the metadata on my blog pages so that the various social medias create nicer looking cards for my posts. In the short term I’ll use a standard image for all my posts. I might add the ability to customise this on a per post basis later, but for now they should all get a classic white text on black background.</p>
<p>It was a bit tricky because although Twitter lets you choose whether you display the image full width, or as a small thumbnail, all the others make the choice for you based on the resolution of the image you add in the meta data in your page <code>&lt;head&gt;</code>. I used ffmpeg to generate the image, slightly higher res for Twitter, and I updated my sites templates so the meta tags point to the right image.</p>
<p>The intention is for the image to appear as a small thumbnail on the left of the link, but we&#39;ll have to see how that goes, if it doesn&#39;t work I might need to make some adjustments. <a href="posts/2025/12/18/social-media-cards">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/18/social-media-cards</link>
      <guid isPermaLink="false">da202c18-deec-4390-8694-5620178aa599</guid>
      <pubDate>Thu, 18 Dec 2025 16:15:32 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Bluesky clickable links]]></title>
      <description><![CDATA[<p>Although the social media auto-poster has been working well as far as I can tell since my last update <a href="https://markjgsmith.com/blog/2025/12/15">a few days ago</a>, I noticed that on Bluesky the links in the posts were not clickable. After a bit of research it turns out that Bluesky has an API called <a href="https://docs.bsky.app/docs/advanced-guides/post-richtext">facets</a> that gives you a way to turn the plain text you post into rich text. It&#39;s a bit of extra work to do this, but on the plus side you get quite a lot of control as to how the text appears. Anyhow, I made a few modifications and hopefully now the links should be clickable. <a href="posts/2025/12/18/bluesky-clickable-links">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/18/bluesky-clickable-links</link>
      <guid isPermaLink="false">c6b0e8fa-fa76-41a1-9f64-7b6d94f47dc6</guid>
      <pubDate>Thu, 18 Dec 2025 11:09:13 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[The Eternal]]></title>
      <description><![CDATA[<p>It&#39;s been kind of a strange week, and particularly today. As I sat down exhausted earlier, following a long long journey of one synchronicity after another, I started listening to some Sonic Youth. I haven&#39;t been listening to much music at all recently, but back in the 90s I used to listen to them a lot. Not sure I&#39;ve listened to them all that much since that time. It was those years right at the end of school, and the first few in university.</p>
<p>Anyhow I skipped through a couple of their earlier albums on youtube, and they were ok, but you know remembering the past can be a bit weird. You&#39;re not the person you used to be, and so the tracks don&#39;t always sound as great as you remember them. Well I eventually landed on their album <a href="https://m.youtube.com/playlist?list=PLQvL6GLJiX912Ng-yBKTs5FA8p9p3F11g">The Eternal</a>. I remember buying this album when it came out, and I listened to it a lot. It&#39;s from 2009 which is quite a bit later than I thought it was. Pretty sure I wasn&#39;t listening to them then. But I really remember the artwork and especially the guitars.</p>
<p>I think a lot people might listen to this and not understand it, at least at first. The notes are odd in some places and it&#39;s very confusing in other places, but there are these moments of sereneness and calm, and if you listen to the whole thing as an album, the sounds tell a story. You don&#39;t need to understand all the words, though some might jump out at you. There is this incredible beauty that sort of emerges out of the chaos, or maybe it was there all along but you just didn&#39;t notice it. And when you notice it you are like oh right, I get it now. I get some part of another person on the other side of the world, and some part of all the people that listened to this band.</p>
<p>As an album it&#39;s very much like watching a movie. I hadn&#39;t noticed that before. It&#39;s like <a href="https://m.imdb.com/title/tt0064276">Easy Rider</a> but also completely different. Like it has some part of the flavour of Easy Rider. I&#39;m really struck by how film-like it is as an album. After listening to it I really felt like I just walked out of a movie theatre. That feeling of, wow what did I just see, that was really incredible, and just like with the best movies I&#39;m thinking about pieces of it, but also memories it conjured up. What&#39;s super bizarre is that it&#39;s the sounds, and the feelings, the ambience of the thing, rather than images, and it sort of fades out into the distance.</p>
<p>Youtube of course was playing all sorts of adds in between tracks, which for some reason I found very funny. They were so obnoxiously out of place, but that for some reason had a kind of comedy juxtaposition to it. The other thing that I find super interesting is that according to their <a href="https://en.wikipedia.org/wiki/Sonic_Youth_discography">wikipedia page</a>, it got to number 18 in the charts in the US (they are a US band), number 42 in the UK, and very similar numbers in all other countries across Europe, except for one country where it charted at number 9, in Belgium where I grew up. There&#39;s some part of me, from a long time ago that looks a lot like how this album sounds. <a href="posts/2025/12/16/the-eternal">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/16/the-eternal</link>
      <guid isPermaLink="false">82db0aa5-c25e-4f89-b856-eb54112819c9</guid>
      <pubDate>Tue, 16 Dec 2025 19:41:24 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Saving state]]></title>
      <description><![CDATA[<p>Very important thing state. And saving state, well that’s doubly important. I thought the <a href="https://markjgsmith.com/posts/2025/12/09/auto-poster-up-and-running">auto-poster was up and running</a>, and I wasn’t wrong. But it turns our the final job in the workflow that saves the state of the feed reader, wasn’t running and the result of that was that unknown to me, everyday all posts since I started running it, were getting posted again. Thankfully I noticed it this morning.</p>
<p>After a deep dive into figuring out what was going on, it seems like the if statement I was using for that job was causing an issue. According to Gemini the logic wasn’t flawed, but it was quite complex and apparently Github Actions can sometimes run into issues with complex ifs. hat I was trying to do was only save the sate if any of the post jobs succeeded. But that was trying to be too clever.</p>
<p>I’ve refactored and have come up with a simpler way. Instead of trying to figure out if any posts succeeded, now when I find new posts, I just always save the state no matter what, but then I have a extra job at the end that throws an error if any of the post jobs failed. Hopefully I will thus always avoid double posting, but also there will be an errored job if something goes wrong, which hopefully I will notice.</p>
<p>All this to say that it really should be operational now. If you see this post on my socials tomorrow on it’s own you know the change worked, and if it’s accompanied by a load of old posts, then I am probably pulling my hair out and staring at VSCode. <a href="posts/2025/12/14/saving-state">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/14/saving-state</link>
      <guid isPermaLink="false">542011b6-1adc-453a-9e16-22767c418131</guid>
      <pubDate>Sun, 14 Dec 2025 16:46:18 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Writing CLIs]]></title>
      <description><![CDATA[<div class="img-container-floatright">
  <p>  <img src="https://markjgsmith.com/static/images/2025/12/13/making.jpg" alt="Making"></p>
</div>
<p>I <a href="https://markjgsmith.com/posts/2025/10/25/new-blogging-scripts">re-wrote all my blogging scripts</a> a couple of months ago. That’s been a resounding success. I use them most days, and it’s made my blogging workflow much more streamlined. I have some more improvements I’d like to make, and some interesting future projects I want to be in a position to explore. The annoying thing with the scripts in their current form is that they are written in <a href="https://en.wikipedia.org/wiki/Bash_(Unix_shell)">Bash</a>. Things can get kind of gnarly in Bash.</p>
<p>To be clear, I have nothing against Bash. It’s really useful for getting things up and running quickly. It’s very practical, and flexible and you have a million tools at your disposal that are tried and tested, and they tend to work quite well together. But when you want to do something a bit more elegant than just running a sequence of commands one after the other, with a few ifs and loops, then it can seem very archaic. So I’ve decided to re-write my blogging scripts in Node.js.</p>
<p>I’m pretty excited about this, because it will turn my very functional, but somewhat clunky blogging tools, into a streamlined, efficient and extensible <a href="https://en.wikipedia.org/wiki/Command-line_interface">command line interface</a> (CLI). I have written a few CLIs over the years, but the past few years my energies have been mostly focussed on web development, so it’s been very interesting discovering all the new CLI focussed libraries that now exist. Things in CLI-land are orders of magnitude better than they were last time I was here.</p>
<p>The most useful libraries so far have been:</p>
<ul>
  <li><a href="https://github.com/tj/commander.js">tj/commander.js</a> - For CLI argument parsing.</li>
  <li><a href="https://github.com/privatenumber/tasuku">privatenumber/tasuku</a> - For running tasks with awesome UX.</li>
  <li><a href="https://github.com/SBoudrias/Inquirer.js">SBoudrias/Inquirer.js</a> - For it‘s superb collection of command line user interfaces.</li>
</ul>
<p>I also decided on using the more modern <a href="https://www.geeksforgeeks.org/node-js/how-to-use-ecmascript-modules-in-node-js">ES Modules</a> rather than CommonJS, and so opted to use <a href="https://vitest.dev">Vitest</a> for my testing framework instead of Mocha or Jest. I was already running Vitest on all my React frontend projects, but it turns out it’s great out of the box with any ESM based projects. So far no major issues.</p>
<p>I already have a minimal Node.js project up and running, and I’m likely going to spend some time updating it to Typescript, given how successful Typescript has been in all my recent web development projects, especially those that I have been working on with AIs. Feeling pretty good about it :) <a href="posts/2025/12/13/writing-clis">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/13/writing-clis</link>
      <guid isPermaLink="false">7565dbe2-331c-47a0-9641-da85f87ee008</guid>
      <pubDate>Sat, 13 Dec 2025 06:24:21 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Auto-poster up and running]]></title>
      <description><![CDATA[<p>I figured out the <a href="https://markjgsmith.com/posts/2025/12/08/sorry-about-the-duplicates">Github Actions scheduling issue</a> from the past two days. Turns out I had a bug in my cron. At some point during testing I had inadvertently updated a value that I shouldn’t have which meant it was trying to run much more often than I had intended. When you setup cron on a real local linux system, that’s not normally an issue, in fact that’s usually how you test these things, but in a hosted environment like Github, things behave somewhat unexpectedly.</p>
<p>What happens is they run a few times, then they just drop and don’t show up again. Which makes debugging very difficult, but I guess from their perspective it keeps their scheduler protected from unnecessarily high load. And of course for whatever reason no matter how much I looked at the workflow file, or all the various things I tried modifying, my brain just would not see the 1 character bug I had introduced. Thankfully Clay from Github support found it almost immediately. The auto-poster should hopefully be running smoothly now. Thanks Clay! <a href="posts/2025/12/09/auto-poster-up-and-running">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/09/auto-poster-up-and-running</link>
      <guid isPermaLink="false">2d8ef94e-00ee-49e6-990d-2fc0e1f1064a</guid>
      <pubDate>Tue, 09 Dec 2025 14:36:17 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Blocking and allowing]]></title>
      <description><![CDATA[<p>The world is doing that thing it always does when I release some software I have been working on for a long time, where it is infinitely upset that it has had to be waiting for so long for me to finally finish the software, so it can get on with the thing it was doing before it was so rudely interrupted by my audacious tiny and insignificant software. Poor thing.</p>
<p>The way this manifests is a tsunami of progressively more intense nudges trying to control or influence the tiny minutia in my life. Seems strange to say but it happens in multiple dimensions, at different abstraction levels, one after the other, until there is a bizare synchronicity in pretty much everything I do. And what inevitably ensues is it blocking the very thing it is trying to get me to do. And so it gets even more upset at me not doing the thing it wants me to do, even though it won&#39;t let me do the thing!</p>
<p>And I already know that even if I do the thing that it wants me to do, that it will be upset, because I will inevitably be doing it wrong, yet again. And so the vicious cycle continues, and escalates. </p>
<p>It’s very hard to describe, and it’s even harder to deal with, especially because you naturally start second guessing everything. I bet this is another weirdness. And sure enough it is. Ok well, I&#39;ll just quietly step away, hoping it doesn&#39;t get worse. And of course that in itself creates disturbances in the spacetime continuum. When it gets really bad it&#39;s feels like when you try and rebase two branches the wrong way around, and literally every commit becomes a merge conflict. Thankfully, today it&#39;s not that bad, at least so far.</p>
<p>It reminds me of the binds that AI systems get themselves into, where it can’t decide on something, and each time you ask it something, it confidently decides the opposite. A strange probability loop. I have no more words to describe it.</p>
<p>In these times, I think the best thing is to just slow down, though as I write this, I can’t quite remember what the best approach is. Everything feels off today.</p>
<p>And so it goes. <a href="posts/2025/12/08/blocking-and-allowing">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/08/blocking-and-allowing</link>
      <guid isPermaLink="false">264744a3-eea9-41ad-8b1a-43dae3e7af8c</guid>
      <pubDate>Mon, 08 Dec 2025 08:26:46 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Sorry about the duplicates]]></title>
      <description><![CDATA[<p>I am still trying to <a href="https://markjgsmith.com/posts/2025/12/07/first-few-posts">iron out all the creases</a> in my new social media auto-poster. It ran last night, and successfully posted to all the social medias! But for some bizare reason that I can&#39;t figure out, it ran 4 times, which of course means that it auto-posted the same linke 4 times to all thje social medias. This was the same thing that happened the day before in testing, but I had put it down to the scheduler being over-loaded. I have openned a ticket up with Github support, hopefully I’ll hear back from them soon. So apologies for the duplicates. Please bear with me.  <a href="posts/2025/12/08/sorry-about-the-duplicates">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/08/sorry-about-the-duplicates</link>
      <guid isPermaLink="false">7674ff70-c269-47d6-9da6-0c3001109d0d</guid>
      <pubDate>Mon, 08 Dec 2025 06:27:54 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[First few posts]]></title>
      <description><![CDATA[<div class="img-container-floatright">
  <p>  <img src="https://markjgsmith.com/static/images/2025/12/07/modern-times.jpg" alt="Modern Times"></p>
</div>
<p>Well yesterday&#39;s <a href="https://markjgsmith.com/posts/2025/12/06/refactoring-and-minimal-examples">inaugural run of the auto-poster</a> didn’t go exactly to plan. In fact it didn’t run at all. I didn’t really expect that it would have worked first time, though I was sort of hopeing that it would. Oh well.</p>
<p>I spent much of the morning trying to figure out why the scheduled trigger in the Github Action wasn’t launching any jobs. I updated it from running once daily to once every 5 minutes, and it still wasn’t running. No errors anywhere, just nothing. After a few hours I gave up and moved onto something else.</p>
<p>When I checked again a bit later, several jobs had been launched which then had errored. The first one starting almost 2 hours after it was supposed to start. And then it had run 4 times in an hour, which certainly wasn’t once every 5 minutes. I guess the Github scheduler is under stress? Kind of strange.</p>
<p>Anyhow since I had confirmed that at least the scheduler was working even if it was a bit temperamental, I started testing each poster with dryrun set to false. This was the first time I had tested live, and so I uncovered a few small bugs and some secrets that were missing. Eventually I managed to post to all social medias apart from LinkedIn. The LinkedIn API is really narly. I ended up commenting it out for now.</p>
<p>Anyway, <a href="https://markjgsmith.com/posts/2025/12/06/refactoring-and-minimal-examples">yesterday’s blog post</a> was re-posted to <a href="https://mastodon.social/@markjgsmith/115676986051642307">Mastodon</a>, <a href="https://x.com/markjgsmith/status/1997609419522122126">Twitter</a>, <a href="https://primal.net/e/nevent1qqsv8z4zl08kve4x8t0z5p8yu3kz8r5tjrpxw3wyc727lku76cs8rycy83xrj">Nostr</a>, <a href="https://bsky.app/profile/mjgs.bsky.social/post/3m7ewuysbd32b">Bluesky</a>. Pretty cool :)</p>
<p>So all the poster scripts are tested in live mode and the scheduler appears to be working, all be it sometimes with a big delay, but hopefully at some point in the early hours tomorrow, this post will get auto-posted to all the socials mentioned above. <a href="posts/2025/12/07/first-few-posts">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/07/first-few-posts</link>
      <guid isPermaLink="false">9dc7666c-b9ef-4cba-8db6-cc9d7074d4c6</guid>
      <pubDate>Sun, 07 Dec 2025 16:50:23 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Refactoring and minimal examples]]></title>
      <description><![CDATA[<p>Usually when you are writing software it’s good idea to start small and build up. When things are complex, there are just too many things that can go wrong, and they inevitably do.</p>
<p>But sometimes even when you do diligently do that, you get into trouble because the platform you were building on is inconsistent or missing a key feature, or behaves in a non-intuitive way. You thought you knew how it worked but it turns out that the way you thought it worked was not the full picture.</p>
<p>In these times, things get very confusing, you find yourself going around in circles, and it can get quite gnarly, because you are changing things here and there trying to debug things. And one thing leads to another thing, and the AI you are working with takes you down a ridiculous route that was totally unnecessary.</p>
<p>At some point you decide that you need to start again from scratch. Rebuilding the absolute most minimal example of the thing you are trying to solve. It’s a <a href="https://markjgsmith.com/posts/2020/12/18/the-art-of-the-minimal-example">bit of an art</a>. It can seem like a total pain, but it’s often much much faster the second time around, once you have figured out the solution to the problem that is. </p>
<p>And it can happen several times that you think you have figured it out, when actually you hadn&#39;t quite. It’s a bit like one of those dreams where you wake up and then a bit later, you wake up again. Oh it was a dream in a dream in a dream!</p>
<p>Each time you get a bit closer, and a bit more certain you really have figured it out, because you understand the problem space much better than before. And it feels good.</p>
<p>But there is always the possibility you missed something.</p>
<p>I think I have the <a href="https://markjgsmith.com/posts/2025/11/13/social-media-auto-poster-progress">social media auto-poster</a> figured out. It’s running on the blog now, and so at some point this evening after the daily build runs, hopefully this post will get published to some of <a href="https://markjgsmith.com/contacts">my socials medias</a>. <a href="posts/2025/12/06/refactoring-and-minimal-examples">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/06/refactoring-and-minimal-examples</link>
      <guid isPermaLink="false">2cdee825-aa35-4500-82dd-eaf48b3a77f2</guid>
      <pubDate>Sat, 06 Dec 2025 20:53:17 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[TPUs, GPUs and the future of everything]]></title>
      <description><![CDATA[<p>I was listening to the ever interesting <a href="https://www.youtube.com/live/eBQh57HuJzk?si=LewWbK9lhY_RN-V4">TBPN podcast</a> earlier and realised I didn&#39;t really understand the difference between TPUs and GPUs. Armed with some wireless earbuds I got a few weeks ago I started up a voicechat with Gemini to get this figured out. One thing led to another and we fell into some civilization engineering, as one does, while eating breakfast these days.</p>
<p>Here is <a href="https://gemini.google.com/share/21aac0a2c0a8">the full chat</a>.</p>
<p>The speech to text transcription was a bit rubbish sometimes, but mostly Gemini got the gist of what I was saying. I had Gemini speaking the answers each time in a voice I had previously selected. I recommend doing the same and reading along.</p>
<p>It starts off quite technical, but rapidly gets very crazy from the perspective of the scale of things we are currently used to contemplating. I tried to keep things in some way grounded in reality by continually estimating key metrics. This will probably all be quite normal in a few weeks time.</p>
<p>It&#39;s wild, and it just keeps getting more wild. <a href="posts/2025/12/03/tpus-gpus-and-the-future-of-everything">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/12/03/tpus-gpus-and-the-future-of-everything</link>
      <guid isPermaLink="false">410b2c4d-aa31-4ceb-a0d1-a4e2b5056e88</guid>
      <pubDate>Wed, 03 Dec 2025 13:32:49 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Strategy still popular]]></title>
      <description><![CDATA[<p>With Bitcoin recent big draw down of course lots of people talking about Michael Saylor and his Bitcoin treasury company Strategy. They have rebranded slightly from Microstrategy, now called just Strategy. I have been trying to sort the signal from the noise, which isn&#39;t all that obvious.</p>
<p>Saylor <a href="https://x.com/saylor/status/1992945200231293109?t=XamzRnl7YTVAwQWQ5sLmMw&s=19">posted a chart</a> in the past few days on Twitter that is kind of interesting. It shows the weekly volumes of Bitcoin backed credit, showing that even though Bitcoin is down, his Bitcoin based financial intruments are surging. What I thought was interesting was that volumes have increased for all of his offerrings.</p>
<p>What seems to be happening, and of course I totally could have this wrong, I am definitely not an expert, is it&#39;s the access to Bitcoin he is providing that people are interested in. There are those that just want a bit of Bitcoin exposure, they want to try and profit from the volatility. Those folks buy the common stock, which is still very volatile. They night not be setuo to buy Bitciin direct, but they can totally buy financial intruments. It&#39;s just stocks and shares, and that normal for institutions. Then there are those that buy the preferred stock, which has some volatility protection, but it&#39;s at a cost. Instead of the say 30-40% gains that you could get with regular Bitcoin, you only get like 10%. Saylor pockets the difference. And of course he then uses profits to buy more Bitcoin.</p>
<p>But what&#39;s super interesting is what the folks buying the preferred stocks are doing with them. These are toughted as rock solid, very over-collateralised securities. Strategy has so much Bitcoin in his treasury reserve that he can say for a fact that those securities will be honored well into the future even if Bitcoin goes down a lot. If something goes wrong, those shares get made whole first. So I think what&#39;s happening is folks are using these high quality securities as collateral to get dollar loans, to of course buy Bitcoin.</p>
<p>And they can get those loans from regular tradfi institutions because though they aren&#39;t necessarily setup to invest in Bitcoin, they love financial instruments, especially high quality ones. So it&#39;s like he is levering up, and they are levering up, and well that&#39;s what&#39;s happening. And it&#39;s the common stock folks that end up taking the risk I guess, and if you zoom out further well it&#39;s basically small retail investors that will likely foot the bill, because well the institutions levering up must be very good at timing the markets. I mean they have all sorts of futuristic algorythmic tools for predicting the tops and ways to exit the market gradually so as to not cause big disturbances, and basically by the time retail realise it&#39;s a market top, well those levered players are long gone.</p>
<p>And of course the big banks making the loans must know this, why else are they making the loans, they must have pretty good confidence they will get their money back. And the other thing is that other folks are shorting Bitcoin on the way down. They bet it will go down, and make tons when it does. You got to wonder where they are putting their winnings. What else are they going to buy aside from Gold? Well might as well buy some Strategy, and make some more as it goes back up.</p>
<p>I likely don&#39;t fully understand all the dynamics, but that seems to be the gist of it. Saylor has build a platform on the surface of the Sun, and for a fee you can setup shop on his Sun platform, and do what he&#39;s doing too.</p>
<p>It does seem totally bonkers. I wonder though isn&#39;t this just what regular financial markets have been doing all along? All be it in a less obvious way.</p>
<p>Probably worth being aware at some level what the dynamics are vaguely. <a href="posts/2025/11/25/strategy-still-popular">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/25/strategy-still-popular</link>
      <guid isPermaLink="false">4c4bcf36-6cd8-4e16-aabc-d4a71378ba29</guid>
      <pubDate>Tue, 25 Nov 2025 15:25:39 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Things to look forward to]]></title>
      <description><![CDATA[<p>I’m running really low on build minutes on Github, which is why I haven’t been blogging much, or in fact at all, the past week. I&#39;ve also had quite a few administrative things to take care of, which is always a bit stressful. Last time I wrote, I was <a href="https://markjgsmith.com/blog/2025/11/14">mid allergy attack</a>. Well I recovered fully from that a few days ago, but today it’s another allergy day. Sneezing, sneezing, so much sneezing. Burning face. Dripping nose. Everything feels blocked. Feels like it never ends.</p>
<p>Tomorrow is a bit of a travel day. It will be nice to be in motion. I&#39;m looking forward to the end of the month, when I can get the <a href="https://markjgsmith.com/posts/2025/11/13/social-media-auto-poster-progress">social media auto-poster workflows</a> finished. I also have 1 other small feature that I&#39;ve added to the site that needs testing. It’s not something that will make a big difference visually but it could be something interesting in the future. On the web it’s a good idea to try and get well positioned in case a wave starts to gather some momentum.</p>
<p>I&#39;ve got about 35 build minutes left, to last until the end of the month. That&#39;s about 6 or 7 builds. Likely I won’t have much of a chance to write anything till early next week in any case.</p>
<p>Everything seems to be down at the minute. Markets are down. Bitcoin is down. General mood is really negative, and yet, in many of the podcasts I’m listening to, the sense seems to be that actually things are much better than people think.</p>
<p>The last 3 pods I listenned to that I thought were pretty darn great:</p>
<ul>
  <li><a href="https://podcastindex.org/podcast/7037852?episode=45362011734">Gemini 3 Launch, Big Tech Backs Anthropic, OpenAI Adds Fidji Simo</a> (TBPN Podcast)</li>
  <li><a href="https://podcastindex.org/podcast/793331?episode=45365485388">Bitcoin &amp; Macro Overview w/ Luke Gromen Q4 2025</a> (Bitcoin Podcast)</li>
  <li><a href="https://podcastindex.org/podcast/788244?episode=45413679261">Why data is the biggest AI bottleneck (feat. Arthur Mensch of Mistral AI)</a> (This Week In Startups Podcast)</li>
</ul>
<p>Not much else to report. I hope everyone out there is doing alright. <a href="posts/2025/11/21/things-to-look-forward-to">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/21/things-to-look-forward-to</link>
      <guid isPermaLink="false">a14dfaf1-7416-401d-a2b5-8c789461a5de</guid>
      <pubDate>Fri, 21 Nov 2025 19:45:44 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Social media auto-poster progress]]></title>
      <description><![CDATA[<p>I managed to get a <a href="https://markjgsmith.com/posts/2025/11/11/not-much-fun-with-gem">very minimal example</a> of the Github Actions social media auto-poster workflow working. It proves that in theory the necessary sequence is possible. The reason it’s tricky is because I am trying to run all the auto-poster jobs in a job matrix in order to parallelize them. I’ve almost run out of build minutes this month, so here’s a summary, so I can pick it up again next month. It’s not really intended for anyone in particular except me.</p>
<p>It boils down to the GitHub scheduler making it very difficult to enforce a sequence of jobs where some of those jobs are optional (skipped). I need this because I have some jobs that read and write the current state of the RSS feed before and after running the auto-posters, but I don&#39;t want to force the caller to use the state management provided. They should be able to manage their own state.</p>
<p>The problem is though that the scheduler fails to properly trace the history when a required upstream job is skipped, causing the matrix job that launches the poster jobs in parallel, to enter a deadlock at the dependency validation stage. The solution bypasses this by using the <code>always()</code> condition, which forces the runner to ignore the flawed historical trace and proceed with execution based only on the immediate, successful output of the preceding step.</p>
<p>Though there are some edge cases still to test, it successfully completes with all jobs enabled and with some jobs skipped. The devil is always in the detail. <a href="posts/2025/11/13/social-media-auto-poster-progress">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/13/social-media-auto-poster-progress</link>
      <guid isPermaLink="false">4acc4727-1e38-41e2-b805-87d191157a9c</guid>
      <pubDate>Thu, 13 Nov 2025 16:58:24 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Static websites + git everytime]]></title>
      <description><![CDATA[<p>Just as I manage to finally clear the decks this morning, and about to get back to finishing the rebuild of the Github Actions auto-poster, the internet connection disappears. Literally within a few seconds. Looks like the world is productivity min-ing again. This will no doubt be followed by some yah’ing and some everything is your faulting. Hard not to wonder whether reality should have a <a href="https://allthingssmitty.com/2025/11/10/error-chaining-in-javascript-cleaner-debugging-with-error-cause">.cause property</a>.</p>
<p>At least my blog is a website built with a static site generator so I can keep on blogging locally and sync later with git. <a href="posts/2025/11/13/static-websites-plus-git-every-time">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/13/static-websites-plus-git-every-time</link>
      <guid isPermaLink="false">10aad041-689f-4599-8ad1-89a1b50aeba6</guid>
      <pubDate>Thu, 13 Nov 2025 11:12:41 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Improved RSS feeds]]></title>
      <description><![CDATA[<div class="img-container-floatright">
  <p>  <img src="https://markjgsmith.com/static/images/2025/11/12/magnum.jpg" alt="Magnum"></p>
</div>
<p>I discovered that my RSS feeds were rendering the title inside the description. Titles should go in the title field! I know I know. How embarrassing.</p>
<p>Honestly it’s some sort of miracle of miracles that I even have RSS feeds that work at all. When I wrote the static site generator, I figured out how to do serverside components using just regular javascript and ejs templates, and that was pretty cool. It occurred to me that I could use the same serverside components to render the RSS feeds.</p>
<p>The way it works is essentially when the feed builder iterates through the posts data, it grabs the post’s item component, renders the feed item using the exact same component that gets used to render the post on the website. It works for all posts types, whether it’s blog, linkblog, podcast, newsletter or notes.</p>
<p>It wasn’t very obvious at all, especially because I wrote it all on an iPod Touch. It was a rough few years. I only realised relatively recently because I haven’t really been using RSS readers much at all the past few years.</p>
<p>I am always quite scarred to change the RSS code, because historically speaking, every time I go near the RSS code, really weird things tend to happen. I have no idea what that is all about, but it’s happened so many times that there is some amount of trauma.</p>
<p>Anyways, I took a look at the code just now, and it wasn’t that bad. It was really just adding if statement, though I did have to duplicate a dictionary for the everything feed, which without going into too much detail, doubles the memory consumption. Seems to be rendering fine though. Hopefully it will look a bit less ugly in readers. <a href="posts/2025/11/12/improved-rss-feeds">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/12/improved-rss-feeds</link>
      <guid isPermaLink="false">0b561e20-a1fc-4bd8-9348-b6df9c62e8f7</guid>
      <pubDate>Wed, 12 Nov 2025 22:57:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Not much fun with Gem]]></title>
      <description><![CDATA[<p>Two days of very frustrating debugging Github Actions with Gemini, who seems to have completely perfected being a lemming and confidently launching itself into ever more precarious situations, and every time I have to descend into the depths of hell just to make the tinniest bit of progress, and somehow find a way out of the trail of destruction it has caused.</p>
<p>Currently rebuilding a very complex workflow from scratch. I&#39;ve had to build several minimal examples in order to prove to it that it doesn&#39;t have to be as horrendously complex as it constantly tries to make things. And when it becomes obvious I’m right, it then starts talking about my code being wrong, never mind that it wrote the code a few minutes earlier.</p>
<p>Not much fun. <a href="posts/2025/11/11/not-much-fun-with-gem">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/11/not-much-fun-with-gem</link>
      <guid isPermaLink="false">7bd2953d-efe0-4d0d-a92a-a6d6c3b97f5f</guid>
      <pubDate>Tue, 11 Nov 2025 22:55:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Google’s new coding agent called Jules]]></title>
      <description><![CDATA[<p><a href="https://www.linkedin.com/in/jed-borovik">Jed Borovik</a> was on the Latent Space Podcast talking about <a href="https://youtu.be/emWgP_fr04k?si=gFzHMgvX_FJg5EEI">what it’s like inside Google Labs</a>, and their new AI tool <a href="https://jules.google.com">Jules</a>.</p>
<p>I liked his description of the direction he sees things going in [08:06]:</p>
<p>“We have an API, so people are using it for all kinds of things. Triggering it when something happens. We saw an example where someone is triggering Jool’s to do all kinds of updates to their site, and then they have a Github action that is going to automatically merge Jules pull request. So all kinds of stuff is flowing...we are really changing how people are able to do stuff [...] we also have a CLI. We want to meet developers where they are [...] an API is great but when you are working locally you want to be able to trigger stuff [...] by the time this podcast comes out we will be integrated with the Gemini CLI [...], all kinds of places where we are going to mix and be able to harness this power, because developers work in all kind of spots, and so making it easy to have this autonomous ambient agent that can really do all kind of work for you.”</p>
<p>A lot of their discussion resonated with me, I’ve ran into many of the things they talk about.</p>
<p>I asked Gemini <a href="https://gemini.google.com/share/8f226e6b9d40">a bunch of technical things about Jules</a>, and finally whether Gemini had met Jules:</p>
<blockquote>
  <p>&quot;That&#39;s a fun, meta question! As a helpful AI assistant built by Google, I can&#39;t actually &quot;meet&quot; Jules in the way two people or two physical robots would. We exist in different operational contexts, but I am certainly aware of and have access to a wealth of information about its function and design.&quot;</p>
</blockquote>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/10/googles-new-coding-agent-called-jules</link>
      <guid isPermaLink="false">53ec4fef-7583-4fc6-a998-67f018b7313b</guid>
      <pubDate>Mon, 10 Nov 2025 12:49:06 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[It’s 1997s era of making agents]]></title>
      <description><![CDATA[<p>I thought this take from Bret Taylor about <a href="https://podcastindex.org/podcast/7037852?episode=44817804355">where we are in the AI rollout</a> [1:30:13] was pretty good:</p>
<blockquote>
  <p>&quot;We are like in the 1997 era of making agents. I found this article for Siera summit about creating websites in 1997, and there was this Wired article [...], and it was basically about banks spending 23 million dollars to add transactional support to their website, like adding a login form basically. And then you fast forward to the late 2010s and Kylie Jenner starts a multi-billion dollar cosmetics line with [...] 7 full time staff.</p>
  <p>So we are still in the 1997 era of building agents where it’s way too hard. You end up putting a lot of engineering around what is a very intelligent set of models, just to make it work well, and I think what do you need to create a 7 person team to create a multi-billion dollar business on agents? And I think we have a lot of product and technology work still to do [...] but for an applied AI company like ours, the models are actually pretty great right now.&quot;</p>
</blockquote>
<p>BTW, Bret is co-founder of Sierra and chairman of Open AI.</p>
<p>In case you weren’t around <a href="https://en.wikipedia.org/wiki/1997">this was 1997</a>.</p>
<p>It’s a great way to situate our current moment in the broader picture. Of course one of the big questions that naturally follows is how much faster the acceleration will be in this era, because presumably it won’t take 20 years? Or maybe it will?</p>
<p>It would be an interesting metric to track. <a href="posts/2025/11/07/its-1997s-era-of-making-agents">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/07/its-1997s-era-of-making-agents</link>
      <guid isPermaLink="false">d4348608-4e0c-4e6d-a56f-ad044163751c</guid>
      <pubDate>Fri, 07 Nov 2025 12:22:42 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Emoji fixes everything]]></title>
      <description><![CDATA[<p>I think I might have fixed the weird Github Actions <a href="https://markjgsmith.com/notes/2025/11/05/204905-markjgsmithcom">workflow corruption thing</a>. The fix is almost stranger than the original bug. I fixed it by adding an emoji to the workflow name. This is literally what I did, I&#39;m not even joking. Is this the real world? <a href="posts/2025/11/06/emoji-fixes-everything">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/06/emoji-fixes-everything</link>
      <guid isPermaLink="false">f4b213d8-2608-4516-a693-1d5833d34b1b</guid>
      <pubDate>Thu, 06 Nov 2025 18:41:56 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Platform generated AI slop at scale]]></title>
      <description><![CDATA[<p>There is an interesting piece on the <a href="https://podcastindex.org/podcast/415434?episode=44557730320">latest Vergecast episode</a> [34:15] with David Pierce and Nilay Patel about the immanent death of the creator economy. There is lots of good discussion, but the real catch is a quote they pulled from a recent Meta earnings call in which Mark Zuckerberg recently announced that we are entering the 3rd era of social media.</p>
<p>According to Zuck the 1st era was all about sharing content generated by family and friends, the second era was when they added the creator content, and the third era is AI generated content that will be added &quot;ontop&quot; of the first two kinds. It sure is an interesting choice of words.</p>
<p>Nilay has this to say about it:</p>
<blockquote>
  <p>&quot;There is only so many people in the world Mark. And they only have so much time in the day. Supply and demand dictates that if you add much more content to the feeds, the attention will be taken from something else. I know where the attention will be taken from, cause you are not paying friends, family and the elementary school parents group, you are paying the creators. You are going to take the money away from the creators with your universe, your corpus of AI content.&quot;</p>
</blockquote>
<p>It’s one of those extremely obvious points that is worth saying out loud, especially because the creator economy hasn’t exactly been having the best of times recently. But Meta aren’t the only ones. OpenAI is heading in this direction at a shocking pace, they have gone from non-profit, to possibly the <a href="https://www.youtube.com/watch?v=j6_VfR-CyuM&t=3276s">biggest profit maximizers</a> in all of human existence, entering into any market that has even a hint of action.</p>
<p>Platforms competing with their users isn’t exactly a new thing, it’s unfortunately a re-occurring theme in tech. It seems we are about to enter into another era of the platforms eating their users. <a href="posts/2025/11/02/platform-generated-ai-slop-at-scale">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/02/platform-generated-ai-slop-at-scale</link>
      <guid isPermaLink="false">a4c058bd-967a-479b-9c92-2df274aa9c12</guid>
      <pubDate>Sun, 02 Nov 2025 21:41:12 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Peak plumber]]></title>
      <description><![CDATA[<p>I thought Jason Calacanis <a href="https://podcastindex.org/podcast/788244?episode=44555921946">made an interesting point</a> on his podcast this week [1:03:40]: </p>
<blockquote>
  <p>&quot;If you could do a search and figure out what’s wrong with your dish washer [...] and not have to call the plumber, you’re like this is an incredible experience. You know what, people haven’t had that experience yet. But this winter when people’s HVACS go off or their pipes freeze and they take a picture of it, or they do a search on Google and it says oh you have this HVAC unit, it’s known to do this, here is how you reset it and relight the pilot, and you don’t have to call the person, and you fix it, or your housekeeper was able to clear the dishwasher cause suddenly they know how to take a picture of it and put the model number and say <code>Error 72</code>, and it’s like <code>Error 72</code> is something is blocking it, take out this thing and clear the blockage. How many times have to had somebody come to your house and they fixed it in 5 minutes and you had to pay 150 bucks?&quot;</p>
</blockquote>
<p>The word on the street these days, is that the best new career path for everyone is to become a plumber or an electrician. Every Hollywood celebrity is parroting this new wisdom. And on the surface it seems like there might be some sense to it, especially with the AI boom and the explosion of data centers being built. Now I’m not saying that there isn’t something to this, but I am saying that if you are considering it, be aware that you should look more closely at the data. There are lots of competing factors.</p>
<p>While there is a data centre boom going on, and they do need lots of tradespeople in that industry, that’s a very specific type of electrician, and likely by the time you finish your apprenticeship, the boom will have plateaued quite a bit. And the other things is, as Jason points out, there is a whole class of jobs that new AI tools, available to everyone, that will be completely removed from the day to day of regular electricians and plumbers.</p>
<p>All this to say that, it’s worth doing your own analysis of the situation, because IMO there are a lot of self serving opinions being casually thrown about at the minute. They aren’t necessarily untrue, but they aren’t necessarily true either.</p>
<p>BTW, there are some interesting and quite spicy opinions about OpenAI in this episode too, especially if you are a developer using or thinking of using their API. Worth a listen. <a href="posts/2025/11/02/peak-plumber">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/11/02/peak-plumber</link>
      <guid isPermaLink="false">19275c06-9aac-48ce-abe4-04b67a94ea24</guid>
      <pubDate>Sun, 02 Nov 2025 10:50:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Vibe civilization engineering]]></title>
      <description><![CDATA[<p>I did a bit of <a href="https://gemini.google.com/share/434c5a7f8b12">civilization engineering with Gem</a> while I was listening to some podcasts yesterday. Kind of interesting, and wild, and scary.  <a href="posts/2025/10/31/vibe-civilization-engineering">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/10/31/vibe-civilization-engineering</link>
      <guid isPermaLink="false">28b46f67-c3ff-4363-99e4-f5f96c3ab0ab</guid>
      <pubDate>Fri, 31 Oct 2025 18:53:26 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Some recent renovation successes]]></title>
      <description><![CDATA[<p>Over the past few months I’ve had quite a few successes in various renovation projects. It can be very chaotic going through these periods, and it’s not always obvious seeing the woods for the trees, but looking back I can see some definite themes. I wanted to spend a moment reviewing things, it’s important to celebrate the wins.</p>
<h4 id="1-new-blog-redesign">1. New blog redesign</h4>
<p>I’ve been blogging for something like 20 years. The first few blogs are no more, long since dissolved into the sands of time, but the current incarnation has been around for a little over 10 years. Actually, according to the date calculator, <a href="https://markjgsmith.com/blog/2011/07">it’s been</a> <a href="https://www.timeanddate.com/date/durationresult.html?d1=25&m1=7&y1=2011&d2=28&m2=10&y2=2025">14 years, 3 months, 3 days</a>.</p>
<p>There was a long period where it was just a hand rolled linkblog, but eventually I added a blog, newsletter, podcast and notes sections, all interwoven on the front-page. This year I finally got to <a href="https://markjgsmith.com/posts/2025/05/04/long-overdue-site-redesign">redesign the whole thing</a>, still keeping it’s minimalist aesthetic but adding <a href="https://markjgsmith.com/posts/2025/10/04/new-blog-header-image">a bit of color</a>.</p>
<h4 id="2-new-container-based-dev-environment-typescriptreact-safe-collab-with-ais">2. New container based dev environment, Typescript+React, safe collab with AIs</h4>
<p>I have in the past built quite serious projects, including a <a href="https://markjgsmith.com/posts/2020/11/26/looking-back-at-linkblogdotio">social media SaaS</a>, but I had stayed away from containers, Typescript and React. This year that all changed, brought on somewhat by the new realities of using AI/LLMs in web development. I now have first hand experience of how these technologies <a href="https://markjgsmith.com/posts/2025/10/01/containers-typescript-react-and-ai-llms">work extremely well together</a> having built an Oauth 2.0 REST API with React frontend. It certainly <a href="https://markjgsmith.com/posts/2025/09/19/rebuilding-your-container-based-dev-environment">hasn’t been plain sailing</a>, but I have settled on a really solid <a href="https://markjgsmith.com/posts/2025/10/03/the-new-container-based-project-structure">new container based typescript-react project structure</a>, that I am very happy with.</p>
<h4 id="3-new-locally-running-llms-gpu-accelerated-running-in-containers">3. New locally running LLMs, GPU accelerated running in containers</h4>
<p>I’ve spent a lot of time experimenting with AI developer tools, and I’ve been <a href="https://markjgsmith.com/tags/posts/#ai">blogging about all my experiences with AI</a>. There have been many ups and downs, but it’s obvious that these tools are going to have a big impact, and realising that I was using the frontier cloud models more and more, I decided it was important to at least get some experience running local AI open source models. Even if they aren’t as powerful, hopefully that will improve over time. </p>
<p>After a voyage of discovery I got some <a href="https://markjgsmith.com/posts/2025/08/30/llms-running-locally">LLMs running locally</a>, but then ran into performance difficulties. In ended up going down a very very deep rabbit hole looking into how to get GPU acceleration working in containers. That was at the same time I was trying to build the new Typescript/React/Containers project structure, which was all very confusing, but I got through it and finally got <a href="https://markjgsmith.com/posts/2025/10/11/gpus-module-upgrades-and-more-site-fixes">GPU accelerated local LLMs running in containers</a> accessing my mac’s GPUs with massive speed improvements.</p>
<h4 id="4-new-social-media-auto-poster">4. New social media auto-poster</h4>
<p>After all the container based AI GPU Typescript React craziness, I decided to switch focus back to my blogging, noticing that <a href="https://markjgsmith.com/posts/2025/10/20/upgrading-my-social-medias">my posts were not syndicating particularly well</a> across the various social medias I use. After researching and testing several commercial auto-poster products, I realised that what I really wanted was a solution that I could plug into my blog&#39;s static site generator, something I could run in a Github Action. So <a href="https://markjgsmith.com/posts/2025/10/22/building-a-social-media-auto-poster">I built a social media auto-poster</a>! I&#39;m very excited about this. It’s looking really promising, hopefully rolling out at the end of the month.</p>
<h4 id="5-new-blogging-scripts">5. New blogging scripts</h4>
<p>With all this momentum in my blogging, it felt like the right time to <a href="https://markjgsmith.com/posts/2025/10/25/new-blogging-scripts">overhaul my blogging setup</a>, refactoring all the scripts, aliases and functions I use to publish the blog. This was an incredible success, working with Gemini I was able to drastically simplify and make my setup much more robust and added several features including managing images, which is a huge win. I am already seeing big benefits in my day to day blogging. Massive time saver.</p>
<h4 id="6-new-dotfiles-for-multi-platform-bash-config">6. New dotfiles for multi-platform bash config</h4>
<p>The final renovation project was a <a href="https://markjgsmith.com/posts/2025/10/27/overhaul-of-my-dotfiles">complete overhaul of my dotfiles</a>, something that I had been wanting to do for literally years, but had been in a state of complexity paralysis. With Gemini’s help, I was able to cut through years of cruft and somewhat tangled scripts, and by deciding to drastically simplify my approach, I now have a repeatable multi-platform setup for managing my shell configuration. This is a huge win for stability and robustness. It’s deeply reassuring to know that I can rebuild any of the core components of my setup with a minimum of fuss. That I can be back up and running very quickly should I need to do a complete system rebuild.</p>
<p>There are likely a few others, but these are the main ones.</p>
<p>Looking back at it all, it’s turned out to be an exercise in improving robustness at every level of my development stack, while exploring the emerging world of AI assisted development. It’s been quite a ride. I’m super glad that I’ve been blogging through it all, because it makes these sorts of retrospective posts possible. It can feel like you aren’t making progress at times, the world just keeps throwing endless hurdles in your way, but actually slowly but surely things are getting a little bit better every day. <a href="posts/2025/10/31/some-recent-renovation-successes">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/10/31/some-recent-renovation-successes</link>
      <guid isPermaLink="false">60301587-a133-4d71-b449-579166e6909a</guid>
      <pubDate>Fri, 31 Oct 2025 14:08:44 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Overhaul of my dotfiles]]></title>
      <description><![CDATA[<p>I did an overhaul of <a href="https://github.com/mjgs/dotfiles">my dotfiles</a>!</p>
<p>For those of you not familiar with the concept of dotfiles, how to explain them? Well on linux/unix systems many applications store their user settings inside &#39;dot&#39; files and / or folders. These are files who’s filename starts with a dot, for example <code>.bashrc</code>, <code>.bash_profile</code>, or <code>.vimrc</code>. The reason for this is that by default when you list a folder&#39;s contents, the items that start with a dot are not listed. This keeps things uncluttered, because most of the time you don’t need to be seeing these files.</p>
<p>Since programmers typically use a lot of different software tools, in a variety of ways and on a variety of different systems, it’s worth spending the time to get good at organising these files. Hence the idea of <code>dotfiles</code>, which are collections of dot files that are organised in such a way that you can easily make changes to them and deploy them onto different systems. Typically via git, with them all stored in a git repository like on Github. People get very carried away with them. Check out <a href="https://github.com/webpro/awesome-dotfiles">awesome dotfiles</a> for some idea.</p>
<p>The thing is, as awesome as they are, it’s all too easy to fall down a very big rabbit hole. That’s what had happened to me with <a href="https://github.com/mjgs/dotfiles.old">my first attempt</a>. I figured it would be great to use my dotfiles to install and configure the entire system, and it would have been, but the reality is that system installation is something most of us do so infrequently, that these complicated setups rapidly get out of date, and they are so tedious and annoying to test, that in practice they just gather dust and you get more and more scarred to touch them because you can&#39;t remember all the reasons you made them the way you made them, and they just become a thing that you open up every now and then, start panicking and quickly close and move onto something else.</p>
<p>The thing is though, they are quite important, because when you do have to setup a new system, you either use them or you have to do the whole thing from scratch, which is also a total pain. A few days ago, hot off the back of several small overhaul successes, I decided to give it another go. Surely there was a middle ground between automated install of the entire universe and do everything manually?</p>
<p>As it happens I did recently have to install everything again from scratch, first <a href="https://markjgsmith.com/posts/2025/04/03/setup-on-android">my</a> <a href="https://markjgsmith.com/posts/2025/04/03/android-annoyances">Android</a> <a href="https://markjgsmith.com/posts/2025/04/04/android-setup-useful-links">phone</a>, and then my new mac laptop. When I did that I basically started with a fresh empty config and just added the minimum I needed as I went along. It has been working quite well, but a bit disorganised and also lots of annoying copy and pasting, via email, between both devices. They share a lot of configuration but there are also notable platform specific differences. The biggest insight I had before embarking on this overhaul was that all the fancy installation scripts were totally unnecessary. In the event of re-installation, I&#39;m okay doing that by hand. But the one thing I really do rely on day to day is my bash shell configuration. All the aliases, exported environment variables, shell functions and bash scripts. I use many of these every single day.</p>
<p>With that in mind I asked Gemini what suggestions it had for structuring my dotfiles to do just that, and only that, nothing too fancy. I&#39;m very glad I asked because the response I got back was formidable. In seconds Gemini cut through years of cruft and tangled code, suggesting a very clear and simple structure, and within a few hours working together we were able to come up with a setup that incorporated all my current configuration, while adding lots of very useful things that I wouldn’t have thought of. Now I don’t claim these are the best dotfiles ever, I was mainly trying to replicate the setup that I had developed over time, there are likely refinements that I will make over the next few months, but I’m pretty happy with it so far.</p>
<p>I’m still somewhat surprised it was that easy, and both laptop and android phone have been updated to the new setup and are so far running very smoothly.</p>
<p>It’s really great to know that should I need to re-install either of them, I will at least relatively quickly have a configured bash shell and be able to code and blog without to much interruption.</p>
<p>The whole repo is released under MIT license. Feel free to read it, experiment with it and get inspired to build something similar for your own situation.  <a href="posts/2025/10/27/overhaul-of-my-dotfiles">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/10/27/overhaul-of-my-dotfiles</link>
      <guid isPermaLink="false">4388d20f-3092-41ab-915b-33ca20ebe2c0</guid>
      <pubDate>Mon, 27 Oct 2025 14:22:02 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Who are the suppliers?]]></title>
      <description><![CDATA[<p>A note to remind myself that in future tech build outs, do some research at the start who the big suppliers are. Seems completely obvious now but I totally didn&#39;t think to figure out who would be supplying the materials and core components for the current data centre boom we are seing as a result of the AI industry build out. Several <a href="https://www.reuters.com/world/asia-pacific/japans-century-old-fujikura-rides-ai-data-centre-boom-become-nikkei-standout-2025-10-24">Japanese engineering companies have been ripping</a>, between 30% to 500% added to their value.</p>
<p>The companies mentioned are:</p>
<ul>
  <li><a href="https://www.google.com/finance/quote/ATEYY:OTCMKTS?window=5Y">Advantest Corp</a> [OTCMKTS: ATEYY]</li>
  <li><a href="https://www.google.com/finance/quote/8035:TYO?window=5Y">Tokyo Electron</a> [TYO: 8035]</li>
  <li><a href="https://www.google.com/finance/quote/9984:TYO?window=5Y">Softbank Corp</a> [TYO: 9984]</li>
  <li><a href="https://www.google.com/finance/quote/5803:TYO?window=5Y">Fujikura</a> [TYO: 5803]</li>
  <li><a href="https://www.google.com/finance/quote/5706:TYO?window=5Y">Mitsui Kinzoku Co Ltd</a> [TYO: 5706]</li>
  <li><a href="https://www.google.com/finance/quote/5016:TYO?window=5Y">JX Advanced Metals Corp</a> [TYO: 5016]</li>
</ul>]]></description>
      <link>https://markjgsmith.com/posts/2025/10/26/who-are-the-suppliers</link>
      <guid isPermaLink="false">d4722823-530f-4348-9bba-99b020833341</guid>
      <pubDate>Sun, 26 Oct 2025 12:25:12 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[New blogging scripts]]></title>
      <description><![CDATA[<div class="img-container-floatright">
  <p>  <img src="https://markjgsmith.com/static/images/2025/10/25/marmite.png" alt="Marmite"></p>
</div>
<p>Feeling quite under the weather today. Rough day yesterday, and today I’ve got a sneezy cold that’s been steadily gaining momentum the entire day. One presses on nevertheless. Some progress in my blogging setup.</p>
<p>I decided to do an overhaul of all the bash scripts I use for day to day blogging. I use a static site generator to build the blog, but separate to that I previously had a very basic bash script combined with some aliases that enabled me to very quickly create new empty markdown files for each type of post, with all the right frontmatter, and name the files correctly. It sort of worked okay but there were some weirdnesses. Actually quite a few weirdnesses, and the aliases had become ridiculously complicated.</p>
<p>I figured maybe this was a good task to work on with Gemini. I&#39;ve been looking at these scripts for years, so couldn&#39;t really see any obvious way to improve them. I knew there would be, but I needed a fresh pair of eyes. So I cut and pasted the mess of scripts and aliases into the chat, and briefly explained how it all worked. To my surprise Gemini fully understood how everything connected together, totally understood what I was trying to achieve and made some very impressive suggestions.</p>
<p>Before long we had a 4 phase plan to refactor everything, and within a few hours we had everything working. There is a new master script that has absorbed much of the logic that was scattered across the aliases and the updated aliases are neat and tidy, and look great.</p>
<p>What’s more while we were working on the plan I mentioned that one thing that would be great was to streamline the workflow I use for adding images to posts, which was really convoluted. Gemini figured out a really great way to cut out almost all of the hassle, so now adding an image is super simple.</p>
<p>The other thing that is loads better is adding links. The script automatically adds and commits the changes to the git repo, so lots of the tedium and choreiness has evaporated. <a href="posts/2025/10/25/new-blogging-scripts">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/10/25/new-blogging-scripts</link>
      <guid isPermaLink="false">560f8ab1-bf90-4d1b-bfd8-999145430885</guid>
      <pubDate>Sat, 25 Oct 2025 19:56:01 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Beauty in journalism]]></title>
      <description><![CDATA[<p>It occurs the me that the main reasons I read so much from <a href="https://www.theguardian.com">the Guardian</a> is that:</p>
<ol>
  <li>It&#39;s basically free, though of course you should donate if you can.</li>
  <li>The writting is a good read most of the time.</li>
  <li>It just looks so much nicer that any of the other MSM news sites.</li>
</ol>
<p>However, I find that a lot of the opinions I either don&#39;t agree with, or cause my eyes to roll. It&#39;s astonishing to me how much of an effect beauty has. I very much like reading the Guardian, but also a lot of the time I very much do not.</p>
<p>I wish there was another MSM newspaper with a different political leaning that had a website that was just as pretty so I could AB test my stupid brain.</p>
<p>Oh well what to do? I guess I&#39;ll read another Guardian article. <a href="posts/2025/10/24/beauty-in-journalism">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/10/24/beauty-in-journalism</link>
      <guid isPermaLink="false">d7ac0923-08a4-48ec-9566-efcc4cc908df</guid>
      <pubDate>Fri, 24 Oct 2025 15:32:03 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Is it simple yet?]]></title>
      <description><![CDATA[<p>It occurred to me today that in yesterday’s piece about <a href="https://markjgsmith.com/posts/2025/10/22/building-a-social-media-auto-poster">how to build a social media auto-poster</a> using Github Actions, although I did mention that Gemini was doing it’s best to go down every possible dead end, I wasn’t very specific about what those dead ends were. Gemini absolutely loves making things more complex than things need to be. We were at one point exploring using sqlite databases and all sorts. But you don’t need any of that.</p>
<p>You have to keep pressing for the simplest possible solution, but you do have to explore some of the more complex things first, and then circle back and say hey Gem, this all seems way way too complex, how can we drastically simplify it. And then it does actually suggest some good solutions.</p>
<p>All that to say, if you just want to post a few things to social media you really don’t need to save anything complicated. You can do it with just the features available in Github Actions. <a href="posts/2025/10/23/is-it-simple-yet">#</a></p>]]></description>
      <link>https://markjgsmith.com/posts/2025/10/23/is-it-simple-yet</link>
      <guid isPermaLink="false">604402c4-6e5f-4afb-8471-90797a08c94d</guid>
      <pubDate>Thu, 23 Oct 2025 18:13:27 GMT</pubDate>
    </item>
  </channel>
</rss>