Getting my blog ready for 2023

My first year of blogging is about to end, and I am happy with what I wrote. I wanted to write at least one post every month, and I did. I intend to keep this pace next year, but I want to make this easier by writing shorter posts from time to time. This is not a trivial task: I found out that writing good short content is harder than writing good long content!

But if I keep writing, my blogs’s index page is going to become messy at some point! It would be nice to divide these posts by year…

Adding year sections to my blog index

Very easy: in my build.sh script that I run to build my website, there is a makeblog() function that takes care of building the index page and RSS feed for my blog.

It is enough to add the following lines inside its main loop:

thisyear=$(echo $d | sed 's/-.*//')
if [ "$thisyear" != "$lastyear" ]; then
    printf "\n## $thisyear\n\n" >> $bf
    lastyear=$thisyear
fi

And that’s it! These few lines introduce two new variables, thisyear and lastyear, that keep track of the years of the last and next blog post that the loop is scanning. If there was a year change, a new line with the current year is added, and the lastyear variable is updated. The first line refers to a variable d that holds the date of the current post in yyyy-mm-dd format.

A last note on the variables: if you are familiar with other programming languages, you might wonder where the variable lastyear is initialized. After all, I am using it in the if statement’s condition, so it must be initialized outside of its body, right?

Actually, no. The shell’s variable scoping does not work like in C or similar languages, and a variable initialized inside a block is also visibile outside of it. Moreover, un-initialized variables evaluate to the empty string, so the first time the condition is checked it correctly determines that the current year is different from the last.

This was my last UNIX shell tip for this year. Stay tuned for more!

My netbook and planner for 2023