abcedea

Software engineer • UoA dropout • please consider the environment before printing this email. This is the home of my extremely online content, pay no attention.

Developer Enablement

I've been struggling to get some resources in the cloud stood-up today, and it's made me think a bit more about the empowerment of people to be able to operate in the business environment. In my opinion, everybody should have access to the tools and training they need to do their jobs, without having to go through others every time. But this story starts with Microsoft Azure.

Azure Front Door is a reverse proxy/CDN similar to CloudFlare, and I've been trying to set it up for a new product at work. It took many attempts and three different set-backs before throwing in the towel for the day.

The first set-back was that it requires a CNAME record for custom domains, it won't operate with any other record type. That's a problem, because the product is hosted on the apex of the DNS zone - to which CNAME is unsupported at the specification level. Fortunately I was able to get around this by using a service alias in Azure DNS, where you can create an A record and Azure does something weird to make it point to the resource.

Second set-back involved the setup. I'm creating and configuring this resource with Terraform, which exposes the configuration as a single atomic resource which must contain all configuration - including custom domains. This presents a problem, because you can't create the Front Door without the DNS record, and you can't create the DNS record (which needs to point to an existing service as above) without a Front Door. A cyclical dependency, again courtesy of Microsoft. I managed to figure out that you can use a CNAME mapped to the same location, but prefixed with afdverify. - the real DNS record can then be created afterwards.

Finally, the last set-back and the part where I gave up for that day, was that Front Door just straight-up won't manage SSL certificates for custom domains if they're at the apex - you have to buy your own and manage it with Key Vault. When I finally came across that, I though "fuck it" and logged out.

Interacting with certificate registries is not something that the typical developer is enabled to just go out and do - I don't have a company credit card, and I certainly don't want to use mine. I would have to go to my manager or IT to get it sorted, which throws a real spanner in the works.

That's why I really prefer cloud provider-managed resources - I have the mandate and permission to create resources in Azure that I think are necessary and can """provide value""", and the invoice at the end of the month is handled by finance. Access to certificate registries is not managed by IAM, so I have to ask the one guy who has an account at DigiCert for our company to pretty please do it for me. Great.

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 frequently with Rust, it's not as intuitive in comparison.

That being said, the effort that has gone into education with Rust is phenomenal. The compiler errors are quite clear and visual, and there are help commands that give you examples on errors, and how to get around them. This is primarily how I had been learning: find a thread from the web and the Rust docs to give me examples on what I'm trying to do, coding it, and then using the help commands when it inevitably goes wrong.

Additionally, the build system through Cargo work exactly as I had hoped it would. The projects I work on tend to be quite complicated, with many external dependencies in different languages - and I'm of the opinion that each individual application/library/crate/etc should be responsible for wrangling its own dependencies at build time, so I was pretty thrilled when I found out about Cargo build scripts. The build script for one of my Rust projects builds a .NET project, and consumes its output. It works pretty well!

So yeah, I keep getting these little tastes of Rust, and I'm liking what I'm seeing so far.

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 too long, and because of this I would set a goal that's more difficult to achieve.

The goals never stick, because I'm gonna do what I want to. If the goal was fun and achievable I would be doing it already.

That's why this year, I'm not setting goals - I'm setting a direction.

By direction, I mean something like "focus on health". Its non-specific and un-measurable so that you won't be disappointed if you don't achieve it, but at the same time provides the same amount of motivation you would have early in the New Year.

Its a way of remembering and focusing on what was important to you at the time, and hopefully re-discovering that mindset that lead you to it. You can use it to inform decisions, and prioritise against other tasks in your day-to-day.

Write your direction on a sticky note and put it on your mirror, on the back of your front door, or at eye level by your toilet. For the non-psychopaths amongst us, try pinning it in your Notes app.

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've used Mint before, and I was totally fine with it last time before switching to Debian (then Ubuntu). My problem is just that I want a bit of change every now-and-then, so I swap Cinnamon for GNOME.

I could probably just switch out my desktops instead of re-installing, which I may look at doing this time if I have the need. Though, this is what I said to myself last time, and look how that turned out.

Vagrant is definitely going to be something to look at, for the future.