M

Matt Crook

Software engineer in the healthcare field • UoA dropout • Please consider the environment before printing this email. #software #dotnet #tech #devops

Re-evaluating Personal File Storage

Resilio Sync is a great tool for syncing files across multiple devices without relying on a cloud service. I have been using it for a long time, and I even bought a lifetime license to access all the features. One of the features I liked was the encrypted folder, which allowed me to sync with a DigitalOcean droplet and have an offsite backup of my data. Resilio Sync worked well for me, but it also had some drawbacks. One of the drawbacks was the slow syncing on mobile devices. Sometimes I had t...
Read post

Productionising a Listed Blog

I recently decided to streamline my personal projects and combine my personal and professional blogs into one platform: Listed. Listed is a cool feature of the Standard Notes app that I use - it lets you publish blog posts to a website from a note. However, I noticed some drawbacks of using Listed: it is not very fast, it sometimes goes offline, and it does not give me any insights into my site traffic. According to Listed, the purpose of their platform is to create a space for journaling, not ...
Read post

Scaling Back Side Projects

Over the last year I have found myself to be busier than ever before with work, yet my desire to create side projects has not scaled back to balance this workload. I always have a bunch of ideas I want to try out as a project, but I always end up getting half way through and leave it to stagnate when work picks-up. Then I get annoyed that I haven't completed anything, and wonder why. This ends here, its time for me to begin aggressively scaling back my side-projects. I am archiving all of my a...
Read post

Managing Kubernetes Workloads with Terraform

Terraform is an awesome way of managing infrastructure as code. It builds a graph of your definition, compares it to what exists already, and makes only the required changes. It handles dependencies automatically, allowing you to configure cloud resources based on the outputs of others. One of the so-called "providers" in Terraform is Kubernetes, which allows you to make changes to a running Kubernetes instance in the same way you would with infrastructure. This lets you create a managed Kubern...
Read post

A Return to The Office

Most of the nation has been working from home since about August of last year, which was when we had the last big lockdown - and subsequently gave up on the idea of doing those as a nation as it dragged-on. This has worked out quite well for me. I've traded a small apartment and a short commute, to a home and garden with a longer one. Being able to roll directly out of bed and log-in five minutes before the work day begins has been revolutionary. It hasn't come without downsides, however. It w...
Read post

Positive Habits

I'm trying to write more often. In a quite a nebulous hand-wavey way, I want to improve my ability to put thoughts to paper, so I can communicate more effectively. To that end, I've begun writing in a private journal about every day, and committing to write one of these blog posts weekly. This isn't about writing a novel every other day - it's more like jotting down a few lines in a journal throughout the day, and then sitting down to research and write-up a short post on a subject that interes...
Read post

Fixing Difficult to Search Problems

My daily driver OS is Linux Mint, which I have installed on my a pretty new "gaming" laptop. Every now-and-then, it would crash. Completely frozen, would respond to nothing except for a hard-reboot by holding the power button down. What on earth do I type into that little search box to figure out a solution to this problem? I know that it wasn't just a graphics issue, I couldn't even SSH into the machine from another. Pings were unresponsive. Maybe I search for "Linux Mint system completely unr...
Read post

Java Still Sucks

I love using Jenkins for my personal projects and some home automation tasks. It has a lot of features and plugins, and its UI reminds me of the good old days when I was making Minecraft server plugins. Recently, I encountered a problem with one of the plugins that I used. It was a Java plugin that connected to a public API, but the API had changed without updating their version number. I wanted to fix it myself and contribute to the project, but I found out that someone had already submitted a...
Read post

Enterprise Resource Planning, For the Home

I live in a flat which I share with some really good friends; meals are planned and shared to lighten the load and costs between us all, same with household supplies. Because of the distributed nature of this setup, it can be time-consuming to organise the grocery shopping and meal plans each week. As an avid homelabber, I spend plenty of time lurking in the r/homelab and r/selfhosted subreddits, and I came across a self-hosted application called grocy - which promised to help with this organis...
Read post

After Hours On-Call Support

The company I work for is the antithesis of Google; where Google kills products almost religiously, my workplace has deprecated almost nothing in thirty years of existence, but still loves to ship new products and systems. There are valid reasons for this operating strategy; our customers appreciate the long-term support and reliability, but couple this with an unprecedented shortage of software engineers in the industry, and you have a recipe for trouble. I'm on the after hours on-call roster...
Read post

Monitoring your Self-Hosted Estate

If you build and develop a system with paying customers, you know that tracking and publishing service uptime is absolutely critical to build trust. If your customers don't trust that your system will be up and available when they need it, its unlikely that they will remain your customers for very long. Hosting a central web page where customers can view and track outage events over time builds that trust, and helps with communicating these events as they happen. I believe that the same things ...
Read post

Rust

The Rust programming language has been one of those things that I want to get into, but have just been struggling to get my head around. I've seen the light, but how the hell do I use it? From the outside, it looks so different to anything I've used before. For example; I had learned to program originally in PHP, but when I realised that it was certainly not the language for me long-term, I was able to step into C# with very little resistance. I've found myself having to read documentation very...
Read post

New Years Resolutions

Its getting real close to that time of year again, where we all pretend to perform some serious introspection and decide that we have no real issues other than superficial. We all decide we want to start going to the gym, but then give up after a month or so. I had some thoughts about this - not so much about what my resolutions will be, more about how I think I should set them. Holding myself to a SMART goal seems unreasonable given the context. The time span for a New Years resolution is far...
Read post

Distro-Hopping

After spending an entire year of promising myself I wouldn't distro-hop into another Linux OS any more, I thought I would reward myself by installing another OS. Linux Mint this time. Can't say its entirely my own fault though - I tried updating Ubuntu 20.04 to 21.10, but apparently I didn't have enough space in my boot partition to upgrade, and I couldn't resize my other partitions to make room. I would have had to re-install anyway. May as well have made that something new and exciting! I'v...
Read post

Advanced Custom Shortcuts on Windows

Shortcuts on Windows are annoying. Inside those little binary lnk files is a large number of properties which are essential to doing some pretty cool stuff. One of those things is the ability to enable toast notifications, without the need to use a UWP project. This was one of the things I wanted to do, and it ended up being surprisingly difficult. The thing I found most strange when implementing this, was that the key to the entire operation was the need to add special identifiers inside a sho...
Read post

Notes on Blazor

At work, I have started using Blazor as the base for a new web project - and I have compiled some notes that I would like to share about my experience with it so far. There is no particular format or ordering here. Also note that I am still only exploring Blazor, my notes are generally in comparison to some other similar web technologies. Without further ado, begin brain-dump; Being able to re-use class libraries and components from existing .NET projects is huge Quite easy to pick up, partic...
Read post

Who Really Needs a Database, Anyway

As of today, my blog is serving requests from Azure Table Storage - and it is working far better than I had anticipated. It has even reduced the complexity in my codebase by allowing me to rip out all of the Entity Framework pieces, like migrations and setup. I know most personal developer blogs prefer to use static content generators like Hugo et al, or even just off-the-shelf blog software like Wordpress or Blogger, but I have mostly settled on building my own - I want to be able to fine tune...
Read post

First impression of the DigitalOcean App Platform

DigitalOcean is one of my favourite cloud providers, but it had always bothered me that they didn't really do any managed services. This was way back in 2013, and much has changed now. In this post, I'll outline my experience with the platform and give some opinions - as well as a wishlist for where DigitalOcean goes next with the platform. Getting started At the time of writing, the stack I use in everyday development (.NET) is not supported out-of-the-box. However, DigitalOcean Apps can be ...
Read post

Canonical URLs in ASP.NET

I've recently changed the format of the URLs on my blog, so now websites link to mine using a different URL than what I'm trying to settle on. But these are minor variations in the path - such as a trailing slash, or title-casing, etc - which are still considered valid by the ASP.NET routing logic. There's no redirect because of this. Thankfully, search engines are smart these days, and can figure out that all these URLs lead to the same content. The problem is that they don't know which should...
Read post

Handling Express.js Body Parser JSON Exceptions

Express.js, an HTTP server for Node.js, has middleware that you have to install to parse and work with the req body objects on POST routes - the problem is, it doesn't make it particularly easy to handle errors yourself. One issue that I ran into specifically was the JSON parser being set to strict by default - meaning that only objects and arrays are accepted. This is okay for what I want to do, but if you try to send something like a plain string, an exception is thrown. By default, this will...
Read post

Transcoding to Dash and Hls With Ffmpeg

For a web project I was working on, I wanted to include a video on a page - but I didn't want to use YouTube or Vimeo to host it for various 'privacy' reasons. That ended up being somewhat of a nightmare, as it immersed me into the world of video encoding and how tedious it was. This post serves as a way for me to remember how to transcode a video for the web if I ever want to do this again, but I also hope that this may help anybody else who intends to do the same. I use FFmpeg on the command...
Read post

Routing by Subdomain in ASP.NET Core 2.2

A long time ago I wanted to do some routing through a project using a wildcard subdomain, something like a simulated multi-tenanted setup for a service. Custom router The way to do this is to create a custom router. Create a class under /Services/CustomerCouter.cs with the following content: using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Infrastructure; usi...
Read post

Sharing WiFi Connection over Ethernet on Ubuntu 18.04

I wanted to share my Ubuntu 18 desktop's WiFi connection over Ethernet to my Raspberry Pi - however, some of the software you need to do this is no longer readily available, as it is superseded by the new settings app in Ubuntu 18. So now, you can only share your WiFi connection over Ethernet by directly opening the connection editor, which you can do through the terminal: nm-connection-editor When it opens, select the wired connection item, clicking the edit button (the cog). In that menu, sw...
Read post