You know when you have something nagging at you, where it’s “I should be doing this, I want to do this, but I just don’t have any drive”? That’s been me looking at this editor most days for the last 2 months. Ennui, I think they call it. But not really through boredom in my case. Just the overwhelming sense of *waves arms at everything* getting on top of me a bit lately. So now that I’m managing to get some words out, what have I been up to?

Training

At the start of September I virtually attended a four-day, Microsoft-delivered training course, covering AZ-104: Microsoft Azure Administrator. The course itself was good, with great instructors. It was also a nice change of pace to the relentless project work I’d been doing. The one knock against it was there was too much content that could be covered in the four days that in reality we only covered a fraction of what could be in the exam.

As the instructors acknowledged – the course by itself is not enough to pass the exam; it needs more practice, reading, and knowledge. Which is to be expected, but I don’t think I appreciated just how much more would be needed.

Right now, I’m scheduled to take the exam at the end of November, but I’m not feeling like I have enough time with everything that’s going on in the race towards the end of the year. I’ll give it another week or two of trying to get into my groove with regards to study and revision, and if I’m still not comfortable then I’ll reschedule to early next year.

I should have attended an AZ-204 course at the start of October, and sat that exam… today, I think… but I rescheduled that one last month when I realised what was involved in the AZ-104 exam. I also felt that the project was too busy at the time to justify leaving my colleagues a person down for another week of training so soon after the last one. AZ-204 is still in my plans, it’s just been moved down the road a bit.

Work

I can’t go into my project work, at all, but the other things going on at work have been both weird and rewarding.

The first was I was asked to record a short (thirty seconds) video on the positive experiences I’ve had over the last year – a kind of “yes, this last year and a bit has been rubbish, but there were good points” feel good piece – my video was largely on training and personal development. It was combined with several others and played as part of a video package at the annual meeting which kicks off our new financial year. So a video of me in my tiny home office, talking quickly about how I’d achieved several certifications in the last year, played to several thousand colleagues in the UK. Even though I knew the video was coming during the livestream, it was incredibly bizarre to see myself onscreen.

In a similar vein I was asked to give a seven minute talk on training and development to a couple of hundred colleagues in an account-wide all-hands call. I seem to have acquired a reputation for thinking about this topic a lot while also putting things into action, and it was insights on this “doing part” I was asked to get across to my colleagues. I plan to write a blog post on this in the future as it’s something I’ve been mulling over in my head for a while and deserves a longer-form expression.

Delivering the talk itself didn’t make me as anxious as I’d expected. I didn’t stutter and uhm-and-ah as much as I might once of. So I’m getting better at this, at least. I did find it all went very fast though; I think we were running behind so the person controlling the slides sped things along at a clip, faster than I’d practiced. By the end of it I was quite out of breath. I think in part it’s because I’m highly conscious of breathing too hard while wearing a headset, so I breath quite shallowly when not on mute. But that’s something I can work on – my breathing while delivering a talk.

Hobby

Not much to report here, really. I started on an Armies on Parade entry, which is usually one of the hobby projects I’m most able to focus on and work through each year. But this year isn’t going to happen. I managed to get the barest base of a board created; just a 22″x30″ board in a retro flocked style. I started on pieces of scenery to decorate the board with, and managed to get the army to parade on it built and primed… and then I just seemed to stop. I’m not entirely sure why, but every time I thought about painting or making progress I just… didn’t do it. So I’ve resigned to not completing Armies on Parade this year. Hopefully I’ll be back to it in time for next year.

I’ve also made a few small inroads into items in my backlog, and not *just* by adding to it (although I have done more of that than I’d like). Assembling the odd kit here, priming something there, maybe making small progress on basecoats. But never much of anything, and certainly not getting anywhere near finished. I said in the talk I gave recently that “even small steps add up” and I feel I need to remember that myself. The only real issue is I have so much stuff “in flight” right now it’s hard to juggle it all or store it conveniently and safely when it’s not being worked on. I think I’m getting to a point where some things are going to have to be packed away – not permenantly, but properly out of the way – to give me some breathing room. Maybe that will give me the headspace I need to make some proper progress. Or maybe some dedicated time off to work on things might be an idea? I’m not sure.

Wrap-up

So that’s the major events I want to get into from the last couple of months. Hopefully it won’t be another couple of months before I manage to get the words out again – I really want to write that personal development article, for one thing – but with the way things seem to be right now I can’t make any promises

Because Docker have changed their licensing and subscription TOS overnight, I’ve had to rebuild my development environment so it doesn’t use Docker Desktop on Windows anymore. What follows are notes I’ve made along the way on how I got this working on my particular laptop. This is not a tutorial! While the notes below might help you, they’re mostly a reminder to myself, in case I need to rebuild again, or adapt this into documentation for the rest of the team.

Docker on WSL

Uninstall Docker Desktop. Make sure WSL2 and a distro are installed and updated, then follow this guide by Jonathan Bowman.

Install docker-compose:

sudo apt-get install docker-compose

Git configuration in WSL

Setup Git to use your email address and username:

git config --global user.name "Your Name"
git config --global user.email "youremail@yourdomain.com"

Use the Windows Credential Manager, to share credentials across WSL/Windows:

git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-wincred.exe"

WSL Tweaks

Set the default WSL distro:

wsl -l --all #list your available distos
wsl --setdefault Ubuntu-20.04

Create the file %USERPROFILE%\.wslconfig, and add the following:

[wsl2]
memory=8GB              # How much memory to assign to the WSL2 VM.
processors=4        # How many processors to assign to the WSL2 VM.

Adjust the values as necessary. This limits the VMMEM process to a sensible amount of resource usage – it’ll consume everything it can otherwise.

Restart WSL:

wsl --shutdown

(Open a new WSL terminal to start it again)

Windows Terminal Tweaks

To create a command which opens a single tab which is split into four panes, with each pane set to a different service directory, open the settings.json file, and add the following in the commands array:

{
            "command":
            {
                "action": "wt",
                "commandline": "new-tab -p \"Ubuntu-20.04\" -d \"//wsl$/Ubuntu-20.04/home/chris/dev/graphql\" ; split-pane -V  -p \"Ubuntu-20.04\" -d \"//wsl$/Ubuntu-20.04/home/chris/dev/inbound-service\"; split-pane -H  -p \"Ubuntu-20.04\" -d \"//wsl$/Ubuntu-20.04/home/chris/dev/outbound-service\"; mf left; split-pane -H  -p \"Ubuntu-20.04\" -d \"//wsl$/Ubuntu-20.04/home/chris/dev/front-end\""
            },
            "name": "startdev"
}

The network-style formatting of the starting directory is necessary, otherwise the path won’t be parsed properly.

Other

Install Node, etc on WSL by following this guide in the Microsoft docs.

To get VS Code Remote working, open a WSL terminal, then run the following:

code .

This should automatically install the Remote server. Once done, a Remote editor can be opened in Code on the Windows side. Extensions for Remote are managed separately, so install any that are needed, such as Docker, etc.

To have the VS Code Remote window make sure Docker is started when it’s opened up, add the following to ~/.vscode-server/server-env-setup on the WSL side:

DOCKER_DISTRO="Ubuntu-20.04"
DOCKER_DIR=/mnt/wsl/shared-docker
DOCKER_SOCK="$DOCKER_DIR/docker.sock"
export DOCKER_HOST="unix://$DOCKER_SOCK"
if [ ! -S "$DOCKER_SOCK" ]; then
    mkdir -pm o=,ug=rwx "$DOCKER_DIR"
    chgrp docker "$DOCKER_DIR"
    /mnt/c/Windows/System32/wsl.exe -d $DOCKER_DISTRO sh -c "nohup sudo -b dockerd < /dev/null > $DOCKER_DIR/dockerd.log 2>&1"
fi

Note to self: don’t book exams for very first thing on a Monday, as you might not get to finish your coffee beforehand! Bad scheduling aside, this morning I passed the Microsoft MS-900 exam. This takes me to five certifications this year, adding Microsoft Certified: Microsoft 365 Fundamentals to the list.

I hadn’t really planned to do this exam, and it was very much a spur-of-the-moment thing, largely driven by “well, I’ve done the others, so I might as well…” As I mentioned the other day, I found this one a bit odd to study for. Although I passed, I don’t feel I was as prepared for this exam as I was my others, even though I tried to approach it in the same manner I’ve approached my other certifications this summer. I really struggled to find resources which were both comprehensive and up-to-date. A lot of the non-MS resources were from 2019 and 2020, but the exam was updated in 2021. That said, enough of the core information was available, and my view is probably being tinted by my initial… disappointment(?)… at my own performance. Yes, I know that sounds odd to say after passing, but I guess I just feel I could do and should have done better.

I guess if I had any advice to give about the exam it would be: study the chart of MS365 editions and what features are available in each one. There were a lot of very specific questions on this – more than I was expecting – and I wish I’d learned it in greater detail.

As far as resources go, I used my regular mix of Microsoft Learn’s free study material, and the Percipio video courses I have access to through my work. As there is no Whizlabs module for MS-900, I used MeasureUp for the first time, so I could have access to a reliable online practice test. It was good, following the format of the real exam pretty closely. I’ll be using their tests again when I’m going for the AZ-104, AZ-204, and AZ-400 exams.

I’m studying for the MS-900 exam (yes, yes, I know I said I was going to take a break from exams…), and one thing I’m really struggling to reconcile in my head is that all of the security-related questions are much more technically in-depth than any of the questions I remember getting in the security-focussed SC-900 exam or its preparation material. In fact, a lot of the questions seem to be more in-depth than the equivilent tests for most of the other Fundamentals-level exams I’ve studied for.

Like, SC-900 didn’t touch on Password Hash Sychronisation, or Pass-Through Authentication at all (at least, not by name). Like all 900-series exams it covered the area broadly, but at a relatively shallow technical knowledge level.

It’s not a big thing, but it’s enough of a WTF moment whenever it comes up that I often doubt myself when answering the practice questions, because I should know this. So far I’m finding MS-900 to be one of the harder Fundamentals exams to prepare for. Not quite as bad as PL-900, but it’s getting up there. I’ve generally found the practice exams to be harder than the real thing (to help you learn the material), so it could be an element of that at play.

I guess we’ll find out on Monday morning!

We got our fully fibre-optic internet connection fitted and activated today. The engineer arrived promptly, just after 8am, and despite the previous engineers making his job more difficult by fitting the connection point in an awkward spot he managed to finish everything within an hour and a half.

Before they left, the engineer ran a speed test on the line, and it reported a maximum speed of roughly 940Mbps in both directions. For comparison, our previous “half fibre” maxed out at around 63Mbps down/30ish up. So 900+Mbps is the confirmed upper bounds we can expect (in theory), and in line with what the ISP is promising.

In reality, things have varied wildly from device to device. I should note here that the engineer’s test was done over ethernet, and all our devices are WiFi-only. Most are up to WiFi 5 (AC) standards, but we do have a few still on the older WiFi N.

My iPhone 12 posts results anywhere between 350-575Mbps down. My older 9″ iPad Pro gets around 230-305Mbps down. My creaking, old, desktop PC was getting 44Mbps until I remembered I had a WiFi AC USB adapter I could use to upgrade the internal N adapter – at which point it started getting around 141-215Mbps. Curiously, both the iPad and desktop get upload results up to around 120Mbps higher than their respective download speeds. My work laptop (which is more or less on top of my desktop) gets around 450-475Mbps in both directions.

This isn’t intended to be a “first world problems” moaning post about not getting the absolute maximum speed. I know WiFi is much slower than a wired connection, and I know that different factorsaffect the speed an individual device. Rather this is just me noting how surprised I was to see such a large discrepancy between devices of broadly similar capability – many of which are sat right next to each other as they’re being tested.

I had my yearly performance review/annual appraisal today. I know a lot of developers (and non-developers!) who treat these with a very dismissive or laid-back attitude. A lot of the time it’s because it’s seen as a “box ticking” exercise with little obvious benefit to the appraised. Another common attitude I’ve seen over the years is that the outcome is already decided before the meeting, often on personal or emotive reasons rather than an honest and clear-eyed look at how the preceeding twelve months have gone.

I’m not someone who sees the annual appraisal this way. As someone who has been on both sides of the table at different times, I view the appraisal as an important milestone in the year, and should be treated as such. If you don’t take your own appraisal seriously – particularly in the preparation for it – then how can you expect others to? In the rest of this post I want to talk about the appraisal, and my thoughts around how to approach it (from the point of view of the appraised in this case – maybe next time I’ll do the appraiser viewpoint)

In my experience the appraisal is a good opportunity to do three things:

  1. Confirm to yourself what you’ve achieved over the last year – and maybe more importantly – remind your manager of it. Managers are not omnipotent. They don’t necessarily know or remember every little victory you’ve had. So remind yourself, and remind them.
  2. Look at the trajectory you’re on and where you’re headed over the next year. Is that where you want to be? Is that where your manager wants you to be? What do you want to achieve?
  3. How do your colleagues see you? Where does that fit into the above two points? Make sure you get some honest, constructive, feedback from coworkers.

The important piece is that this isn’t just some onerous process which is mostly for the benefit of HR. An appraisal is guaranteed one-on-one time with your manager to have an open and frank discussion about you and your career. Not just the job you’re doing now, but also what you’ll be doing next and beyond. The appraisal can be thought of as the regular status check on your career ambitions.

This year, my appraising manager isn’t who I directly report to on a day-today basis. They used to be closer to me in the reporting structure, and they chaired my promotion panel earlier this year, so they’re not unfamiliar with me – but they don’t necessarily know the fine details. For example, they knew I had been looking into training and development activities, but didn’t specifically know I had completed four certifications in the last few months; they also didn’t know all of the impact I had been making on my current project – so I had to recount those stories, backed up by the feedback from my colleagues.

It’s supposed to be an honest discussion, so I make sure to touch on the things I feel didn’t go so well – not to dwell on them, but to acknowledge what could have been better and that I am or have been thinking about ways to improve for next year. Showing self-awareness and openness to identifying, accepting and working on your own failings is an underrated skill, in my opinion, and it’s generally stood me in good stead over the years

In return my manager highlighted some areas of feedback that I had glossed over in my own reading, chiefly around leadership skills and my capabilities as a leader. It’s odd; I’m a lead developer who can guide a team to a goal, but I never really see myself specifically as a leader. Cheerleader for the team members, maybe! Yet here I was being asked to think about my leadership style and if there were any leadership-oriented training I would like to do. I hadn’t considered it before the meeting, but maybe I do want to start thinking about what comes after the full-time technical roles.

Finally, I make sure round out each appraisal by asking the appraiser to tell me exactly where they see how I fit into the organisation and what it is they expect from me. Normally you’ll have a sense of this from throughout the discussion, and there’ll usually be a written version of this after the appraisal, but I find explicitly asking the question has some benefits:

  1. It lets you know immediately if you’ve been successful in getting your own message across about the year.
  2. Generally it will give you the more “unfiltered” version of your appraiser’s thoughts. We can’t always help it, but often there will be a difference in how people answer a question directly in conversation with someone, versus how we write it in a document which might be read by others.

You want to use your appraiser’s response to judge where you go from here. It should inform and set the tone for what you do in the year to come.

I won’t give you the response I got to this question, but I was definitely happy with it. It was positive, constructive, and gave me ideas for the coming twelve months. It told me that where I want to get to is well aligned with where the organisation would like me to go, while also suggesting steps to bridge into what comes after the shortterm plan.

And that’s great. Because it meant that the work I put in for this appraisal – and the previous appraisals too – meant that I’ve been able to carve out a space where I can be fulfilled in the sense of controlling my own career progression and what I want to do, while also keeping myself in tune with what the organisation wants and needs from me.

So I implore you: don’t write off the annual appraisal process. Engage with it, learn from it, and use it to your advantage as another tool you can use to build your career.

Microsoft Certified: Security, Compliance, and Identity Fundamentals award badge

This evening I completed (and passed) the Microsoft SC-900 exam, earning my fourth certification this year – Microsoft Certified: Security, Compliance, and Identity Fundamentals.

This certification was interesting in a few different ways – first, it was kind of done “spur of the moment”; I’d passed my other exams and wanted to keep the momentum going, so I booked it without much forethought. Secondly, I’ve done loads of Secure Software Development Lifecycle training and documentation over the last few years, so I feel I might have had a leg-up on at least some of the fundamentals of this topic (pardon the pun). Finally, I genuinely found some of the tools referenced in the training to be quite interesting in and of themselves – something I hadn’t appreciated before diving in.

As per usual, I used my regular mix of Microsoft Learn’s free online resources, supplemented by access to Percipio resources through my work, and this great “cram” video by John Saville.

I’m planning to have a bit of a break before I’m back on the exam trail; I next have some virtual classroom training in September and October, followed by Associate-level exams in October and November, which will be my last for the year.

Sortly after this screenshot was taken, my office hit 31.5°C, which is about the time I decided it was time to stop for the day.

If this is going to be the norm for the next few weeks, I’m going to have to find some way of cooling down the room that’s better than my current option of “open the window”. Scots aren’t built for this sort of heat!

Now that I’d completed the data side of Azure, I wanted to try out something I was a little less familiar with; I’ve not gone near anything Machine Learning or AI-related in my work so far, so I felt getting at least some exposure to these topics wouldn’t go amiss. I’m glad I opted to add Microsoft Certified: Azure AI Fundamentals [AI-900] into the mix of what I’m studying this summer. It was a fun course, and one I fully recommend.

I wasn’t expecting to enjoy this topic as much as I did. Maybe it was partly a reaction to how little I’d enjoyed the Power Platform Fundamentals course. AI/ML is not an area I see myself working on often, possibly never outside of certification courses, but I don’t think I’d mind at all if someone did ask me to jump into a small project using Azure’s AI platform and tools.

A lot of the exam focused on the Responsible AI priciples, along with identifying the different types of workloads, tools, and models to use. This was one of the easier exams I’d sat lately. It took me around twenty minutes to complete, and I passed with a higher score than I expected.

As far as resources go, I used my regular mix of Microsoft Learn’s free study material, and Whizlabs. The prep for this exam was a little more practical than some of my other exams lately, which is probably why I found it a bit more fun.

It’s been a very long time since I visited the art gallery. Almost a decade, in fact. When the refurbishment was completed in late 2019 I heard a lot of good things, but before I could get around to paying a visit, COVID hit and we were all locked indoors.

With the easing of restrictions, we were looking for a quiet something to do on a day off – and as Caley had never been, the Art Gallery seemed an ideal choice.

The visit started off well; I walked into what used to be the entrance, only to find it’s currently the exit due to the one-way system they have in place as a safety measure. But once we got that snafu, things went well.

The gallery is so much more light and airy than I remember, with more natural light now. It feels a lot bigger, with more to see (even though half of it was closed off to prepare for a new exhibit). There’s a lot of subtle marrying of old and new throughout which I liked. I also really liked the new rooftop terraces, as there’s some nice views can be seen (and I’m sure more to come once Union Terrace is completed).

Overall, I was impressed, and I’m sure we’ll be scheduling more regular visits in the future.

To the side you’ll see a selection of the photos I took throughout our visit. I was consciously trying to avoid experiencing the visit just through the viewfinder, so there’s not a huge number of photos, but even though, this is only a small selection of what I could have shared.