Site changes

New stuff at the {back,front}end

The past couple of days, I’ve spent a fair amount of time tweaking this site. My site’s build process involves vite and a bunch of scripts. These scripts are executed via vite’s pre- and post-build actions. The big changes that were made were performance improvements in the update_index.py script, and the addition of openring.py, which you can see at the very bottom of this post!

speeding up index page generation

The old script—the one that featured in Hacky scripts—was absolutely ridiculous, and not to mention super slow. Here’s what it did:

line = f"| [{meta['title']}]({url}) | `{meta['date']}` |"

That…probably didn’t make much sense to you, did it? Don’t bother. I don’t know what I was thinking when I wrote that mess. So with how it was done aside, here’s how it’s done now:

A neat thing I learnt while working with Jinja, is you can use DebugUndefined in your jinja2.Environment definition to ignore uninitialized template variables. Jinja’s default behaviour is to remove all uninitialized variables from the template output. So for instance, if you had:

<body>
    {{ body }}
</body>

<footer>
    {{ footer }}
</footer>

And only {{ body }} was initialized in your template.render(body=body), the output you get would be:

<body>
    Hey there!
</body>
<footer>

</footer>

This is annoying if you’re attempting to generate your template across multiple stages, as I was. Now, I initialize my Jinja environment like so:

from jinja2 import DebugUndefined

env = jinja2.Environment(loader=template_loader,undefined=DebugUndefined)

I use the same trick for openring.py too. Speaking of…let’s talk about openring.py!

the new webring thing at the bottom

After having seen Drew’s openring, my NIH kicked in and I wrote openring.py. It pretty much does the exact same thing, except it’s a little more composable with vite. Currently, it reads a random sample of 3 feeds from a list of feeds provided in a feeds.txt file, and updates the webring with those posts. Like a feed-bingo of sorts. ;)

I really like how it turned out—especially the fact that I got my CSS grid correct in the first try!

Questions or comments? Send an email.