+++*

Symbolic Forest

A homage to loading screens.

Blog

Modern technology

Or, keeping the site up to date

Well, hello there! This site has been on somethng of a hiatus since last summer, for one reason and another. There’s plenty to write about, there’s plenty going on, but somehow I’ve always been too busy, too distracted, too many other things going on to sit down and want to write a blog post. Moreover, there are more technical reasons that I’ve felt I needed to get resolved too.

This site has never been a “secure site”. By that I mean, the connection between the website’s server and your browser has never been encrypted; anyone with access to the network in-between can see what you’re looking at. Alongside that, there’s no way for you to be certain that you’re looking at my genuine site, that the connection from your browser or device is actually going to me, not just to someone pretending to be me. Frankly, I’d never thought, for the sort of nonsense I post here, that it was very important. You’re not going to be sending me your bank details or your phone number; since the last big technical redesign, all of four years ago now, you haven’t been able to send me anything at all because I took away the ability to leave a comment. After that redesign was finished, “turn the site into a secure site” was certainly on the to-do list, but never very near the top of it. For one thing, I doubt anyone would ever want to impersonate me.

That changed a bit, though, in the last few months. There has been a concerted effort from the big browser companies to push users away from accessing sites that don’t use encryption. This website won’t shop up for you in search results any more. Some web browsers will show you an error page if you go to the site, and you have to deliberately click past a warning telling you, in dire terms, that people might interfere with your traffic or capture your credit card number. That’s not really a risk for this site, but the general trend has been to push non-technical users towards thinking that all non-encrypted sites are all extremely dangerous to the same degree. It might be a bit debateable, but it’s easy and straightforward for them to do, and it does at least avoid any confusion for the users, avoids them having to make any sort of value judgement about a technical issue they don’t properly understand. The side effect: it puts a barrier in front of actually viewing this site. To get over that barrier, I’d have to implement TLS security.

After I did the big rewrite, switching this site over from Wordpress to a static site generator back in 2020, I wrote a series of blog posts about the generation engine I was using and the work pipeline I came up with. What I didn’t talk about very much was how the site was actually hosted. It was hosted using Azure Storage, which lets you expose a set of files to the internet as a static website very cheaply. Azure Storage supports using TLS encryption for your website, and it supports you hosting it under a custom domain like symbolicforest.com. Unfortunately, it doesn’t very easily let you do both at the same time; you have to put a Content Delivery Network in front of your Storage container, and terminate your TLS connection on the CDN. It’s certainly possible to do, and if this was the day job then I’d happily put the parts together. For this site, though, a weird little hobby site that I don’t sometimes update for months or years at a time, it felt like a fiddly and expensive way to go.

During the last four years, though, Microsoft have introduced a new Azure products which falls somewhere in-between the Azure Storage web-hosting functionality and the fully-featured hosting of Azure App Service. This is Azure Static Web Apps, which can host static files in a similar way to Azure Storage, but with a control panel interface more like Azure App Service. Moreover, Static Web Apps feature TLS support for custom domains, out of the box, for free. This is a far cry from 20-something years ago, when I remember having to get a solicitor to prove my identity before someone would issue me with a (very expensive) TLS certificate; according to the documentation, it Just Works with no real configuration needed at all. Why not, I thought, give it a bit of a try?

With Azure Storage, you dump the files you want to serve as objects in an Azure Blob Storage container and away you go. With an App Service, you can zip up the files that form your website and upload them. Azure Static Web Apps are a bit more complex than this: they only support deployment via a CI/CD pipeline from a supported source repository hosting service. For, say, Github, Azure tries to automate it as much as possible: you link the Static Web App to your Github account, specify the repository, and Azure will create an Action which is run on updates to the main branch, and which uses Microsoft Oryx to build your site and push the build artefacts into the web app. I’m sure you could manually pull apart what Oryx does, get the web app’s security token from the Azure portal, and replicate this whole process manually, but the goal is clearly that you use a fully automated workflow.

My site had never been set up with an automated workflow: that was another “nice to have” which had never been that high on the priority list. Instead, my deployment technique was all very manual: once I had a version of the site I wanted to deploy in my main branch—whose config was set up for local running—I would merge that branch into a deploy branch which contained the production config, manually run npm run clean && npm run build in that branch, and then use a tool to upload any and all new or changed files to the Azure Storage container. Making sure this all worked inside a Github Action took a little bit of work: changing parts of the site templates, for example, to make sure that all paths within the site were relative so that a single configuration file could handle both local and production builds. I also had to make sure that the top-level npm run build script also called npm install for each subsite, including for the shared Wintersmith plugins, so that the build would run on a freshly-cloned repository without any additional steps. With a few other little tweaks to match what Oryx expected—such as the build output directory being within the source directory instead of alongside it—everything would build cleanly inside a Github action runner.

It was here I hit the major issue. One of the big attractions of Azure Static Web Apps is that they’re free! Assuming you only want a personal site, with a couple of domain names, they’re free! Being from Northern England, I definitely liked that idea. However, free Static Web Apps also have a size limit of 250Mb. Oryx was hitting it.

This site is an old site, after all. There are just over a thousand posts on here, at the time of writing,* some of them over twenty years old. You can go back through all of them, ten at a time, from the home page; or you can go through them all by category; or month by month; or there are well over 3,000 different tags. Because this site is hosted through static pages, that means the text of each post is repeated inside multiple different HTML files, as well as each post having its own individual page. All in all, that adds up to about 350Mb of data to be hosted. I have to admit, that’s quite a lot. An average of 350Kb or so per post—admittedly, there are images in there which bump that total up a bit.

In the short term, this is fixable, in theory. Azure Static Web Apps offer two Hosting Plans at present. The free one, with its 250Mb limit, and a paid one. The paid one has a 500Mb limit, which should be enough for now. In the longer term, I might need to look at solutions to reduce the amount of space per post, but for now it would work. It wasn’t that expensive, either, so I signed up. And found that…Oryx still fell over. Instead of clearly hitting a size limit, I was getting a much vaguer error message. Failure during content distribution. That’s not really very helpful; but I could see two things. Firstly, this only occurred when Oryx was deploying to my production environment, not to the staging environment, so the issue wasn’t in my build artefacts. Secondly, it always occurred just as the deployment step passed the five-minute-runtime mark—handily, it printed a log message every 15 seconds which made that nice and easy to spot. The size of the site seemed to be causing a timeout.

The obvious place to try to fix this was with the tag pages, as they were making up over a third of the total file size. For comparison, all of the images included in articles were about half, and the remaining sixth, roughly speaking, covered everything else including the individual article pages. I tried cutting the article text out of the tag pages, assuming readers would think to click through to the indivdual articles if they wanted to read them, but the upload still failed. However, I did find a hint in a Github issue, suggesting that the issue could also occur for uploads which changed lots of content. I built the site with no tag pages at all, and the upload worked. I rebuilt it with them added in again, and it still worked.

Cutting the article text out of the tag pages has only really reduced the size to about 305Kb per post, so for the long term, I am definitely going to have to do more to ensure that I can keep blogging for as long as I like without hitting that 500Mb size limit. I have a few ideas for things to do on this, but I haven’t really measured how successful they will be likely to be. Also, the current design requires pretty much every single page on the site to change when a new post is added, because of the post counts on the by-month and by-category archive pages. That was definitely a nuisance when I was manually uploading the site after building it locally; if it causes issues with the apparent 5-minute timeout, it may well prove to be a worse problem for a Static Web App. I have an idea on how to work around this, too; hopefully it will work well.

Is this change a success? Well, it’s a relatively simple way to ensure the site is TLS-secured whilst still hosting it for a relatively cheap cost, and it didn’t require too much in the way of changes to fit it in to my existing site maintenance processes. The site feels much faster and more responsive, subjectively to me, than the Azure Storage version did. There are still more improvements to do, but they are improvements that would likely have been a good idea in any case; this project is just pushing them further to the top of the heap. Hopefully it will be a while before I get near the next hosting size limit; and in the meantime, this hosting change has forced me to improve my own build-and-deploy process and make it much smoother than it was before. You never know…maybe I’ll even start writing more blog posts again.

* If I’ve added up correctly, this is post 1,004.

How to cross the same river twice

Or, returning to the scenes of your youth

They say you can never go back again. Never cross the same river twice. The past is a foreign country, as the famous quotation goes. Sometimes, it can’t be avoided. Sometimes, though, it can be worth doing just for yourself.

When I was small, our summer holidays followed the same pattern, from when I was three through to when I was about 14 or 15 or so—I can’t rememeber the exact year it stopped. We would go camping for a fortnight, either two weeks in Sussex, two weeks in Kent, or more often than not, one week in each. The amount of equipment and comfort changed over the years, from smaller tents to larger tents, trailer tents through to caravans, but the destinations were always the same, the same two campsites in the same two parts of England. Wherever else we went, every holiday would include at least one day trip to Hastings, the south eastern seaside town that feels almost like a genteel resort, a noisy arcades town and a West Country fishing village all rolled into a single ball and mixed together. Here’s a photo I took when I was eleven, of the cliffs in Hastings Country Park, looking towards Fairlight Glen.

The cliffs east of Hastings

And then, in my mid teens, we stopped going. We had a couple more family holidays, where I asked for Gwynedd to replace Sussex, but I never again went back to Hastings.

Until last week.

I took The Children away for a summer holiday; and where better to go than a classic seaside town that has a beach that’s great for paddling, arcades, a miniature railway you can ride on, castles, caves, cliffs, the lot. OK, you can’t really build sandcastles, but building sandcastles is something The Children really enjoy in theory far more than in practice, and at least the sea never disappears to the horizon, the beach being steep enough to let it merely retreat a respectful few yards from the prom and the arcades. And: they loved it. I took them around all the same places I’d been taken when I was a kid myself: the miniature railway, the crazy golf, the cliff railway, the castle, and they loved absolutely all of it. We barely even left town for the week. The Child Who Loves Animals would have had us go to the aquarium every day if he’d had his way. I just enjpyed the chance to walk around and practice a bit with my new camera.

Hastings seafront seen from the pier

Bottle Alley, the covered promenade linking Hastings and St Leonards

The town? As a child your priorities are naturally a bit different to those of a middle-aged adult; but, even I could see that it has changed in the past thirty years. It has improved, a lot. So many places to eat out in the evening! So much craft beer everywhere. So many Pride flags flying, even from the flagpole in the castle. But it was still recognisably the same place, the same old shape, new flesh on old bones. The 1930s railway station might have been demolished and replaced, but the walk from it down to the beach was still unchanged. The art deco promenade by the pier has artwork now, but still the same concrete lines. The miniature railway might have nicer trains, but they still go between the same two spots, past a boating lake now cleared of boats and pedalos, but to a crazy golf course that still has its windmill and watermill obstacles and where hitting the bell at the end still scores you a free round. It’s hard to say, but I’m fairly sure the fish and chips is better.

The main thing that’s changed, though? Probably me. And it made me quite emotional. The last time I went there, I had a fairly good idea of the sort of person I wanted to be as an adult. Going back, walking down the promenade, I almost drew tears as I thought about just how much of my envisaged self, the me I imagined back in my early teens, is present in the woman I am today. Even if it does mean that I have to walk along the shingle in heels now.

Because the East Hill Lift was closed for major track repairs, we didn’t go up to the Country Park so I could replicate the picture at the top of this piece. Here, though, is a view of the town from the West Hill, the castle site, still the same odd little mixture of holidaymaking and industry that it was when I was a preschooler.

View of Hastings from the castle

Sunset at St Leonards beach

Oh, I said we barely did leave the town, but we did go for a couple of days out, to Battle and to Hythe. Here’s a couple of photos of Hythe railway station, one I took age 9 (I think) and one from last week, just to show you that in some ways I haven’t changed that much at all.

Hythe railway station in the mid 1980s

Hythe railway station in August 2023

The flutter in the dusk

Bats are flying round Symbolic Towers

At this time of the year, when spring is firmly established, the day has been warm and lots of insects have been buzzing around the garden—as dusk falls, just before nine o’clock, there is still life in the garden.

If I’m still at my desk, working away on some crafting or one of my side projects, and the curtains are pulled back, then I start to see a flutter out of the corner of my eye. This is the time the bats come out.

When I mention the garden bats to some people, they’ll say “you’re so lucky! I’ve never seen a bat.” I think, though, it depends if you know what you’re looking for. They’re quick, faster than birds. They dart to and fro, changing direction apparently at random. It’s dusk, though, and unless you spot the outline of their wings you might mistake one for a small bird heading off to their roost. I’ve been stood outside a friend’s house and seen bats flying around us. I recall, years ago now, going on a camping holiday in Cornwall with H; walking back to the campsite after a lovely dinner in the nearest village, up a steep ancient lane lined with tall hedges, and with bats flying around above us constantly the whole way. I’m not sure that anything quite beats, though, the idea that bats are fluttering around my garden every spring and summer night. As the moon rises—as it is now, waxing and almost full—I stand at the window, and watch their silhouettes flicker.

I should be proud, really, that they choose my garden because my garden has enough insects for them to feast on. There must be three or four regular visitors at the moment: if you watch them, if you are quick, you can see more than one in your line of sight at the same time, or one disappear off to the left just as another swoops in from the right.

A few years ago I went on a bat walk with my friend W, for his birthday; the tour guide gave us all “bat detectors”, pitch-shifters that lowered ultrasound to audible frequencies. If you twisted the knob up and down the dial, you’d occasionally hear snatches of bat, a bit like trying to tune a shortwave radio to a Dutch or German station. Each species of bat has a slightly different voice, so if you leave the dial in one position you might miss something; equally, turning the dial makes you wonder if you’re going to be on the wrong frequency at the wrong time. For all the noises we heard, we didn’t really see very many bats. Here, though, I see them nearly every fine night. No need to listen for them when I can watch each wheel and turn. At this time of night, at this time of year, you’ll find me at the window, watching the bats.

No more cookies!

Or, rather, no more analytics

Regular readers—or, at least, people who have looked at this site before the last month or two—might remember that it used to have a discreet cookie consent banner at the top of the page, asking if you consented to me planting a tracking cookie that I promised not to send to anyone else. It would pop up again about once a year, just to make sure you hadn’t changed your mind. If you clicked yes, you appeared on my Google Analytics dashboard. If you clicked no, you didn’t.

What you probably haven’t noticed is that it isn’t there any more. A few weeks ago now, I quietly stripped it out. This site now puts no cookies of any sort on your machine, necessary or otherwise, so there’s no need for me to ask to do it.

When I first started this site’s predecessor, twenty-something years ago, I found it quite fascinating looking at the statistics, and in particular, looking at what search terms had brought people to the site. If you look back in the archives, it used to be a common topic for posts: “look what someone was searching for and it led them to me!” What to do when you find a dead bat was one common one; and the lyrics to the childrens’ hymn “Autumn Days When The Grass Is Jewelled”. It was, I thought—and I might not have been right about this—an interesting topic to read about, and it was certainly a useful piece of filler back in the days of 2005 when I was aiming to publish a post on this site every day, rather than every month. If you go back to the archives for 2005, there’s a lot of filler.

Now, though? Hopefully there’s not as much filler on the site as there was back then. But the logs have changed. Barely anything reaches this site through “organic search” any more—”organic search” is the industry term for “people entering a search phrase in their browser and hitting a link”. Whether this means Google has got better or worse at giving people search results I don’t know—personally, for the searches I make, Google has got a lot worse for the sort of searches where I didn’t know what site I wanted to go to beforehand, but for the sort of lazy searches where I already know where I want to go, it’s got better. I suspect the first sort were generally the sort that brought people here. Anyway, all the traffic to this site comes from people who follow me on social media so follow the link when I tell them there’s a new blog post up.

Given that the analytics aren’t very interesting, I hadn’t looked at them for months. And, frankly, do I write this site in order to generate traffic to it? No, I dont. I write this site to scratch an itch, to get things off my chest, because there’s something I want to say. I write this site in order to write this site, not to drive my income or to self-promote. I don’t really need a hit counter in order to do that. Morover, I realised that in all honesty I couldn’t justify the cutesy “I’m only setting a cookie to satisfy my own innate curiosity” message I’d put in the consent banner, because although I was just doing that, I had no idea what Google were doing with the information that you’d been here. The less information they can gather on us, the better. It’s an uphill struggle, but it’s a small piece in the jigsaw.

So, no more cookies, no more consent banner and no more analytics, until I come up with the itch to write my own on-prem cookie-based analytics engine that I can promise does just give me the sort of stats that satisfy my own nosiness—which I’m not likely to do, because I have more than enough things ongoing to last me a lifetime already. This site is that little bit more indie, that little bit more Indieweb, because I can promise I’m not doing anything at all to harvest your data and not sending any of it to any third parties. The next bit to protect you will be setting up an SSL certificate, which has been on the to-do list for some months now; for this site, given that you can’t send me any data, all SSL will really do is guarantee that I’m still me and haven’t been replaced, which isn’t likely to be anything you’re particularly worried about. It will come, though, probably more as a side-piece to some other aspect of improving the site’s infrastructure than anything else. This site is, always has been, proudly independent, and I hope it always will be.

Ongoing projects

As soon as something finishes, I start two more

The crafting project I mentioned in my last post is finished! Well, aside from blocking it and framing it, that is.

An actually completed cross stitch project of a Gothenburg tram

Me being me though, I couldn’t resist immediately starting two more. And then, of course, there’s the videos still to produce. I will get to the end of the list, eventually. In the meantime, here’s some photos of a few of the things in progress.

An in-progress Lego project all set up for filming

An in-progress crochet creation; this photo is from a few months ago but I still haven't produced the video about it

Frame from another in-progress Lego build which will probably be the first of these to hit YouTube

At some point, I promise, all of these projects will be complete and will have videos to go with them! Better make a start…

Crafting starts again

Or, a new project is embarked upon

It’s been all quiet on here for the past month, and all quiet on the YouTube front too. I do have a couple of projects waiting to be turned into YouTube videos, you see, but that means putting all the video footage together, assembling it, writing the voiceover, recording the voiceover and then cutting the whole thing so that the one fits the other. It’s a surprising amount of work if you do it like that, and I’m not sure my degree of anal perfectionism will allow me to do it any other way. Those videos will make it to an Internet near you, but not until some time in the middle of March at the earliest.

What have I been doing, then aside from that? Sorting out The Late Mother’s paperwork for one thing, naturally. But also, picking up another craft project that arrived for my birthday. I do have a massive cross-stitch project that I bought myself a while ago waiting to get started on, but this was a little tiny small one. A palate-cleanser, I thought it could be, before I start on the next big thing.

The start of a cross stitch project

It doesn’t take long, with a small project, before you start to see recognisable progress. A cross-stitch kit too, because it contains floss that’s been pre-cut into small, manageable lengths, is always very more-ish. Using a whole length only takes maybe twenty or thirty minutes, so at a weekend or in an evening, it’s always very tempting to just do another.

Further cross stitch progress

If it keeps catching your eye, then within a couple of weeks, you have all the cross-stitching itself finished.

All the crosses stitched

There’s still all the backstitch to do, to give it all some outline. This particular kit has three different shades of backstitch to put in, and I’m not convinced how well some of the very pale backstitching will show up against a background that is, frankly, mostly in shades of medium-grey. Watch this space and we’ll find out.

Beating the bounds

On how unchanged our landscapes can sometimes stay

Recently I’ve been reading Viking Britain: A History by Thomas Williams, so far at least a very good and modern history of the Viking Period in the British Isles, evoking what we know, what we don’t know, and particularly, what experiencing the Vikings may actually have been like, and what they may have thought. In particular it is very good at making clear which stories are likely true, which are likely not true, and which were assembled to make something that may have resembled a form of poetic, literary truth, even if in truth things did not happen exactly as the sagas and chronicles describe.

This blog post isn’t about that book as a whole, though, if nothing else because I haven’t finished reading it yet. This post is about a small section in one of the introductory chapters, translating a land grant from 808 AD, from the King of Wessex to the brethren of a church in Bath. The following is my own edit, picking my favourite parts from William’s translation and the version published online in the Electronic Sawyer Catalogue of Anglo-Saxon Charters.

First from the swine ford up along the brook to Ceolnes’ Spring; along the hedgerow to Lutt’s Pit; then on to the edge of the coppice; along the edge to the road; along the road to Ælle’s Barrow; down to Alder Coombe; along Alder Coombe and out to the Avon; along the Avon to the swine ford.

“The Avon?” you might be thinking if you’re from Bath or Bristol. “The Swine Ford?” I pulled out the maps, and found Swineford, where the Avon Valley downstream of Bath starts to widen from a few hundred yards wide to a mile or two. I used to travel through it daily on the train, to and from work, looking out for the deer in the morning fields. And the land grant, as described, is very clearly still largely the modern boundary of North Stoke parish, although it gets a bit hard to trace up towards Landsdown and near the racecourse. This map is from the 1950s, partly for aesthetics and partly for copyright reasons, but the parish boundaries haven’t really changed much since then.

Map of North Stoke parish, Somerset

Swineford, after all, is still Swineford. The brook leading up to the spring must be Pipley Bottom; and there are a number of springs up in Pipley Wood. On Lansdown it is now hard to trace, as the road pattern has changed, the racecourse has been built and there are any number of prehistoric earthworks that could be Ælle’s Barrow; but Alder Coombe must be the small wooded valley that runs down to the river near Avon House.

It’s strange to think that this line on the map, this little patch surrounding one small village, has not in essence changed very much for around 1,200 years. No doubt there are many parishes across England where the same applies—not so much in Wales due to the rather different early medieval history of that country. In Lincolnshire, for example, parish boundaries still sometimes follow the line of Roman-period roads which were landmarks in Saxon times but today are little more than farm tracks or lines on a map.

I’ve never explored North Stoke, just seen it many times from a train window. Maybe, as the year comes in and the days grow lighter, I should try exploring the ancient boundaries of some of the places around me. Just to see what I can still trace.

Photo post of the year

A random selection

As the calendar year is drawing to a close, and Yuletide is slowly coming to an end, here’s a selection of random photos from 2022 that I don’t think I’ve posted anywhere previously.

Inside Hereford Cathedral

Penarth pier

Foundation stone of Caistor town hall

Haltwhistle station and signalbox

The beach at Whitley Bay

Housesteads Roman Fort

Self-promotion

A couple of Yuletide videos

It’s still the Yuletide season, although we’re now very much into the time-between-the-years when everybody is grazing on snacks and leftovers, has battened down the hatches against the storms, and has completely forgotten what day of the week it is.*

As it is still Yuletide, though, I thought I’d post a couple of the seasonal Lego videos I put up on my YouTube channel last week, before the holiday season had really got under way. Both of them are Lego build videos, for some seasonal sets that I picked up earlier in the month.

Firstly, a “Winter Holiday Train”…

…and, secondly, Santa’s Workshop

In a few days they’ll be going away ready for next year, but for now, I hope you enjoy them whilst you’re still feeling a little bit seasonal!

* No, don’t ask me either.

The great year

Looking back, on reflection

The year turns, and the seasons change, as has happened many times before. Tomorrow evening, if you’re in Europe, is the winter solstice, and the days start turning back towards spring. Right now, as I write this, the sun is well below the horizon and the moon is a thin misty sliver behind dark and rain-filled clouds.

This site has been quiet since I posted about putting The Mother’s body in the ground, back at the start of November. Since then…there has been too much other stuff on the horizon to have space in my mind to assemble words into sentences for here, or for that matter, to add video for things to go on YouTube. When you’re dealing with a death in the family, there is an awful lot of paperwork to do, correspondence to answer, and many hours spent on hold to banks, energy companies, everyone she had to deal with. I’ve even had a few letters to answer from organisations who now suddenly think my dad has died, three years later, because The Mother never cancelled all of his direct debits.

Tomorrow, though, is Yule. The end of the year and the start of that time between this and the next, the strange unofficial intercalary weeks that we all somehow seem to obey. Everyone is wound down, yet still tense. Everyone needs the light to change and the sun to move backwards in the sky; and so we have candles and glitter and the warmth of a fire.

At the turning of the year, albeit not the Great Year, it’s worth looking back at what has and hasn’t happened. I’ve made huge strides in life, even if it feels like I haven’t. I’ve taken massive steps, even though I feel I haven’t moved for a long while now.

The other week I was at the beautician’s salon and she asked if I was seeing any difference in how I looked. “It’s hard to say,” I told her, “because I look at myself day to day so I never notice a tiny daily change. You’re more likely to notice a change than I have.” I’m sure, if I were to go back to photos of myself a year ago, I’d see a massive change, even if I feel right now that no massive changes have happened. Hopefully at the next Yule there will have been more changes, even if I feel there haven’t been still then.

I will sit back, imagine lighting a fire, imagine watching the log crackle in the flames, and drink a warming drink. Hopefully, a clear sky, and I can watch the stars spiral and turn. Here’s to one year gone, and here’s to the next just starting, the old gods bringing the sun back around to us once more.