When using GitHub Actions, we often
include steps that use Git to check out the code of the repository, make some
changes to the code, and then commit these changes back to the repo. Additional
steps subsequently act upon these changes within the same workflow run. For
example, appending auto-generated release notes to a CHANGELOG.md
file and
committing it to the repo, to later bundle the changelog with release artifacts.
Another example is using a workflow that periodically uses a linter to clean up
the code base. Simple enough, right?
Hello, I’m Michael 👋
This is the place where I share my thoughts and notes about things that I’m excited about and working on and hope to connect with people having a similar mindset. I’d love to hear from you!
Check out my latest blog posts below.
In this post, I’ll share how I use OBS Studio and
ffmpeg to create short MP4/WebM video snippets for my
blog posts. Using the <video>
tag with the autoplay
and loop
attributes
makes them look like GIFs. However,
modern video formats result in much smaller file sizes.
Over the weekend, I was on a quest to find the cheapest available Azure Virtual Machine to house my Azure Kubernetes Service cluster. I previously wrote about optimizing storage cost with Azure Kubernetes Service (AKS), where I talk about the importance of selecting VMs that support ephemeral OS disks. But what VM type and region should I choose? Searching through reservation offers in the Azure Portal turned out to be tedious. This time, I’ll demonstrate how to find the best offers using PowerShell and export the results to a CSV file.
One aspect of managing Azure Virtual Desktop (AVD) is keeping it up-to-date. One strategy is periodically building a “golden” image and re-deploying AVD session host VMs using the updated image. In this post, we’ll use Packer and GitHub Actions to build a Windows 11 image and push it to Azure.
With Azure Virtual Desktop (AVD), you can deliver secure Windows 11 desktops and environments anywhere. It’s pretty easy to deploy and scale. You can provide a coherent user experience from any end-user device and reduce costs by leveraging Windows 11 multi-session licensing. This tutorial will guide you through setting up AVD with AADDS using Terraform.
I wanted to revisit this topic for a while because the previous guide I wrote about setting up Azure Active Directory Domain Services (AADDS) with Terraform is outdated. However, the article still attracts around 100 visitors per month. People also keep downloading the deprecated Terraform module I created. Time to set things right!
I recently tried to percent-encode (or URL-encode) strings in Hugo.
Percent-encoding is used to encode data in query strings of URLs because they
must only contain ASCII characters. There is a
Hugo built-in querify
function to transform key-value pairs to query strings.
But I required to URL-encode a single string value and not build a query string
from key-value pairs.
I use the Azure Kubernetes Service (AKS) to host a few services, like Synapse,
Remark42, and Plausible Analytics. As of yet, none of these services require
much computing power, so I chose a small VM size for the AKS node:
Standard_B2ms
. I recently analyzed my Azure costs and found out that I could
have saved more than a hundred bucks in the past months if I had been more
diligent.
Update 2023-07-28
In May 2023, Mullvad announced the discontinuation of port forwarding support. Starting from 2023-07-01, all existing ports will be removed, making this guide obsolete. 😭
For storage in my homelab, I use TrueNAS. Additionally, I run a couple of apps on top of it as jails. For over a year, I’ve been using an uninterruptible power supply (UPS) to protect my TrueNAS from possible data loss in case of a power failure. What I’ve been missing throughout that time are the monitoring and management tools to shut down everything gracefully when the battery of the UPS runs low. In the event of a power outage lasting longer than 30 minutes, the battery would run out of juice. Everything attached to the UPS would be powered off immediately, and data loss might occur. Luckily I live in an area where power outages rarely happen. I also have backups I could restore if my TrueNAS data gets corrupted. Still, doing this right and configuring Network UPS Tools (NUT) to orchestrate shutdowns has been on my to-do list for way too long. It’s time to tackle the issue!