Gopher Rodeo

Blog

11 Jul 2026

Blog posts two days in a row? I'm truly spoiling you! This one is a little bit different from what I usually like to do, in that I usually like to talk about projects that are ongoing, or I have finished. This one is a project I am still thinking about - because I haven't figured out how to accomplish it.

Two things that I really like are static site generators and Obsidian. This website is made with Zola, with a nice automated workflow so that whenever I commit and push to git it gets published automatically. My brilliant, passionate partner has also developed a love of Obsidian and markdown. We've both discussed how nice it would be to just be able to write blog posts in Obsidian and get it pushed to your website.

Very easy for a developer to do, not so much for someone not as technically-minded. Install command-line programs, install FTP clients, install and correctly use Git. It's all a bit much I fear. I've gone through it a few hundred times and I can't think of a really great way for this to work. Most ways methods I can think of depend on:

  • A command-line static site generator to be installed (too awkward)
  • An Obsidian plugin (none are exactly what I'm looking for)
  • A Git repository with configuration (again, too awkward)

I feel like this used to be a bit simpler. I'm pretty sure I wrote websites in Netscape Composer and uploaded them to some fly-by-night website hosting company easy enough. The idea of Digital Gardens has gained quite a bit of popularity - and yet even the "batteries included" solutions seem to violate at least one of my issues above. None are truly made so that literally anyone can easily do it!

My thinking at the moment is that I should try to create a Python tool that will take an Obsidian vault called "blog" and use a static site generator to turn it into a website. The output of that can then be uploaded somewhere, all using a GUI that the user never has to leave in order to publish. That Python program can be compiled into an executable for all the platforms, and then the user just has to publish through that whenever they want to update their website. It sounds simple enough but that will probably be a pretty huge undertaking.

At the moment this is very much in the "dreams and wishes" stage, and there might be some really obvious solution I am missing, but I think that this could do a lot for people who want to engage with the indie web but just don't have the skills (at the moment) to get started.


10 Jul 2026

A long time ago, I saw an amazing offer. Amazon was offering a free EC2 instance on Amazon Web Services for an entire year. Free cloud computing resources sounds pretty incredible so I used my free trial. I then continued to use it after my year. It wasn't very much, my needs were not particularly egregious, and it was useful to have a VM to run stuff on, that was contactable from the public internet. I'd used my free EC2 instance for quite a few different purposes over the years, but most recently it was hosting Woolymap.

Woolymap was (and essentially still is) a messy Python script that pulls data from websites and REST APIs, then uses a basic Jinja2 template to make an HTML page with predicted departures, previous departures and timetabled departures. It was running in cron every 5 minutes. When I bought my DNS domain I created a subdomain for Woolymap and set it up behind a CDN. I didn't bother making any other changes at all, since it "just worked".

However recently it irked me having to pay Amazon every month for the privilege of running a Python script every 5 minutes. The cost eventually crept up to something like £15 a month, which is hard to justify for such a simple application. I vowed to escape.

The concept of running scripts on someone else's hardware is not new. I decided to try to use GitHub Actions, as they are a fairly decent analogue to cronjobs. I first had to rewrite the script to be suitable to run in a GitHub Action runner. It turns out I way overdid it and had to revert all my refactoring at a much later stage - but I got things running with uv which I am a huge fan of for making Python scripts much easier to handle.

I had initially thought to deploy to Cloudflare Pages - but I realised that's quite unnecessary when GitHub Pages are right there, available for free. I put my configuration together and waited for the first run. And I waited. And then I waited some more. It turns out if you are on a free GitHub plan that your GitHub Actions schedule is very much not guaranteed. When you need to run every 5 minutes that is a problem. Luckily an intrepid adventurer had left breadcrumbs. Now all I needed was an external service to fire HTTP requests at 5 minute intervals. I didn't really know what to use for that but luckily Cron-Job.org exists and it works perfectly! My creation lives!

I then just had to hook up the GitHub Pages setup to my DNS provider (Cloudflare) so I could restore the access via the usual URL. It took a while to apply correctly but it works! I had one last step, to delete my EC2 instance and then completely close my AWS account. I had no desire to ever use their services again (outside of my professional life) and it felt good to completely cancel the account.

I'm aware this solution is still contingent on a free account on GitHub (massive tech company owned by Microsoft), a free account on Cloudflare (massive tech company that is basically now a load-bearing piece of the modern web) and a free account on Cron-Job.org (completely free and open source, but you can optionally support them for as little as 12 Euros a year). At some point I'd love to go with fully open source providers and pay them (now I'm saving £15 a month) but for now I'm happy with my escape.


23 May 2026

I sit here in my parlour (office) having finally found the energy and will to do my first blog post of 2026. It only took 5 months. Lots of things have happened personally, professionally and societally in the intervening months - but I don't necessarily want to talk about any of that.

As large language models (LLM) increasingly twist themselves into more and more of our lives I can only see this going one way. The recent trends of physical media, more intentional media consumption and less cloud services will only grow. My own music purchasing habits (buying and ripping CDs, using digital music stores such as Bandcamp and even procuring music downloads through the library) have finally cycled back around to being (sort of) cool, a remarkable recovery from being "really weird". I'm buying more Blu-rays, as the video streaming services become ever balkanised. There are numberous news stories about how piracy of films and television is making a comeback. And what better escape from AI and algorithms than sitting down to read a book, written by an actual person?

My own rediscovery of libraries has been previously discussed, but with so many library cards I now feel like there isn't a book I can't get my hands on. My ereader has massively helped with this, so that even the (artificial) reserves and holds give me something to look forward to. "How long until my loan becomes available?" is not a question I thought would excite me. Even managing my loans and making sure I transfer my books to my ereader at the right time has become enjoyable to me.

Less enjoyable is having to put up with publisher BS when it comes to ebook styles. The whole point of an ebook is I can change the font, the margins, the line spacing. It's all in my control! So why on earth do some publishers try to stop you from changing those? I now have a workflow with Calibre to remove all fonts and delete all enforced styles - but I shouldn't have to have one! My font of choice on my Kobo is OpenDyslexic. I'm not dyslexic but I find it the easiest to read by far. Unfortunately during the middle of reading Hooked by Asako Yuzuki I found that the character called "Shōko" was having her name rendered as "Sh ko". Surely OpenDyslexic wasn't missing unicode glyphs?

Here I started with an assumption that yes, OpenDyslexic was missing some glyphs. I found nicoverbruggen/ebook-fonts that had fonts especially patched for ereaders, and it included a version of OpenDyslexic that it called "Dysleksio". I loaded the fonts onto my ereader and Shōko's name was correct but the character shapes were... just wrong. Similar to the OpenDyslexic that I knew but not quite as nice. OpenDyslexic has a rather confusing version lineage, so it occurred to me that maybe the version Nico was using for Dysleksio was different from that on the Kobo. I ended up comparing 7 different versions of OpenDyslexic against what I could see on my ereader but I eventually figured out that the Kobo was using version 2. This was not the same version being used by Dysleksio.

At this point I should have just loaded OpenDyslexic 2 onto my ereader with a different name to see if it worked. And it would have. But that's not what I did, because I assumed there were missing unicode characters. So instead I created a script to merge fonts together without overwriting existing glyphs. Then I merged a few versions of OpenDyslexic together, to create a fully-featured OpenDyslexic. And it worked! But when I verified my findings I found all my merges, despite the script output saying otherwise, was only adding one new character. I realised my assumption was flawed, OpenDyslexic does have all the needed characters. But when Kobo loaded the font onto their ereaders as a default font they just... deleted a bunch of unicode characters? WHY?!

Not wanting my work to be in vain, I remembered Nerd Fonts. They are basically versions of fonts with loads of extra characters added, primarily to be used in a supercharged terminal setup. No reason I can't use it to create my own version of OpenDyslexic 2. A few more rabbit warrens later (I actually raised a PR for one of those burrows) I had something that would work and was unnecessarily complex. Perfect.

The result of my efforts is available here. The fonts work, so going forward they will be my new default font on Kobo.

And I feel reassured, as AI will never be able to replace the useless projects that I stumble into and become vessels for all my energy.