﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>Dave Henry Blog</title>
		<link>https://davehenry.blog/</link>
		<description>The home of an ageing goth</description>
		<language>en-GB</language>
		<copyright>Copyright 2026</copyright>
		<managingEditor>dave@mort8088.com</managingEditor>
		<lastBuildDate>Mon, 07 Sep 2026 20:54:27 +0100</lastBuildDate>
		<generator>myPOSSE v0.0.2.0</generator>
		<image>
			<url>https://davehenry.blog/images/Me.webp</url>
			<title>Dave Henry Blog</title>
			<link>https://davehenry.blog/</link>
		</image>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/09/well-i-didnt-do-very-well-at-blaugust/</guid>
			<link>https://davehenry.blog/2026/09/well-i-didnt-do-very-well-at-blaugust/</link>
			<category>blogging</category>
			<category>blaugust2026</category>
			<category>xblog</category>
			<title>Well I didn&amp;#x27;t do very well at Blaugust.</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        
    &lt;/header&gt;    
    &lt;p&gt;Well it's September all of a sudden, and I managed 6 posts for Blaugust this year, ever so slightly down on last years 9 and way sort of my target 15.&lt;/p&gt;
&lt;p&gt;So what happened? I got stuck into working on XBlog is what happened, and let me tell you, I made less headway than I would have liked. But I now have a Feed reader I can expand on later and I'm actively using it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://davehenry.blog/images/xblog/Screenshot_2026-09-07_XBlog.webp"&gt;&lt;img src="https://davehenry.blog/images/xblog/thumb/Screenshot_2026-09-07_XBlog_thumb.webp" alt="Xblog Feed Reader Screenshot" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I've started working on the content creation side of things and that is going about as slow as the feed reader went. I keep writing things and then ripping them out, but I've got an idea where I'm going with it.&lt;/p&gt;
&lt;p&gt;If your thinking how are you saying you posted 6 time I only saw 4. That's because, If I don't repost to Mastodon and add the link reference to the front matter of the post then my SSG doesn't add it to the RSS feed. I made two posts marking Mum and Dads Birthdays, and I didn't feel like that was a thing I wanted to shout about, just quietly mark it in my own way.&lt;/p&gt;
&lt;p&gt;On a slightly happier note, the Wife and I went to &amp;quot;&lt;a href="https://www.yorkshirewildlifepark.com/"&gt;Yorkshire Wildlife Park&lt;/a&gt;&amp;quot; this past Friday and I got to see Red Pandas😂&lt;/p&gt;
&lt;p&gt;&lt;a href="https://davehenry.blog/images/photos/20260904-Red_Pandas.webp"&gt;&lt;img src="https://davehenry.blog/images/photos/thumb/20260904-Red_Pandas_Thumb.webp" alt="RED PANDAS!!! SO HAPPY!" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There was other stuff but, ya know, they're not red pandas so use your imagination.&lt;/p&gt;
&lt;p&gt;Any who, until next time.&lt;/p&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%20Well%20I%20didn%26%23x27%3Bt%20do%20very%20well%20at%20Blaugust."&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/117231487307966511" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Mon, 07 Sep 2026 01:00:00 +0100</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/08/2026-blaugust-04-bubbles-and-stuff/</guid>
			<link>https://davehenry.blog/2026/08/2026-blaugust-04-bubbles-and-stuff/</link>
			<category>blaugust</category>
			<category>blaugust2026</category>
			<category>indieWeb</category>
			<title>2026 Blaugust 04 - Bubbles and stuff</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        &lt;img src="images/covers/Blaugust2026.webp" alt="Cover Image" style="float: right; max-width: 320px;"&gt;
    &lt;/header&gt;    
    &lt;p&gt;The eagle-eyed among you may have spotted that I've add an upvote button above the comments section. Don't worry it's an IndieWeb thing not CorpoWeb thing. If you haven't heard of &lt;a href="https://bubbles.town/"&gt;bubbles.town&lt;/a&gt; then where have you been this past few months? 😉&lt;/p&gt;
&lt;p&gt;It's a place for discovering IndieWeb content a bit like a HackerNews for nontechnical blogs and articles.&lt;/p&gt;
&lt;p&gt;The problem I have is, I read in FreshRSS. I Think &amp;quot;I should boost this on Bubbles&amp;quot;, So I have to go check it is on Bubbles with their &amp;quot;&lt;a href="https://bubbles.town/check"&gt;Is a blog on Bubbles?&lt;/a&gt;&amp;quot; page. Then search for the title. Then I can upvote it.&lt;/p&gt;
&lt;p&gt;Seeing as I do get some traffic from bubbles.town:-&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Referrers for past 30 days, Successful GET requests only&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: right;"&gt;Count&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Referer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: right;"&gt;199&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://kagi.com/"&gt;https://kagi.com/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right;"&gt;&lt;strong&gt;22&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;&lt;a href="https://bubbles.town/"&gt;https://bubbles.town/&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right;"&gt;15&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="http://www.google.co.uk/url?sa=t&amp;amp;source=web&amp;amp;cd=1"&gt;http://www.google.co.uk/url?sa=t&amp;amp;source=web&amp;amp;cd=1&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right;"&gt;9&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://kagi.com/smallweb/"&gt;https://kagi.com/smallweb/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right;"&gt;5&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://www.google.com/"&gt;https://www.google.com/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://welshtroll.co.uk/"&gt;https://welshtroll.co.uk/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right;"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;&lt;a href="https://bubbles.town/new?p=3"&gt;https://bubbles.town/new?p=3&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right;"&gt;2&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://toot.wales/"&gt;https://toot.wales/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right;"&gt;1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;a href="https://www.newsblur.com/"&gt;https://www.newsblur.com/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I wanted a way for people to boost me but also to promote Bubbles at the same time. I found that they have an upvote button thingummy, so I've added it to my post template. I have an Idea how I can make this a thing in XBlog's feed reader but I'm not at that point yet, yet another feature for me to add later. 🤓&lt;/p&gt;
&lt;p&gt;One thing to note is that if the post isn't on Bubbles yet, The widget renders nothing at all. Once the post is imported via feed polling, the count shows up on the next page load.&lt;/p&gt;
&lt;p&gt;If you want to add it to your posts then you can find everything you need on the &amp;quot;&lt;a href="https://bubbles.town/embed"&gt;Embed the Bubbles vote count&lt;/a&gt;&amp;quot; page.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Foot note&lt;/strong&gt;&lt;/em&gt; - I have no idea how I got into Kagi, but I am psyched that I have😁 google can go do one🖕.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id="todays-earworm-is"&gt;Today's Earworm Is…&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Stupid Girl&lt;/strong&gt; - &lt;em&gt;Garbage&lt;/em&gt;
&lt;a href="https://www.youtube.com/watch?v=O9eNTgAuMls"&gt;YouTube&lt;/a&gt;
&lt;a href="https://open.spotify.com/track/4dC0fWZm8tU5dNdVutSMVP"&gt;Spotify&lt;/a&gt;
&lt;a href="https://soundcloud.com/garbageofficial/stupid-girl"&gt;SoundCloud&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Stupid Girl&amp;quot; features lyrics about a young woman's ambivalence and is a musical arrangement centred on a repetitive &lt;a href="https://en.wikipedia.org/wiki/Bassline" title="Bassline"&gt;bassline&lt;/a&gt; and a drum &lt;a href="https://en.wikipedia.org/wiki/Sampling_(music)" title="Sampling (music)"&gt;sample&lt;/a&gt; from &lt;a href="https://en.wikipedia.org/wiki/The_Clash" title="The Clash"&gt;the Clash&lt;/a&gt;'s 1979 song &amp;quot;&lt;a href="https://en.wikipedia.org/wiki/Train_in_Vain" title="Train in Vain"&gt;Train in Vain&lt;/a&gt;&amp;quot;.&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%202026%20Blaugust%2004%20-%20Bubbles%20and%20stuff"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/117100305124374389" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Sat, 15 Aug 2026 01:00:00 +0100</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/08/2026-blaugust-03-xblog-intro/</guid>
			<link>https://davehenry.blog/2026/08/2026-blaugust-03-xblog-intro/</link>
			<category>blaugust</category>
			<category>blaugust2026</category>
			<category>indieWeb</category>
			<category>cSharp</category>
			<category>homeDev</category>
			<title>2026 Blaugust 03 - XBlog Intro</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        &lt;img src="images/covers/Blaugust2026.webp" alt="Cover Image" style="float: right; max-width: 320px;"&gt;
    &lt;/header&gt;    
    &lt;p&gt;So I'm writing yet another CMS, well I'm hoping this will be the last one, &lt;em&gt;stop laughing&lt;/em&gt;. It's a system I've been thinking about for a while now. A single place I can go to interact with the IndieWeb. I've only just found out about &lt;a href="https://indieweb.org/social_reader"&gt;social readers&lt;/a&gt; and that's sort of the thing I want. But I also want it to work as my blog writing toolkit. Seeing as it's just a system for me I can make it the way I want so here is my current wish list for &lt;em&gt;&lt;strong&gt;XBlog - Dave's CMS&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="xblog"&gt;XBlog&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Feed Reader&lt;/strong&gt; I've been getting more annoyed with &lt;a href="https://www.freshrss.org/" title="FreshRSS, a free, self-hostable feeds aggregator"&gt;FreshRSS&lt;/a&gt; in the way it presents the posts and how you manage the feeds. Not to mention the way it makes me feel to see that I have over a hundred unread posts. I need to make my own reader.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Writer&lt;/strong&gt; I need an all purpose posting tool, so I can do Micro, Photo, longform, and any other sort of post with the frontmatter/meta data easily accessible from the post screen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bookshelf&lt;/strong&gt; I like to track the books I'm reading and I want something like what you get on &lt;a href="https://app.thestorygraph.com/" title="The StoryGraph"&gt;The StoryGraph&lt;/a&gt; but I want it on my site.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Videodrome&lt;/strong&gt; I like watching Films and TV shows and when I was doing the weekly updates I would list out the things I'd been watching. But it was a pain to go find the link to &lt;a href="https://www.justwatch.com/" title="JustWatch - The Streaming Guide"&gt;JustWatch&lt;/a&gt;. This is something that should be on my site.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Link Dump&lt;/strong&gt; I come across loads of sites and pages on the web that I'd like to share with people. But the days of using a &amp;quot;share on Facebook&amp;quot; button are long gone, but maybe I can just do it on my site.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blog Roll&lt;/strong&gt; You lovely people deserve to know the sort of things I have in my Feeds so I need a Blog Roll.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Webmentions&lt;/strong&gt; If I'm going to share links and mention people in my posts I need to be able to let the authors know I've done that, so…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Syndication&lt;/strong&gt; If I do keep my accounts on other sites and to be honest there are very few of them now. I should figure out how to syndicate my posts, I mean that was the whole point of myPOSSE.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bookmarklets&lt;/strong&gt; I have two of these that I use on the regular, one is for making a Markdown link for the site in the current tab, the other is for adding the RSS feed of the current tab to FreshRSS. There is also a plugin that I use to post the current tab to Mastodon, I'll need to make my own versions of them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server Synch&lt;/strong&gt; A feature I have in the current version of myPOSSE is that when it builds it can transfer the site to my server. I use it for sending the site to my UAT server for a last check to be sure I have no spelling mistaks. But I only send to a staging folder when it comes to going live because there are a few other things I do when I do that transfer. Like pulling down my logfiles for the log cutter. But XBlog could do all of that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server Stats&lt;/strong&gt; Speaking of pulling the logs and giving me my server stats maybe I can finally make the dashboard I've always wanted.&lt;/p&gt;
&lt;p&gt;All of this would live on my network because putting your admin functions on a publicly accessible site is asking for trouble and this is only ever going to be of use to me. So I can make it as polished or as janky as I can tolerate.&lt;/p&gt;
&lt;p&gt;The only limit to what I could do is what ever I can dream up. As for interacting with other sites and participating in the IndieWeb, well there are standards for all this you know.&lt;/p&gt;
&lt;p&gt;And to cap it all off I'll need a custom server, sort of, I'll need a server that can serve static pages and an API for some interactions.&lt;/p&gt;
&lt;h2 id="public-server"&gt;Public Server&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Static Site&lt;/strong&gt;
Nothing fancy just send the page as requested.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Comments&lt;/strong&gt;
It would be nice if people could leave comments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Webmentions&lt;/strong&gt;
If I can send them I should be able to receive them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Self Defence&lt;/strong&gt;
If you request a &lt;code&gt;php&lt;/code&gt; file or a &lt;code&gt;.env&lt;/code&gt; I will ban your IP address for 24 hours.&lt;/p&gt;
&lt;p&gt;At the moment this is just a laundry list of things I want to make, and I'll probably change my mind about some if not all of it. But in the end that's what I get out of being a part of the IndieWeb. I get to play with my site and how I make it real.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="song-for-the-post"&gt;Song for the Post&lt;/h2&gt;
&lt;p&gt;Today's Earworm is…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Numb&lt;/strong&gt; - &lt;em&gt;Linkin Park&lt;/em&gt;
&lt;a href="https://www.youtube.com/watch?v=kXYiU_JCYtU" title="Numb (Official Music Video) [4K UPGRADE] – Linkin Park - YouTube"&gt;YouTube&lt;/a&gt;
&lt;a href="https://open.spotify.com/track/2nLtzopw4rPReszdYBJU6h" title="Numb - song and lyrics by Linkin Park | Spotify"&gt;Spotify&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The song was mistakenly played in the friendly football match between &lt;a href="https://en.wikipedia.org/wiki/Malta" title="Malta"&gt;Malta&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Slovakia" title="Slovakia"&gt;Slovakia&lt;/a&gt; on September 5th, 2014, during which it temporarily replaced the &lt;a href="https://en.wikipedia.org/wiki/L-Innu_Malti" title="L-Innu Malti"&gt;Maltese national anthem&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;P.S.&lt;/em&gt; - During last nights weekly &amp;quot;&lt;a href="https://events.indieweb.org/2026/08/homebrew-website-club-europe-london-6EUccFK2vZSh" title="Homebrew Website Club Europe/London | August 12, 2026 | IndieWeb Events"&gt;Homebrew Website Club Europe/London&lt;/a&gt;&amp;quot; Zoom call, &lt;a href="https://jamesg.blog/" title="home ;; with words, wonder"&gt;James&lt;/a&gt; mentioned that I'd been adding these &amp;quot;Songs for the Post&amp;quot; and asked what inspires them.&lt;/p&gt;
&lt;p&gt;I had to admit that at the moment it's just whatever I have stuck in my head at the time.&lt;/p&gt;
&lt;p&gt;But I also had to confess to him that the likelihood of me ever including a Taylor swift song was nonexistent to which he pointed me to a post by &lt;a href="https://flamedfury.com/posts/taylor-swift-moshpit/" title="Taylor Swift Moshpit"&gt;flamed fury - &amp;quot;Taylor Swift Moshpit&amp;quot;&lt;/a&gt;. Nice 🤘😛&lt;/p&gt;
&lt;p&gt;I responded with another &lt;a href="https://www.youtube.com/watch?v=kCEq3-w8Ls4" title="Shake It Off (metal cover by Leo Moracchioli) - YouTube"&gt;Leo Classic&lt;/a&gt;&lt;/p&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%202026%20Blaugust%2003%20-%20XBlog%20Intro"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/117087019153662216" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Thu, 13 Aug 2026 01:00:00 +0100</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/08/2026-blaugust-02-fixing-problems-with-my-html/</guid>
			<link>https://davehenry.blog/2026/08/2026-blaugust-02-fixing-problems-with-my-html/</link>
			<category>blaugust</category>
			<category>blaugust2026</category>
			<title>2026 Blaugust 02 - Fixing problems with my HTML</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        &lt;img src="images/covers/Blaugust2026.webp" alt="Cover Image" style="float: right; max-width: 320px;"&gt;
    &lt;/header&gt;    
    &lt;p&gt;Okay, so I'm not off to a great start with Blaugust this year, I've not been sleeping very well and I've spent most evenings trying and failing to work on my next project. 🙁&lt;/p&gt;
&lt;p&gt;To that ends, while I was doing some testing for my current CMS I realised that I haven't been including any &lt;code&gt;&amp;lt;link rel=&amp;quot;alternate&amp;quot;&amp;gt;&lt;/code&gt;'s in my HTML. Making the feed discovery a pain. Sorry about that but someone should have told me I was being rubbish.&lt;/p&gt;
&lt;p&gt;Anyway this prompted my to go fix it in myPOSSE-Builder, and wouldn't you know it I broke it.&lt;/p&gt;
&lt;p&gt;Here's a tip for you after you implement a feature, update some libraries, or just change the logic in some inconsequential way, test your freaking code still works, and then commit it.&lt;/p&gt;
&lt;p&gt;It took me all day yesterday to work out that what I needed to do was stop reusing the &lt;code&gt;TemplateContext&lt;/code&gt; for &lt;code&gt;Scriban&lt;/code&gt;. I had it as a global in my &lt;code&gt;HtmlRepository&lt;/code&gt; class and something had changed somewhere in the execution chain. If I was parsing a Page object as apposed to a Post object calling &lt;code&gt;_parser.Parse(&amp;quot;base&amp;quot;, templateContext);&lt;/code&gt; silently returned an empty string. 🤬&lt;/p&gt;
&lt;p&gt;On the upside I did spen a bit of time fixing a load of HTML issues that I didn't know were there.
Like&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;DOCTYPE should be uppercase&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Attribute &amp;quot;lang&amp;quot; using unquoted value&lt;/em&gt;
This one was due to the &lt;code&gt;MinifyHtml&lt;/code&gt; function I was using, it was stripping the &lt;code&gt;&amp;quot;&lt;/code&gt;'s from attributes all over the place.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Landmarks must have a non-empty and unique accessible name (aria-label or aria-labelledby)&lt;/em&gt;
I have multiple &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; tags in my page so I need to label them.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Expected omitted end tag &lt;code&gt;&amp;lt;hr&amp;gt;&lt;/code&gt; instead of self-closing element &lt;code&gt;&amp;lt;hr/&amp;gt;&lt;/code&gt;&lt;/em&gt;
This also applies to &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Element id &amp;quot;&amp;quot; must not be empty&lt;/em&gt;
Turns out that I have been missing the id from the &lt;code&gt;article&lt;/code&gt; nodes in the homepage and the archive pages. Mainly because I hadn't added a slug property to the &lt;code&gt;pageMeta&lt;/code&gt; object 🫤&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Inline style is not allowed on &lt;code&gt;a&lt;/code&gt;&lt;/em&gt;, &lt;code&gt;img&lt;/code&gt;, &lt;code&gt;footer&lt;/code&gt; &amp;amp; apparently &lt;code&gt;p&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; is missing required &amp;quot;alt&amp;quot; attribute&lt;/em&gt;
Well, yes but I lazy… FINE! I'll fix the one I can find. 🙈&lt;/li&gt;
&lt;li&gt;I had one place where I got the tag order wrong &lt;code&gt;&amp;lt;strong&amp;gt;&amp;lt;em&amp;gt;bob&amp;lt;/strong&amp;gt;&amp;lt;/em&amp;gt;&lt;/code&gt; but that was just an oversight on my part.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short make sure you have an HTML Linter in your editor, if you use VS &lt;del&gt;Code&lt;/del&gt;Codium try &lt;a href="https://open-vsx.org/extension/Gydunhn/html-essentials/changes"&gt;HTML-Essentials&lt;/a&gt;
All this so that I can make the site feeds more discoverable. Now if your feed reader supports discovery of feeds from an HTML page my site should work now.😉😇🤓&lt;/p&gt;
&lt;h2 id="song-for-the-post"&gt;Song for the Post&lt;/h2&gt;
&lt;p&gt;I couldn't think of a song to fit with this post, so here's one that I get stuck in my head every now and then.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Toto - Africa (metal cover)&lt;/strong&gt; • &lt;em&gt;Leo Moracchioli feat. Rabea &amp;amp; Hannah&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://open.spotify.com/track/51oRbjy61jOZ6QHWQnvLHm" title="Africa (Metal Cover) - song and lyrics by Leo, Hannah Boulton, Rabea Massaad | Spotify"&gt;Spotify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=MH9FyLsfDzw" title="Toto - Africa (metal cover by Leo Moracchioli feat. Rabea &amp;amp; Hannah) - YouTube"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Leo Moracchioli&lt;/strong&gt; (born 10 October 1978 in &lt;a href="https://en.wikipedia.org/wiki/%C3%85lg%C3%A5rd" title="Ålgård"&gt;Ålgård&lt;/a&gt;) is a Norwegian musician. He is known for his metal &lt;a href="https://en.wikipedia.org/wiki/Cover_version" title="Cover version"&gt;covers&lt;/a&gt; of popular songs, which have gained him over 4.5 million followers on YouTube as &lt;strong&gt;&lt;a href="https://ap-frogleap.myshopify.com/"&gt;Frog Leap Studios&lt;/a&gt;&lt;/strong&gt;.
The Frog Leap band members are Leo Moracchioli (vocals and guitar), Hannah Boulton (female vocals), Erik Torp (bass), Rabea Massaad (guitar), &lt;a href="https://en.wikipedia.org/wiki/Circus_Maximus_(Norwegian_band)" title="Circus Maximus (Norwegian band)"&gt;Truls Haugen&lt;/a&gt; (vocals and drums).&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%202026%20Blaugust%2002%20-%20Fixing%20problems%20with%20my%20HTML"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/117065369779257312" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Sun, 09 Aug 2026 01:00:00 +0100</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/08/2026-blaugust-01-here-we-go-again/</guid>
			<link>https://davehenry.blog/2026/08/2026-blaugust-01-here-we-go-again/</link>
			<category>blaugust</category>
			<category>blaugust2026</category>
			<title>2026 Blaugust 01 - Here We Go Again</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        &lt;img src="images/covers/Blaugust2026.webp" alt="Cover Image" style="float: right; max-width: 320px;"&gt;
    &lt;/header&gt;    
    &lt;h2 id="what-who-why"&gt;What, Who &amp;amp; Why?&lt;/h2&gt;
&lt;p&gt;The original challenge was to post 31 times during the month of August. This can be posting every day or doubling up on some days to make the schedule a bit easier. The idea is to spark creativity and get folks to create more content, not grinding them into burnout for some lofty goal.&lt;/p&gt;
&lt;p&gt;Blaugust is the brainchild of Mark Temple, more commonly known as &lt;strong&gt;Belghast&lt;/strong&gt;, author of &lt;strong&gt;&lt;a href="https://aggronaut.com/"&gt;Tales of the Aggronaut&lt;/a&gt;&lt;/strong&gt;. We lost Belghast on July 2, 2026. The Blaugust Discord mentors have decided to move forward with hosting the event this year, as they believe he would want to see it continue.&lt;/p&gt;
&lt;p&gt;I haven't been excellent at keeping up with my posts this year, for one reason or another. So I thought I'd try and bump start the habit with another stab at this 31 post challenge.&lt;/p&gt;
&lt;h2 id="plans-for-the-month"&gt;Plans for the Month&lt;/h2&gt;
&lt;p&gt;One of the reasons why I've not been posting lately is because I've been working on the next iteration of myPOSSE. I'm not sure I'm going to keep the name as this next version is a lot more complicated. I'll keep the details for another post, but I'll probably try and use the month to flesh out my ideas for it maybe even start building it. It worked last year as it forced me to get my head down an actually build myPOSSE-builder and start using it.&lt;/p&gt;
&lt;h2 id="song-for-the-post"&gt;Song for the Post&lt;/h2&gt;
&lt;p&gt;Last year I tried to tie a song to each post and added an embed for it from YouTube, it was a pain to get the embed to work with myPOSSE-builder. So this year I'll just have a link to a song I like or that I'm listening to at the moment and try and make the title work with the post😉.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Here We Go Again&lt;/strong&gt; • &lt;em&gt;Oliver Tree &amp;amp; David Guetta&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://open.spotify.com/track/1QmN94MDrG6VIfYCb5BQf6" title="Here We Go Again - song and lyrics by Oliver Tree, David Guetta | Spotify"&gt;Spotify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=xKeDjiC-Sg0" title="Oliver Tree &amp;amp; David Guetta - Here We Go Again [Official Audio] - YouTube"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://soundcloud.com/olivertree/here-we-go-again" title="Stream Oliver Tree &amp;amp; David Guetta - Here We Go Again by Oliver Tree | Listen online for free on SoundCloud"&gt;SoundCloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;On May 30, 2026, &lt;a href="https://en.wikipedia.org/wiki/Oliver_Tree"&gt;Oliver Tree&lt;/a&gt; began his first world tour to promote &lt;em&gt;Love You Madly Hate You Badly&lt;/em&gt;. The tour abruptly ended after Tree was killed in &lt;a href="https://en.wikipedia.org/wiki/2026_Rio_de_Janeiro_mid-air_collision" title="2026 Rio de Janeiro mid-air collision"&gt;a helicopter collision&lt;/a&gt; over &lt;a href="https://en.wikipedia.org/wiki/Rio_de_Janeiro" title="Rio de Janeiro"&gt;Rio de Janeiro&lt;/a&gt;, Brazil, on June 14. Tree and five others, &lt;a href="https://en.wikipedia.org/wiki/Gaspi" title="Gaspi"&gt;Gaspi&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Lucas_A._Vignale" title="Lucas A. Vignale"&gt;Lucas A. Vignale&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Lucas_Frota" title="Lucas Frota"&gt;Lucas Frota&lt;/a&gt; and the two helicopter pilots, were all confirmed to be victims of the crash by Rio de Janeiro police.&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%202026%20Blaugust%2001%20-%20Here%20We%20Go%20Again"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/117019990579395141" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Sat, 01 Aug 2026 01:00:00 +0100</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/07/back-ups-in-linux/</guid>
			<link>https://davehenry.blog/2026/07/back-ups-in-linux/</link>
			<category>linux</category>
			<category>bash</category>
			<title>Back-ups in Linux</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        
    &lt;/header&gt;    
    &lt;p&gt;I've been using computers since the time when you powered up and it just ran. The OS(&lt;a href="https://en.wikipedia.org/wiki/Operating_system"&gt;Operating System&lt;/a&gt;) was baked into the hardware, so you didn't have to worry about making back-ups.&lt;/p&gt;
&lt;p&gt;When I got my Amiga I made a copy of my workbench disks and kept the original in the top draw of my desk. I didn't need any other back-ups.&lt;/p&gt;
&lt;p&gt;Then there was the PC era, and I messed up my DOS/Windoze installs so regularly that I just got good at reinstalling the OS. So much so that I got my Windoze 95 install time down to 15 minutes with a 3.5&amp;quot; boot-disk and a copy of the ISO on a ZIP disk and that included installing all the drivers. And the expectation of catastrophic OS disaster has followed me, something goes wrong with the OS for whatever reason, just &amp;quot;&lt;a href="https://en.wiktionary.org/wiki/nuke_and_pave"&gt;Nuke and Pave&lt;/a&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;This means that I have always tested my recovery solutions as I've gone along. A few times I've lost stuff, but for the most part, I've been ok.&lt;/p&gt;
&lt;p&gt;Shortly after I started using Linux as my full time/only OS. I found a good set-up was to have the &lt;code&gt;/home&lt;/code&gt; folder on a second drive. During the reinstall, select other when you asked what you want to do with the current OS, so you can set up the drives and partitions with the OS on the Primary and &lt;code&gt;/home&lt;/code&gt; as the whole of the Secondary. Create the same user each time and you're done. Then you just need some way of backing up your home drive.&lt;/p&gt;
&lt;p&gt;Enter &lt;code&gt;bu&lt;/code&gt; by &lt;a href="https://www.youtube.com/@EzeeLinux/search?query=bu"&gt;Joe Collins&lt;/a&gt; described as:-&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A simple tool to create reliable backups of /etc/ and /home from multiple Debian/Ubuntu Linux systems.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I've used it on the regular since v1(before that i was using his XBT script). I &amp;quot;fixed&amp;quot; an issue I had where &lt;code&gt;rsync&lt;/code&gt; would just crash with no error code and I'd need to restart, but then it'd finish fine.&lt;/p&gt;
&lt;p&gt;I always thought there was more I could be backing up for a good recovery. So I rewrote it a little and I present to you my interpretation of &lt;code&gt;bu&lt;/code&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id="bu-usb-backup-tool"&gt;&lt;a href="https://codeberg.org/mort8088/bu"&gt;BU - USB Backup Tool&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Version 2.0&lt;/strong&gt; - A robust backup solution for Debian/Ubuntu systems, designed to protect your data and system configuration against disk failure.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"&gt;&lt;img src="https://img.shields.io/badge/License-GPL%20v2-blue.svg" alt="License: GPL v2" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="disclaimer"&gt;⚠️ Disclaimer&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;USE THIS SCRIPT AT YOUR OWN RISK.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The script is provided &lt;strong&gt;“AS IS”&lt;/strong&gt;, without warranty of any kind, either expressed or implied.&lt;/li&gt;
&lt;li&gt;The author assumes &lt;strong&gt;no responsibility&lt;/strong&gt; for data loss, system corruption, hardware damage, or any other issues that may arise from using this tool.&lt;/li&gt;
&lt;li&gt;You are solely responsible for ensuring that your backups are complete and restorable.&lt;/li&gt;
&lt;li&gt;It is &lt;strong&gt;strongly recommended&lt;/strong&gt; to test the backup and restore process on a non‑critical system before relying on it for disaster recovery.&lt;/li&gt;
&lt;li&gt;Always verify that your USB drive is correctly labelled and has sufficient space before starting.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="description"&gt;Description&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;BU&lt;/strong&gt; (USB Backup) creates a &lt;strong&gt;mirror backup&lt;/strong&gt; of your Debian/Ubuntu system onto a dedicated USB drive labelled &lt;code&gt;BU_Drive&lt;/code&gt;.&lt;br /&gt;
The backup includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc&lt;/code&gt; - system-wide configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/home&lt;/code&gt; - all user data and settings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System blueprint&lt;/strong&gt; - package lists, crontabs, &lt;code&gt;/root&lt;/code&gt;, &lt;code&gt;/usr/local&lt;/code&gt;, &lt;code&gt;/opt&lt;/code&gt;, and custom GPG keyrings&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This blueprint allows you to &lt;strong&gt;rebuild a fully functional system in ~1 hour&lt;/strong&gt; after a catastrophic disk failure, saving you days of manual reconfiguration.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Delta-based space check&lt;/strong&gt; - only checks for the net increase in data, not the total source size&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic dependency installation&lt;/strong&gt; - installs &lt;code&gt;rsync&lt;/code&gt; and &lt;code&gt;less&lt;/code&gt; if missing (via &lt;code&gt;apt&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coloured output&lt;/strong&gt; for clear progress and error reporting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shutdown mode&lt;/strong&gt; - backup then cleanly shut down the system&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restore mode&lt;/strong&gt; - safely restore &lt;code&gt;/home&lt;/code&gt; from the backup&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exclusions&lt;/strong&gt; - automatically excludes caches, thumbnails, and trash&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detailed logging&lt;/strong&gt; - backup log saved on the USB drive&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trap signals&lt;/strong&gt; - clean exit on Ctrl+C&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="requirements"&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A USB drive (or external disk) with a &lt;strong&gt;Linux-native filesystem&lt;/strong&gt; (e.g., &lt;code&gt;ext4&lt;/code&gt;, &lt;code&gt;XFS&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;The partition &lt;strong&gt;must be labelled&lt;/strong&gt; &lt;code&gt;BU_Drive&lt;/code&gt; (case-sensitive)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rsync&lt;/code&gt; and &lt;code&gt;less&lt;/code&gt; (the script will try to install them automatically via &lt;code&gt;apt&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo&lt;/code&gt; privileges for backup and restore operations&lt;/li&gt;
&lt;li&gt;Debian or Ubuntu (or any derivative with &lt;code&gt;apt&lt;/code&gt; and &lt;code&gt;dpkg&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Download the script&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;wget https://codeberg.org/mort8088/bu/raw/branch/main/bu.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Make it executable&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;chmod +x bu.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;(Optional) Install system-wide&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo cp bu.sh /usr/local/bin/bu
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now you can run it simply as &lt;code&gt;bu&lt;/code&gt; from anywhere.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="usb-drive-setup"&gt;USB Drive Setup&lt;/h2&gt;
&lt;p&gt;Before using BU, prepare your USB drive:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Partition and format&lt;/strong&gt; with a Linux filesystem (e.g., &lt;code&gt;ext4&lt;/code&gt;).&lt;br /&gt;
Using &lt;code&gt;gparted&lt;/code&gt; or command line:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo mkfs.ext4 /dev/sdX1   # replace with your device
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Label the partition&lt;/strong&gt; as &lt;code&gt;BU_Drive&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo e2label /dev/sdX1 BU_Drive
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plug it in&lt;/strong&gt; - the system should auto-mount it. If not, mount it manually:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo mount /dev/sdX1 /media/bu
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now your drive is ready.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="usage"&gt;Usage&lt;/h2&gt;
&lt;p&gt;Run the script from the terminal. &lt;em&gt;Don't run it with &lt;code&gt;sudo&lt;/code&gt; from the command line&lt;/em&gt;, all commands use &lt;code&gt;sudo&lt;/code&gt; internally - you will be prompted when needed.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;./bu.sh [OPTION]
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;(no option)&lt;/td&gt;
&lt;td&gt;Perform a full backup (interactive).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--shutdown&lt;/code&gt; or &lt;code&gt;-s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Backup then shut down the system if successful.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--restore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Restore &lt;code&gt;/home&lt;/code&gt; from the backup (destructive - see warning below).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--help&lt;/code&gt; or &lt;code&gt;-h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show detailed help.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="examples"&gt;Examples&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Normal backup&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;./bu.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backup and shutdown&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;./bu.sh --shutdown
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Restore &lt;code&gt;/home&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;./bu.sh --restore
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="how-it-works"&gt;How It Works&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Checks for dependencies&lt;/strong&gt; - installs &lt;code&gt;rsync&lt;/code&gt; and &lt;code&gt;less&lt;/code&gt; if missing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finds the USB drive&lt;/strong&gt; - looks for a mounted partition labelled &lt;code&gt;BU_Drive&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculates required space&lt;/strong&gt; - uses a delta approach (explained below).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Saves the system blueprint&lt;/strong&gt; - package selections, crontabs, and critical system directories.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performs the mirror backup&lt;/strong&gt; with &lt;code&gt;rsync&lt;/code&gt; - copies &lt;code&gt;/etc&lt;/code&gt; and &lt;code&gt;/home&lt;/code&gt; while excluding caches and trash.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logs the operation&lt;/strong&gt; - the backup log is stored on the USB drive.
&lt;em&gt;This can get rather large delete it when done.&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id="restore-procedure-disaster-recovery"&gt;Restore Procedure (Disaster Recovery)&lt;/h2&gt;
&lt;p&gt;If your main hard drive fails, follow these steps to restore your system:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Install a base Debian/Ubuntu&lt;/strong&gt; on a new hard drive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plug in your BU_Drive&lt;/strong&gt; and ensure it is mounted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Install BU&lt;/strong&gt; on the new system (or just run the script from the USB).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restore &lt;code&gt;/etc&lt;/code&gt; and &lt;code&gt;/home&lt;/code&gt;&lt;/strong&gt; manually (or use the script's &lt;code&gt;--restore&lt;/code&gt; for &lt;code&gt;/home&lt;/code&gt;):
&lt;ul&gt;
&lt;li&gt;Copy &lt;code&gt;/etc&lt;/code&gt; from the backup:
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo rsync -a /media/bu/BU_Backups/$(hostname)/etc/ /etc/
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Restore &lt;code&gt;/home&lt;/code&gt; using the script:
&lt;pre&gt;&lt;code class="language-bash"&gt;./bu.sh --restore
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reinstall all packages&lt;/strong&gt; from the saved list:
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo cp -a /media/bu/BU_Backups/$(hostname)/keyrings-backup/* /usr/share/keyrings/
sudo dpkg --set-selections &amp;lt; /media/bu/BU_Backups/$(hostname)/sysinfo/dpkg-selections.txt
sudo apt-get dselect-upgrade
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy back custom system folders&lt;/strong&gt; (&lt;code&gt;/root&lt;/code&gt;, &lt;code&gt;/usr/local&lt;/code&gt;, &lt;code&gt;/opt&lt;/code&gt;) from the backup.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After a reboot, your system will be fully restored.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="space-check-delta-mode"&gt;Space Check - Delta Mode&lt;/h2&gt;
&lt;p&gt;BU uses a &lt;strong&gt;delta space check&lt;/strong&gt; to avoid false alarms. Instead of requiring free space equal to the entire source, it only verifies that you have enough space for the &lt;strong&gt;net increase&lt;/strong&gt; in data plus a 1 GiB safety buffer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the backup is larger than the source (because files were deleted locally), no extra space is required.&lt;/li&gt;
&lt;li&gt;This is especially useful when your drive is nearly full but you're only adding a few small files.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="troubleshooting"&gt;Troubleshooting&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;quot;No drive with label 'BU_Drive' found&amp;quot;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ensure the USB is plugged in, mounted, and correctly labelled.&lt;br&gt;Check with &lt;code&gt;lsblk -o LABEL,MOUNTPOINT&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&amp;quot;Insufficient free space&amp;quot;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The delta check indicates not enough room for the new/changed data. Free up space on the drive or use a larger one.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rsync errors during backup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Check the log file on the drive (&lt;code&gt;BU_Backups/$(hostname)/backup.log&lt;/code&gt;) for details. Try rerunning the backup.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Restore fails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Make sure the drive is mounted and the backup directory exists. If needed, remount and retry.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Script asks for password repeatedly&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sudo&lt;/code&gt; caches credentials for a short time; if you step away, you may need to re-enter.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2 id="credits"&gt;Credits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Based on the &lt;strong&gt;USB Backup Tool (Version 1.1)&lt;/strong&gt; by &lt;a href="https://www.ezeelinux.com"&gt;Joe Collins&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Enhanced with delta space checks, blueprint saving, and improved error handling.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="license"&gt;License&lt;/h2&gt;
&lt;p&gt;This program is free software; you can redistribute it and/or modify it under the terms of the &lt;strong&gt;GNU General Public License version 2&lt;/strong&gt; as published by the Free Software Foundation.&lt;/p&gt;
&lt;p&gt;See the &lt;a href="https://codeberg.org/mort8088/bu/src/branch/main/LICENSE"&gt;LICENSE&lt;/a&gt; file for full details.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Happy backing up!&lt;/strong&gt; 🛡️&lt;/p&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%20Back-ups%20in%20Linux"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/116919970507493785" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Tue, 14 Jul 2026 01:00:00 +0100</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/06/aimless-ramble/</guid>
			<link>https://davehenry.blog/2026/06/aimless-ramble/</link>
			<category>irl</category>
			<category>blogging</category>
			<title>Aimless Ramble</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        
    &lt;/header&gt;    
    &lt;p&gt;I'm still feeling a bit directionless after the move. I haven't been able to settle into any sort of routine, so this post is just whatever sprang to mind from what I've been poking at this week.&lt;/p&gt;
&lt;h2 id="looking-at-logs"&gt;Looking at logs&lt;/h2&gt;
&lt;p&gt;As I always do for a while after posting to this blog, I spent a bit of time looking at the logs. I like to see where people are coming from and just how much of my traffic is script kiddies or bots. One of the nice things I spotted was just how many people are getting here from what I think of as the right side of the internet since the beginning of the year.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hits&lt;/th&gt;
&lt;th&gt;Referrer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;172&lt;/td&gt;
&lt;td&gt;&lt;a href="https://kagi.com/"&gt;https://kagi.com/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;&lt;a href="https://kagi.com/smallweb/"&gt;https://kagi.com/smallweb/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.blogrolly.com/"&gt;https://www.blogrolly.com/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href="https://toot.wales/"&gt;https://toot.wales/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href="https://stream.indieweb.org"&gt;https://stream.indieweb.org&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href="https://searchmysite.net/"&gt;https://searchmysite.net/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I'm a search result in Kagi !😁 I'm so happy. There was also one from &lt;a href="https://bubbles.town/"&gt;bubbles.town&lt;/a&gt; which is also cool.&lt;/p&gt;
&lt;p&gt;Feed requests are evenly split over &lt;a href="https://davehenry.blog/rss.xml"&gt;rss.xml&lt;/a&gt; &amp;amp; &lt;a href="https://davehenry.blog/atom.xml"&gt;atom.xml&lt;/a&gt; and there is one person who is picking up index.xml 👋hello to you sir/madam.&lt;/p&gt;
&lt;h2 id="servers-with-personality"&gt;Servers with personality&lt;/h2&gt;
&lt;p&gt;While catching up on my feeds I was reading the back-issues of &lt;a href="https://shellsharks.com/"&gt;shellsharks Scrolls&lt;/a&gt; - &lt;a href="https://shellsharks.com/scrolls/scroll/2026-05-01"&gt;Scroll ūndēquadrāgintā&lt;/a&gt;. Where I ran across some posts about running websites form old hardware it's quite cool and speaks to the Hacker in me that you really don't need that much power to run a website.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kaimac.org/w/websites-old-hw"&gt;Websites on old hardware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caolan.uk/links/servers/"&gt;Servers with Personality&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="myposse-development"&gt;myPOSSE development&lt;/h2&gt;
&lt;p&gt;I've almost stalled on my rewrite of myPOSSE. I want to do so much with it that it's been hard to focus and get any one thing done. I've got a road map in my head and I need to stop everything and write that up first.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;L8rs ppl, :-)&lt;/p&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%20Aimless%20Ramble"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/116755652888787010" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Mon, 15 Jun 2026 01:00:00 +0100</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/06/the-house-move-is-done/</guid>
			<link>https://davehenry.blog/2026/06/the-house-move-is-done/</link>
			<category>irl</category>
			<title>The house move is done.</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        
    &lt;/header&gt;    
    &lt;h2 id="notes"&gt;📓 Notes&lt;/h2&gt;
&lt;p&gt;So the move is done, and I've finally got my systems back up. There was the small issue for my DNS crapping out so I had to replace the SD card. And then I spent a few weeks catching up on all my RSS feeds.&lt;/p&gt;
&lt;p&gt;I've started working on my next version myPOSSE, I'll have to do a /Page for it to keep track of its development, it's going to be a big project if I do all the things I want for it.&lt;/p&gt;
&lt;h2 id="reading"&gt;📚 Reading&lt;/h2&gt;
&lt;p&gt;I finally finished &lt;em&gt;Hairy Plopper and the sippy cup of vindaloo&lt;/em&gt; by she who must not be named, and started &lt;em&gt;Hairy Plopper and the secret society of the roast chicken&lt;/em&gt;, but I'm only reading them when I don't have something better to read.&lt;/p&gt;
&lt;p&gt;Which brings me to...&lt;/p&gt;
&lt;p&gt;&lt;aside style="width: 450px; height: 268px; display:inline-block;"&gt;    &lt;script src="https://uk.bookshop.org/widgets.js" data-type="book" data-affiliate-id="12196" data-sku="9781804953693"&gt;&lt;/script&gt;&lt;/aside&gt;&lt;/p&gt;
&lt;p&gt;Finished in just under a week. I enjoyed it even after I spoke to a friend of mine who is himself a sci-fi writer who said that the science isn't at all accurate. To which I say &amp;quot;So what, it's not why I'm reading it 😛&amp;quot; and after that I picked...&lt;/p&gt;
&lt;p&gt;&lt;aside style="width: 450px; height: 268px; display:inline-block;"&gt;    &lt;script src="https://uk.bookshop.org/widgets.js" data-type="book" data-affiliate-id="12196" data-sku="9781785030253"&gt;&lt;/script&gt;&lt;/aside&gt;&lt;/p&gt;
&lt;p&gt;Page 5 (2%)&lt;/p&gt;
&lt;p&gt;It's set on the moon, and that's as far as I've got.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Just a quick post to get back into things.&lt;/p&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%20The%20house%20move%20is%20done."&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/116719005218524716" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Tue, 09 Jun 2026 01:00:00 +0100</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/03/moving-experiments-in-a-homelab/</guid>
			<link>https://davehenry.blog/2026/03/moving-experiments-in-a-homelab/</link>
			<category>irl</category>
			<category>indieWeb</category>
			<category>homeDev</category>
			<title>Moving &amp;amp; Experiments in a homelab</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        
    &lt;/header&gt;    
    &lt;p&gt;Just to catch you up. We've been told by our landlords that they intend to sell the property at auction, so we have to move out as soon as possible. We don't &amp;quot;&lt;em&gt;have to&lt;/em&gt;&amp;quot; but whenever this sort of thing happens we tend to move because we don't want to have to deal with whoever the new landlord is. It also means that while they try and find a buyer they aren't making any money off us.&lt;/p&gt;
&lt;p&gt;We've found a place to move to but it's a good deal smaller than our current place, so we're going to need to downsize and put a fair bit into storage for a while.&lt;/p&gt;
&lt;p&gt;Mum and Dads place is finally going on the market. My sister has done a great job of doing the place up so we get the best price for it. That'll be the last part of the estate done and then we can start looking to buy a place of our own.&lt;/p&gt;
&lt;p&gt;I've been working on a Content Management System(&lt;a href="https://en.wikipedia.org/wiki/Content_management_system"&gt;CMS&lt;/a&gt;) for my home lab. The idea is that it's like WordPress if you ran WordPress on a computer in your home and it published your stuff to an external server.&lt;/p&gt;
&lt;p&gt;I have a dislike of all CMS systems where the admin system is out in the open for scrip kiddies to hammer on. In my workflow the public server is a static site. Any APIs on that server should be read only, and if you do need to receive data from outside then it should not process it in any way just save it as is.&lt;/p&gt;
&lt;p&gt;The CMS inside your network shouldn't need an &lt;a href="https://en.wikipedia.org/wiki/Transport_Layer_Security#SSL_1.0,_2.0,_and_3.0"&gt;SSL&lt;/a&gt; certificate or &lt;a href="https://en.wikipedia.org/wiki/Cross-origin_resource_sharing"&gt;CORS&lt;/a&gt; protection because it's on your network. If someone is doing a man in the middle attack they're inside the house already and you have bigger problems.&lt;/p&gt;
&lt;p&gt;Anyway for the most part I've been playing with making a the frontend for a basic markdown editor and an &lt;a href="https://en.wikipedia.org/wiki/RSS"&gt;RSS&lt;/a&gt; reader. I've been trying to make them using semantic HTML and jQuery rather than using a big box JavaScript framework. I used to use jQuery a lot back in the day. I might keep it or I might try and do them as more a web component style thing.&lt;/p&gt;
&lt;p&gt;Did you know, your not supposed to use frame sets in HTML any more, you have to use an iframe tag. 🙁&lt;/p&gt;
&lt;p&gt;Anyway I've still got some packing to do.&lt;/p&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%20Moving%20%26amp%3B%20Experiments%20in%20a%20homelab"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/116277928052342440" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Mon, 23 Mar 2026 00:00:00 Z</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/02/a-weekend-of-game-development/</guid>
			<link>https://davehenry.blog/2026/02/a-weekend-of-game-development/</link>
			<category>gameDev</category>
			<category>monoGame</category>
			<category>cSharp</category>
			<title>A Weekend of Game Development</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        
    &lt;/header&gt;    
    &lt;p&gt;It's been a while since I'd even looked at SystemX and I was starting to think I was over doing things, so as a small project over the weekend I thought I'd just play a little.&lt;/p&gt;
&lt;p&gt;First I opened a blank MonoGame project and added some code for a &lt;code&gt;SpriteSheetLibrary&lt;/code&gt;. Then a quick and dirty &lt;code&gt;FontManager&lt;/code&gt;. Next up a &lt;code&gt;SpriteBatchExtender&lt;/code&gt;. Just the sort of things to make it easy to put sprites and strings on the screen.&lt;/p&gt;
&lt;p&gt;&lt;img src="images/GameDev/20260222_monogame/f9591f1b-b7a4-4f50-8d7b-feaa79e690f3.webp" alt="f9591f1b-b7a4-4f50-8d7b-feaa79e690f3.webp" /&gt;&lt;/p&gt;
&lt;p&gt;Next thing I know I poking around in the MonoGame tutorials and I found a really nice &lt;code&gt;DrawLine&lt;/code&gt; function so I thought I'd see how fast it was.&lt;/p&gt;
&lt;p&gt;I ended up with a 1920x1080 Window drawing 3386 Sprites. Over the top of that I had 150,000 points that were all moving at a random velocities each with collision detection with the sides of the screen. So I paired them up to make 75,000 lines. Which was keeping a steady 60 Fps with Vsync.&lt;/p&gt;
&lt;p&gt;&lt;img src="images/GameDev/20260222_monogame/Screenshotfrom2026-02-2210-00-34.webp" alt="Screenshot from 2026-02-22 10-00-34.webp" /&gt;&lt;/p&gt;
&lt;p&gt;Now what...&lt;/p&gt;
&lt;p&gt;Well I can draw lines and boxes, I seem to remember an explanation of the A* algorithm that &lt;a href="https://www.youtube.com/watch?v=icZj67PTFhc"&gt;javidx9 did on his YouTube channel &lt;/a&gt; a few years back...&lt;/p&gt;
&lt;p&gt;It took a few hours to convert the C++ to C# and make it look tidy. But then I got board of clicking the grid to make obstacles.&lt;/p&gt;
&lt;p&gt;&lt;img src="images/GameDev/20260222_monogame/Screenshotfrom2026-02-2214-29-04.webp" alt="Screenshotfrom2026-02-2214-29-04.webp" /&gt;&lt;/p&gt;
&lt;p&gt;What I need is a maze for it to solve, back to &lt;a href="https://www.youtube.com/watch?v=Y37-gB83HKE"&gt;javidx9 for his programming Mazes&lt;/a&gt; video. Luckily I'd already converted this code when I was working on &lt;a href="https://mort8088.itch.io/maze-fodder"&gt;Maze Fodder&lt;/a&gt; so after some fettling to get the two bits of code to work together, and &lt;em&gt;voilà&lt;/em&gt; a working random maze solver.&lt;/p&gt;
&lt;p&gt;&lt;img src="images/GameDev/20260222_monogame/Screenshotfrom2026-02-2217-19-16.webp" alt="Screenshotfrom2026-02-2217-19-16.webp" /&gt;&lt;/p&gt;
&lt;p&gt;Well here are a few code snip-its that came out of this little playtime that I quite liked:-&lt;/p&gt;
&lt;h2 id="nextvector2"&gt;NextVector2&lt;/h2&gt;
&lt;p&gt;An extension to the &lt;code&gt;Random&lt;/code&gt; class gives you a &lt;code&gt;Vector2&lt;/code&gt; in the given x &amp;amp; y ranges with another extension for &lt;code&gt;NextFloat&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;public static Vector2 NextVector2(this Random rand, float minX, float maxX,float minY, float maxY)  
{  
    return new Vector2(rand.NextFloat(minX, maxX), rand.NextFloat(minY, maxY));  
}  
  
public static float NextFloat(this Random rand, float minValue, float maxValue)  
{  
    return (float)rand.NextDouble() * (maxValue - minValue) + minValue;  
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="getrandomcolor"&gt;GetRandomColor&lt;/h2&gt;
&lt;p&gt;Get a random predefined colour from the MonoGame &lt;code&gt;Color&lt;/code&gt; class properties.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;public static Color GetRandomColor()  
{  
    // Get all static properties of the Color class that return Color  
    var colorProperties = typeof(Color)  
        .GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static)  
        .Where(p =&amp;gt; p.PropertyType == typeof(Color))  
        .ToArray();  
  
    var randomIndex = Random.Shared.Next(colorProperties.Length);  
    return (Color)colorProperties[randomIndex].GetValue(null)!;  
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="drawline"&gt;DrawLine&lt;/h2&gt;
&lt;p&gt;This one came from the &lt;a href="https://github.com/MonoGame/MonoGame.Samples/blob/3.8.4/NeonShooter/NeonShooter.Core/Game/Extensions.cs#L14"&gt;MonoGame.Samples NeoShooter&lt;/a&gt;. I added it to my &lt;code&gt;SpriteBatchExtended&lt;/code&gt; which I inherit from &lt;code&gt;SpriteBatch&lt;/code&gt; so &lt;code&gt;Draw&lt;/code&gt; is a local method call.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;public void DrawLine(Vector2 start, Vector2 end, Color color, float thickness = 2f)  
{
    var delta = end - start;  
    Draw(  
        _blankTexture,   
        start,
        null,   
        color,   
        delta.ToAngle(),
        new Vector2(0, 0.5f),
        new Vector2(delta.Length(), thickness),
        SpriteEffects.None,
        0f);  
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will need a &lt;code&gt;_blankTexture&lt;/code&gt; which you can make by:-&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cSharp"&gt;// class private
private Texture2D _blankTexture;

public void Initialize()  
{  
    // ...
  
    _blankTexture = new Texture2D(game.GraphicsDevice, 1, 1);  
    _blankTexture.SetData([Color.White]);  
    
    // ...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="drawbox"&gt;DrawBox&lt;/h2&gt;
&lt;p&gt;Once you have the &lt;code&gt;_blankTexture&lt;/code&gt; you might as well have a Draw Box method&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cSharp"&gt;public void DrawBox(Rectangle destinationRectangle, Color color)  
{  
    Draw(_blankTexture, destinationRectangle, color);  
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="drawable-game-component-fps"&gt;Drawable Game Component (FPS)&lt;/h2&gt;
&lt;p&gt;And something everybody needs 😁&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cSharp"&gt;using System;  
using Microsoft.Xna.Framework;  
using Microsoft.Xna.Framework.Graphics;  
  
namespace game001.DrawableGameComponents;  
  
public class Fps(Game game, SpriteFont spriteFont, Vector2 position ) : DrawableGameComponent(game)  
{  
    private readonly SpriteBatch _sb = new(game.GraphicsDevice);  
  
    private int _frameRate;  
    private int _frameCounter;  
    private TimeSpan _elapsedTime = TimeSpan.Zero;  
  
    public override void Update(GameTime gameTime)  
    {
        _elapsedTime += gameTime.ElapsedGameTime;  
  
        if (_elapsedTime &amp;lt;= TimeSpan.FromSeconds(1))
            return;
            
        _elapsedTime -= TimeSpan.FromSeconds(1);  
        _frameRate = _frameCounter;  
        _frameCounter = 0;  
    }  
  
    public override void Draw(GameTime gameTime)  
    {
        _frameCounter++;  
  
        _sb.Begin();  
        _sb.DrawString(spriteFont, $&amp;quot;FPS: {_frameRate}&amp;quot;, position, Color.Black);  
        _sb.End();  
    }  
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;Well that's it for my productive Game Development weekend. 🤓&lt;/p&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%20A%20Weekend%20of%20Game%20Development"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/116116278192659749" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Sun, 22 Feb 2026 00:00:00 Z</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/02/rambling-catch-up/</guid>
			<link>https://davehenry.blog/2026/02/rambling-catch-up/</link>
			<title>Rambling catch-up</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        
    &lt;/header&gt;    
    &lt;h2 id="notes"&gt;📓 Notes&lt;/h2&gt;
&lt;p&gt;Well hello there, nice to see you're still checking in, it's been a while since I have so thank you. Don't worry I haven't been sat in a dark corner of my on sad, I've just been busy with a few things and generally not thinking about being on-line.🏖️&lt;/p&gt;
&lt;h2 id="reading"&gt;📚 Reading&lt;/h2&gt;
&lt;p&gt;I'm back reading &lt;em&gt;Hairy Plopper and the sippy cup of vindaloo&lt;/em&gt; by she who must not be named - 37% done. It took a backseat over December and January while I read the far superior Murderbot Diaries, but I really need to finish the series just to get it out of the way. Though I expect I'll be back to Murderbot when the new book &lt;code&gt;Platform Decay&lt;/code&gt; comes out in May. 🥰&lt;/p&gt;
&lt;h2 id="dev-log"&gt;🖥️ Dev Log&lt;/h2&gt;
&lt;p&gt;I've been playing around with making stat reports from the log cutter I built last year. It's been a fun distraction from working on SystemX, but I'll probably get back to that soon.📊&lt;/p&gt;
&lt;h2 id="work"&gt;👷 Work&lt;/h2&gt;
&lt;p&gt;It's been a strange time at work, they seem to be running headlong into using AI and don't seem to be thinking of the problems it's going cause.&lt;/p&gt;
&lt;p&gt;Take last week for example. I had a piece of work to do and I was getting on with it but then the API I needed to call was found to be &amp;quot;Not fit for purpose&amp;quot;. Yes, they did use AI to make it, how did you guess? So I was told to stop what I was doing and they'll let me know what I should do next.&lt;/p&gt;
&lt;p&gt;Well next was they wanted me to rewrite my working system in GO because C# was the problem. In the meeting I said &amp;quot;That will put the project plan at risk because I know nothing about GO&amp;quot; and the response I got was &amp;quot;It's not a risk, just get AI to write the code for you&amp;quot;. 🤦‍♂️&lt;/p&gt;
&lt;p&gt;Luckily that wasn't &lt;em&gt;my&lt;/em&gt; team lead, what he told me was:-&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Take a few days to learn GO while a senior developer uses AI to convert the project. That way at least someone will know how to maintain it&amp;quot;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It took me 4 days to get to the point where I could give a reasoned argument as to why GO was a terrible language, and another day to prove that I had already done the work in C#. So everyone could &amp;quot;&lt;em&gt;Go Do One&lt;/em&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;All in all a positive result:-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Learned a new language well enough to hate it. Even if I did find one thing I like about it, it's not enough to make me want to use it.&lt;/li&gt;
&lt;li&gt;Found out one of our senior developers is hard of thinking, unless he can write an AI prompt to find out what it is he needs to think.&lt;/li&gt;
&lt;li&gt;Have shown that all the delays on this project were unnecessarily caused by another department, we're talking months wasted on things that will never be used.&lt;/li&gt;
&lt;li&gt;My code is awesome and worked fine in the first place. 🤓&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Doesn't mean I wasn't stressed AF, regularly, this last few weeks. But it's all worked out well in the end.🤡&lt;/p&gt;
&lt;h2 id="world"&gt;🗺️ World&lt;/h2&gt;
&lt;p&gt;With America televising public executions and rounding up undesirables into concentration camps, I'm doing my level best to avoid news from the tinpot republic. I've stopped watching the nice news channels I used to follow on YouTube because even they're starting to feel like something out of the DC universe.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.pinimg.com/originals/54/6d/8d/546d8decbb6799b4372b18e0520c645a.gif" alt="...So dark. You sure you're not from the DC universe?" /&gt;&lt;/p&gt;
&lt;p&gt;There are more than enough personnel blogs around to keep me amused and they're not all by Americans screaming into the literal void. There are quite a few Europeans doing it as well.🇪🇺&lt;/p&gt;
&lt;p&gt;Don't be mistaken I'm not burying my head in the sand, I have opinions and I'll share them with you if you ask the wrong question or make a stupid assertion.&lt;/p&gt;
&lt;p&gt;That doesn't mean I have to fill my daily information feed with the same &lt;em&gt;oh, look how bad things are&lt;/em&gt; &amp;quot;news&amp;quot;, I'd rather be playing with puppies.🐕&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Anyway, I'm off to continue my binge watching run of all Pixar films, I'm currently on &lt;a href="https://en.wikipedia.org/wiki/Onward_(film)"&gt;&lt;em&gt;Onward&lt;/em&gt;&lt;/a&gt;. 🧙‍♂️&lt;/p&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%20Rambling%20catch-up"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/116065444011463697" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Sat, 14 Feb 2026 00:00:00 Z</pubDate>
		</item>
		<item xml:base="https://davehenry.blog/">
			<guid isPermaLink="true">https://davehenry.blog/2026/01/week-notes-2026-01/</guid>
			<link>https://davehenry.blog/2026/01/week-notes-2026-01/</link>
			<category>weeknotes</category>
			<title>Week Notes 2026-01</title>
			<description>&lt;article&gt;
    &lt;header&gt;
        
    &lt;/header&gt;    
    &lt;h2 id="notes"&gt;📓 Notes&lt;/h2&gt;
&lt;p&gt;I started back at work today, and It didn't go as badly as I expected. I almost know what I'm doing, it's good to get back into a routine.&lt;/p&gt;
&lt;p&gt;I'm going to have to try and make these weekly posts a little less boring, but no promises.&lt;/p&gt;
&lt;h2 id="dev-log"&gt;🖥️ Dev Log&lt;/h2&gt;
&lt;p&gt;I've updated the &lt;a href="/about/"&gt;About Me&lt;/a&gt; page. I never liked the old one, so I pulled the &amp;quot;&lt;em&gt;Who am I&lt;/em&gt;&amp;quot; bit from my first Blaugust post last year.&lt;/p&gt;
&lt;h2 id="links"&gt;🕸️ Links&lt;/h2&gt;
&lt;h3 id="blog-posts"&gt;📰 Blog posts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.joanwestenberg.com/the-case-for-blogging-in-the-ruins/"&gt;The Case for Blogging in the Ruins&lt;/a&gt;&lt;br /&gt;
Again with the you should start a blog... well if we keep reminding people maybe they'll start listening.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nation.cymru/feature/how-a-welsh-scientists-idiot-brain-became-a-global-bestseller-and-changed-how-millions-think/"&gt;How a Welsh scientist’s ‘Idiot Brain’ became a global bestseller and changed how millions think&lt;/a&gt;&lt;br /&gt;
I have already added it to my &lt;a href="https://uk.bookshop.org/wishlists/c2217f5a8be87ab4fe50dc193049b4676c770fcf"&gt;Bookshop.org Wishlist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://takes.jamesomalley.co.uk/p/this-might-be-oversharing" title="How I rebooted my social life - by James O'Malley"&gt;How I rebooted my social life - by James O'Malley&lt;/a&gt;&lt;br /&gt;
I could have written this, right up to the point where he does something about it...&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tracydurnell.com/2025/01/09/sanding-off-friction-from-indie-web-connection/"&gt;Sanding off friction from indie web connection – Tracy Durnell's Mind Garden&lt;/a&gt;&lt;br /&gt;
An interesting read if you're at all interested in the indie web.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="reading"&gt;📚 Reading&lt;/h2&gt;
&lt;p&gt;&lt;aside style="width: 450px; height: 268px; display:inline-block;"&gt;    &lt;script src="https://uk.bookshop.org/widgets.js" data-type="book" data-affiliate-id="12196" data-sku="9781250389848"&gt;&lt;/script&gt;&lt;/aside&gt;&lt;/p&gt;
&lt;p&gt;I finished Volume 3, It was hard getting into &lt;em&gt;&lt;strong&gt;System Collapse&lt;/strong&gt;&lt;/em&gt; because I knew I was missing a story, But I got &lt;em&gt;&lt;strong&gt;Network Effect&lt;/strong&gt;&lt;/em&gt; today so I can start that now. I may have to reread them all once I'm done with this read through.&lt;/p&gt;
&lt;p&gt;For some reason &lt;a href="https://uk.bookshop.org/"&gt;bookshop.org&lt;/a&gt; doesn't have a listing for &lt;em&gt;&lt;strong&gt;Network Effect&lt;/strong&gt;&lt;/em&gt; so I can't give you a link, and I am ashamed to say I had to get it from amazon but I'm sure as sh!t not going to link to them.&lt;/p&gt;
&lt;h2 id="films"&gt;🎞️ Films&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.justwatch.com/uk/movie/arcadian"&gt;Arcadian (2024)&lt;/a&gt;&lt;br /&gt;
Interesting, they should have died a lot seeing as how they kept leaving doors open everywhere.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;I still don't know how I'm going to sign off these things this year...🤔&lt;/p&gt;

    &lt;footer&gt;
        &lt;p&gt;Thanks for keeping RSS feeds alive.&lt;/p&gt;
        &lt;p&gt;&lt;a href="mailto:fromfeed@mort8088.com?subject=RE%3A%20Week%20Notes%202026-01"&gt;Reply by email&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;Leave a comment by replying to 
            &lt;a href="https://toot.wales/@mort8088/115844603661965835" target="_blank" title="Syndicated post on Mastodon"&gt;this post&lt;/a&gt;
            on Mastodon.&lt;/p&gt;
        
    &lt;/footer&gt;
&lt;/article&gt;
</description>
			<pubDate>Mon, 05 Jan 2026 00:00:00 Z</pubDate>
		</item>
	</channel>
</rss>