James Galley Software engineer - SaaS, AI automation & business operations

Writing

Notes and articles on business operations, systems integration, agentic AI, and where they meet - with the occasional detour into the garden.

Subscribe via RSS

Using AI to help write articles

How I use AI in the loop when writing articles for this site: scaffold first, rewrite everything, bank the corrections, and never publish what you don't know.

Serverless search: a Lambda fan-out over S3

Full-text search with no index at all: raw text in S3, a fleet of parallel Lambda functions scanning byte ranges, and benchmarks of what that buys - plus the Bloom filters that let the brute force skip most of the corpus. Part three of the serverless search series.

Novel strategies for serverless search

Searching a million records without running a search cluster. The first in a series on serverless search in AWS, looking at why Athena and OpenSearch Serverless don't quite fit the problem, and previewing five alternative strategies.

Permissions-Policy HTTP header

How the Permissions-Policy header controls access to browser features like camera, microphone and geolocation, its syntax, and how to set it in Apache and PHP.

Referrer-Policy HTTP header

How the Referrer-Policy header controls what URL information is shared with other sites, the values available, and how to set a sensible default in Apache and PHP.

Common aws s3 sync examples

Handy aws s3 sync command examples for uploading, downloading, mirroring with --delete, filtering, cache headers and dry runs, from deploying static sites to S3.

Common aws s3 cp examples

Handy aws s3 cp command examples for copying single files and directories to and from Amazon S3, including recursive copies, content type and cache headers, and streaming with stdin and stdout.

Content-Security-Policy HTTP header

How the Content-Security-Policy header controls which resources a page can load, its key directives, report-only mode, and how to set it in Apache, PHP and AWS CloudFront.

Strict-Transport-Security HTTP header

How to set the Strict-Transport-Security (HSTS) header to enforce HTTPS, with examples for Apache, PHP, Yii 2, Lambda@Edge and CloudFront functions, and the max-age, includeSubDomains and preload directives explained.

X-Frame-Options HTTP header

How to set the X-Frame-Options header to prevent clickjacking, with examples for Apache, PHP, Yii 2, Node.js and Remix - and what the "refused to display in a frame" browser error means.