A quick update to BlogMore, with a small accessibility improvement, and also a whole new set of data for the graph.
The accessibility update follows on from a change published yesterday. In that release I did a little bit of work to disambiguate links to categories and tags that had the same link text; this time I've given the same aria-label treatment to the post dates where they link to the year, month, and day archives. While we're never really going to get ambiguous year links (unless there are also links in the body of a post that are four digit numbers), it's highly likely we're going to get the occasional month and day that are ambiguous.
So now those links make it clear, with aria-label, what's being linked to.
The other main change in v2.31.0 comes from a thought I had last night about the new "related posts" feature I added yesterday. Currently the graph shows the relationships the posts have based around their common categories and tags:
But now I've got this code that can work out how posts might be related based on their text content. What might that look like? It might be cool to be able to switch the graph view between the two sets of data, if the blog owner is building with related posts turned on.
While I'm not sure it really tells me anything, I like that I have yet another method of (re)discovering posts.
BlogMore has been bumped to v2.30.0. This release is pretty heavy on new features, but it does also include one small accessibility tweak too. While looking through some of the neutral feedback from PageSpeed Insights I noticed it mentioned that in some cases I had a category and a tag linked on the same page, where the text of the link was the same. That's pretty common on my blog. For many of the categories (especially things like AI, Coding, Emacs, Python, etc.) I'll also have a corresponding tag. The idea is that categories are essentially sub-blogs within the blog, whereas tags characterise a post.
Given that the same text for different purposes doesn't give much context from an accessibility point of view I've added appropriate aria-label attributes to differentiate these links.
Now for the new features.
The first is another "discover other posts" type feature, that might encourage a reader to venture further into a blog. While BlogMore does support backlinks (as was added back in v2.16.0), I have been thinking that a "related posts" feature would be interesting to add. So now it's added. This is enabled with the with_related configuration option (or the --with-related command line switch) and provides control over how many related posts are shown; the default is three.
The rest of the new features are more admin-based and are all commands on the BlogMore command line. The first is the drafts command which simply lists the filename of all the posts that are in a draft state.
The second new command is links
dump. This is a utility command for dumping a CSV list of all the external links that can be found in your posts, along with the filename of the post the link was found in. This could be useful for all sorts of things; for example writing your own external link statistics tool, or perhaps writing your own external link checker.
Talking of external link checkers: I've also added links
check. This is a bit experimental, but is intended to be a simple checker of all the external links, seeing if they're still out there. By default, when run, it'll check every link it finds and, if there's a problem with it, it'll report the issue. There's a --verbose mode as well if you want feedback on all the links that are working.
It seems like every time I think I'm done adding features, something else is either suggested or pops into my head. I feel like I'm near the end of adding stuff now and should be getting back to refining the code.
Despite the fact that I am not, in any way, superstitious, I kind of have this rule: don't make definitive statements about the absolute happening of an event until it happens; it kind of feels like you're tempting the universe to prank you. I don't always follow it, I know it's kind of silly, but it's there and hard to shake. It's normal. It's human.
Sometimes it happens that it looks like I should stick to that rule.
Eleven days back I wrote about how I was aiming to return to streaming thanks to the fact that I'd once again be the proud owner of a full fibre connection. The thing that, in part, prompted me to write about that was the fact that I'd had an email, that morning, from Openreach, to let me know they'd done some work and that fibre was now available at my property.
The email proudly stated:
Hello Dave,
Congratulations, you can now get Full Fibre on the Openreach network at [my home address].
With Full Fibre broadband, you can choose your package based on the download speeds you'll need from 40 Mbps to 1.6 Gbps. Need some help choosing? Then read our blog before ordering to find out what's a good download speed.
We also have the UK's biggest choice of broadband providers, so you can find a package and price to suit you.
After a button that linked to a site for finding a provider, it went on to say:
After you've placed your order with the provider of your choice, we'll arrange a day and time with you for one of our engineers to connect Full Fibre to your property if it isn't there already.
They may need to drill a small hole in your wall, or they may be able to use the same access point as your current line. Either way, they'll take care of everything and leave you with a broadband that's ready to deal with anything the future brings. You can find out more about what's involved in our handy Full Fibre installation video.
I found this whole email mildly amusing because it was obvious that the work they'd done, that made this possible, will have been the result of the call I made to EE back in March to order fibre in the first place, when it became apparent I was finally able to request it.
So, yeah, when Openreach -- the people who do the cables and stuff -- email you to let you know they've as good as hooked your place up, you know it's a safe bet.
Today was the day. This morning, between 08:00 and 13:00, was the window I'd been given for one of their engineers to turn up and do the hole drilling and the box screwing and all the stuff and then this evening I'd be in a position where, once again, I could download the whole Internet and stream utter nonsense in the highest quality (both creating and consuming). I was looking forward to this.
Everyone in the house was.
The time window started, and kept going, and kept going, and eventually it was 13:00 and nobody had turned up and my house had no extra wires or holes and I was on the phone to EE to ask WHERE IS THE GLASS INTERNET PIPE?!?
Long story short: it wasn't turning up. At all. It appears, at some point in the recent past, Openreach simply cancelled the order and nobody thought to tell me. Openreach (the people who sent me the email 11 days ago) didn't think to tell me. That's the same Openreach who sent me the SMS on the 7th of this month to give me the date of the work; apparently they could not send me an SMS to let me know they'd decided against this.
Of course, it's not all on Openreach. It would also seem that EE knew, from their own system, that the order had been cancelled and they too had failed to email me, message me, call me, something, to let me know I'd be wasting my time clearing half my day to receive them and have the work take place.
So: pretty shitty service all round.
The main explanation I've been given is something to do with a "CBT"1, or something related. This means that it's just not possible to deliver fibre to my address. This is after:
I called to check in March
I was told in March it was possible
Openreach checked things out, said more work was needed, did the work
I literally saw them doing the work, with a trench and barriers and everything
I was emailed by Openreach after the work took place to say they'd done the work and I could have fibre
Even today, even right now, if I go on their site and put in my exact address:
Not "no". Not "eventually". Not "soon". Now. It says now.
At this point this is where I have to say, after making a bit of a mess of all of this, EE have done all they can to smooth things over (especially given there's sod all they can actually do about this). They've compensated me for the missed appointment (despite the fact it wasn't technically missed; it had been cancelled and nobody had let me know), left me to hang on to all the new equipment for if/when the fibre does turn up (meaning I'll have a backup router I guess), and have also compensated me for 3 months of my current copper-based broadband by way of an apology.
On top of that they didn't just brush me off with a "sorry, can't do anything about this", they went to bat for me during a 90 minute phone conversation, chasing up more detailed explanations of what the issue was with Openreach, as we talked. While I don't actually have a solution that is anything other than "you'll have to wait", at least now I have something of a better explanation as to what the actual problem is.
So where does this leave me? Here's what I do know:
The issue that stopped my installation is solvable and, in all likelihood, is the sort of thing that will be solved in the next few months (mention being made of a reasonable range of between a 2 to 6 month wait).
Almost every alternative provider I could go to would have the same issue, as they all work over the fibre that Openreach would install.
From what I can see no provider that isn't Openreach-connected is even the least bit interested in providing fibre.
Openreach have promised that the moment they have a solution to the technical problem that stops the installation, they will call me and arrange to kick things off again (or at least, I guess, let me know it's safe to place the order with EE again).
To be clear too: we're not talking about providing a service to a house in the middle of a field in the middle of nowhere, not even a house in some out-of-the-way village. I live in a reasonably large town, far bigger than the village I lived in before where I did have full fibre.
All of which concludes with: I started today excited by the prospect of fast downloads, fast uploads, and returning to talking nonsense on YouTube while being terrible at playing games; I'm finishing the day with no clear path to having fibre, and a wait time that could extend well into the rest of this year, and perhaps even into next.
I hope it won't be that bad, but I am deflated and disappointed.
Also, on the very remote chance that either Sharon or Neil from EE ever stumble on this blog post: thank you for all the effort you went to to get actual answers for me. It's a shame that it needs to be said, but it is rare these days that you call a customer support line at a service or utility company and get people who are willing and able to work in a way that isn't just following a script.
Well, except for the bit right at the end... I'm fine Neil, I don't need to swap mobile provider. ;-)
While it did appear something had changed for the better yesterday evening, things looked different again this morning. Before getting to work, I did a couple of quick changes to BlogMore; this time Antigravity seemed to use up a bit more quota in the same amount of time as I was working last night, but this time the reset window is much bigger.
I'm sure there's a method to this, but at the moment I'm really unclear what it is.
I guess I could ask it...
Yeah, let's do that.
Can you explain your quota cooldown time for me? Sometimes it seems to count down from 1 hour, others 5. Am I not reading this correctly?
You are reading the quota cooldown correctly! The reason the timer fluctuates between 1 hour, 5 hours, or other times is due to how the rolling usage window and compute-based limits work.
1. Rolling 5-Hour Window
Your usage limit is evaluated on a rolling window (typically 5 hours) rather than resetting at a fixed time of day.
If you see a 5-hour cooldown: You likely used a large portion of your compute capacity very recently. You have to wait for that recent window to clear.
If you see a 1-hour cooldown: You are close to the edge of your rolling window. A batch of high-compute requests you made 4 hours ago is about to fall out of the 5-hour window, which will free up capacity for you in 1 hour.
2. Compute-Based Usage (Not Message Count)
Your quota is consumed by compute rather than a flat number of messages. Compute is affected by:
Chat Length: Every time you send a new message, the model re-processes the entire chat history. Longer conversations consume your quota much faster.
Task Complexity: Tasks like code generation, deep thinking, or agentic workflows require more processing power and consume more quota.
Tips to Manage Your Quota:
Start New Chats: For new topics or tasks, start a fresh conversation. This prevents the model from having to re-read long histories and saves significant compute.
Use Clear, Targeted Prompts: Try to combine instructions rather than sending multiple short follow-up messages.
So, I don't think I'm any wiser after that. The explanation for the 1-hour countdown I saw last night has no connection to anything I did yesterday; I wasn't using Antigravity 4 hours earlier when I checked the quota near the end of that session. Guess I need to go and find and RTFM. Just like we used to in the good old days.
That first (and last) time I tried it, while on whatever model it decided for me out of the box, it chewed through most of the quota, with a 5 hour reset, in very little time at all. It was obvious that I'd never get anything of significance done in a good session.
This evening has been quite different. It wrote a very comprehensive change, doing quite a lot of work, and left me with a lot of quota and a short reset time once done.
A bit more testing and tweaking of the documentation followed, with me setting it off on a couple of bug hunts (which it found and fixed). By the time I was happy to call it an evening on this round of modifications, it had reset and I was green across the board again.
Now this I can work with!
I don't really know what's changed1, or why. I think I saw something the other day about quotas being tripled, but this seems even more generous (at least in terms of the reset window). I guess I'm going to have to go digging to see if I can find what the story is.
I'm not getting my hopes up -- what can be given can be taken away at any moment (which is, of course, the ongoing theme of what I'm documenting here) -- but this does soften the landing somewhat.
Although I did notice it went with Gemini 3.5 Flash (Medium) on startup and I let it go with that; last time it was Gemini 3.5 Flash
(High). ↩
A quick update to BlogMore that stems from a couple of accessibility concerns raised when using PageSpeed Insights. While the accessibility score on pages generated by BlogMore is pretty excellent (96/100), a couple of things were highlighted that seemed worth tackling in some way.
The first was that the title bar of code blocks is rather low in contrast, especially the name of the language. This was a deliberate choice on my part; when I'd prompted Copilot to do this work some time back I'd expressly asked it to make the text "subtle". While I could have undone that, I do like how it looks and would like to retain it if possible. So, as an experiment, I've used prefers-contrast as a signal that I shouldn't do that. So now there's a bit of extra CSS under prefers-contrast: more which just uses the normal text colour for those headers.
I imagine this won't boost the score on PageSpeed Insights -- presumably it won't simulate that being used -- but I would hope it's an improvement for those who do need the extra contrast.
The other issue that was flagged up was the lack of an underline on the email address link in the comment-via-email invitation box (the optional feature I added back in v2.17.0). That one was an easy fix. There was no reason to avoid an underline on the link, so I added one.
I've just released BlogMorev2.28.0. This release has some small improvements to the JSON-LD structured data that was added in the last release, and also adds support for actually showing author names on posts.
On the latter point first: I only ever really created BlogMore for myself, thinking that perhaps some other folk might use it at some point. All along, though, I had it in mind that it would only ever be used to create a site where there was a single author. Despite this, though, I'd added support for setting the author per-post, and this was reflected in the RSS and Atom feeds.
But I'd never added support for showing the author in posts.
Obviously, when the author is shown, if a URL can be worked out (the one local to the post is chosen first, then the blog-wide default if one isn't set for the post), the author's name links to their URL.
The JSON-LD changes are a couple of small improvements to the content. The author data adds a url property (following the same rules mentioned above) and the image property for a post will fall back to the site logo (if one is set) when there is no cover.
While I know the subject really fires some people, ad blockers are something I've never really paid too much attention to. Back in the early days of the web, the really early days, I used to run with full-on JavaScript blocking1. The web changed and I accepted it.
More recently, as I've become a full-time Safari user in the last couple of years, I've been running with Ka-Block! installed. It's been fine. I've never really noticed it. I think it blocked some stuff, but not other stuff. I've never really noticed if it was getting updated or not; I just wasn't paying attention.
Then, this morning, I saw this post in the Fediverse and for some reason it caught my eye. I followed the link, did a bit of searching, asked Misko about his experiences with the app, and saved a bookmark.
Now, this evening, I've thrown down my fiver and I'm running with Wipr 2 installed, both on my Air and my iPhone. When I'm next on either of my Minis, or on my iPad, I'll throw it on there too.
The installation process was straightforward, albeit one where you need to enable four extensions rather than just the one.
As well as that, you then need to enable it in the app itself and you're good to go. I've since tried visiting a couple of locations that I know still showed adverts or consent pop-ups and... clean. So clean!
My expectation for tools like this is that they end up breaking some site in a way you least expect, so I'll be very aware of that for a while. That said, if I do run into a problem, not only is it easy enough to turn blocking off just for that one site, there's a very clear route to reporting problems too.
Mostly, though, I hope I can go back to paying this app no attention whatsoever. If I can, I imagine that's high praise and a job well done for this sort of tool.
I just know someone is reading that and thinking "pfft, JavaScript came along late into the web you noob". ↩
Much like the lasttwo releases of BlogMore, this is another that has ended up being on the theme of improving or adorning the generated HTML.
One change in the last release resulted in another HTML validator warning, and so that's cleaned up here (the removal of the h2 elements from the sidebar meant it no longer made sense for it to be a section, so I've turned it into a div).
On top of that, I've also decided to dip my toe into adding more "microformat" type things to the generated code. This release adds things like JSON-LD structured data and Microformats2 semantic markup, where appropriate. I've also updated all of the "socials" links that appear in the sidebar to ensure they're marked up as rel="me".
Given that this is a bit of an experiment, expect to see some tweaks and changes as I roll this out on this blog and then check and test the result. This is a useful learning exercise for me.