RSSAmplifier

Blog

Chris Armstrong

Development and tech musings. I'm a full-stack developer working with serverless architecture on AWS with TypeScript and React

chrisarmstrong.devRSS feed ↗43 posts

Latest posts

ocgtk development update: June 2026

Development update for ocgtk (a set of GTK4 bindings for OCaml), including upcoming support for signals and interfaces, expanded GLib type coverage, and packaging improvements to support other operating systems.

Emulating inheritance without classes

The O in OCaml is for its object-oriented extension, but I needed a way to emulate the constraints of inheritance without it. This raised some interesting design questions about how to do it using only the core ML language.

Tackling multiple namespaces in ocgtk

Even though I was focussed only on generating GTK bindings for OCaml, I still had to consider all the other libraries it depends on.

A day with Claude and OpenTelemetry

The "glue" part of OpenTelemetry instrumentation is where each vendor hands you a ball of sticky tape and tells you to install it in your environment.

ocgtk preview1 now on opam

ocgtk, a set of GTK4 bindings for OCaml, is now available on opam as preview1 release

Introducing ocgtk: GTK4 bindings for OCaml

Introducing ocgtk, a new set of GTK4 bindings for OCaml generated from GObject Introspection data.

Sydney AI Engineering Meetup talk - A field report on using LLMs with a little-known language

Last night I presented a talk at the Sydney AI Engineering Meetup on using agentic coding loops with lesser known languages and less-capable models, of which you can find the videa and slides linked

Losing control of the code

Free AI credits, a side project picked on a whim, and a false sense of progress left me with a codebase I couldn't read. Losing control was necessary to understand how to get it back.

What would make OCaml serverless ready?

What role does programming language choice make when targeting serverless environments, and how does OCaml stack up against popular serverless development languages? What would it take to make OCaml your primary development language for serverless?

We build our own tools

Is it unusual as developers that we create software but also the software that helps us build?

Instrument your build pipelines to level up your DevOps maturity

Observability is not just about production systems. Leaving critical engineering infrastructure like build pipelines uninstrumented makes it hard for your organisation to identify development bottlenecks and release regularly.

ICFP 2025 Wrap-up

Wrap-up on my time at the ICFP '25 conference in Singapore

Update on smaws development - October 2025

ICFP, smaws gets multiple scheduler support

Update on smaws development - September 2025

Update on smaws, an AWS SDK for OCaml

OCaml cross-compilation: an experiment

OCaml has no official solution to cross-compilation, with many disparate options developed for different use cases. In this article I describe my own experiments with cross-compilation and attempts to make it easier to get started and maintain.

PPXLib is not just for transforming code

ppxlib is usually just thought of as a tool for transforming OCaml code, but it can be used to generate new code too.

Keeping it small: helping the compiler to remove unused code in OCaml

OCaml has some facilities for eliminating unused code - I explore what it can do, and how you structure your code to take advantage of it

What we didn't learn from the past

Nostalgia for old operating systems and applications is misplaced. We don't need to return; their failures are the lesson learned.

Dead code elimination dead end: OCaml doesn't tree-shake

My (unsuccessful) investigation into removing unused code from the compiled output of OCaml, including all the web archeology and deep-dive into how native binaries are formed.

Stack splitting with AWS SAM: Escaping the resource limit for API functions

An AWS SAM application with a lot of APIs can still hit the CloudFormation stack resource limit. This guide shows you how to approach stack splitting for such an application.

Using IAM Identity Center through the Command Line

How to do basic administration tasks, like add users to groups, with the IAM Identity Center when managing multiple AWS Accounts and user access

Storybook 7 - Visual Regression Testing

Storybook 7 has changed the visual regression story, no longer relying on storyshots. This is how to get a visual regression workflow up and running with the new test-runner functionality.

Unit testing OCaml code with ppx_expect: some notes

Some notes on using ppx_expect to unit test

What I'm working on: resource references in ocaml-cfgen and IAM policy generation

ocaml-cfgen gets resource reference, IAM policy generation and what's next

What I'm working on: ocaml-cfgen

A new project I'm working on to generate CloudFormation templates from OCaml bindings, and the problems that motivated its creation

CSS works against maintainability

The design of CSS does not make styling HTML more maintainable - in fact, it seems to actively work against it.

API Mismatch: Why bolting SQL onto noSQL is a terrible idea

Database ORMs like Prisma can make managing data access layers to SQL databases much easier for developers, but if used with a database that has dramatically different semantics and API, the benefits of abstraction are lost and turned into a maze of horrors

Observability: What to instrument?

It takes time to build up a sense of what to instrument to get the most out of your investment in observability, and it pays to know what primitives you have at your disposal and how to use them effectively.

Package your NodeJS Lambda functions individually with esbuild for faster cold-start times

Learn about packaging your NodeJS-based AWS Lambda functions with esbuild for improved cold start times and reduced deployment package size

Setting up a new Reason project

Starting a new Reason project for native development is relatively straightforward. We run through the basics.

Type-safe APIs with ReScript

Learn how to build a type-safe JSON API in ReScript that runs on AWS Lambda

Using Rescript to build applications on AWS Lambda

Learn how to use ReScript to write and deploy a simple AWS Lambda application

Retry, Timeout and Cancel with fetch()

Add retries, timeouts and cancellation to your fetch() calls without including another HTTP library

Building successful transactional applications on DynamoDB

Building transaction applications on DynamoDB can be a challenge - here is a few tips I've learned to ensure it is successful

When to use DynamoDB

When would you use DynamoDB? A quick run-down of the advantages and disadvantages

What is AWS Control Tower? A quick overview

Managing multiple accounts is a headache on AWS, especially when you're trying to maintain best practice compliance and when operations isn't your day job. AWS's new Control Tower service makes it much easier to provide governance and monitoring of your multi-account environment, automating the deployment of centralised audit logging, account guardrails and ensuring consistent base configuration…

Testing node-fetch with jest in TypeScript

Setting up a test of code that uses node-fetch with jest and Typescript

Setting up API Gateway CloudWatch Logging for your AWS Account

Setting up CloudWatch Logging for your API Gateway is painful - here's a script to make it easy

Understanding Amazon Cognito

Understanding what is Amazon Cognito and how it is used

Run your own teleconferencing server with Jitsi on EC2

Running your own Jitsi instance on EC2 with an easy-to-deploy CloudFormation solution

dynaglue: Getting Started Guide

A guide for getting started with dynaglue

Announcing dynamodb-csv-export-import

Annoucing dynamodb-csv-export-import, a utility for importing the CSVs generated by the AWS DynamoDB Console 'Export to csv' feature

What is this

An overview of this blog