41554 blogs · [ { "id": "01a0875f-147e-72ce-a827-b86cba5a6fa4", "title": "Comments Considered Harmful", "url": "https://www.chrisarmstrong.dev/posts/comments-considered-harmful", "published_at": "2026-09-02T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbadb2d7b", "title": "AI operations is a mirage", "url": "https://www.chrisarmstrong.dev/posts/ai-operations-is-a-mirage-2026-08-24", "published_at": "2026-08-24T09:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbb13b473", "title": "ocgtk development update: June 2026", "url": "https://www.chrisarmstrong.dev/posts/ocgtk-development-update-2026-06-10", "published_at": "2026-06-10T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbb72dd2a", "title": "Emulating inheritance without classes", "url": "https://www.chrisarmstrong.dev/posts/emulating-inheritance-without-classes-2026-05-11", "published_at": "2026-05-13T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbbb3adc6", "title": "Tackling multiple namespaces in ocgtk", "url": "https://www.chrisarmstrong.dev/posts/tackling-multiple-namespaces-in-ocgtk", "published_at": "2026-05-01T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbbf7a3cb", "title": "A day with Claude and OpenTelemetry", "url": "https://www.chrisarmstrong.dev/posts/a-day-with-claude-and-opentelemetry-2026-04-23", "published_at": "2026-04-23T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbceb66d7", "title": "ocgtk preview1 now on opam", "url": "https://www.chrisarmstrong.dev/posts/ocgtk-preview1-release", "published_at": "2026-04-21T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbd22c85d", "title": "Introducing ocgtk: GTK4 bindings for OCaml", "url": "https://www.chrisarmstrong.dev/posts/introducing-ocgtk-gtk4-bindings-for-ocaml", "published_at": "2026-04-12T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbda83a26", "title": "Sydney AI Engineering Meetup talk - A field report on using LLMs with a little-known language", "url": "https://www.chrisarmstrong.dev/posts/sydney-ai-engineering-march-2026-losing-control-and-getting-it-back-2026-03-04", "published_at": "2026-03-03T21:50:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbe7e76d5", "title": "Losing control of the code", "url": "https://www.chrisarmstrong.dev/posts/losing-control-2026-02-06", "published_at": "2026-02-06T06:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbf02fdb4", "title": "What would make OCaml serverless ready?", "url": "https://www.chrisarmstrong.dev/posts/what-would-make-ocaml-serverless-ready", "published_at": "2026-01-08T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbf115703", "title": "We build our own tools", "url": "https://www.chrisarmstrong.dev/posts/we-build-our-own-tools-2025-12-05", "published_at": "2025-12-05T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cbfc2e12d", "title": "Instrument your build pipelines to level up your DevOps maturity", "url": "https://www.chrisarmstrong.dev/posts/instrument-your-build-pipelines-2025-10-27", "published_at": "2025-10-27T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc01f74e2", "title": "ICFP 2025 Wrap-up", "url": "https://www.chrisarmstrong.dev/posts/icfp-wrapup-2025-10-18", "published_at": "2025-10-18T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc0d393de", "title": "Update on smaws development - October 2025", "url": "https://www.chrisarmstrong.dev/posts/smaws-update-2025-09-30", "published_at": "2025-09-30T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc16ee174", "title": "Update on smaws development - September 2025", "url": "https://www.chrisarmstrong.dev/posts/smaws-update-2025-09-18", "published_at": "2025-09-18T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc2041f45", "title": "OCaml cross-compilation: an experiment", "url": "https://www.chrisarmstrong.dev/posts/ocaml-cross-compilation-an-experiment", "published_at": "2025-04-30T10:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc21eb087", "title": "PPXLib is not just for transforming code", "url": "https://www.chrisarmstrong.dev/posts/ppx-lib-for-generating-new-code", "published_at": "2025-03-31T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc272cc70", "title": "Keeping it small: helping the compiler to remove unused code in OCaml", "url": "https://www.chrisarmstrong.dev/posts/removing-unused-code-in-ocaml", "published_at": "2024-11-16T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc27afe12", "title": "What we didn't learn from the past", "url": "https://www.chrisarmstrong.dev/posts/what-we-didnt-learn-from-the-past", "published_at": "2024-10-24T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc2a45d55", "title": "Dead code elimination dead end: OCaml doesn't tree-shake", "url": "https://www.chrisarmstrong.dev/posts/dead-code-elimination-dead-end-in-ocaml", "published_at": "2024-10-23T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc2cc2cb8", "title": "Stack splitting with AWS SAM: Escaping the resource limit for API functions", "url": "https://www.chrisarmstrong.dev/posts/stack-splitting-aws-resource-limits-and-the-curse-of-serverless-success", "published_at": "2023-06-16T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc310e9d3", "title": "Using IAM Identity Center through the Command Line", "url": "https://www.chrisarmstrong.dev/posts/using-iam-identity-center-with-the-cli", "published_at": "2023-05-25T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc4105b72", "title": "Storybook 7 - Visual Regression Testing", "url": "https://www.chrisarmstrong.dev/posts/storybook-7-visual-regression-testing", "published_at": "2023-05-13T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc49f87b5", "title": "Unit testing OCaml code with ppx_expect: some notes", "url": "https://www.chrisarmstrong.dev/posts/unit-testing-with-ppx_expect", "published_at": "2023-04-16T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc54fe876", "title": "What I'm working on: resource references in ocaml-cfgen and IAM policy generation", "url": "https://www.chrisarmstrong.dev/posts/what-im-working-on--resource-references-and-iam-policies", "published_at": "2023-04-07T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc5e9417b", "title": "What I'm working on: ocaml-cfgen", "url": "https://www.chrisarmstrong.dev/posts/what-im-working-on--ocaml-cfgen", "published_at": "2023-04-03T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc641b720", "title": "CSS works against maintainability", "url": "https://www.chrisarmstrong.dev/posts/css-works-against-maintainability", "published_at": "2023-01-15T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc7301886", "title": "API Mismatch: Why bolting SQL onto noSQL is a terrible idea", "url": "https://www.chrisarmstrong.dev/posts/api-mismatch--why-bolting-sql-onto-nosql-is-a-bad-idea", "published_at": "2023-01-11T23:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc824ad07", "title": "Observability: What to instrument?", "url": "https://www.chrisarmstrong.dev/posts/observability-what-to-instrument", "published_at": "2022-06-23T06:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc884d676", "title": "Package your NodeJS Lambda functions individually with esbuild for faster cold-start times", "url": "https://www.chrisarmstrong.dev/posts/package-aws-lambda-nodejs-functions-individually-with-esbuild-for-faster-cold-start", "published_at": "2021-12-30T10:23:17+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc89a5185", "title": "Setting up a new Reason project", "url": "https://www.chrisarmstrong.dev/posts/setting-up-a-new-reason-project", "published_at": "2021-11-09T00:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc92c4336", "title": "Type-safe APIs with ReScript", "url": "https://www.chrisarmstrong.dev/posts/type-safe-apis-with-rescript", "published_at": "2021-09-21T23:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc98ad990", "title": "Using Rescript to build applications on AWS Lambda", "url": "https://www.chrisarmstrong.dev/posts/rescript-on-aws-lambda", "published_at": "2021-08-26T11:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cc9ea52b8", "title": "Retry, Timeout and Cancel with fetch()", "url": "https://www.chrisarmstrong.dev/posts/retry-timeout-and-cancel-with-fetch", "published_at": "2021-08-22T01:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cca6d0d0e", "title": "Building successful transactional applications on DynamoDB", "url": "https://www.chrisarmstrong.dev/posts/building-successful-transactional-applications-on-dynamodb", "published_at": "2021-08-17T11:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86ccaf78f1e", "title": "When to use DynamoDB", "url": "https://www.chrisarmstrong.dev/posts/when-to-use-dynamodb", "published_at": "2021-08-12T08:00:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86ccb2a19c3", "title": "What is AWS Control Tower? A quick overview", "url": "https://www.chrisarmstrong.dev/posts/what-is-control-tower", "published_at": "2021-06-24T03:56:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86ccbf346a0", "title": "Testing node-fetch with jest in TypeScript", "url": "https://www.chrisarmstrong.dev/posts/testing-node-fetch-with-jest-in-typescript", "published_at": "2020-11-30T21:50:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86ccce6e70d", "title": "Setting up API Gateway CloudWatch Logging for your AWS Account", "url": "https://www.chrisarmstrong.dev/posts/setting-up-api-gateway-cloudwatch-logging-for-your-aws-account", "published_at": "2020-09-27T03:28:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86ccd0b9d00", "title": "Understanding Amazon Cognito", "url": "https://www.chrisarmstrong.dev/posts/understanding-amazon-cognito", "published_at": "2020-05-27T08:51:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86ccd443151", "title": "Run your own teleconferencing server with Jitsi on EC2", "url": "https://www.chrisarmstrong.dev/posts/run-your-own-teleconferencing-server-with-jitsi-on-ec2", "published_at": "2020-04-04T01:31:00+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86ccd47b4e8", "title": "dynaglue: Getting Started Guide", "url": "https://www.chrisarmstrong.dev/posts/dynaglue-getting-started-guide", "published_at": "2020-01-25T03:24:06+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86ccdece796", "title": "Announcing dynamodb-csv-export-import", "url": "https://www.chrisarmstrong.dev/posts/announcing-dynamodb-csv-export-import", "published_at": "2020-01-10T20:29:24+00:00" }, { "id": "01a0875f-147e-72ce-a827-b86cce3cfc8d", "title": "What is this", "url": "https://www.chrisarmstrong.dev/posts/what-is-this", "published_at": "2020-01-08T10:23:17+00:00" } ] posts Claim your blog
Back to chrisarmstrong.dev
Blog · corpus.blog/blogs/chrisarmstrong.dev/posts

chrisarmstrong.dev

chrisarmstrong.dev

2026

2025

2024

2023

2022

2021

2020