Blog

Setting Up a Model Context Protocol (MCP) Remote Server in VSCode

#model context protocol#mcp#vscode#c##mcp remote server

This guide walks you through the process of connecting a Model Context Protocol (MCP) remote server to Visual Studio Code (VSCode)

Read more →

April 23, 2025

Prompts

#prompts#prompt engineering#ai#vscode

This post explains what prompts are in the context of GitHub Copilot Chat

Read more →

April 18, 2025

What is the Inner Loop?

#ci#continuous integration#clean code#code quality#Inner-loop

This post explores the concept of the Inner Loop in software development, emphasizing its importance in enhancing productivity, reducing feedback delays, and improving code quality. It provides practical examples and tools to optimize the inner loop, ensuring a more efficient and enjoyable development process. What is the Inner-loop? The “Inner Loop” in software development refers to the set of activities and processes a developer repeatedly goes through while writing, testing, and debugging code in the development phase, before committing changes to a version control system. This loop typically includes writing code, compiling, running, testing locally, and debugging. The goal of optimizing the inner loop is to maximize developer productivity and satisfaction by making these activities as efficient and frictionless as possible.

Read more →

July 6, 2024

Shortcode - An image with a caption

#shortcode#caption#html#hugo#image

I had an article I wanted to post but knew with the number of images I planned on including, it will look unsightly. The first idea I had to make it less so, was to indent the image to break up the page a little. The next idea I had was to include a caption under each image. Knowing that HTML has an element called figure, I decided to use this. I didn’t want anything complicated so I planned to keep the code to a minimum.

Read more →

February 26, 2024

.NET Aspire and Redis

#.net aspire#azd#blazor#csharp#devex#dependency injection#nuget#redis

First look into .NET AspireTL;DR: See here for why AZD is not yet supported. I decided to give .NET Aspire a try. I’m yet to watch an online tutorial but I did watch its announcement a few months ago. At the time I did think YAGNI. For me, it didn’t make much sense. Either that, or it just wasn’t being explained well enough. Enthusiasm alone isn’t enough to promote a new tool. Since then, I’ve seen many tweets. So, over the last month or so, I’ve gradually grasped its raison d’être.

Read more →

February 25, 2024

The 3rd Wave of Cloud Computing

#wasm#wasi#compute#docker#component model#sustainability#sustainability transformation

That’s quite an opening statement, isn’t it? As a reminder, the 1st and 2nd waves were Virtual Machines and Containers, respectively. Warning, profound statement inbound… 🌐 The Docker cofounder, Solomon Hykes, said this in 2019 “If WASM+WASI existed in 2008, we wouldn’t have needed to create Docker. That’s how important it is. WebAssembly on the server is the future of computing.” - Quote I think we need to let this sink in for a few moments. IMO, this is huge. Personally, since 2016, most of my DevOps [development & orchestration] work has involved containers. Container and FaaS is my preferred approach to development and orchestration. But now there’s a new way? Will I now have to throw out all this knowledge and return to ground zero and start over? In short, no. Anyways, back to this 3rd wave…

Read more →

February 5, 2024

Compare Resources From Terraform Plan

#terraform#powershell#azure

Here’s a link to a repo I created today, that will be used to host examples of all challenges I encounter that relate to Terraform. In this particular sample, I need to list out all those resources that will be created using Terraform where we do not have a state file. The product of this will be added to sheets, by Resource Group, in an Excel spreadsheet. Each sheet is an Azure Resource Group. The rationale for this is that at some point an apply was executed, and due to the state not being managed, we do not know if the current config matches with what has been deployed.

Read more →

February 4, 2024

Error NETSDK1045

#error#visual studio#vs#vs2019#.net#sdk

Error NETSDK1045 The current .NET SDK does not support targeting .NET 6.0Error A colleague had Visual Studio shout this (see 👇) at him when he loaded up a FunctionsApp project. He received this error twice as the second project was the unit tests for the FunctionsApp. Caution

Read more →

September 28, 2022

How to Write Clipboard to File

#clipboard#powershell#Microsoft.PowerShell.Management

Have you ever wondered how to persist your clipboard to disk? Wonder no more… To get started, copy a random sentence into your clipboard like so: Set-Clipboard -Value "This is being copied into clipboard" Let’s confirm the contents of the clipboard, like so:

Read more →

September 26, 2022

How to Conditionally Include a Nuget Package

#azure#functionsapp#selenium#chromedriver#docker#nuget#linux#runtime identifier

The contextI have implemented a solution that as it’s primary objective iterates through a sequence of HTTP Requests and page interactions. With sequencing through these steps regularly it gives the support team the maximum amount of time to react to an outage. This outage can be isolated to this particular service, or can originate from any of it’s downstream dependencies. To help with the automation of these steps, I’m using Selenium and in particular, it’s headless browser capability in conjunction with ChromeDriver. With this combination, I can navigate within a Chrome browser, provide alphanumerical inputs and execute mouse clicks, all by using imperative code.

Read more →

September 21, 2022

.NET Stack, Heap and Boxing

#csharp#.net#stack#heap#allocations#gc#boxing

This week I have been investigating how to reduce memory allocation in a few HTTP APIs. I won’t go into any explicit work-related examples here but I will touch on facets relating to this effort. Let’s start off by looking at Reference Types and Value types and how they get allocated into the Heap. I will also touch on concepts such as boxing and GC pressure. Let me start off with some facts:

Read more →

February 4, 2022

The Grass Is Rarely Greener

#azure#aws#empty promises#building relationship#willing#attrition#managed service

I recently had a conversation that stirred up some surpressed memories. The conversation was related to moving to a different cloud vendor. That journey didn’t work out so well for me and the company I was working for at the time. Sadly, that company stopped trading and I don’t think it’s that much of a leap to link that journey to the demise of that company. Hopefully, now the title of this post is starting to make more sense?

Read more →

January 30, 2022

Nodejs Install E401

#nodejs#e401#azure functions#npm feed#upstream feed#typescript

Today I created a simple nodeJS Azure Functions Applicaiton to start building out a PoC and when I tried to install it’s dependencies like so: npm install I got this little cherub back instead:

Read more →

January 22, 2022

Kubernetes Pod Disruption Budget and the Helm hasKey Function

Pod Disruption BudgetWhen working with Kubernetes, one crucial component of configuration is known as a PDB (Pod Disruption Budget). A PDB will ensure your workload remains running when you work through a Voluntary Disruption. What on earth is a Voluntary Disruption? A Voluntary Disruption is when you trigger an action that causes the disruption. For example, if you wish to upgrade a Minor AKS version or any action that recycles a Node Pool. Click here ➡ Disruptions to read up on what Disruptions are.

Read more →

January 21, 2022

Adding more Github Self-Hosted Runners

#github self-hosted runner#linux#issue

Adding more GitHub Self-Hosted RunnersTo help build out our numbers of GitHub Self-Hosted Runner, we took a shortcut and had cloned an existing Linux VM. Unfortunately, the by-product of doing this resulted in (a) the clonee (source) Linux VM had their Self-Hosted hijacked by the new VM and (b) we had a Runner registered in GitHub that didn’t actually have a running runner - Offline 🤪. Madness! Ok, so what to do?…

Read more →

January 18, 2022

Hybrid Origins Http Traffic

#cloudflare#dns#uri forwarder#page rules#zones#domain#hostname

We’re migrating our on-premise workloads to Azure. This has presented several challenges. One of which is what I am covering specifically here in this post and that is … How to reduce code change effort? This isn’t about updating runtimes, this is about having workloads spread across different platforms that need to talk to each other (with some HTTP chaining 👀). It is not uncommon for one HTTP API to need to talk to another HTTP API. If you move one HTTP service to run in different zone, you will need update references in those ALL dependant services so they point to that new DNS Hostname. This isn’t a big issue if you’ve only few HTTP APIs. However, if you’ve 100+ HTTP APIs that you’re migrating, including many with several HTTP dependencies, then this quickly becomes daunting and a potential PR approval and deployment (multiple environments) scheduling nightmare. A simple domain name search in your organisation’s Github account will illuminate my point.

Read more →

January 15, 2022

K8s Selectors and Labels

#kubernetes#k8s#deployment#pod#replicaset#selectors#equality-based#set-based#kubectl

Right, what’s the deal with all the labels and metadata in a Deployment manifest?!!!! Take this example: apiVersion: apps/v1 kind: Deployment metadata: namespace: default name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx foo: baa template: metadata: labels: app: nginx foo: baa spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 Here, we see metadata twice, and also there’s mention of matchLabels in selector??? What does it all mean???

Read more →

January 15, 2022

Azure Defender for Cloud

#azure#defender for cloud#cicd#cve#github actions#windows containers

Defender for Cloud ContainersSetting up Defender for Cloud Containers to work with your CICD pipeline is quick and uncomplicated. I do not walk through these set up steps in this post. For that, you can follow those few steps here in this Microsoft post instead ➡ Setup. The goal of this post is to highlight a few areas of interest and to share my opinions on this feature. I have understandably obfuscated sensitive information.

Read more →

January 15, 2022

Npm E401 and CERT_NOT_YET_VALID

#github actions#npm#nodejs#e401#cert_not_yet_valid#docker#acr#npmrc#GH Secrets

Today a PR Merge resulted in a GHA failure. Sadly, this is not the only CICD pipeline to fail this year! This particular pipeline builds a NodeJS Image, pushes the image to ACR and deploys the service to a production Docker Swarm (on merge to main). This was the error: 🚫 [3/7] RUN npm install:

Read more →

January 11, 2022

Github Action Workflow Starter

#github action workflow#starter#cruft#azure devops#bamboo#github plans

In this post, I share practical insights on how to simplify and streamline your CI/CD processes using GitHub Actions. The focus is on reducing complexity, minimizing effort, and making it easier for teams to adopt new workflows with less cognitive overhead. Background During our migration from on-premise infrastructure to Azure, I had the opportunity to revisit and redesign our CI/CD pipelines. My guiding principle throughout this process was to keep things as simple as possible, always returning to first principles when evaluating tooling and process changes. GitHub Actions emerged as a strong candidate for our needs, offering flexibility and ease of use.

Read more →

January 9, 2022

Github Actions Workflow Env Vars

#github actions#linux#windows#syntax#self-hosted runner#environment variables#workflow#cicd

In my current role as Head of Cloud Platform, I am leading the technical effort of migrating our entire on-premise real-estate to Azure. Part of this mission, is to upgrade the runtimes of our applications, regardless of their current placement; IIS Web apps, Windows Services and Docker Swarm containers. I say “part of this mission” as another aspect of this migration is to create a new foundation for our platform - AKS. I hope to cover more on this in later posts.

Read more →

January 8, 2022

Runtimes

#.net framework#.net core#.NET 6.0#.NET 3.1#end-fo-life support#linux#windows#syntax#self-hosted runner#cicd#microsoft fasttrak#code quality#image scanning#licensing#cve#nuget#npm

In my current role as Head of Cloud Platform, I am leading the technical effort of migrating our entire on-premise real-estate to Azure. Part of this mission, is to upgrade the runtimes of our applications, regardless of their current placement; IIS Web apps, Windows Services and Docker Swarm containers. I say “part of this mission” as another aspect of this migration is to create a new foundation for our platform - AKS. I hope to cover more on this in later posts.

Read more →

January 8, 2022

Permission Denied While Trying to Connect to the Docker Daemon Socket

#docker#linux#github actions#GHA#Self-Hosted Runner#dotnet#Azure Container Registry#ACR#containers#pods

Out of the blue today, my first day back after Christmas break, I got this when running a GH Actions Workflow on one of our Self-Hosted Linux Runners 😱: 🚫 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied ℹ️ We have several GitHub Self-Hosted Runners running on Linux and Windows O/S that produce, amongst other artefacts, Linux and Windows images. These images are pushed to ACR. We’re in the process of migrating our on-premise real-estate - IIS Web apps, Windows Services, Docker swarm containers - to AKS as well as migrating our SQL Server AG to Azure. We’re using Self-Hosted Runners as we have spare compute capacity and some of our applications have a dependency on a legacy NuGet server which requires our CI pipelines to run in our network. We are in the process of also migrating these legacy packages to our Azure DevOps NuGet Feed as part of our modernization initiative. This modernization initiative encompasses upgrading our runtimes to .NET Framework 4.8 and .NET 6.0. It had been running fine prior to my break so what gives? I started to investigate…

Read more →

January 7, 2022

My First Outing With Dapr

#dapr#kubernetes#redis#secret store csi driver#aks#nestjs#keda

TL;DR: Not as forgiving as I’d have liked … ℹ️ I was a speaker at a meet-up in Manchester in late 2020. I spoke about Dapr, Keda and the NestJS Framework. My talk topic was on “Writing less code - let your architecture and abstractions help with your *-cases”. The * in the title is a wildcard for use/edge/corner.

Read more →

November 6, 2020

How to Use Kubernetes Configmap

#kuberetes#configmap#cm#kubectl#secrets#best practice

There’s a ton of material out there on how to use a ConfigMap. In this post I will provide a recap on the basics then I drill into how to protect your secrets! There are a few ways to create a configMap. Here, I cover just two of these ways;--from-env-file and –from-literal. I won’t cover options like from volume. How to create a ConfigMap from a literal To create a configMap from literals and from the command line, you would type this:

Read more →

November 2, 2020

Nodejs Container Restart Policy

#nodejs#cluster#docker#docker-compose#resilience

If by accident to deploy a solution using the Node.js Cluster API and do not fork exited processes then the following docker-compose restart_policy will not help you: docker-compose.ymldeploy: restart_policy: condition: on-failure If you’re using the Cluster API to schedule tasks across your processes, and all forked processes die, then the docker engine will just assume you’ve gracefully shutdown.

Read more →

September 21, 2020

How to run the Apache Ignite Agent with an Ignite.NET Core Server Node

#apache ignite#ignite#gridgain#data grid#Ignite.NET

I’ve recently been researching into Apache Ignite. Apache Ignite is an in-memory, memory-centric, distributed database, caching and processing platform for transactional, analytical, and streaming workloads. So why the post? Well, with using .NET Core, I have run into one or two challenges that I have had to work through. One of which involves the Agent. I feel it is important to share with you how I get beyond this issue. It may save you a lot of time if you’re an Apache Ignite noob like me.

Read more →

July 28, 2020

Terraform Get Values

#terraform

With not wanting to have hard coded values pushed to a project’s code repository, and an antiquated way to derive Azure Service Principal credentials, I set about exploring ways on accomplishing this with this in mind using Terraform. Attempt 1 Here ins my first attempt, I load all permutations into map variables. I use an environment variable as an indexer to the appropriate map value: provider "azurerm" { version = "=2.17" ... subscription_id = var.azure_subscription_id[var.environment] client_id = var.azure_client_id[var.environment] ... } variable "azure_subscription_id" { type = map default = { "dev" = "********-****-****-****-************" "prod"= "********-****-****-****-************" } } variable "azure_client_id" { type = map default = { "dev" = "********-****-****-****-************" "prod"= "********-****-****-****-************" } } ... Attempt 2 This second and more efficient approach, I used jsondecode function to load the entire credentials JSON to access the subscriptionId property:

Read more →

July 23, 2020

Digital Certificates

#ssl#openssl#digital certificate#digital signature#key pairs#keys#signing#hash#encryption#sso

I’ve been wanting to put some notes down on digital certificates, signing and JWT for some time now. I find there are plenty of confusing terms involved in this area, plus a few nuances that have added to my personal confusion. I feel it now important to document these before I forget and move on [to another project]. So, what’s triggered this post? Well, one of many tasks I’m involved in [juggling] evolves SSO (single sign on). Albeit, mainly focused on the architecture on this task, I have compiled a few PoCs where I’m using digital certificates for authentication. In particular, SSOing into Twilio Flex and using an identity field returned from their I.AM service, to seamlessly log into our internal CRM, securely using a digital certificate.

Read more →

June 8, 2020

Unit testing and mocking fs.ReadFileSync

#jest#unit testing#twilio#rabbitmq#twilio taskrouter#mssql#sync#twilio sync#taskrouter

I’d just ran npm run test in a newly created package I’d added to a monorepo (lerna) I’d created for a project I was working on that integrates with Twilio Sync, RabbitMQ, Twilio TaskRouter and MSSQL, and I go this: *******************************consumers\packages\eda [CRMBROK-233 +0 ~2 -0 !]> npm run test > @cf247/eda@1.0.2 test *******************************consumers\packages\eda > jest FAIL __tests__/eda.test.js ● Test suite failed to run ENOENT: no such file or directory, open '.env' 2 | const fs = require('fs') 3 | const dotenv = require('dotenv') > 4 | const envConfig = dotenv.parse(fs.readFileSync(`.env`)) | ^ 5 | for (const k in envConfig) { 6 | process.env[k] = envConfig[k] 7 | } at Object.<anonymous> (lib/setenv.js:4:35) at Object.<anonymous> (lib/eda.js:1:1) Test Suites: 1 failed, 1 total Tests: 0 total Snapshots: 0 total Time: 1.772 s Ran all test suites. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! @cf247/eda@1.0.2 test: `jest` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the @cf247/eda@1.0.2 test script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm WARN Local package.json exists, but node_modules missing, did you mean to install? npm ERR! A complete log of this run can be found in: npm ERR! *******************************\npm-cache\_logs\2020-05-28T08_04_32_271Z-debug.log *******************************consumers\packages\eda [CRMBROK-233 +0 ~3 -0 !]> Not great but hey, first run and all!

Read more →

May 28, 2020

Hugo Shortcodes - my first try

#hugo#shortcodes#example

My first attemptHere’s my first effort at creating a shortcode. This shortcode is available here Information Basic {{< note Sample text >}} Sample text With italics {{< note italic=“true” Sample text >}}

Read more →

April 6, 2020

Kubernetes on Windows

#blogging#kubernetes#setup#windows#containers#pods#services#azure#aws#gcp

This post is a reminder to me of what needs to be installed in order for a pod, created from a local image, that is to be served up via a kubernetes cluster, to be run from your local development environment. What is Kubernetes and why is it so important? “Kubernetes is a portable, extensible, open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available.”

Read more →

April 6, 2020

Modern-ish Javascript

#javascript#destructuring#arrow functions#typescript#class#babel#decorator

This post includes a few notes on ECMA language features that I like as well as some info on memory leaking. I have no doubt that it will read disjointed; I started this eons ago and only now have I decided to publish it. A simple reminder of what Node.js is …it is a set of APIs wrapped around the V8 Engine (written in c++) and is a high-performance JavaScript and WebAssembly engine.

Read more →

April 5, 2020

How do I mentor?

#Hugo#blogging#mentoring#The Manager's Path#Heisenberg Effect

I have written this post to document my experiences of mentoring. I have mentored front-end engineers, back-end engineers and UX designers. I have had the pleasure of helping others as well as learning one of two things about myself along this journey too. If ever you get the opportunity to be a mentor, I recommend you jump at the opportunity. It is a self-rewarding experience. So, what is mentoring?… The definition of Mentoring is the act of advising or training (someone, especially a younger colleague).

Read more →

March 26, 2020

Good Engineering - Principles

#Hugo#blogging#good engineering#principles

I have written this post as a method to document what I see as the basics, foundations if you will, for good engineering. Undoubtedly if you are a seasoned engineer, you will recognised all of these principles, less so, if you’re just starting out. Most Engineers are fully versed in the foundations of writing quality, efficient, succinct and testable code. As a Principal Engineer, one of my responsibilities is to ensure that these (1) foundations are recognised by the engineers and (2) are adhered to by all engineers.

Read more →

March 1, 2020