This is a group to go with the blog of a very similar name.
- Shed a tear for this dead link
- What is this?
- Given With Love card
- Blogroll: Sites I like (Indieweb edition)
- Welcome to my Friends Page
- Projects
- Lord Matt embeds all of Mastodon (project)
- Tools for reviewers
- /Now
- The round-robin of cool stuff
- So you want to buy me stuff?
- Holding Pattern
- Ideas
- About
- Guestbook
- Matt’s Pixel Wall
- Matt is not an SCP
- The Online Safety Act 2023 risk assesment that does nothing new
- The Spell Collector
- Today in Emoji
- Patch Notes
- Follow me on Mastodon or the Fediverse
- Matthew Brown
July 2026 Divestment
July 19, 2026 in projects-and-ideas by Matthew Brown
From time to time, I have to admit that I just have too many tabs open. Which means I am not likely to get back to them any time soon. When that happens, I make a post like this and just link out to all the pages I’ve been holding open. That way, I can come back to them if I really want to, and they are no longer using system resources waiting for me to get back to them for whatever idea I had in my head when I left them.
There’s a bunch of videos in this one. I’ve not watched them all. Like every link, every video represents at least one tab I closed today. Yes, I had a lot open. I always do. My last divestment of tabs was June last year. It was overdue.
Smol Web
Early Web Links (about): Early Web Links is a directory of personal homepages, fan sites, hobby pages, and other handcrafted corners of the internet. The kind of sites people used to make just because they wanted to, not because they had something to sell
A lot of blogs and personal pages
- blog.dotmavriq.life – someone’s personal website with some cool animated ASCII
- The personal homepage of Jonathan Lamothe, a programmer and free/libre software enthusiast. (Same page open in two tabs for some reason)
- The personal website of Sebastian Hädrich, Web developer, writer, filmmaker
- Hi, I’m Jamie Tanna – guess whose personal website this is…
- Manton Reece’s blog – this is an interesting looking blog; I got a bit distracted reading it.
- Jeremy Felt’s web – Jeremy writes a longer note every week, shorter notes frequently, and blog posts from time to time.
- Chris Aldrich – Musings of a Modern Day Cyberneticist
- Sebastiaan Andeweg
- svemagie: pedestrian sociologist, mostly harmless
- Hey there! I’m Brad Frost.
- I’m Andy Bell and I try to make the web a better place
- Hi, I’m Anil Dash, a tech entrepreneur and writer trying to make the technology world more thoughtful, creative and humane.
Story and narrative
- Conspiraco – Scifi Short Story
- Star Trek or Star Wars?
- Writers, tell me about your WIP
Mental Health
- audhduk.org Assessment Pathways – guess what rabbit hole I took a deep dive down…
Huh, only one in this batch…
Philosophy and Religion
Last month, I tumbled down a rabbit hole of church-related questions for an essay idea about all the really hard and unanswerable questions. There was a bit of a theme.
- Contemporary Challenges to Eternal Punishment: An Essay By Christopher Morgan
- His Anger Is Not Forever: An essay by Rev. David Bast
- God is Love: 12 Life Transforming Verses from The Bible
- Daily verses, salvation
- How To Be Saved (I decided to document all the varied answers given because no two seem to entirely agree.
Code and Development
- PHP: sprintf
- Self-hosted Future Mail Service with n8n
- The GitHub profile of Sebastian Hädrich
- gpt-oss – ollama
- I hate the recent open-source rise
- API Handyman
- apisyouwonthate.com
- API Evangelist
- programming.dev
Codeberg is a non-profit, community-led effort that provides services to free and open-source projects, such as Git hosting (using Forgejo), Pages, CI/CD, and a Weblate instance.
JSON Resume is a community-driven open-source initiative to create a JSON-based standard for resumes. [See also]
Games and gaming
- Neon Vanguard – a browser-based game (there was a big pause while I played for a bit)
- Minecraft Server on Docker (Java Edition) – Working with mods and plugins
- itzg/minecraft-server
Essays about social media and related topics
- How I’d redesign Twitter (and why it won’t work)
- Naming things is hard – DNS for the Federated Web
- Mastodon on your own domain without hosting a server
- Playing with ActivityPub
- How I migrated my blog
- ActivityPub for WordPress and fediverse:creator
- Hosting my own ActivityPub server
- Setting Up My Blog within the Fediverse via ActivityPub
- Perspectives on Power Platform: Brutally honest and cheerfully sarcastic insights on Microsoft’s low-code and AI technology, business apps, and the business of software – written by Jukka Niiranen.
- A Comprehensive List of Everyone Still Using Facebook
Other
- https://micro.blog/discover
- Apparently, dev.to is a thing and I made a page.
AI
I expected more for this section, to be honest.
Are we done?
Not even remotely. This is just as many tabs as I got through before I ran out of steam.
I have a too-many-tabs problem.
What’s in your tabs waiting for you to get back to it?
You web writers have taught AI some truly terrible writing habits
July 6, 2026 in writing-and-storytelling by Matthew Brown
Web writers, the AI has been trained on your public work, and it shows. You all have taught AI some truly terrible writing habits
HFY writers have taught AI it has to start stories with “Bob sat on the bridge of the Earth Ship Big Birtha”. So AI does just that, even when
I was listening to a narration today. I did not know it was AI, as the introductory narration was pretty decent by free-on-the-web standards. Then it just broke with that and had some character I didn’t care about sitting somewhere. It was so bad it made me stop to check the comments, which confirmed the story was by an AI.
You all have such bad writing habits that the AI has learned to be not even as good. This is a lesson to us all. With computers, you must remember rubbish in; rubbish out (to my US readers, garbage in; garbage out).
It is probably because the LLM industry is so desperate for content to train on that it does not distinguish between writers learning to write and writers having learned to tell great stories with good introductions.
As a result, AI writing makes all the writing mistakes.
Filing this under Writing on OpenMentions.
How to add a no-fuss “thoughts” custom paragraph style to LibreOffice
July 4, 2026 in tutorials by Matthew Brown
This quick and easy guide is mostly for my fellow writers and anyone else who occasionally needs special paragraphs in their document.
Imagine this. You’ve just finished the final draft of your 125-page work of genius. In this epic, you showed what your central character was thinking by putting their thoughts in a separate paragraph and formatting them as italics.
An agent is interested, but only if you change the way you format those thought paragraphs. If only there were a way to change them all at once.
There is – custom paragraph styles.
Once set up, you can change all such paragraphs with a few clicks of the mouse. The size of the document is no barrier at all.
Readers on the fediverse may want to choose “view on original page” to get the most out of this illustrated guide.
Let us start with built-in paragraph styles

You are probably familiar with the paragraph format menu found to the left of the toolbar. It is probably where you go to set headings and titles. If you like nicely formatted paragraphs, you probably choose Body Text over the Default Paragraph Style when you start a new document. (If not, try it; you will be glad you did.)
You might not recognise the “Body Text: Thoughtlife” style. That’s because I invented it. Thoughtlife inherits from Body Text, and when I hit enter for the next paragraph, that new paragraph is normal Body Text.
Paragraph styles let you define formatting that always affects the entire paragraph and that you can change for the whole document on a moment’s whim.
I am going to show you how I made mine. It is dead easy and can save you time in the long run.
The process is the same for changing heading and paragraph styles if you want them to be different and to change to that different everywhere.
At the bottom of the menu is a choice called “More Styles…”.
Give the “More Styles” option a click.
A new menu should open; probably on the right-hand side of the window.
Now we can make our custom paragraph style

In the Styles menu that just opened, find Paragraph Styles. It should be the one that opened by default. If you can see “Body Text”, then you are already in the right place.
Right-click “Body Text” to get the super secret context menu. It is not actually secret, but it is shown in the screenshot.
If you want to modify your main style, you could hit “Edit Style…”. Not now. You can play with that later. You only modify it per document, so you can mess about as much as you want in a new document.
Meanwhile, back to inventing our new “thoughtlife” Body style. Eagle-eyed readers might notice it already exists in my screenshot. That’s because I ready did this. To get started with your custom paagraph style, hit “New…”.
You should end up with a window that looks a lot like this:

In the box for “Name”, give your new style a name. I called mine “Body Test: Thoughtlife” because it will inherit from Body Text.
Now we want to inherit from Body Text. This means that our new style will be exactly like Body Text except where we make changes.
Your inheritance should already be filled out because we hit “New…” on Body Text. If it is not, for some reason, open the drop-down and pick Body Text.
Making the custom paragraph style set the next one something else
For our last trick, we need to tell LibreOffice that after our custom Body Text we want to go back to the normal Body Text. There’s a drop-down called “Next Style” just above the inheritance drop-down. Take a wild guess as to what we are going to set that to.
“Body Text,” you say. Correct! Well done. Good effort.
You could hit “OK” right now. You would have two Body Text paragraph styles that look identical, which is a bit rubbish. Pointless, even.
That is why we next go to another tab to make some changes. Well, one change.

The only change I made for my thinking paragraph style was that I changed “Style” from Regular to Italic. Then I hit OK to close the edit window.
Go wild with your custom paragraph styles
You can go ham with this and make your new style as wild and colourful as you want. You can always edit the style to something sensible later. Or you can stick with what will probably be just good enough and get on with writing.

Now you can choose your paragraph styles from the big side menu. If you are working with a lot of custom paragraph types, that might be useful.
Me? Now, I just use it once and close the side menu. The reason I do that is that all in-use styles can be found in the paragraph styles drop-down, which is a lot less intrusive on my screen real estate and right there when I want it.
Whenever I write a thoughts paragraph, I am two clicks away from setting it all in italics, safe in the knowledge that the next paragraph will be normal.
If I ever show the writing I did this for (Ossa, look out for it in about ten bajillion years), and they say, “I hate italics, use bold.” I will not be bothered; I can follow the same process above: “More Styles…” to the side menu, right-click on my style and choose “Edit styles” instead of new and go back to the Font tab and change Italic to Bold.
Suppose the agent wants a pink background, a border, bigger text, small caps, and a different font. Those are all just as trivial to change. If you were paying attention, you might have noticed a bunch of tabs for different things you can play with in the formatting.
LibreOffice knows what a “Thoughtlife” Body Text is. That means I can ask it to change what they all look like whenever I feel like it.
And now you can do that too.
I hope my quick guide to custom paragraph styles was helpful. If it was, I’d love a comment, reply, like, or share (depending on how you are viewing my guide – on my blog or syndicated somewhere). Real, written by humans, comments make me happy. I’m weird like that.
Please, dear HFY writers, no more stories starting with “Bob sat on the bridge of the Earth Ship Big Birtha”
June 7, 2026 in writing-and-storytelling by Matthew Brown
Why do so many HFY stories start with the OC standing somewhere waiting for the opening thing to happen? I’ve lost track of the stories I’ve listened to or read that start with some chuckle-froggy in some location with the lights blinking or the tools shining. You have done that to death.
Please, dear HFY writers, stop doing this. Please, please, please stop.
Bob sat on the bridge of the Earth Ship Big Birtha, the lights blinked normally… Zzz… this reader is asleep.
If I encounter one more HFY story that starts like this, I might scream!
How many stories can copy the exact same start without putting us to sleep? Far less than currently exist, I can tell you that.
We do not currently care about your character or the location you want to describe. I, for one, do not give a single flying mouse bum about the normal day a fictional human was having. I might if the brown stuff was already hitting the spinning thing.
Screw that dull stuff! Tell me about the cool thing that happened. We can meet your point-of-view protagonist after the cool thing. But do the cool thing first, for the love of all that is good. Please.
When you are told to start “in media res” (Latin for “in the midst of things”), that does not mean in the middle of the normal day where the thing will go boom. That’s at the edge of the res (things), at best. More like somewhere with a view of the res, maybe. Are we there yet? So bluh!
Instead of blah, give me the Earth-shattering kaboom.

Explosions are cool. Unexpected terror is exciting. Bob sitting in the captain’s chair is boring.
More kaboom; less humans hanging out waiting for the story to happen, please.
If something is going to be on fire later. Start with it on fire right now. That’s the bit we came for.

It’s dangerous to write alone, take this
Here are a bunch of opening lines. Steal them, reuse them, write some better openings with them. Do better. Write anything that is not Bob hanging out before the cool stuff happens.
The massive ship screamed from the sky, removing any notion that we were alone in the universe.
As the Trexians fired the first shot at the human colonists, they foolishly thought this would be a minor skirmish that would be over by mealtime.
Reality ripped and buckled, filling the void with impossible geometry. It lasted mere moments; in that time, an impossibly huge and intimidating brick of a ship had barged into normal space.
This wasn’t how space battles were supposed to go. Hundreds of coffin-sized projectiles were latching onto the hull. The deranged humans were bringing the fight into his distoryer.
It was a Thursday evening when the Vanashi entered Earth’s atmosphere right above the city to demand surrender. The locals were pissed. This was the semi-finals. How dare these fools interrupt the big game?
For some reason, the Atanaskara thought Earth was a good place to dump old battle stations. NASA tracked the massive lump after detecting it out past Jupiter. It followed a roughly calculated trajectory which almost hit the moon. More would soon follow.
Humans always wore encounter suits with mirrored visors, but on day two-hundred and six of the thirteenth-hundred cycle of Vark by the Baralian reckoning, Tharg learned exactly why. It all started when…
To: Admiral Zazizch;
By: Encrypted Proxy 92a-256;
Re: Your plan failed
The humans were not intimidated at all. Send reinforcements. Encounter log attached.
Earth was doomed. The greatest battle craft ever built by the Karnag would have the stupid little planet in firing range any moment now.
The third Blarge of Grune was the day Kamoss Varr asked a human child a simple question and instantly realised he was not cut out for teaching. He would have nightmares for the rest of his life.
The first words of your story have to make a promise. That promise must be “this story is going to be worth your time”. Unless there is a genre of characters sitting about, Bob on his spaceship is not your opening. Jane, in her lab, is unlikely to be the cool thing. Liam, in his workshop, is just as dull. These people and these places are not exciting – they’re not even interesting. What happened next might be, so skip to that bit.
So, please, writers of fiction on the interwebs, fewer people sitting on their bum and more cool things going kjaboom please.
Fixing my ActivityPub and WebMention comments to make them play nicely.
June 6, 2026 in coding-and-development by Matthew Brown
I was struggling to get both comments and replies to post while only showing “facepile” for likes and boosts. I had no one to blame but myself as I coded the theme from scratch.
I’m posting this so the next time I have this problem (there is always a next time), future me can look up the answer.
This time, present and past me had no answer or even much of a clue.
After giving up and asking ChatGPT WTF things were not doing what I wanted (show replies and mentions at the same time), I found a workaround, which left my comment count off.
My fix to show all comment types (but not likes and boosts) was an array constant in functions.php (theme).
define('LORDMATT_COMMENT_TYPES_NO', array(
'like',
'repost',
'boost',
));
This defines a list of comment types that don’t need to be shown. Defining this way only works in PHP 7+, so use it with care.
Then I did this in comments.php (theme) to reach the “it works, nobody touch anything” state.
$comments = array_filter(
$comments,
function( $comment ) {
$type = strtolower( get_comment_type( $comment ) );
return !in_array(
$type,
LORDMATT_COMMENT_TYPES_NO,
true
);
}
);
wp_list_comments(array(
'type'=>'all',
'max_depth' => 10,
),$comments);
My comment count was off. This is because I was undoing whatever filter was trying to help me but only for the show comments part.
This time, the same approach worked, but a filter in functions.php
add_filter('get_comments_number', function($count, $post_id) {
$comments = get_comments([
'post_id' => $post_id,
'status' => 'approve',
'type' => 'all',
]);
$comments = array_filter($comments, function($c) {
$type = strtolower(get_comment_type($c));
return !in_array($type, LORDMATT_COMMENT_TYPES_NO, true);
});
return count($comments);
}, 10, 2);
To be honest, I’m not the greatest fan of functions defined in function calls, but it got the job done.
There are probably better ways to approach this. I’ll probably write something better commented and tested for efficiency so I can roll this out as a fix for a few other places, where all the mixed comment types don’t work properly.
Feel free to criticise my rushed code.
I’m sure that, with some work, I could write a plugin that makes sure it all just works. This hack will do me for now, though.
I’ll update this post if I do something sensible with the code.
Use at your own risk: This current code is hackish and too small to worry about, so I release the truly minimal value I bring to the party for this specific code into the public domain insofar as is reasonable and mine to do so.
Blog Activity
-
Matthew Brown wrote a new post on the site The Fantastic Site of Lord Matt 2 years, 3 months ago
A possible reason boots.com is so slow
Just recently, I got curious about how slow boots.com is. I looked at the infrastructure but other than a mighty slow ping time on the domain, I saw […] -
Matthew Brown wrote a new post on the site The Fantastic Site of Lord Matt 2 years, 3 months ago
I have a new theory about Boots's car crash of a website.
I’ve become somewhat obsessed with the boots.com website and its endlessly hilarious bad front end. My theory in my last post was a bad or underskilled […] -
Matthew Brown wrote a new post on the site The Fantastic Site of Lord Matt 2 years, 3 months ago
I suspect that boots.com has vacant senior developer positions
Nothing else explains what I just saw. Yesterday evening, I decided to create an account with boots.com. I realised that I was paying more with a 15% […] -
Matthew Brown wrote a new post on the site The Fantastic Site of Lord Matt 4 years, 9 months ago
Tonight, I begin the process of moving into a fresh and updated version of the classic Lord Matt look and feel. Already I have found a few shortcomings to address. For me and this site, this is completely […]

-
Matthew Brown commented on the post, Hard Math, on the site The Fantastic Site of Lord Matt 4 years, 9 months ago
OMG, younger me. No one cares.



