RSSAmplifier

Blog

10 PRINT "I AM COOL"

I've been coding since 1982, when my dad bought a 1K ZX81. I've been paid to code since 1991, journeying from mainframe development, through PC development, and

10printiamcool.comRSS feed ↗20 posts

Latest posts

Reacting to Blob Storage events in Azure Functions

In the previous post in this series on creating a serverless webhook proxy, I looked at connecting to Azure Blob Storage without connection strings. Now that we have the webhook payloads validated and stored, it is time to look at processing them. So...

Using composition over inheritance to create an OpenAPI client

In the previous parts in this series, I discovered the OpenAPI package, used it to verify REST API payloads, and then used it to create a class that can use an OpenAPI specification to become a dynamic API client. At the end of the last part, I compa...

Using Microsoft.OpenApiReader to create a dynamic REST API client

In my previous post, I discovered the Microsoft.OpenApi packages and used them to extract JSON schemas from an Open API document. At the end of that post, I pondered if it would be possible to build on my experience to create a client that could be u...

Validating JSON Requests Using C# and OpenAPI/Swagger

Recently, I needed to integrate an internal system that generates JSON with a third-party API. Usefully, I had an OpenAPI specification for the API in question. OpenAPI is a specification for machine-readable interface files for describing, producing...

Connecting to cloud Azure Blob Storage

In the previous post in this series on creating a serverless webhook proxy, I used Azurite (local Blob Storage emulator) to develop the code that stores the requests received. This was very convenient, but avoided a number of concerns that we encount...

Using Local Blob Storage

In the previous post in this series on creating a webhook proxy using Azure serverless technology, I added API Management in front of an Azure Function. In this post, I turn my attention to fleshing out the back-end functionality. In particular, impl...

Exposing an Azure Function using API Management

This is the third post in my series where I explore the world of serverless Azure. I am doing this by building a webhook proxy application using only the serverless Azure services. In the first two posts, I built and deployed an Azure function that r...

Deploying and Debugging my First Azure Function

In this series, I am learning by doing and documenting my experience on the way. I am aiming to build a serverless webhook proxy, to provide a resilient interface for downstream systems. In the first part, I used the local development tools to build ...

Observations on Developing My First Azure Function

Recently, my focus at work has shifted from AWS development to Azure development. To help myself get properly acquainted with the technology, I have decided to set myself a Azure-based serverless challenge. That is, to build a multi-tenant webhook pr...

My First AI-Assisted Project

In this post, I share my experience of learning how to use ChatGPT to assist me develop a tool to assist me in solving a real world problem. A problem in a domain where I have limited knowledge. Every February, under the guise of Andy Balham, I take ...

Step Function Errors Should Be Errors

In this post, we shall see the consequences and limitations of using step function errors as flow control. See the accompanying GitHub repo for working code examples. TL;DR Be wary when using step functions errors for flow control in step functions ...

My first steps with the future of programming

40 years ago I saw someone try to program with natural language. Now that has become a reality with large language models (LLMs) and SudoLang. My first question was, can we use these tools to generate comedy gold? 40 years ago It was 1982 and I was a...

Adventures with AWS X-Ray and CDK - Part 3

In this post I continue my adventures with X-Ray and try my hand at observing a whole application. In the previous posts in the series, I looked at using X-Ray in a small context. Here we will see what happens when an end-to-end process is traced and...

Adventures with AWS X-Ray and CDK - Part 2

In the first part of this series, I added AWS X-Ray to a set of examples for my CDK Cloud Test Kit. In this part, I look at adding it to an example application that I put together for my series on implementing Enterprise Integration patterns. Let's s...

Adventures with AWS X-Ray and CDK - Part 1

One of the big challenges of distributed systems, such as serverless, is observability. In previous posts, I had a look at structured logging, metrics, and alarms. All these play an important part in building a maintainable system. One thing that I h...

Encapsulation Not Always Desirable

From my earliest experience with object-oriented programming, I learnt that one of the biggest benefits of the paradigm was the concept of encapsulation. Lately, my experience with developing in JavaScript and creating libraries have led me to come t...

Updating to Node.js 18 and AWS JavaScript SDK v3 - Part 2

In this series, we continue looking at upgrading a TypeScript codebase from AWS SDK V2 to AWS SDK V3. Here we concentrate on DynamoDB and also look at S3, Step Functions, and Lambda functions. DynamoDB clients As we saw in the first part of this seri...

Updating to Node.js 18 and AWS JavaScript SDK v3 - Part 1

With the announcement of the Node.js 18.x runtime being available in AWS Lambda, AWS also changed the included version of the AWS SDK for JavaScript. Up until Node.js 16, Lambda’s Node.js runtimes have included the AWS SDK for JavaScript version 2. ...

Creating Overloaded Methods in TypeScript

For the majority of my journey in software development, I have used languages that have supported method overloading. I have found this to be useful, so I have been wondering how to implement something similar in TypeScript. How can we have a method ...

Enterprise Integration Patterns - Domain Observability

In the first two parts in this series, we first looked at choosing a messaging technology and then looked at how we can design the domain events that flow through the application. In this part, we will look at how we can use those domain events to im...