41554 blogs · [ { "id": "01a0e4a9-6938-73ad-a6d0-abd2f86e6b1e", "title": "From documenting decisions to questioning them", "url": "https://blog.frankel.ch/from-madrs-to-questioning-them/", "published_at": "2026-09-27T00:00:00+00:00" }, { "id": "01a0d594-8e5a-73a0-8763-49552d5662d5", "title": "AI-assisted genealogy, a follow-up", "url": "https://blog.frankel.ch/ai-assisted-genealogy-follow-up/", "published_at": "2026-09-20T00:00:00+00:00" }, { "id": "01a0d594-8e5a-73a0-8763-49552d58a9f8", "title": "World geography gotchas", "url": "https://blog.frankel.ch/world-geography-gotchas/", "published_at": "2026-09-13T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadaf51a87a", "title": "Build an AI Agent (From Scratch)", "url": "https://blog.frankel.ch/building-ai-agent-from-scratch/", "published_at": "2026-09-06T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadafae20dd", "title": "AI-assisted genealogy", "url": "https://blog.frankel.ch/ai-assisted-genealogy/", "published_at": "2026-08-30T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb03c7597", "title": "Security Baked Into the JVM: sixteen Subjects on the wire", "url": "https://blog.frankel.ch/security-baked-into-jvm/4/", "published_at": "2026-08-23T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb06246c7", "title": "Solving Gradle metadata and Renovate integration", "url": "https://blog.frankel.ch/gradle-metadata-renovate-integration/", "published_at": "2026-08-16T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb1435a05", "title": "Security Baked Into the JVM: two Subjects, one call", "url": "https://blog.frankel.ch/security-baked-into-jvm/3/", "published_at": "2026-08-09T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb1e7c8e8", "title": "GitHub agentic workflows and Renovate", "url": "https://blog.frankel.ch/github-agentic-workflow-renovate/", "published_at": "2026-08-02T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb2276cef", "title": "RFC 9880 and the IoT Validation Problem", "url": "https://blog.frankel.ch/rfc-9880-iot-validation-compiler/", "published_at": "2026-07-26T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb238bfa7", "title": "Security Baked Into the JVM: the Safe Codebase Audit Pipeline", "url": "https://blog.frankel.ch/security-baked-into-jvm/2/", "published_at": "2026-07-19T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb255f983", "title": "Making ServiceLoader usable: a provider factory", "url": "https://blog.frankel.ch/serviceloader-provider-factory/", "published_at": "2026-07-12T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb31fc772", "title": "Two nasty surprises in Home Assistant's config", "url": "https://blog.frankel.ch/home-assistant/9/", "published_at": "2026-07-05T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb3a99630", "title": "Security Baked Into the JVM: why fork Apache River and OpenJDK?", "url": "https://blog.frankel.ch/security-baked-into-jvm/1/", "published_at": "2026-06-28T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb3bc92db", "title": "On programming languages, targets, and platforms", "url": "https://blog.frankel.ch/programming-languages-targets-platforms/", "published_at": "2026-06-21T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb428b93a", "title": "double, BigDecimal, or Fixed-Point?", "url": "https://blog.frankel.ch/bigdecimal-vs-double/", "published_at": "2026-06-14T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb46eba33", "title": "Seasons time-lapse - the video", "url": "https://blog.frankel.ch/seasons-time-lapse/3/", "published_at": "2026-06-07T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb50f535a", "title": "AI gateways: why and how", "url": "https://blog.frankel.ch/ai-gateways/", "published_at": "2026-05-31T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb527e321", "title": "Seasons time-lapse - alignment", "url": "https://blog.frankel.ch/seasons-time-lapse/2/", "published_at": "2026-05-24T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb602e7e3", "title": "Seasons time-lapse - the foundations", "url": "https://blog.frankel.ch/seasons-time-lapse/1/", "published_at": "2026-05-17T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb693d4f2", "title": "Tokensparsamkeit for coding assistants", "url": "https://blog.frankel.ch/tokensparsamkeit-coding-assistants/", "published_at": "2026-05-10T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb709a5a9", "title": "Designing a team of agents", "url": "https://blog.frankel.ch/design-team-agents/", "published_at": "2026-05-03T00:00:00+00:00" }, { "id": "01a07d5d-6245-72e5-93db-afadb7ebc41b", "title": "Three Mastodon issues because of Cloudflare Bot protection", "url": "https://blog.frankel.ch/mastodon-cloudflare-bot-protection/", "published_at": "2026-04-26T00:00:00+00:00" } ] posts Claim your blog
Back to Nicolas Frankel
Blog · corpus.blog/blogs/blog.frankel.ch/posts

Nicolas Frankel

blog.frankel.ch

2026