Claudiu Ivan

Claudiu Ivan

@claudiu-ivan.com

The ghost was always in the machine. Now it needs tools. https://www.claudiu-ivan.com/

401 followers2.1K following330 posts

Pinned

Aperture v0.1.9 is live and it adds dependent batch workflows. Capture values from one operation, interpolate them into the next. Chain API calls without writing glue code. Also: --auto-paginate, --body-file for large payloads, and binary size down to < 6 MB.

github.comGitHub - kioku/aperture: Dynamic CLI generator for OpenAPI specifications designed for AI agents and automationDynamic CLI generator for OpenAPI specifications designed for AI agents and automation - kioku/aperture

Claudiu Ivan reposted

The second edition of Designing Data-Intensive Applications, by myself and @chris.blue, is finished and sent off to the printers! Ebooks should be available in the next week, and print books in 3–4 weeks. Sigh of relief. 😅 (BTW, this is a good opportunity to support your favourite local bookshop!)

Aperture v0.1.7 adds automatic retry with exponential backoff. It respects Retry-After headers, uses jitter, only retries idempotent methods by default. Also: config management commands, quiet mode for clean pipelines, and now on Homebrew. brew install kioku/tap/aperture github.com/kioku/aperture

github.comGitHub - kioku/aperture: Dynamic CLI generator for OpenAPI specifications designed for AI agents and automationDynamic CLI generator for OpenAPI specifications designed for AI agents and automation - kioku/aperture

TypeScript's type system is compile-time only. Exceptions ignore it. Nullable returns work if someone downstream remembers to check. Wrote about making error handling explicit so the compiler catches it instead of production.

TypeScript's type system is compile-time only. Exceptions ignore it. Nullable returns technically participate, but only if someone downstream remembers to check (not at 4pm on a Thursday, after the third meeting). There's a reason engineers keep rediscovering Result types.

TypeScript error handling approaches in the wild: - exceptions (sometimes caught) - nullable returns (sometimes checked) - result types - hoping for the best

Sometimes the genie is amazing. Other times, it forgets to checkout a feature branch and doesn't understand why it can't create a pull request...

Agent sandboxes are quite cool. Today I migrated a Django CMS website I've been maintaining for a decade to an Astro static site. From my phone. While enjoying life.

The thing was getting annoying to maintain. So I linked the repo, asked Claude to crawl and extract static pages, then rebuild in Astro with i18n. It delivered within half an hour, without any supervision.

This site required maintenance every year since it was deployed. Now it should live mostly untouched until it's taken down. That's a day of work I skipped, plus a few hours each year for years to come.

It’s also time to build European solutions. Diverse options will push the international market to offer better products and services for consumers.

It’s time to become digitally independent from USA. Ask not what European #DigitalSovereignty can do for you, ask what YOU can do for 🇪🇺 #DigitalSovereignty. An appeaser is one who feeds a crocodile, hoping it will eat him last. Don’t be a digital appeaser. www.irishtimes.com/world/us/202...

In my work with agent-assisted workflows, I hit a roadblock: giving agents a secure and reliable way to make external API calls. It quickly became clear that this is non-trivial.

View full thread

In my work with agent-assisted workflows, I hit a roadblock: giving agents a secure and reliable way to make external API calls. It quickly became clear that this is non-trivial.

Ad-hoc scripts are brittle and don't scale. MCP servers can be too heavy for simple, ephemeral tasks. I needed something with the lightweight ergonomics of a CLI tool.

This led me to build Aperture. The philosophy: treat an OpenAPI specification as an executable program, not just as static documentation. A tool that can ingest any spec and that dynamically generates a secure, self-documenting client.

The number of added lines of code is a terrible performance metric. Instead, the total number could be considered a complexity metric, but even that fails when the code is verbose enough.

Claudiu Ivan reposted

I have a new article out. It's about a better technique to create grainy gradients, without the big problem that layering a noise layer brings: altering the original gradient palette (to a greater or lesser extent, depending on the approach used). #CSS #SVG #filter

Grainy Gradients This is about reducing banding effects in gradients by introducing noise. A nice approach is a displacement map using SVG filters.

Romania chose decency over dishonesty. A lot of hardships lie ahead, but right now it seems like we’ll make it.

Claudiu Ivan@claudiu-ivan.com

The lead that the Romanian populist candidate has isn’t small, but he keeps making stupid mistakes, as you would expect from someone with the personality fit for an autocrat. These mistakes, and the work done by good-natured people, are what will change the tide.