• Blog engine thoughts

    Next month will mark the 20th year that I've been blogging. I started off in 2005 using Blogger, then in 2019 I migrated to Jekyll on GitHub Pages. I gained a lot more control over how how my blog is rendered to HTML, but one thing has always bothered me - I really don't understand Jekyll/Liquid/Ruby as well as I'd like, to be able to make customisations confidently.

    Adopting a blog engine that uses a programming language that I have more experience with would go a long way to solving that. And that effectively narrows things down to C# and JavaScript/TypeScript.

    The other constraint is that I'm really happy with having a static site. I don't want to have a database or any other backend resources - just generate the HTML pages that's it.

    So looking around, the one .NET static engine I've encountered is Dave Glick's Statiq. This looked quite promising, and I did create a feature branch to try it out with my content. And that's where I hit some performance issues that seemed to relate to the Statiq.Web extension and the default blog template. As I already mentioned, I've been blogging for a while, and so when I count them all up, so far I have accumulated over 1100 posts! When I ran that feature branch on my full set of posts, it took 30 minutes on my i9 laptop (or almost an hour for the GitHub Action) to build the site. I did raise this at the time, but it hasn't been resolved, and development on Statiq seems to have largely stopped.

    On the JavaScript/TypeScript side, I had noticed a lot of positive comments about Eleventy. Again, I spent a bit of time working on a feature branch to see how that could work, but I have to be honest I found the documentation a bit confusing. I do really prefer using TypeScript if possibly, and the support for that was not really first class.

    Eleventy v3 was released late last year after I'd done my test run, so it could be worth revisiting.

    Lastly, I wondered whether it was worth trying to do it all myself. I started to prototype out what this might look like at https://github.com/flcdrg/DaydreamEngine. I could potentially use ASP.NET Core's Razor components for managing layout with the ability to render them even when you're not running a web server.

    Blog structure

    One of the challenges I hit was thinking about the structure that is being generated, and trying to see how that would fit into the way the above blog engines seem to work.

    Blogger

    The old Blogger structure looked like this (Screenshot from Internet Archive's Wayback Machine):

    Screenshot of blog from 2017

    Home page

    • Title banner
    • Last 2/3 posts in full
    • Right hand sidebar
      • Links to other pages
      • Links to other blogs
      • Labels (categories)
      • List of years/month/posts
    • Link to older posts (search)
    • Footer

    Individual posts are referenced using the following address format:

    /2018/08/create-temporary-file-with-custom.html
    

    Jekyll

    Screenshot of current Jekyll-based blog

    Home page

    • Title banner
    • Last 3 posts in full
    • No right hand sidebar
    • Link to older posts (/page2,/page3,..page100)
    • Footer

    Individual posts use same address format as Blogger.

    Future

    Closer to the Blogger layout. Home page

    • last 3 posts in full
    • Right hand sidebar
      • Links to other pages
      • List of categories
      • Search facility
    • Link to history
    • Footer

    I see some blogs that just put a summary of each post on the home page, requiring you to click on the link to read the full article.

    The problem with the /page2,/page3 approach is that every time you add a new post, all the pages need to be rewritten. It inserts the new post at the front. It's the opposite of a traditional book or journal, where you would append new content at the end. I think this also means the /page2,/page3 confuse search engines a bit as the content keeps changing.

    I think you still do need some kind of index/navigation page. Maybe having a year-based one would be more useful. I don't post enough that I think you need to break down a year into separate month pages.

    So that's where I'm at for now. Another look at Eleventy v3, otherwise let's see what else I can implement in https://github.com/flcdrg/DaydreamEngine

  • The biggest problem with CI/CD pipelines

    Do you know the most common problem I encounter when creating or updating build or deployment pipelines?

    Finding the correct path to specific files!

    I think that's why I find I have to litter my pipelines with extra steps like this:

    - script: ls -alR
      displayName: "Script: List files"
      workingDirectory: $(Build.ArtifactStagingDirectory)
    

    I think the problem is really that tools used to build software with, and the tasks you use in your pipelines, are so inconsistent with how they generate and reference files and paths.

    For example:

    • Does the file generated by a tool get created in a single directory, or does it create a child directory for the file to live in?
    • If you use wildcards with the tool, does that change how it generates the output file(s)?
    • Does the tool default to looking for files in the current working directory or somewhere else?
    • If you use relative paths for tool parameters, are they relative to the current working directory, or to another specific parameter?
    • If you're creating a zip file by pointing to a directory, does it include that directory in the zip, or just the child files and directories?
    • Does the tool or task support wildcards? And are they 'normal' wildcards (aka globbing), or are they actually regular expressions?
    • If the tool supports wildcards, can you specify multiple patterns, or only one?

    I'm sure there are other variations. You get the idea at least.

    And once you've finished banging your head against the wall and got all your path 'ducks' in a row, do you leave all those ls -alR tasks in your pipelines just in case you might need to refer to them in the future, or do you remove them to get rid of the extra noise (and make things a tiny bit faster)?

    Using a tool like Cake as an abstraction over all your tools may help to a certain extent, as it then provides a more consistent interface in how you use the tools. But even then I've found myself having to add extra code in my .cake files to again list what files it can see to troubleshoot when things are not working as I think they should.

    It's such a trivial thing, but it continues to trip me up, and I suspect I'm not alone 😀

  • 2024 in review

    It's the last day of 2024, and tomorrow (no surprise) is the first day of 2025. I remember when I was pretty young thinking that wouldn't it be fun when the year 2000 came around and would anyone else notice. Well yes, I think they kind of did! But now we're 25 years further along. It is certainly true, time seems to move so slowly when you're young, and much quicker as you get older.

    This year has been quite an interesting mix.

    Work things

    Working remotely from home is such a wonderful thing and I don't take it for granted. Even more so when I read about other companies now reversing their flexible work arrangements. Unfortunately I think that's largely driven by old-fashioned senior managers who either think you're only productive if you're all colocated in an office, or that they're worried about all the lease/asset costs of empty office buildings.

    Yes, there are specific times when it is valuable to all be together in the same room, but for the rest of the time if you're stuck in an open office which is so noisy that most people have to wear noise cancelling headphones to be able to get any work done, well that makes no sense to me. Let alone the time it takes to commute to the office.

    I really value the trust that SixPivot places in its staff. The way we help each other out. Having that "reservoir of expertise on tap" just a Slack message away is so helpful. Or for that unusual day when everything seemed to be going crazy at once. To have the support of your peers, knowing they're there for you. That really matters.

    Working remotely makes it all the more sweeter when I did get to catch up with my SixPivot colleagues at our annual in-person Summit in July.

    I've been focusing a lot on "DevOps" kinds of things lately. I honestly prefer not use "DevOps" in a job title, but I think I'm probably fighting a losing battle. Most people know what you mean when you describe managing build and deployment pipelines and infrastructure as code as "DevOps stuff".

    Professional things

    I was able to attend the Microsoft MVP Summit in person over in Redmond for the first time since the pandemic. A definite privilege to be there, and I still get a huge kick out of visiting a different culture (and while there are similarities, there's also enough differences between Australia and the USA to be interesting).

    We ran the DDD Adelaide conference, and I think that was pretty successful. And then two weeks later I got to speak and help out at DDD Brisbane. That was a real bonus.

    The Adelaide .NET User Group met regularly throughout the year. It's been great having a team helping organise this with me too.

    On the blogging side, I was hoping to get at least one post out each month. Looks like I missed out a few months, though some months did have multiple posts. Not too bad.

    I am thinking of changing the blog engine I use. Currently using Jekyll, but I'd really like to switch to a .NET-based engine (as I think I'd find that much easier to customise). We'll see if I get something working well enough to migrate to.

    I left X/Twitter. I'd stopped using it for quite a few months and didn't really miss it, but decided enough was enough with the antics of the current owner. Account deleted. I'm now on Mastodon and Bluesky.

    Technology things

    That Apple TV I got the family for Christmas 2023 turned out to be quite a hit. I think at first there was a bit of "what's the point of this?" but it has just become the most common way we watch TV now by all members of the family.

    The Synology NAS is just a really useful thing. The backup features came into their own when my parents were travelling overseas and managed to lose a bunch of contacts from their email account. Because I had backups configured I was able to restore the contacts for them.

    I think we've finally found a working combination of bits to enable us to record and live stream our ADNUG meetups. It's taken a while, and if there was a single device I could use to replace all the separate things plugged into my laptop, that would make it so much easier, but I haven't found that yet (and I suspect it wouldn't be cheap).

    My laptop has been behaving itself since those overheating issues earlier in the year. I've been pretty loyal to Dell in the past, but those kind of reliability issues have raised some questions in my mind. I'll be taking a very close look at the Framework for my next hardware refresh to see how it compares.

    Personal things

    Probably the biggest highlight of 2024 would have to be my son getting married. He and his fiancee decided they'd prefer an shorter engagement, so getting everything organised for the big day was challenging, but it came off. We're especially grateful for their friends who put in so much effort to ensure the church and reception were all ready to go. The day was wonderful, everyone had a great time, and it's a really special event we'll always remember.

    The garden also got a bit of an overhaul (largely in preparation for the wedding). This included rebuilding a large part of the irrigation system. Originally we had someone lined up to do this but they pulled out at the last minute so I ended up doing it all myself.

    Health continues to be a challenge particularly for family members. I had a few niggles of my own (not at all comparable to be clear) that put pause to my usual before-work walks and the odd bike ride for a couple of months, but hopefully those are mostly resolved now.

    We had a few Sevenfold band gigs this year. To be able to play music with special friends who have known you for ages and are so encouraging is just the best thing.

    I've also gotten more involved in the song leading side of things at church (in addition to being on the roster for video camera operator and producer). It's different being in the worship band compared to Sevenfold. With Sevenfold you have the same group of people you play with all the time, and you can spend a lot of time working on the arrangements for songs. Whereas the people who are in the worship band changes week to week, so each time you're rostered on you'll likely be with different combination of musicians and singers. And usually you only get an hour to practise together early on Sunday morning before the first service starts. I think I'm still learning to be comfortable up the front when we're leading the singing. Given it is a church service, most of the time I feel a responsibility to adopt more of an attitude of reverence (and keep my 'silly' side in check), but there have been a couple of times when it's been ok to let loose a little bit, and that is fun.

    I'm sure I've forgotten some significant things. I'll have to include those in the next post.

    Anyway, goodbye 2024. See you all next year!