Earth Notes: On Website Technicals (2025-12)
Updated 2025-12-31.: EOM, EOY
Today I have been doing some early preparation for data gathering for the End Of Month and End Of Year. That properly starts once the mid-evening supply/gneration meters are manually read, and maybe finishes tomorrow afternoon once all the per-month datasets are checked in, and per-year values and calculations are captured too.
Once all that is in place, a snapshot of the site and data can usefully be pushed to off-site storage and or public repositories as appropriate.
There are usually a few straggling minor data captures and corrections over the following few days, but no one other than me will notice...
I am also slightly jumping the gun and bumping the site copyright year. I know how to live..
Ad Threshold
After noon and some dithering, EOU passed an important threshold for AdSense. So I have turned off ads for almost all m-dot 'lite' pages as they rebuild so as to substantially reduce mean page weight.
: Podcast 2.0 'Person'
I have added a channel-level podcast:person entry to the podcast (main and 'lite') feeds.
<podcast:person>Damon Hart-Davis</podcast:person>
Before this change, with no new podcast material since , the greedy-feeders stats/defence looked like:
# Greedy podcast feed pullers: keys are MD5 hashed User-Agent.
# A non-empty txt map lookup of the %{md5:%{HTTP:User-Agent}} means bad!
# Built: (UTC)
# MAXHITSPERUAPERDAY: 10
# MAXUAS: 25
#----------------
# request-count User-Agent
# MD5hash approx-hits-per-day
#----------------
# 474 iTMS
97f76eb7e02c5ff923e1198ff1c288cd 474
# 308 Podbean/FeedUpdat
54e0e9df937b06cc83fab29f44c02b7f 308
# 203 Spotify/1.0
4582d9bdbcef42af27d89da91c6eb804 203
# 138 Google-Podcast
8dea568b39db0451edd6b30f29238eaf 138
# 56 -
d41d8cd98f00b204e9800998ecf8427e 56
# 51 Amazon Music Podc
d69be2563c9f1929edf2906d41809aea 51
# 34 MuckRackFeedParse
62b46fff1cf5f8af7b4b37a2f783b57a 34
# 19 itms
2e7f714a929b3f52f3c094710819a99a 19
# 12 axios/1.6.8
b534882134248c9a5957e0c011a37037 12
# 11 FeedMaster/4.1
dca30fcc6f45af71c2825280bebba04d 11
# 10 Mozilla/5.0 (Wind
6b9a00393fb1607b0ada13520f814ab5 10
# 10 axios/1.11.0
5c8ae194a6f98a725c992886f3da6e04 10
The updated RSS feeds were checked with Cast Feed Validator.
: VTT CORS Problem
I have observed problems with, for example, audio on the m-dot site refusing to fetch the .vtt captions, complaining Not same-origin
.
An access-control-allow-origin: * header is sent with VTT responses, but in this case the browser is not even trying to fetch the file.
I have added an crossorigin=anonymous attribute (where there is a VTT file available) to generated audio tags for non-desktop (eg m-dot) pages that will be making a cross-domain request back to the www-dot desktop site.
That allowed the VTT file to be fetched (hurrah), but now all the media (eg Opus, MP3) files are complaining CORS Missing Allow Origin
.
I am going to have to set the access-control-allow-origin: * header for any media file that the audio tag (and in due course video) may want to play. That should be safe for all static-served MIME-type audio/* (and in due course video/*) content.
So as a first step to keep things simple, the crossorigin=anonymous attribute should be unconditionally added to all generated non-desktop audio tags.
Adjusting the Apache config for the www. (and static.) sites for involves as a minimum something like:
<IfModule mod_headers.c>
<Location /img>
Header set Access-Control-Allow-Origin "*"
</Location>
</IfModule>
This will burden non audio/video responses with an extra header, so refining it would save bandwidth at a little server CPU cost, eg:
SetEnvIf Content-Type "^((audio)|(video))/.*" TYPE_AV
<IfModule mod_headers.c>
<Location /img>
Header set Access-Control-Allow-Origin "*" env=TYPE_AV
</Location>
</IfModule>
The auto-generated non-desktop video tags are getting the same new crossorigin=anonymous attribute.
Closed captioning for m-dot video is now reported to work by one other person!
It seems that an empty attribute value will do for crossorigin, thus saving a few bytes!
SVN repo backup command
In a few days I want to remember to run (and copy the result off-site):
tar vcfJ SVN-general-www.hd.org.20260102.tar.xz --sort=name general/www.hd.org/
: NTP Battery
About 18 months ago I was getting fed up with the volume of NTP traffic still hitting my no-longer stratum-1 server on my little RPi3.
Getting out of being people's secondary authoritative DNS server is hard in a similar vein...I had tried many ways to mitigate such traffic, I suspected in part baked into software or even consumer device firmware, so took the drastic step of removing the ntp1.exnet.com DNS entry, though did not otherwise adjust the server.
Did it help? Maybe, maybe not, but there are still ~20 NTP packets per second, including replies to the queries that the server does not now ignore outright.