Skip to content
Jonathan George - Software Engineer IV

Jon has been leading technical projects from the front for well over a decade. He's equally at home helping businesses break down and understand their processes and problems as he is deep in the guts of a complex codebase. All powered by cups of tea and his trademark northern positivity.

Meet Jonathan

Jon is an experienced project lead and architect who has spent nearly 20 years delivering industry-leading solutions for clients across multiple industries including oil and gas, retail, financial services and healthcare. At endjin, he helps clients take advantage of the huge opportunities presented by cloud technologies to better understand and grow their businesses.

View Blogs
Introduction to Python Logging in Synapse Notebooks

Introduction to Python Logging in Synapse Notebooks

Jonathan George

The first step on the road to implementing observability in your Python notebooks is basic logging. In this post, we look at how you can use Python's built in logging inside a Synapse notebook.
Optimising .NET code: Avoiding allocations using Span<T>

Optimising .NET code: Avoiding allocations using Span<T>

Jonathan George

Investigate some ways of working with strings that prevent unnecessary memory allocations.
Optimising .NET code: Let's blame LINQ

Optimising .NET code: Let's blame LINQ

Jonathan George

Investigate the impact of basic LINQ functions on performance and memory allocation.
Optimising .NET code: Hunting for allocations

Optimising .NET code: Hunting for allocations

Jonathan George

Explore basic techniques for benchmarking and identifying allocation sources in code.
Optimising .NET code: Introduction

Optimising .NET code: Introduction

Jonathan George

Explore techniques to boost .NET performance & memory efficiency, identify allocation sources, and optimize data handling.
Correctly configuring ASP.NET Core MVC authentication when hosting in Azure Container Apps

Correctly configuring ASP.NET Core MVC authentication when hosting in Azure Container Apps

Jonathan George

A short rundown of why you need the ForwardedHeadersMiddleware when using Azure Container Apps to host an ASP.NET Core MVC app requiring authentication
Bye bye Azure Functions, Hello Azure Container Apps: Conclusions

Bye bye Azure Functions, Hello Azure Container Apps: Conclusions

Jonathan George

In the sixth and final post we draw our conclusions about migrating an application from Azure Functions to Azure Container Apps.
Bye bye Azure Functions, Hello Azure Container Apps: Migration of the existing test environment

Bye bye Azure Functions, Hello Azure Container Apps: Migration of the existing test environment

Jonathan George

The fifth in a series of posts talking about how and why we migrated an application from Azure Functions to Azure Container Apps
Bye bye Azure Functions, Hello Azure Container Apps: Authentication and CORS issues

Bye bye Azure Functions, Hello Azure Container Apps: Authentication and CORS issues

Jonathan George

The fourth post migrating an app from Azure Functions to Azure Container Apps we examine the challenges around authentication and CORS
Bye bye Azure Functions, Hello Azure Container Apps: Build and deployment pipelines, and our first big problem

Bye bye Azure Functions, Hello Azure Container Apps: Build and deployment pipelines, and our first big problem

Jonathan George

The third in a series of posts talking about how and why we migrated an application from Azure Functions to Azure Container Apps
Bye bye Azure Functions, Hello Azure Container Apps: Migrating from Azure Functions to ASP.NET Core

Bye bye Azure Functions, Hello Azure Container Apps: Migrating from Azure Functions to ASP.NET Core

Jonathan George

The second in a series of posts talking about how and why we migrated an application from Azure Functions to Azure Container Apps
Bye bye Azure Functions, Hello Azure Container Apps: Introduction

Bye bye Azure Functions, Hello Azure Container Apps: Introduction

Jonathan George

The first in a series of posts talking about how and why we migrated an application from Azure Functions to Azure Container Apps
Configuration in Azure Functions - What's in the box?

Configuration in Azure Functions - What's in the box?

Jonathan George

The first in a series of posts talking about how to best work with configuration in Azure Functions
How to trigger an Azure Synapse pipeline run from C#

How to trigger an Azure Synapse pipeline run from C#

Jonathan George

A rundown of how to trigger an Azure Synapse pipeline run from C# code.
Using complex objects in BDD Scenarios with SpecFlow

Using complex objects in BDD Scenarios with SpecFlow

Jonathan George

Explore Behavior Driven Development using SpecFlow. Learn to create complex test data objects in Gherkin feature files with Corvus.NET project.
Integration Testing Azure Functions with SpecFlow and C#, Part 5 - Using Corvus.SpecFlow.Extensions in a build pipeline

Integration Testing Azure Functions with SpecFlow and C#, Part 5 - Using Corvus.SpecFlow.Extensions in a build pipeline

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the final post in this series, we show how to ensure specs written using Corvus.Testing can run as part of your build pipeline.
Integration Testing Azure Functions with SpecFlow and C#, Part 4 - Controlling your functions with additional configuration

Integration Testing Azure Functions with SpecFlow and C#, Part 4 - Controlling your functions with additional configuration

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the fourth of this series of posts, we look at how configuration can be supplied from your tests to the functions apps being tested.
Integration Testing Azure Functions with SpecFlow and C#, Part 3 - Using hooks to start Functions

Integration Testing Azure Functions with SpecFlow and C#, Part 3 - Using hooks to start Functions

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the third of a series of posts, we look at using classes in the Corvus.Testing library to run functions apps via scenario and feature hooks.
Integration Testing Azure Functions with SpecFlow and C#, Part 2 - Using step bindings to start Functions

Integration Testing Azure Functions with SpecFlow and C#, Part 2 - Using step bindings to start Functions

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the second of a series of posts, we look at using step bindings provided by the Corvus.Testing library to run functions apps as part of your SpecFlow scenarios.
Integration Testing Azure Functions with SpecFlow and C#, Part 1 - Introduction

Integration Testing Azure Functions with SpecFlow and C#, Part 1 - Introduction

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the first of a series of posts, we look at some different approaches to testing your functions apps, and introduce the Corvus.Testing library.
C# developers! Your scoped components are more dangerous than you think.

C# developers! Your scoped components are more dangerous than you think.

Jonathan George

Discover the challenges and alternatives of managing scoped component lifetimes with dependency injection.
Exposing legacy batch processing code online using Azure Durable Functions, API Management and Kubernetes

Exposing legacy batch processing code online using Azure Durable Functions, API Management and Kubernetes

Jonathan George

Discover how Kubernetes, Azure Durable Functions, and Azure API Management transform legacy batch processing code into a RESTful API.
NDC London Day 3 Retrospective - from personal projects to developer comedy

NDC London Day 3 Retrospective - from personal projects to developer comedy

Jonathan George

Along with several of my endjin colleagues, I attended NDC London in January this year - here's a run through of the sessions I attended on Day 3 and my thoughts. This final day was a mixed bag, taking in talks on drumming and AKKA.net, as well as something a bit more close to home - a session from endjin's own Jess Panni and Carmel Eve on our recent project for OceanMind.
NDC London Day 2 Retrospective - Full Stack, from SPAs to high performance .NET Core via Websockets

NDC London Day 2 Retrospective - Full Stack, from SPAs to high performance .NET Core via Websockets

Jonathan George

Along with several of my endjin colleagues, I attended NDC London in January this year - here's a run through of the sessions I attended on Day 2 and my thoughts. This day was UI heavy, with sessions on Vuejs and UI testing, but I also learned more about GraphQL and writing high performance C# code.
NDC London Day 1 Retrospective - dangerous AI, microservices, diagnostics and Blazor

NDC London Day 1 Retrospective - dangerous AI, microservices, diagnostics and Blazor

Jonathan George

A retrospective of my first day at NDC London 2020, taking in sessions on AI and Machine Learning, Capability Mapping, Micro Frontends, Diagnostics and Blazor.
Running Azure Functions in Docker on a Raspberry Pi 4

Running Azure Functions in Docker on a Raspberry Pi 4

Jonathan George

Running an Azure Function in a Docker container on Raspberry Pi 4 with this step-by-step guide and ready-to-use code for your projects.
Donut chart corkscrew entry animation with d3.js

Donut chart corkscrew entry animation with d3.js

Jonathan George

In this post we show a smooth entry animation for D3.js donut (or pie) charts, using a combination of a sweep and a zoom to give a corkscrew-like effect.
Becoming an endjineer – week 1

Becoming an endjineer – week 1

Jonathan George

The combination of working with a number of endjineers at previous organisations, and endjin being a fully remote company finally enticed Jon George to join endjin.