# Nicolas Fränkel

Nicolas Fränkel's blog

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Designing Software for Real-World Geographic and Legal Complexity

DevFeed: [Designing Software for Real-World Geographic and Legal Complexity](<https://devfeed.tech/articles/world-geography-gotchas-18934.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/world-geography-gotchas/>)

Author: Nicolas Fränkel

Published: 2026-09-13T00:00:00Z

Content type: opinion

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [systems](<https://devfeed.tech/topics/systems.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [geography](<https://devfeed.tech/tags/geography.md>), [gotchas](<https://devfeed.tech/tags/gotchas.md>), [miscellaneous](<https://devfeed.tech/tags/miscellaneous.md>), [software](<https://devfeed.tech/tags/software.md>), [switzerland](<https://devfeed.tech/tags/switzerland.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

This commentary uses enclaves such as Campione d'Italia and Büsingen am Hochrhein to show why software systems must model real-world attributes independently. Country codes do not necessarily determine currency, tax, customs, mail, phone, or law, so developers should research domain-specific exceptions before designing systems.

### Source excerpt

Years ago, a colleague of mine told me about two pockets of foreign land surrounded by Switzerland: Campione d'Italia and Büsingen am Hochrhein, respectively Italy and Germany. Both are enclaves of their respective country in Swiss territory: An enclave is a part of the territory of a state that is enclosed within the territory of another state. To distinguish the parts of a state entirely enclosed in a single other state, they are called true enclaves.

## Build an AI Agent (From Scratch)

DevFeed: [Build an AI Agent (From Scratch)](<https://devfeed.tech/articles/build-an-ai-agent-from-scratch-18918.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/building-ai-agent-from-scratch/>)

Author: Nicolas Fränkel

Published: 2026-09-06T00:00:00Z

Content type: opinion

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Model Context Protocol (MCP)](<https://devfeed.tech/topics/model-context-protocol-mcp.md>), [Retrieval Augmented Generation (RAG)](<https://devfeed.tech/topics/retrieval-augmented-generation-rag.md>), [Multi Agent Systems](<https://devfeed.tech/topics/multi-agent-systems.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [book](<https://devfeed.tech/tags/book.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [coding-assistant](<https://devfeed.tech/tags/coding-assistant.md>), [genealogy](<https://devfeed.tech/tags/genealogy.md>), [llm](<https://devfeed.tech/tags/llm.md>), [llms](<https://devfeed.tech/tags/llms.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [multi-agent-systems](<https://devfeed.tech/tags/multi-agent-systems.md>), [rag](<https://devfeed.tech/tags/rag.md>), [review](<https://devfeed.tech/tags/review.md>)

### AI overview

A review of Build an AI Agent (From Scratch) by Jungjun Hur and Younghee Song describes the book's coverage of LLM agents, tool use, ReAct agents, RAG, memory, planning, code execution, multi-agent systems, and agent evaluation. The reviewer considers it a fundamental introduction, while wishing the evaluation chapter were more developed.

### Source excerpt

Facts 10 chapters$29.29 (at the time of this writing)315 pages Chapters Building your first LLM agentWhat is an AI agent?

## AI-assisted genealogy

DevFeed: [AI-assisted genealogy](<https://devfeed.tech/articles/ai-assisted-genealogy-18915.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/ai-assisted-genealogy/>)

Author: Nicolas Fränkel

Published: 2026-08-30T00:00:00Z

Content type: tutorial

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [data](<https://devfeed.tech/topics/data.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Software](<https://devfeed.tech/topics/software.md>), [Cloudflare](<https://devfeed.tech/topics/cloudflare.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [cloudflare](<https://devfeed.tech/tags/cloudflare.md>), [coding-assistant](<https://devfeed.tech/tags/coding-assistant.md>), [genealogy](<https://devfeed.tech/tags/genealogy.md>), [github](<https://devfeed.tech/tags/github.md>), [project](<https://devfeed.tech/tags/project.md>), [software](<https://devfeed.tech/tags/software.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

The article describes using AI as a tool for genealogical research. In less than a month, the author gathered more than 600 individuals and traced 12 generations in some branches, using a software-project workflow, genealogical records, GEDCOM files, GitHub or Codeberg, and Cloudflare Pages.

### Source excerpt

My son recently came to me to brag about using AI to find our ancestors. While the results were correct, I didn't learn anything new, as it stopped at my grandparents. I was never very interested in my genealogy, but I decided to see if AI would be a good tool for this. TL;DR: Yes, it is, and even more than that. In a little less than one month, I managed to gather more than 600 individuals and get back 12 generations in some branches.

## Propagating User Identity Chains Across JVM Service Calls

DevFeed: [Propagating User Identity Chains Across JVM Service Calls](<https://devfeed.tech/articles/security-baked-into-the-jvm-sixteen-subjects-on-the-wire-18931.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/security-baked-into-jvm/4/>)

Author: Peter Firmstone

Published: 2026-08-23T00:00:00Z

Content type: article

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Security](<https://devfeed.tech/topics/security.md>), [Java](<https://devfeed.tech/topics/java.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>), [Protocol (disambiguation)](<https://devfeed.tech/topics/protocol.md>)

Tags: [authorization](<https://devfeed.tech/tags/authorization.md>), [dirtychai](<https://devfeed.tech/tags/dirtychai.md>), [java](<https://devfeed.tech/tags/java.md>), [jgdms](<https://devfeed.tech/tags/jgdms.md>), [jini](<https://devfeed.tech/tags/jini.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [security](<https://devfeed.tech/tags/security.md>), [technical](<https://devfeed.tech/tags/technical.md>), [tls](<https://devfeed.tech/tags/tls.md>), [tokens](<https://devfeed.tech/tags/tokens.md>)

### AI overview

This article explains how a chain of user identities crosses service calls on the wire. It distinguishes TLS machine authentication from in-band user claims, describes receiver-side limits and principal handling, and notes that standard Java 24 lacks the required authorization support without DirtyChai on both ends.

### Source excerpt

Alice calls the order service. The order service calls the ledger on her behalf. At the second hop, the ledger has to decide whose authority the debit is being made under. Most stacks answer badly. Forward Alice's bearer token verbatim, and the ledger cannot tell her from the service that relayed it. Drop the token and the ledger sees a machine, with no record that a human started the chain. Neither option lets the ledger authorize the combination.

## Solving Gradle metadata and Renovate integration

DevFeed: [Solving Gradle metadata and Renovate integration](<https://devfeed.tech/articles/solving-gradle-metadata-and-renovate-integration-18921.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/gradle-metadata-renovate-integration/>)

Author: Nicolas Fränkel

Published: 2026-08-16T00:00:00Z

Content type: tutorial

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [renovate](<https://devfeed.tech/topics/renovate.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Groovy](<https://devfeed.tech/topics/groovy.md>)

Tags: [ci](<https://devfeed.tech/tags/ci.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [development](<https://devfeed.tech/tags/development.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [renovate](<https://devfeed.tech/tags/renovate.md>), [software-supply-chain](<https://devfeed.tech/tags/software-supply-chain.md>), [supply-chain-attacks](<https://devfeed.tech/tags/supply-chain-attacks.md>), [supply-chain-security](<https://devfeed.tech/tags/supply-chain-security.md>)

### AI overview

The article describes setting up Renovate for a Gradle project and investigating why merges of updated dependency versions caused build failures. It also discusses dependency verification and software supply chain risks.

### Source excerpt

My current company has settled on using Gradle. It doesn't make me very happy, but you need to learn to work with constraints. Plus, I must admit that the developers who actually implemented the build files did a pretty good job overall: they used Kotlin instead of Groovy, they moved code to regular plugins, etc. This week, I worked on improvements to a new project and set up Renovate.

## Security Baked Into the JVM: two Subjects, one call

DevFeed: [Security Baked Into the JVM: two Subjects, one call](<https://devfeed.tech/articles/security-baked-into-the-jvm-two-subjects-one-call-18930.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/security-baked-into-jvm/3/>)

Author: Peter Firmstone

Published: 2026-08-09T00:00:00Z

Content type: article

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Security](<https://devfeed.tech/topics/security.md>), [SPIFFE](<https://devfeed.tech/topics/spiffe.md>), [SPIRE](<https://devfeed.tech/topics/spire.md>)

Tags: [certificates](<https://devfeed.tech/tags/certificates.md>), [dirtychai](<https://devfeed.tech/tags/dirtychai.md>), [java](<https://devfeed.tech/tags/java.md>), [jgdms](<https://devfeed.tech/tags/jgdms.md>), [jini](<https://devfeed.tech/tags/jini.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [jwt](<https://devfeed.tech/tags/jwt.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [oidc](<https://devfeed.tech/tags/oidc.md>), [permission](<https://devfeed.tech/tags/permission.md>), [process](<https://devfeed.tech/tags/process.md>), [security](<https://devfeed.tech/tags/security.md>), [spiffe](<https://devfeed.tech/tags/spiffe.md>), [spire](<https://devfeed.tech/tags/spire.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

This article examines identity and security in the JVM through DirtyChai. It describes separate process and user identities, including SPIFFE workload credentials delivered through SPIRE and JWT/OIDC-based user identity, and explains how these identities coexist across request dispatch and privilege boundaries.

### Source excerpt

The constraint system stops a bad call before it leaves the JVM. The Safe Codebase Audit Pipeline stops bad code before a client ever loads it. What remains is identity: who is calling, and can you verify it? Most frameworks answer with a token check at the door. A filter validates a bearer token, sets a thread-local variable, and hopes that nothing downstream forgets to look at it. DirtyChai answers differently.

## GitHub agentic workflows and Renovate

DevFeed: [GitHub agentic workflows and Renovate](<https://devfeed.tech/articles/github-agentic-workflows-and-renovate-18920.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/github-agentic-workflow-renovate/>)

Author: Nicolas Fränkel

Published: 2026-08-02T00:00:00Z

Content type: tutorial

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [GitHub](<https://devfeed.tech/topics/github.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>)

Tags: [agentic-workflow](<https://devfeed.tech/tags/agentic-workflow.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [github-agentic-workflows](<https://devfeed.tech/tags/github-agentic-workflows.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [renovate](<https://devfeed.tech/tags/renovate.md>), [rollback](<https://devfeed.tech/tags/rollback.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

This article explains how Renovate dependency updates can break GitHub agentic workflows by changing an action SHA without updating the matching generated scripts. It also describes a failed recompilation workflow that rolled back an unrelated Node.js update, then identifies the need to keep the generated lock file synchronized with its release.

### Source excerpt

I've been a big fan of Renovate for a couple of years already. Renovate scans your repositories, detects outdated package versions, and opens pull requests to automatically bump them. It's similar to Dependabot in that it keeps your dependencies up to date. If I had to compare them in one sentence, I'd say Renovate is less integrated in the GitHub ecosystem, but handles more ecosystems and, more importantly, is extensible.

## RFC 9880 and the IoT Validation Problem

DevFeed: [RFC 9880 and the IoT Validation Problem](<https://devfeed.tech/articles/rfc-9880-and-the-iot-validation-problem-18924.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/rfc-9880-iot-validation-compiler/>)

Author: Stefano Fago

Published: 2026-07-26T00:00:00Z

Content type: article

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Internet of things](<https://devfeed.tech/topics/iot.md>), [SDF](<https://devfeed.tech/topics/sdf.md>), [data](<https://devfeed.tech/topics/data.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Code](<https://devfeed.tech/topics/code.md>), [CoAP](<https://devfeed.tech/topics/coap.md>), [MQTT](<https://devfeed.tech/topics/mqtt.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [TLS (Transport Layer Security)](<https://devfeed.tech/topics/tls.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [code](<https://devfeed.tech/tags/code.md>), [data](<https://devfeed.tech/tags/data.md>), [development](<https://devfeed.tech/tags/development.md>), [iot](<https://devfeed.tech/tags/iot.md>), [json](<https://devfeed.tech/tags/json.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [sdf](<https://devfeed.tech/tags/sdf.md>), [standards](<https://devfeed.tech/tags/standards.md>), [validation](<https://devfeed.tech/tags/validation.md>)

### AI overview

This article examines RFC 9880 and its Semantic Definition Format (SDF) as an ecosystem-neutral, JSON-based way to describe IoT devices. It argues that SDF validation is best understood as a compilation problem and discusses how different IoT ecosystems represent the same physical concepts incompatibly.

### Source excerpt

The IoT/IIoT world has a data model problem and the concept of Digital Twin has made this issue more important. Plenty of people have tried to fix it. RFC 9880 and its Semantic Definition Format (SDF) are a serious attempt: a JSON-based, ecosystem-neutral way to describe what a device is and what it does. I have had some experiences with this specification, and I've understood that the format shows its full value once you treat it as source code, something you compile.

## Security Baked Into the JVM: the Safe Codebase Audit Pipeline

DevFeed: [Security Baked Into the JVM: the Safe Codebase Audit Pipeline](<https://devfeed.tech/articles/security-baked-into-the-jvm-the-safe-codebase-audit-pipeline-18929.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/security-baked-into-jvm/2/>)

Author: Peter Firmstone

Published: 2026-07-19T00:00:00Z

Content type: article

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Security](<https://devfeed.tech/topics/security.md>), [Java](<https://devfeed.tech/topics/java.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [dirtychai](<https://devfeed.tech/tags/dirtychai.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [java](<https://devfeed.tech/tags/java.md>), [jgdms](<https://devfeed.tech/tags/jgdms.md>), [jini](<https://devfeed.tech/tags/jini.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [security](<https://devfeed.tech/tags/security.md>), [supply-chain](<https://devfeed.tech/tags/supply-chain.md>), [systems](<https://devfeed.tech/tags/systems.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

This article presents the Safe Codebase Audit Pipeline, or SCAP, for analyzing third-party Java JARs before clients deserialize objects from them. It focuses on supply-chain risks from malicious bytecode and blocking static initializers, and describes distributing the pipeline across hosts with separate responsibilities and restricted network access.

### Source excerpt

In Part 1, the minimal deployment showed constraints traveling with the proxy: authentication, encryption, hardened deserialization, all declared in configuration and enforced at the call boundary. The proxy is a JAR. That JAR was downloaded and unmarshalled before any constraint ran. That step is the earlier problem. Distributed Java systems that load remote code are vulnerable to supply chain compromise: an attacker can replace a legitimate JAR with one containing malicious bytecode.

## Making ServiceLoader usable: a provider factory

DevFeed: [Making ServiceLoader usable: a provider factory](<https://devfeed.tech/articles/making-serviceloader-usable-a-provider-factory-18932.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/serviceloader-provider-factory/>)

Author: Stefano Fago

Published: 2026-07-12T00:00:00Z

Content type: tutorial

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Code](<https://devfeed.tech/topics/code.md>), [JSON Web Tokens](<https://devfeed.tech/topics/jwt.md>), [JSON](<https://devfeed.tech/topics/json.md>)

Tags: [decoupling](<https://devfeed.tech/tags/decoupling.md>), [design-patterns](<https://devfeed.tech/tags/design-patterns.md>), [java](<https://devfeed.tech/tags/java.md>), [json](<https://devfeed.tech/tags/json.md>), [jwt](<https://devfeed.tech/tags/jwt.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [serviceloader](<https://devfeed.tech/tags/serviceloader.md>), [spi](<https://devfeed.tech/tags/spi.md>)

### AI overview

This article presents a provider-factory pattern for Java ServiceLoader. Instead of loading a service implementation directly, ServiceLoader loads a small factory with a no-argument constructor; the factory then constructs the service and can support implementation selection and custom constructors. The pattern is illustrated with a mock payments system and is related to decoupling JSON and JWT capabilities from concrete libraries.

### Source excerpt

I keep coming back to java.util.ServiceLoader. I have used it to put a JSON layer behind a contract, so the core code carries no direct dependency on any particular JSON library, and I can swap the implementation without touching callers. The same shape works for JWT handling, where the concrete library might be jose4j or another JOSE implementation, and you can easily find other decoupling use-cases.

## Home Assistant timezone and configuration override issues

DevFeed: [Home Assistant timezone and configuration override issues](<https://devfeed.tech/articles/two-nasty-surprises-in-home-assistant-s-config-18922.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/home-assistant/9/>)

Author: Nicolas Fränkel

Published: 2026-07-05T00:00:00Z

Content type: opinion

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Home Assistant](<https://devfeed.tech/topics/home-assistant.md>), [timezone](<https://devfeed.tech/topics/timezone.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [bug](<https://devfeed.tech/topics/bug.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [YAML](<https://devfeed.tech/topics/yaml.md>)

Tags: [automation](<https://devfeed.tech/tags/automation.md>), [bugs](<https://devfeed.tech/tags/bugs.md>), [config](<https://devfeed.tech/tags/config.md>), [home-assistant](<https://devfeed.tech/tags/home-assistant.md>), [locale](<https://devfeed.tech/tags/locale.md>), [technical](<https://devfeed.tech/tags/technical.md>), [timezone](<https://devfeed.tech/tags/timezone.md>), [user-experience](<https://devfeed.tech/tags/user-experience.md>), [yaml](<https://devfeed.tech/tags/yaml.md>)

### AI overview

The author describes Home Assistant shutter automations that ran an hour late during summer time because the instance timezone appeared as Paris/+1. Overriding the timezone in configuration removed UI-set settings, requiring all settings to be specified again in YAML.

### Source excerpt

Last year, I motorized the rolling shutters on the southern façade of my apartment. My idea was to manage them via Home Assistant. I had a couple of automations in mind: In the evening, roll down the shutters of my bedroomIn the morning:If it's too hot outside, roll down all shuttersIf it's too cold outside, roll down all shuttersIn other cases, roll up all shutters but my bedroom's Living in France, I added the official Météo France integration.

## Security Baked Into the JVM: why fork Apache River and OpenJDK?

DevFeed: [Security Baked Into the JVM: why fork Apache River and OpenJDK?](<https://devfeed.tech/articles/security-baked-into-the-jvm-why-fork-apache-river-and-openjdk-18928.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/security-baked-into-jvm/1/>)

Author: Peter Firmstone

Published: 2026-06-28T00:00:00Z

Content type: opinion

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Security](<https://devfeed.tech/topics/security.md>), [Java](<https://devfeed.tech/topics/java.md>), [openjdk](<https://devfeed.tech/topics/openjdk.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Remote Procedure Call (RPC)](<https://devfeed.tech/topics/rpc.md>), [Networks](<https://devfeed.tech/topics/networks.md>)

Tags: [authorization](<https://devfeed.tech/tags/authorization.md>), [dirtychai](<https://devfeed.tech/tags/dirtychai.md>), [discovery](<https://devfeed.tech/tags/discovery.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [ipv6](<https://devfeed.tech/tags/ipv6.md>), [java](<https://devfeed.tech/tags/java.md>), [jgdms](<https://devfeed.tech/tags/jgdms.md>), [jini](<https://devfeed.tech/tags/jini.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [lock-free](<https://devfeed.tech/tags/lock-free.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [openjdk](<https://devfeed.tech/tags/openjdk.md>), [rpc](<https://devfeed.tech/tags/rpc.md>), [security](<https://devfeed.tech/tags/security.md>), [self-healing](<https://devfeed.tech/tags/self-healing.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

This article introduces DirtyChai, a community fork of OpenJDK that restores Java authorization infrastructure, and JGDMS, a security-hardened fork of Apache River for dynamically discoverable microservices over IPv6. It argues that distributed systems require security beyond network firewalls and outlines the projects' complementary roles, including authorization, service discovery, hardened deserialization, transport security, proxy trust verification, and codebase safety checks.

### Source excerpt

The more distributed a system, the harder it is to secure. Code crosses JVM boundaries. Objects are serialized across trust boundaries. Third-party proxies run inside your process. The usual answer is a network firewall. It helps, but it operates at the wrong level. Java 17 deprecated the SecurityManager, Java 24 put the final nail in its coffin. Most developers didn't notice.

## On programming languages, targets, and platforms

DevFeed: [On programming languages, targets, and platforms](<https://devfeed.tech/articles/on-programming-languages-targets-and-platforms-18923.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/programming-languages-targets-platforms/>)

Author: Nicolas Fränkel

Published: 2026-06-21T00:00:00Z

Content type: opinion

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Scala](<https://devfeed.tech/topics/scala.md>), [Java](<https://devfeed.tech/topics/java.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [developer](<https://devfeed.tech/tags/developer.md>), [development](<https://devfeed.tech/tags/development.md>), [java](<https://devfeed.tech/tags/java.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [languages](<https://devfeed.tech/tags/languages.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>), [python](<https://devfeed.tech/tags/python.md>), [rust](<https://devfeed.tech/tags/rust.md>), [scala](<https://devfeed.tech/tags/scala.md>)

### AI overview

A personal discussion of how programming languages have evolved from targeting a single compilation target and platform toward supporting multiple targets. It uses Scala.js as an example and mentions Kotlin and Clojure as other JVM-originated languages targeting JavaScript.

### Source excerpt

I started as a Java developer, but for some time now, I have broadened my horizons. Recently, I thought about how early languages were dedicated to a single target and platform, and now they are broadening their focus. In this post, I want to write down my thoughts in the hope that it may be useful to others, probably to my future self. Definitions You may have been wondering about the title terms.

## double, BigDecimal, or Fixed-Point?

DevFeed: [double, BigDecimal, or Fixed-Point?](<https://devfeed.tech/articles/double-bigdecimal-or-fixed-point-18917.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/bigdecimal-vs-double/>)

Author: Stefano Fago

Published: 2026-06-14T00:00:00Z

Content type: article

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>)

Tags: [bigdecimal](<https://devfeed.tech/tags/bigdecimal.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [floating-point](<https://devfeed.tech/tags/floating-point.md>), [java](<https://devfeed.tech/tags/java.md>), [numbers](<https://devfeed.tech/tags/numbers.md>), [performance](<https://devfeed.tech/tags/performance.md>), [pitfalls](<https://devfeed.tech/tags/pitfalls.md>), [precision](<https://devfeed.tech/tags/precision.md>)

### AI overview

A Java-focused article explains how to choose among double, BigDecimal, and fixed-point arithmetic based on required precision, rounding rules, and performance constraints. It covers IEEE 754 binary representation, floating-point equality pitfalls, tolerance-based comparisons, and production concerns such as serialization, testing, and concurrency.

### Source excerpt

There is an evergreen debate in the Java world: should you always use BigDecimal for money? The short answer is no. The real answer is: it depends on your computational context: the precision you need, the rounding rules you must follow, and the performance budget you have. The problem is that this conversation is often driven by dogma rather than engineering.

## Seasons time-lapse - the video

DevFeed: [Seasons time-lapse - the video](<https://devfeed.tech/articles/seasons-time-lapse-the-video-18927.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/seasons-time-lapse/3/>)

Author: Nicolas Fränkel

Published: 2026-06-07T00:00:00Z

Content type: tutorial

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Image](<https://devfeed.tech/topics/image.md>), [Code](<https://devfeed.tech/topics/code.md>), [DateTime](<https://devfeed.tech/topics/datetime.md>)

Tags: [art](<https://devfeed.tech/tags/art.md>), [cameras](<https://devfeed.tech/tags/cameras.md>), [code](<https://devfeed.tech/tags/code.md>), [development](<https://devfeed.tech/tags/development.md>), [images](<https://devfeed.tech/tags/images.md>), [information](<https://devfeed.tech/tags/information.md>), [location](<https://devfeed.tech/tags/location.md>), [metrics](<https://devfeed.tech/tags/metrics.md>), [model](<https://devfeed.tech/tags/model.md>), [pipeline](<https://devfeed.tech/tags/pipeline.md>), [pixel](<https://devfeed.tech/tags/pixel.md>), [project](<https://devfeed.tech/tags/project.md>), [python](<https://devfeed.tech/tags/python.md>), [rotation](<https://devfeed.tech/tags/rotation.md>), [screen](<https://devfeed.tech/tags/screen.md>), [speed](<https://devfeed.tech/tags/speed.md>), [time-lapse](<https://devfeed.tech/tags/time-lapse.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

The third and final post in a series explains how the author creates a time-lapse video from photographs taken from the same position over multiple years. It discusses ordering images by day of year and time of day, using EXIF metadata, and practical observations about video generation.

### Source excerpt

In the first post of this series, I focused on the project foundations: what should I do to create a video from photos taken from the same position year after year? I dedicated the second part to aligning images. It wasn't as easy as I expected. I stumbled upon new concepts, such as ORB and RANSAC. In this third and final post, I want to tackle the video creation itself, explain some 'artistic' decisions, and leave the door open to future work.

## AI gateways: why and how

DevFeed: [AI gateways: why and how](<https://devfeed.tech/articles/ai-gateways-why-and-how-18916.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/ai-gateways/>)

Author: Nicolas Fränkel

Published: 2026-05-31T00:00:00Z

Content type: article

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Amazon API Gateway](<https://devfeed.tech/topics/amazon-api-gateway.md>), [LLMs](<https://devfeed.tech/topics/llms.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>), [Claude](<https://devfeed.tech/topics/claude.md>), [Security](<https://devfeed.tech/topics/security.md>), [litellm](<https://devfeed.tech/topics/litellm.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [Load Balancing](<https://devfeed.tech/topics/load-balancing.md>), [observability](<https://devfeed.tech/topics/observability.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-gateway](<https://devfeed.tech/tags/ai-gateway.md>), [anthropic](<https://devfeed.tech/tags/anthropic.md>), [api-gateway](<https://devfeed.tech/tags/api-gateway.md>), [backend](<https://devfeed.tech/tags/backend.md>), [caching](<https://devfeed.tech/tags/caching.md>), [claude](<https://devfeed.tech/tags/claude.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [coding-assistant](<https://devfeed.tech/tags/coding-assistant.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [devstral](<https://devfeed.tech/tags/devstral.md>), [gateway](<https://devfeed.tech/tags/gateway.md>), [litellm](<https://devfeed.tech/tags/litellm.md>), [llm](<https://devfeed.tech/tags/llm.md>), [llms](<https://devfeed.tech/tags/llms.md>), [load-balancing](<https://devfeed.tech/tags/load-balancing.md>), [mistral](<https://devfeed.tech/tags/mistral.md>), [observability](<https://devfeed.tech/tags/observability.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [routing](<https://devfeed.tech/tags/routing.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [security](<https://devfeed.tech/tags/security.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

This article explains how AI gateways apply the API gateway pattern to AI clients and LLM backends. It discusses using a gateway to centralize model and provider management, governance, cost control, routing, caching, failover, load balancing, and observability, and considers routing Claude Code requests to another provider.

### Source excerpt

Before working for 2 years on the Apache APISIX API gateway, I was mainly oblivious to API gateways. It's only by working with them that I understood their value. Decoupling the client and the server unlocks a lot of options: moving authentication to the API Gateway, securing APIs, deduplicating API requests, etc. In this post, I want to describe how the same pattern applies to AI. AI gateways AI gateways work in a similar way.

## Seasons time-lapse - alignment

DevFeed: [Seasons time-lapse - alignment](<https://devfeed.tech/articles/seasons-time-lapse-alignment-18926.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/seasons-time-lapse/2/>)

Author: Nicolas Fränkel

Published: 2026-05-24T00:00:00Z

Content type: tutorial

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Computer vision](<https://devfeed.tech/topics/computer-vision.md>), [OpenCV](<https://devfeed.tech/topics/opencv.md>), [image distortion](<https://devfeed.tech/topics/image-distortion.md>), [Algorithms](<https://devfeed.tech/topics/algorithms.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [algorithms](<https://devfeed.tech/tags/algorithms.md>), [art](<https://devfeed.tech/tags/art.md>), [camera](<https://devfeed.tech/tags/camera.md>), [computer-vision](<https://devfeed.tech/tags/computer-vision.md>), [development](<https://devfeed.tech/tags/development.md>), [iphone](<https://devfeed.tech/tags/iphone.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [python](<https://devfeed.tech/tags/python.md>), [time-lapse](<https://devfeed.tech/tags/time-lapse.md>), [transformation](<https://devfeed.tech/tags/transformation.md>)

### AI overview

This article explains how the Seasons time-lapse project aligns photographs taken from slightly different viewpoints and with different phone cameras. It describes using OpenCV feature matching with ORB, followed by RANSAC and a homography to estimate the geometric transformation.

### Source excerpt

In the previous post, I described the Seasons project: a time-lapse of hundreds of pictures taken from nearly the same viewpoint over the years. The hardest challenge wasn't taking the pictures or assembling them, but aligning them. You might have noticed the nearly part about viewpoint in the above paragraph. Indeed, it's an approximation. I'm a human being, not a tripod. The position changes ever so slightly, and so does the exact angle.

## Seasons time-lapse - the foundations

DevFeed: [Seasons time-lapse - the foundations](<https://devfeed.tech/articles/seasons-time-lapse-the-foundations-18925.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/seasons-time-lapse/1/>)

Author: Nicolas Fränkel

Published: 2026-05-17T00:00:00Z

Content type: article

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [OpenCV](<https://devfeed.tech/topics/opencv.md>), [Vibe coding](<https://devfeed.tech/topics/vibe-coding.md>), [Inference](<https://devfeed.tech/topics/inference.md>)

Tags: [art](<https://devfeed.tech/tags/art.md>), [development](<https://devfeed.tech/tags/development.md>), [image](<https://devfeed.tech/tags/image.md>), [llm](<https://devfeed.tech/tags/llm.md>), [photos](<https://devfeed.tech/tags/photos.md>), [python](<https://devfeed.tech/tags/python.md>), [technical](<https://devfeed.tech/tags/technical.md>), [time](<https://devfeed.tech/tags/time.md>), [time-lapse](<https://devfeed.tech/tags/time-lapse.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

This article introduces a multi-part retrospective on building a seasons time-lapse video from photographs taken over several years. It describes using an LLM-assisted workflow, choosing Python, and designing a typed, tested image-processing pipeline that inventories, filters, aligns, and orders photos.

### Source excerpt

I live close to nature. I regularly go for a run in the countryside. Over several years, during my runs, I've taken pictures from the same position, always roughly the same angle. I had a vague idea in the back of my mind, as an 'artistic' project. One day, I'd turn those photos into a time-lapse video, one that would show the passage of seasons across a single place. Spoiler, here's the work in progress: However, I knew that this project would take ages.

## Tokensparsamkeit for coding assistants

DevFeed: [Tokensparsamkeit for coding assistants](<https://devfeed.tech/articles/tokensparsamkeit-for-coding-assistants-18933.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/tokensparsamkeit-coding-assistants/>)

Author: Nicolas Fränkel

Published: 2026-05-10T00:00:00Z

Content type: opinion

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [coding](<https://devfeed.tech/topics/coding.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Compression](<https://devfeed.tech/topics/compression.md>), [Rust](<https://devfeed.tech/topics/rust.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [cli](<https://devfeed.tech/tags/cli.md>), [coding](<https://devfeed.tech/tags/coding.md>), [compression](<https://devfeed.tech/tags/compression.md>), [llm](<https://devfeed.tech/tags/llm.md>), [opinion](<https://devfeed.tech/tags/opinion.md>), [rust](<https://devfeed.tech/tags/rust.md>), [sparsamkeit](<https://devfeed.tech/tags/sparsamkeit.md>), [technical](<https://devfeed.tech/tags/technical.md>), [tokens](<https://devfeed.tech/tags/tokens.md>)

### AI overview

This opinion article argues for "Tokensparsamkeit," or token frugality, in coding assistants: using only the tokens needed to achieve comparable results. It discusses compressing prompts and describes a Rust CLI proxy that the author says reduces LLM token consumption by 60-90% on common development commands, with limitations for Claude Code's built-in tools.

### Source excerpt

Good engineers make decisions based on data. Most businesses assumed that the more data, the better the decision. Then, several factors put a halt to the hoarding of ever more data. GDPR and its localized counterparts, and the cost of storage. However, before the GDPR came into effect, the Datensparsamkeit approach already existed. Datensparsamkeit is a German word that's difficult to translate properly into English.

## Designing a team of agents

DevFeed: [Designing a team of agents](<https://devfeed.tech/articles/designing-a-team-of-agents-18919.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/design-team-agents/>)

Author: Nicolas Fränkel

Published: 2026-05-03T00:00:00Z

Content type: opinion

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [agentic-engineering](<https://devfeed.tech/tags/agentic-engineering.md>), [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [autonomous-agents](<https://devfeed.tech/tags/autonomous-agents.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

The author describes experimenting with AI for software engineering by designing a team of autonomous agents to implement features from design through implementation. The article discusses coding assistants, agentic engineering levels, Claude Code's experimental Agent Teams feature, and subagents.

### Source excerpt

I continue to experiment with AI in the context of software engineering. I'm fortunate that my team supports me in exploring different ways to improve our daily work. This week, I designed a team of autonomous agents to implement features, from design to implementation. Why autonomous agents? A long time ago, we were delighted when the IDE offered auto-completion. In the previous two years, things have changed. A lot. Coding assistants have become our primary interfaces for coding.