Blog

More than you expected?

You're reading everything on my blog - including, among other things:

  • notes (short, "Tweet-like" messages),
  • reposts (links to other people's work, sometimes with commentary),
  • checkins (records of places I've visited, often while geo*ing), and
  • videos ("vloggy" content).

That might be more than you wanted to see, if you're only interested in articles (traditional long-form blog posts). Click a link to filter.

Things Champ’d Up thinks are uniquely American

Filter US-centric content?

I’ve enjoyed the mixed-bag that are Jackbox Games since… well, since You Don’t Know Jack‘s UK edition!1 Nowadays they’re better known for the Jackbox Party Pack game series, which can be a real riot of beer-and-pretzels sofa-gaming fun, if you’ve got the right crowd2.

Champ'd Up screenshot showing competition for The Champion of Cult Leaders, featuring Smarmy Frog versus Trump.
This wasn’t one of our games, but I’ve definitely drawn convicted felon Donald Trump a few times while playing it!

One of those games is Champ’d Up, in which you draw-and-name characters who you think will win a particular contest, e.g. “The Champion of Looking Suspicious”. Another player, without seeing the prompt, tries to develop a character who will beat you at that category in a popular vote3.

There’s this checkbox in most of the games that lets you “filter US-centric content”. This aims to remove most cultural references that, if you’re from a part of the Anglophone world outside of the US, you might “not get”.

Screenshot from Champ'd Up's settings page showing the Filter US-Centric Content checkbox.
I’ve no idea what the “Family-Friendly” checkbox does, and I have no intention of finding out4.

I check that box as standard because, like many of us from “rest of world” I don’t understand things like pledging allegiance to a flag, being able to buy firearms in a supermarket, pies only being a sweet food and never a savoury one, refusing to use metric measurements at every opportunity, the risk of going bankrupt if you have to go to hospital, and using fractions like “one fourth” even while having a coin called a quarter. These are cultural touchstones that are alien to me. And I figure that toggling that switch to “on” is shielding me from having to learn these unfamiliar concepts, right?

But I found myself wondering: what exactly gets filtered out when I check that box? Because determining what the developers think is US-centric is a more-interesting question than what I think.

Scene from Team America: World Police, showing Spottswoode in front of INTELLIGENCE's computer screen, showing a world map.
Rest of world? Fuck yeah.

What does Champ’d Up think “US-centric” means?

Fortunately, Champ’d Up‘s prompt data files are stored in JSON files (with a slightly-unusual file extension .jet), which means that – once we’ve found them – it’s pretty easy to extract all of the prompts and metadata from them. I’m on a Mac right now, and I found the files in the horrendously-long path ~/Library/Application Support/Steam/steamapps/common/The Jackbox Party Pack 7/The Jackbox Party Pack 7.app/Contents/Resources/macos/games/WorldChampions/content.5

Let’s see what prompts Champ’d Up marks as being “US-centric”:

Terminal showing command `jq -r '.content[] | select(.us == true) | .contest' WorldChampions*.jet` resulting in a long list of 'The Champion of...' prompts.
My go-to tool for extracting data from JSON is the excellent jq. If it’s not already in your toolbox… then, well, it should be! My command, if you’re looking to copy/paste, was: jq -r '.content[] | select(.us == true) | .gameText' WorldChampions*.jet

I get that I’m coming from the perspective of a British person, and maybe my experience isn’t universal. But many of these seem to be… not as US-centric as they’re made-out to be!

Here’s the full list:

  • the Midwest
  • High School
  • Bachelorette Parties
  • Country Music
  • Orlando
  • Misdemeanors
  • Margaritaville
  • the Underworld
  • Black Friday Shoppers
  • Jocks
  • Twerps
  • Forever Alone
  • Porta Potties
  • Being Zen
  • My Way or the Highway
  • “Bless Their Heart”
  • Spring Break
  • West Coast Livin’
  • the Hootenanny
  • Tinseltown
  • Applebee’s
  • Village Idiots
  • Looking Lost
  • Monster Truck Fans
  • Hot Topic
  • Having An Estranged Family
  • Hogging The Bathroom
  • PBS
  • Paul Giamatti Roles
  • “Burn It With Fire”
  • Thanksgiving Dinner
  • “Do You Know Who My Dad Is?”
  • Being Emotionally Stunted
  • Peeing in the Pool
  • Going Down in a Blaze of Glory
  • the Gap Year

Sure, some of these are uniquely American like spring break, PBS, and Black Friday (although that last one’s been leaking lately).

But do Americans think that the rest of the world doesn’t have gap years or village idiots?6 That we don’t have people who pee in pools or hog the bathroom? Or that we can’t translate “bachelorette party”, “high school” or “porta potties” to our local dialect (while simultaneously expecting us to be fine with “theater”, “dive bar”, and “Axe body spray”)?

Edited Champ'd Up screenshot showing the battle for The Champion of Editing Videogame Metadata, pitting Friendly Dan against Hacker Dan.
In case you’re wondering “wait, can I edit those .jet files?” then I’ve got good news for you…

I note that several things not filtered out by the “filter US-centric content” option include “The Champion of Being $100,000 In Debt”, “The Champion of the Barn Dance”, and “The Champion of Jaywalking!”, all of which clearly do require more translation!7

I guess what I can conclude from this is that “US-centric” doesn’t necessarily mean the same thing to people in the US… as it does to those of us in the rest of the world.8 Which was an interesting thing to learn from a random thought about a toggle-switch.

Footnotes

1 Which was already 8 years old by the first time I blogged about it.

2 Jackbox games can also work okay streamed to your friends over Zoom: I wrote a guide to doing this well based on my experience of hosting many such events during the most-isolated bits of the COVID-19 pandemic.

3 There’s marginally more to it than that, like the fact that previously-drawn characters – even from earlier games – can be called back up in tag team matches to take over when the prompt changes… but you’ve got the essence of it.

4 In my last game I ended up inventing a character called “Chad McHugedick”, with an appropriately inappropriate picture. And that wasn’t even for an especially-racy prompt!

5 If you want to repeat my experiment on a PC then the equivalent path, once you find your steamapps/ folder, will be .../steamapps/common/The Jackbox Party Pack 7/games/WorldChampions/content.

6 Perhaps Americans really do think these things are unique to their country. Maybe my Team America: World Police reference was more-relevant than I thought!

7 For US readers who need a hand: dollars aren’t the currency in all Anglophone countries, and the value of the US dollar is for many of us something we’re not acutely familiar with. I’ve never heard of or seen a “barn dance” here in the UK; I reckon the closest thing we’ve got would be a cèilidh? And “jaywalking” doesn’t really appear in the vocabulary of non-US English, on account of it not being a crime at all in many countries where driving everywhere isn’t the default option (here in the UK, for example, as long as you’re not actively or maliciously obstructing traffic, you can cross most roads wherever you want to).

8 And, perhaps, that maybe Jackbox Games would like to bring me on as an internationalisation consultant in exchange for free videogames?

× × × × ×

Your phone is not the problem

This is a repost promoting content originally published elsewhere. See more things Dan's reposted.

Jeff says that he is a better person without his phone.

Widdershins says they’re the same with or without their phone.

I think they’re both right because when Jeff gets on his phone, he doomscrolls. When Widdershins uses his phone, he contacts his family, uses it as a digital planner, music and taking photos.

Jeff is a better person without his phone because Doomscrolling on X (formerly called Twitter) has no benefits. News outlets and social media make more money the more time we spend on them. Good news don’t catch our attention. Negative news keep us worried. They concern us so we want to be updated as much as possible on them.

But as Widdershins’ example shows: your phone is not the problem, its how you use it.

I’ve been following this series of blog posts with interest and I think that Antonio’s hit the nail on the head.

There’s nothing inherently dangerous about phones. But they do introduce risks, and the severity of those risks varies from person to person.

Me: I’m pretty disciplined about my phone. I don’t think I have or use any “endless stream” services: the closest thing would be my feed reader, which is curated down to my chosen providers, not by an attention-craving algorithm. I keep very few games installed and don’t play them when I’m doing anything else so they’re not a distraction from any kind of communal activity (in fact, I keep relatively few “apps” installed too: if there’s a Web-based version that works even remotely as well, I’ll use that… and if it keeps trying to “push” me towards an app version, I’ll just use it less rather than cave!).

I don’t even always pick it up for every notification bell (and I keep many of those suppressed, so they’re only “when I’m checking anyway” messages): if I’m doing something else, I’ll get to whatever ‘bing’ that was later, and yes that even includes instant messengers (if you absolutely require an immediate response and need to know whether you’ll get one, why didn’t you call me, hmm?).

This feels to me like a healthy relationship with my phone. I’m not saying it’s impossible to have a healthy relationship with yours if you don’t do these things: but it’s got to be harder. I’ve people who, seconds after the conversation slows or show ends or whatever will immediatelyunthinkingly, pull out their phone and disappear into it, and that seems like such an unhealthy habit.

It’s for these people, as well as for those who’ll endlessly-scroll instead of sleeping or socialising, that downgrading to a brickphone might be a sensible move, at least in the short term.

For the rest of us, it’s probably sufficient to be mindful of our screen usage, remember that it’s valuable to disconnect and let your brain rest, too. As Lyteforce observes, you can start by not using your phone while you poop. Then, once you’ve got the hang of that, get Marie Kondo on those settings and prune the notifications that don’t bring you joy. Soon you’ll be leaving your phone behind when you get up to stretch your legs or make yourself a drink. And you’ll be happier for it.

That’s just what I think, anyway.

Pence Per Sht

Every time I see Sainsburys comparing the value-for-money of different brands of toilet roll, the abbreviation they use catches me out and I think they’re telling me how much paper I should be “using”.

Online supermarket showing several brands of toilet paper with the price displayed alongside a breakdown showing the price (in pence) per hundred sheets (of toilet paper), but "sheet" is abbreviated to "sht" which looks like... a different word I associate with the product.

×

WordArt is still supported… in Microsoft Outlook!

While at work today, debugging a weird edge-case where some emails to Outlook have some unexpected padding, I learned something weird: Microsoft Outlook still (kinda) supports WordArt.

Wait, what’s WordArt?

If you’re too young to remember: when Microsoft Office ’97 came out, it shipped with a feature called WordArt. Basically, these were a somewhat-customisable set of on-demand clip-art-esque text styles that you could apply to your own text.

Screenshot of the Word 2003 WordArt preview window showing a variety of preset styles.
Most of these were as unhinged as PowerPoint’s more-“exciting” transitions… and were overused by exactly the same people, in exactly the same ways.

The ease with which you could make use of these wacky designs meant that, for a while during the late 1990s, you wouldn’t see a poster advertising a school disco nor the front page of a GCSE essay that didn’t feature at least one1 of these colourful eccentricities.

They gradually got phased-out and replaced with more-tasteful tools, but if you used them back in the day then images like the one above are sure to evoke a feeling of nostalgia.

Outlook’s evolution

Even as Microsoft adopted the Web as a platform, they were half-hearted about it. While HTML rapidly became used for things like styling emails as well as Web pages, Microsoft resisted the change, instead favouring two of their own standards in their own email clients. Outlook Express preferred to do “formatted” email using RTF, the format underpinning Microsoft Write, while fully-fledged Outlook effectively used Microsoft Word as its formatting engine2.

Screenshot of Outlook '97 composing a formatted email.
Did you ever notice how Outlook ‘9X/2K had basically the same formatting toolbar as Word? That wasn’t a coincidence: they were using the same underlying formatting engine too!

You can still use RTF in some modern versions of Outlook (but you shouldn’t). But nowadays if you’re typing formatted text in Outlook, you’re almost-certainly creating HTML (albeit probably still using Microsoft Word3).

But this introduced a problem with backwards-compatibility. If Outlook switched to HTML as its default rendering format, what would happen to all the old WordArt? I’m confident that somebody asked this in a meeting at Microsoft in around 2007.

Backwards compatibility

It turns out that Microsoft implemented a whole stack of custom CSS directives, just to support WordArt in Outlook4. For real! You can use CSS like mso-effects-shadow-angledirection: 5400000;5 to put a text-shadow directly below your text or mso-style-textoutline-outlinestyle-dash: longdashdotdotgel; to outline it with a mixture of dots and dashes. And it only works in Outlook. These form part of a translation layer for converting WordArt to and from a HTML-like format6.

So yeah: you can send an email containing classic WordArt to a modern Outlook installation and it still looks as horrible as it always did:

Screenshot of Outlook on MacOS showing WordArt of the words 'DanQ.me' in an email.

An unanswered question

But you know what I find myself wondering? How do Microsoft’s new, Web-based Office Suite apps handle this?

I assume that if you send them “classic” WordArt from e.g. Outlook ’97, then they render it correctly. But to do that, they’re presumably…

  1. Receiving the original WordArt in whatever proprietary format Word ’97+ used to put these graphics into emails.
  2. Converting the WordArt to mso-prefixed CSS directives that Outlook 365 can understand.
  3. Converting those custom CSS directives into standards-compliant modern CSS directives that your browser can understand.
  4. Rendering that to the page you see the WordArt in all its… “glory”.

That seems like an insane amount of work, but it might not be far from reality. The (horrifying) alternative would be that Microsoft maintain a cluster of virtual machines running old versions of Windows, Office, and Internet Explorer, used just to convert WordArt into static images!

Or maybe Outlook 365 for Web finally killed off WordArt for email? I haven’t tested. But if it did… then it was probably about time!

In any case, this was a fun and unanticipated discovery of some long-maintained backwards-compatibility. It brought a smile to my face during the otherwise-tedious task of regression-testing blind-coded changes against a variety of versions of Microsoft Outlook!

Thanks for reading!

Footnotes

1 More-likely, you’re remembering a document that had a stylistically-conflicting pair of WordArts, and that’s why it burned itself into your memory so-well.

2 It’s actually all much more-complicated than that, because of course it is, but it’s close-enough to the truth.

3 This is the source of the problem I’m working on right now: I have an email that looks fine in every other HTML-compliant email client… but Outlook – and, specifically, only Outlook on Windows – mangles a tiny bit of the formatting. Now personally I think that shouldn’t be a problem: HTML was never supposed to be a pixel-precise rendering medium and a little wiggle room should be expected to come as standard (also, most emails ought to be plain text in the first place!): but we’ve a client who’s pickier than that, and they’re the one paying the bills, so I’d better get to looking into this!

4 You’d be forgiven for asking whether they might have instead chosen to spend that time and energy implementing better CSS support in general into their software, instead of making sure that old emails containing WordArt can still be enjoyed in their full graphical glory decades after they were originally sent. But what would I know?

5 Why 5400000, you ask? Well the mso- prefixed CSS directives for Outlook turn out not to use normal-person units like degrees or even radians to measure angles, instead using an unnamed unit representing a sixty-thousandth of a degree each. Presumably for backwards-compatibility reasons. Similarly, opacity is measured in thousandths of a percent, without mentioning the unit. A lot of this stuff is undocumented and nerds are still trying to reverse-engineer it all.

6 This isn’t how I created the headings in this blog post… those were made with the help of some a Codepen by Katherine Kato. If you’re looking for something just as nostalgic but easier to use, Make Wordart is a cool tool!

× × ×

F-Day plus 214

It’s been 214 days since I had to evacuate my house following a flood, and repair work is (intermittently) underway. And there are so-many moving pieces to this dance that… it’s little wonder that people are getting confused.

Like:

Our insurance company appointed a relocations specialist to handle our temporary accommodation needs (moving van, sourcing and paying for rental properties, etc.).

Mostly what that means right now is that the relocations specialist pays our rent. They send money to our letting agent. Who send the money to our landlord. The relocations specialist reclaims this cost from our insurance company. And, I would assume, everybody takes a cut along the way.

The building contractors, also paid for by the insurance company, are confident they can have our house ready to move back into in November (this is hard to believe to look at it, but they assure us that once they can get the remaining materials, everything will pick up speed). The building contractors reported their timeline back to the insurance company.

Then the insurance company picked a date a little after that, and asked the relocations specialist to cut off our temporary accommodation from that date.

Then the relocations specialist emailed our letting agent, copying me in, to give notice that we’ll be moving out of our “Chicory House“.

This clearly confused the letting agent. The letting agent seem to have assumed that the relocations specialist is somehow representing the landlord, when in actual fact they represent us, the tenants. Per relatively new UK legislation, the landlord can’t simply give us notice and evict us without following certain complex legal processes and giving 4+ months notice. But we, the tenants, can just give two months notice and bounce. So the letting agent have told the relocations specialist that they can’t ask us to move out (of the house that they’re paying for, on our behalf). 🤣

The bottom line is that I’m now deep in the CCs of an email exchange between the company who pays my rent… and the company they pay it to… about whether they can stop paying my rent for me… when I move back into my own house. 🙄

One email from me would probably clear up the confusion. But I think that this time… I’ll let then work it out for themselves.

A Postcard from a Labyrinth Artist

My collection of “postcards from the Internet” grew again this week when I received another complete-surprise postcard. Take a look at this:

Composite photo showing front and rear of a postcard, showing an aerial photograph of Toronto on one side and a hand-drawn labyrinth on the other.
I’m sure that HïMY didn’t know, but I was obsessed with labyrinths and mazes when I was young. I’d have loved it as a kid if there’d been a labyrinth artist in my town!

This postcard comes from HïMY SYeD, a Toronto/Vancouver-based historian, Islamic scholar, and… prolific labyrinth artist!

The card features a hand-drawn labyrinth but also the domain name labyrinths.ca, at which there’s a website showing a lot of his work1. He’s built or drawn labyrinths all over the place, calling many of them “outstallations”: hey look, this one’s got the same design as the one on the postcard!

A large octagonal labyrinth drawn in a dry paddling pool in a park.
Look at this monster labyrinth! “At 22 lanes, and being an even number of lanes, labyrinth hackers will grasp how hard it was to design,” SYeD said of it.

I’m still really loving receiving postcards from the Internet (please send me more!), and I’m starting to feel that maybe I should be “giving back”. I wonder, if I got a stack of postcards and let people put their address into a form if they were happy to receive one, would people want to?


I’ve had several folks talk about how much they enjoy my postcard collection and say that they’d do the same… if only they could afford a PO Box so that they could hide their address2: maybe such folks would be happy to share an address privately to get a single card? Worth some thought.

Footnotes

1 In case you have the same problem I do: the website is intended to be viewed over plain-old http://, but its server is configured to be available over https:// too… so if your browser, like mine, tries to auto-upgrade to https:// where available, then you might find that all the images don’t work (because they’re being served from http:// addresses) until you manually switch back to http://. So yeah… if you visit HïMY’s site and can’t see any images, check your address bar and turn the https:// into http://.

2 I’m only able to do it because I’m using a pay-as-you-go PO Box provider, but I know that’s not at option in every country.

× ×

On Publishing Your Salary

This is a repost promoting content originally published elsewhere. See more things Dan's reposted.

Of the handful of times I’ve seen people sharing their salary history, they are always very high. For context, a six-figure (£100,000) salary in the UK puts you in the top 4% of earners in the country.

This is where my concern starts – we only ever see these high outliers, so the sample size is incredibly skewed. Nobody is rushing to publish their £25,000 salary history, which means the curmudgeon in me can’t help but feel that these pages can sometimes read more like a humble brag than genuine advocacy, even if the author’s intent was entirely pure.

For the reader, this can be deflating, rather than empowering. A developer earning a perfectly respectable £50k (which already puts them in the top 15% of UK earners) might look at Jane Smith earning £105k and think, “Jesus, I’m doing terribly.”

But salary is highly subjective. It depends on where you live, the company you work for, the unique responsibilities of your role, what your peers earn, how hard you negotiate, and how supportive your manager is.

When you strip all that context away and just publish a high number, what is the reader supposed to do with it? If our developer goes to their manager and asks for a 100% pay rise because they saw Jane Smith online earning £105k, they’re going to be laughed out of the room. Because, without context, the raw numbers are useless.

As always, wise words from Kev Quirk.

I publish my salary on my site, and I have ever since I was encouraged to do so by Jeremy Keith (who, I was surprised to discover, earns about half what I do despite being approximately twice as talented: salaries are, as Kev says, highly subjective and not-so comparable).

One thing I do to try to mitigate that is to publish my entire salary history for my current (i.e. software engineering) career. This shows progression, and development, and the shape of different industries (in particular how the academic sector compares to “big tech”). There’s a noticeable “jump” in my salary history if you look for it!

But I don’t know how well that’s contextualised. Should I be saying more, like: what relevant qualifications I had by each point (it’s possible to argue that almost none of my qualifications are “relevant”, because almost all the career-useful stuff I’ve ever learned didn’t come from my degrees etc… but some of my employers – and one in particular – attached value to my academic achievements so maybe they opened some doors?). Or, as Callum Rollo does, perhaps I should be balancing it against other factors (my salary, even when it was briefly ~£111,000, doesn’t seem so significant if you know how much I owe to the bank on our mortgage!).

I suppose what I’m saying is that I agree with Kev: context is everything here, and the picture’s distorted if only some subset of people publish their salaries. But I’m going to keep on publishing mine, because I think that salary transparency is an good thing overall, and the labour market gains a sliver of their employers’ power when they’re willing to talk openly about what they’re paid: whether pseudonymously via the likes of GlassDoor or openly on their publicly-accessible websites… every little helps, even where it skews the picture a little.

But thanks, Kev, for the reminder that the situation’s more-nuanced than some would have you believe, and for challenging us all to frame our transparency with a little bit of context.

Re: How I made…

This is a repost promoting content originally published elsewhere. See more things Dan's reposted.

Noah S said:

Here is a php script that blocks many AI bots from accessing my website.

$agent = $_SERVER['HTTP_USER_AGENT'];

$botarray = array("GPTBot", "ClaudeBot", ..., "Big Sur AI", "GrokBot");

if (in_array($agent, $botarray)) {
echo '<meta http-equiv="refresh" content="0;url=https://art-noah-s.eu/.htaccess">';
exit();
}

if (in_array($agent, $botarray)) {[code to execute]} is a conditional code. It only executes whats between { and } if the condition is met. In this case it’s that $agent is listed somewhere in $botarray. In summary, if you’re trying to access my site with something listed in that long list of bots, the code activates and otherwise it doesn’t do anything.

echo ‘meta http-equiv=”refresh” content=”0;url=https://art-noah-s.eu/.htaccess”‘; (<> tags removed for functionality) is a piece of code that immediately redirects to my htaccess file.

My .htaccess starts with this code.

<Files .htaccess>
order allow,deny
deny from all
</Files>

 

I like that you found a solution that works for you, but I wonder if this could have been optimised a little. Here’s what you’ve got so far:

  1. So long as the bot hits a URL that’s run through PHP, your code runs (limitation:probably  doesn’t work on e.g. image URLs, stylesheets, static pages if you have any, etc.)
  2. If the user-agent matches a banlist, you send some HTML code to ask them to redirect (possible improvement: if you want to redirect, you can do that faster with a HTTP header than with HTML)
  3. The page you redirect them to is a .htaccess file, which applies to the whole directory, but contains a rule that only applies to itself and which blocks all access (possible improvement: if your server supports .htaccess file, you can probably do the whole thing with just that!)

I assume that you’re doing this rather than just a robots.txt file because you don’t trust those bots to respect robots.txt (although this does imply that you do trust them enough not to spoof their user-agent to get around the blocks!).

Alternative 1: HTTP 403s in pure PHP

Let’s take some improvements one step at a time. First, in PHP: rather than doing a HTML-redirect to a blocked page, why don’t we just send the HTTP 403 right then and there:

if (in_array($agent, $botarray)) {
  header("HTTP/1.1 403 Forbidden");
  exit();
}

This obviates the need for a .htaccess file at all and removes the need for a redirect. If you’re sticking to a PHP-only approach, that’s how I’d do it.

Alternative 2: Blocking at the webserver

An even stronger solution would be to drop the PHP code entirely and switch to blocking at the webserver! This saves your resources (webservers are great at filtering on headers and they’re less computationally-expensive than spinning up a FCGI thread/PHP interpreter) and it means that your blocks can apply not only to URLs served using PHP but also to static files!

Blocking badly-behaved bots in Caddy

My go-to webserver these days is Caddy, where I’d use some configuration like this in my Caddyfile:

@aibots header_regexp User-Agent "GPTBot|ClaudeBot|Claude-User|Claude-SearchBot|CCBot|Google-Extended|Applebot-Extended|Facebookbot|Meta-ExternalAgent|Meta-ExternalFetcher|diffbot|PerplexityBot|Perplexity‑User|Omgili|Omgilibot|webzio-extended|ImagesiftBot|Bytespider|TikTokSpider|Amazonbot|Youbot|SemrushBot-OCOB|Petalbot|VelenPublicWebCrawler|TurnitinBot|Timpibot|OAI-SearchBot|ICC-Crawler|AI2Bot|AI2Bot-Dolma|DataForSeoBot|AwarioBot|AwarioSmartBot|AwarioRssBot|Google-CloudVertexBot|PanguBot|Kangaroo Bot|Sentibot|img2dataset|Meltwater|Seekr|peer39_crawler|cohere-ai|cohere-training-data-crawler|DuckAssistBot|Scrapy|Cotoyogi|aiHitBot|Factset_spyderbot|FirecrawlAgent|bedrockbot|DeepSeekBot|GoogleAgent-Mariner|Gemini-Deep-Research|Google-NotebookLM|Google-Agent|GoogleAgent-URLContext|Google-Firebase|Googlebot|bingbot|MistralAI-User|SemrushBot|SemrushBot-FT|SemrushBot-ESI|AddSearchBot|bigsur.ai|Brightbot|Crawlspace|EchoboxBot|FriendlyCrawler|LinerBot|Panscient|Panscient.com|Poseidon Research Crawler|SBIntuitionsBot|TerraCotta|Thinkbot|Yak|YandexAdditional|YandexAdditionalBot|anthropic-ai|Slurp|Baiduspider|YandexBot|AhrefsBot|MJ12Bot|facebookexternalhit|TwitterBot|LinkedInBot|SlackBot|ChatGPT-User|Soguo web spider|Claude-Web|magpie-crawler|ChatGPT-User|OpenAI|Claude-Code|quillbot.com|MyCentralAIScraperBot|ChatGPT Operator|Grok|DigitalOceanGenAICrawler|LINER Bot|Big Sur AI|GrokBot"
abort @aibots

Blocking badly-behaved bots in Apache

Based on your use of .htaccess files, though, it sounds like you’re using Apache. If you replaced your .htaccess file’s contents with this, you’d probably get the same result (I’m assuming you’ve got mod_rewrite enabled already).

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(GPTBot|ClaudeBot|Claude-User|Claude-SearchBot|CCBot|Google-Extended|Applebot-Extended|Facebookbot|Meta-ExternalAgent|Meta-ExternalFetcher|diffbot|PerplexityBot|Perplexity‑User|Omgili|Omgilibot|webzio-extended|ImagesiftBot|Bytespider|TikTokSpider|Amazonbot|Youbot|SemrushBot-OCOB|Petalbot|VelenPublicWebCrawler|TurnitinBot|Timpibot|OAI-SearchBot|ICC-Crawler|AI2Bot|AI2Bot-Dolma|DataForSeoBot|AwarioBot|AwarioSmartBot|AwarioRssBot|Google-CloudVertexBot|PanguBot|Kangaroo Bot|Sentibot|img2dataset|Meltwater|Seekr|peer39_crawler|cohere-ai|cohere-training-data-crawler|DuckAssistBot|Scrapy|Cotoyogi|aiHitBot|Factset_spyderbot|FirecrawlAgent|bedrockbot|DeepSeekBot|GoogleAgent-Mariner|Gemini-Deep-Research|Google-NotebookLM|Google-Agent|GoogleAgent-URLContext|Google-Firebase|Googlebot|bingbot|MistralAI-User|SemrushBot|SemrushBot-FT|SemrushBot-ESI|AddSearchBot|bigsur.ai|Brightbot|Crawlspace|EchoboxBot|FriendlyCrawler|LinerBot|Panscient|Panscient.com|Poseidon Research Crawler|SBIntuitionsBot|TerraCotta|Thinkbot|Yak|YandexAdditional|YandexAdditionalBot|anthropic-ai|Slurp|Baiduspider|YandexBot|AhrefsBot|MJ12Bot|facebookexternalhit|TwitterBot|LinkedInBot|SlackBot|ChatGPT-User|Soguo web spider|Claude-Web|magpie-crawler|ChatGPT-User|OpenAI|Claude-Code|quillbot.com|MyCentralAIScraperBot|ChatGPT Operator|Grok|DigitalOceanGenAICrawler|LINER Bot|Big Sur AI|GrokBot).*$ [NC]
RewriteRule .* - [R=403,L]

This solution blocks those bots’ access to your entire site (even e.g. images), and doesn’t hit PHP at all (so it’s fast and saves your processors for the traffic you care about).

I’ve not tested it (again: I don’t often use Apache any more: I migrated to Nginx for the fancy features and I’m now mostly-migrated to Caddy for the simple configuration), but I think I’m close to correct; some tweaking might be needed.

Testing your blocks

If you want to thoroughly test your blocks, you can trivially spoof your user-agent from curl, e.g.:

~ # Request the page as Firefox, get a HTTP 200: ✅
~ curl -sI -H "User-Agent: Firefox" https://art-noah-s.eu/ | head -n1
HTTP/2 200
~ # Request the page as GPTBot, get a HTTP 403: 🎉
~ curl -sI -H "User-Agent: GPTBot" https://art-noah-s.eu/ | head -n1
HTTP/2 403

What you’ve already good seems good enough for your needs, Noah. But if you want to take it to the next level, hopefully the ideas above will help!

Dan Q did not find GC3C7FT Woodies

This checkin to GC3C7FT Woodies reflects a geocaching.com log entry. See more of Dan's cache logs.

After seeking (and finding, surprisingly) the 2026-09-13 51 -1 geohashpoint down in the Brook Hill nature reserve, the geohound and I came to try to find this cache, too. After finding the correct way into the nature reserve (access from Verinia Court now being disallowed, apparently) we quickly found the relevant board and, after pushing some plants aside, found the requisite six digit number.

A short walk later we found a solid candidate hiding spot that matched the hint, but an extended search in and around it yielded nothing. Possibly my geosense is off this morning (in my defence, I got stung in the crotch by a wasp about 20 minutes ago!) or maybe this cache is missing. Either way, a DNF from the pupper and I today.

Geohashing expedition 2026-09-13 51 -1

This checkin to geohash 2026-09-13 51 -1 reflects a geohashing expedition. See more of Dan's hash logs.

Location

Nature reserve near Woodstock, Oxfordshire. It’s unclear from the maps whether the hashpoint will be accessible.

Participants

Plans

I woke early after a series of nightmares about having to move house yet again (I’ve done that a lot, this year, on account of the flood that rendered my house uninhabitable in February), except this time the house we moved into was occupied by some kind of bear-like monster that chased me around the place.

Anyway: having woken up I decided to take the dog out for a walk, and I noticed that the hashpoint up here in Woodstock might be accessible. The maps show it as being not in the nature reserve but in what could be the gardens of the nearby houses, so this might all come to naught.

Expedition

The dog and I parked at Union Street Car Park and set out on our walk. I’d originally anticipated entering the nature reserve via a footpath marked from Brook Hill, but when we got there I discovered a “danger – no entry” sign. I decided to ignore it – it was probably there back from when this valley flooded, and wasn’t relevant any more. Tempting fate, I moved to walk past it, snapping a photo of the sign on the way.

Blurry photograph of a French Bulldog running away from the foot of a signpost, on a grassy trail.

This is all I managed to capture of the sign, though, because something distracted me…

That’s when I noticed the wasps. Lots of them, buzzing around a nearby tree. Probably their nest was nearby and they were coming over to investigate me and decide whether or not I was a threat (I don’t think they were the reason for the danger sign!). In any case, this is where the next problem began: I have a hole in the crotch of the trousers I’m wearing.

Close-up of the crotch of a pair of black tracksuit bottoms, with some skin and underwear visible through a small hole.
It’s not a big hole, but it turns out that it didn’t need to be.

It turns out that a wasp had managed to fly up inside the groin area of my trousers and I didn’t notice until… it got partially-squished between the sensitive parts on the inside of my inner thigh… and the even-more-sensitive parts next to them! I became aware of a sharp stinging sensation, and then another, and it quickly became a burning sensation as I swatted at my legs to try to liberate, or else kill, the monster. Meanwhile, all of the wasp’s friends were now heading my way, providing reinforcements for their companion.

So I ran.

A fawn-coloured French Bulldog trots along a damp forest path.
The doggo had a great time and couldn’t tell what I was complaining about.

The dog and I had to sprint deep into the woods before we were sure that none of the little bastards were still following us. I’d been working on adrenaline (and the dog had been working on her general desire to run around and be crazy), and hadn’t noticed until I was able to slow down quite how unpleasant my sore and swollen parts were as they rubbed against one another. Ugh.

Dan, a white man with a goatee beard, grimaces as he holds his crotch, alongside a French Bulldog on a woodland footpath.
Do not recommend.
We regrouped by a stream and found our bearings. We’d come some way from our intended course, but I plotted a series of paths that would take us close, and the pupper and I bravely pressed on.
A fawn-coloured French Bulldog drinks from a stream.
Refilling the tanks.

Soon we were close to the hashpoint and I observed to my delight that it lay in what seemed to be a no-mans-land; a deeply-overgrown patch between the nature reserve and the nearby housing estate. The undergrowth would be too much for the doggo’s little legs, so I left her behind and pushed on alone for the final hundred metres, stomping through swampy conditions and brambles as I approached the coordinates.

Thick undergrowth in dense woodland.
The hashpoint is somewhere near the centre of this image, next to a tree.

After some stomping around, Geohashdroid was able to draw a small circle of uncertainty within which the hashpoint clearly lay.

Dan stomps through thick undergrowth, a dog's lead hanging around his shoulders.
I can’t manage a silly grin. Will a silly grimace do?

I hacked my way back to the dog (who was happily living her best life, pretending to be a wild wolf, living in the forest) and we made our way home via an attempt at a nearby geocache and checking and updating some OpenBenches data.

Android screenshot showing the user's location of 1.429m from its destination, the 51 -1 geohashpoint.
Proof, thanks to Geohashdroid.

A success, but not one without a significant amount of pain. I can’t believe I’m saying this but: from personal experience, I do not recommend using your genitals to crush wasps.

Tracklog

My primary GPSr’s been missing since… my house flood, I think. But I was able to use the fitness tracker in my watch for a decent GPS tracklog.

Map showing a walk around Woodstock.

× × × × × × × × ×

Opusfived

This is a repost promoting content originally published elsewhere. See more things Dan's reposted.

Goal: get Claude to change the "Add to Cart" button to blue; do not let it change anything else.

This piece of experimental interactive fiction is a silly (but with a grain of truth!) simulation of what it feels like to attempt to use vibe-coding to make small, simple, isolated changes to an established codebase.

If you’ve got the time, it’s worth playing right the way to the “end”. I hope you like blue (you’re going to be talking about it a lot)!

Hot new laptop features

This is a repost promoting content originally published elsewhere. See more things Dan's reposted.

I’m obsessed with this “laptop” our 7 year old made:

I asked him what the different features were. Check out these specs…

I loved this post when I saw it earlier this year, but only just got around to sharing it. I’d highly recommend visiting the full post to see the full list of features that this laptop has, according to Chad’s 7-year-old (and the laptop’s inventor). I especially love the ghost/no-ghost buttons.

I found myself reminded of a piece of art our eldest made for me back when they must’ve been… about four years old. They’d observed that I was very interested in the Internet and so had attempted to draw me a picture of it using what they’d gleaned about what it “is”:

Framed child-drawn picture showing multiple circles, connected by lines, each with a number 0 or 1 in it.

A network of circles, linked together and covered with ones and zeroes. And the zeroes are crossed-through in what the kid, almost a decade on, still refers to as “programmer-style”. Excellent. It’s one of my favourite pieces of child-art ever and it’s framed on the landing outside my bedroom (the one in my still-being-rebuilt real house, not the damn Chicory House I’m so sick of living in).

Anyway, Chad’s son’s laptop is brilliant and now I want a “ghost” button on my laptop.

×

Automattic Minus Matt

This is a repost promoting content originally published elsewhere. See more things Dan's reposted.

Matt Mullenweg takes an involuntary leave of absence from Automattic, the company behind WordPress. Let’s hope he uses his time away thoughtfully.

Matt Mullenweg is out

This morning’s been full of the media coverage that Matt Mullenweg, co-creator of WordPress and founder of (my former employer) Automattic, has been ousted from his CEO position at Automattic by his board. The article linked above is my favourite so far; there are plenty more (or, if you prefer drama, go look on Twitter or Reddit 🤮).

I think this is probably for the best. I’ve previously observed that Automattic has been a ship on fire for a while, and – both for the last few years that I was employed by him, and even more since then – Matt has seemed… distracted and unfocussed. There’ve been huge challenges (some of his own making, admittedly) in both his professional and personal life, and I’d like to imagine that it’s these that led to him making the many… questionable… decisions he’s made over the last few years. I’ve been concerned that he’s leaned-away from open source commitments, over-focussed on lawsuits and AI, and opened his mouth without turning on his brain (something we’ve all done from time to time, but it’s a problem when doing so lands you – or your company – in hot water with the community, the media, the law, or – heaven help you – Tumblrites).

This is good for Automattic

So yeah: I think this can only be good for Automattic, in the long term. I hope that my friends who still work there don’t find the inevitable upcoming shake-up too painful and dramatic. And I hope that this whole thing does not lead to any… further weaponisation of the WordPress project (which remains closely under Matt’s control, even as Automattic does not).

But mostly… I hope that Matt gets the help and support that I think he needs. His sabbatical the other year included “a lot of solo time and introspection”, but perhaps that’s not the right answer this time.

This is good for Matt

I’ve corresponded with Matt on a few occasions (occasionally even publicly e.g. here’s him reblogging me; here’s him graffifi’ing on this blog). As a very early WordPress adopter, back in the day I exchanged emails with him and talked to him on IRC (I remember one time we argued about HTML vs XHTML; in hindsight, he was right on that one). It’s funny: I used a different name back then and so I don’t imagine he ever made the connection that it was the same “me” on the rare opportunities that we connected on Slack when – many years later on – I was his employee!

But my point there is that: for a while, at least, it felt like once upon a time, his heart was in the right place. Which makes me feel like all of his problematic behaviour and questionable choices and acting-out is a result of his environment. A lot of big-tech CEOs seem to get kinda… weird and paranoid and right-wing (if they weren’t already: some of them, of course, were!): maybe the toxicity of the environment erodes at a person who was once well-meaning-but-flawed and turns them into something else.

This should be seen as an intervention

To that end, I optimistically see his removal as CEO as… perhaps a kind of intervention? I think it’s good that he’s been ousted (although I wish he could have done it himself). I think it’ll benefit Automattic in the long run. And I hope that it’ll be good for Matt, too. I hope that he’ll take six… twelve… twenty-four months – whatever it takes – and work out what went wrong. Get some therapy. Write some code (really write it; not get an AI to do it). Play some music. Get some more therapy.

Until he can unpick where his life diverged from that of the WordPress community, the feeling in Automattic, and his younger-self’s idealism… I don’t think he should be in charge of Automattic.

Automattic has a “take what you need” leave policy, and Matt needs to use it. I’m sorry that he couldn’t see that for himself and that he had to be forced to… but in my opinion: it’s the right thing.


Incidentally, this blog post… was proudly written on ClassicPress.

Pixel Area

Pixel Area (@pxlarea@mastodon.social) launched a couple of weeks ago, and DanQ.me was selected to be one of the initial “seed” blogs that were there at the outset (I’m at https://pxlarea.com/x38y34).

I’m… honestly not sure what to make of it. Organising personal websites spatially seems like a strange idea (although there’s a list view available too). And ‘pixel’ seems to be a strange name (at my desktop resolution, my ‘pixel’ comprises… 169 pixels). It’s got a little bit of a “million dollar homepage” (remember that) feel to it… though at least it’s not operating commercially. In fact, the best thing about it seems to be that it’s home-grown indie/smolweb content.

I guess it’s a bit like a webring? (Maybe it needs an embeddable component that lets a site show it’s “space” and hop to neighbours?)

So… yeah; I’m undecided on this one. But, as always, I love when people do cool, random and experimental stuff with the Web!

Screenshot from Pixel Area, showing a blue 'pixel' representing Dan Q.

×

Sundog

That moment when you realise that you forgot your sunglasses but figure you’ll just squint.

A fawn-coloured French Bulldog sits on the wooden decking outside a back door, squinting as she looks towards the sun (evident from the direction of the shadows).

×