<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevOps on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/category/devops/</link><description>Recent content in DevOps on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 21 Sep 2026 06:03:08 +0000</lastBuildDate><atom:link href="https://foojay.io/today/category/devops/index.xml" rel="self" type="application/rss+xml"/><item><title>Solving Gradle metadata and Renovate integration</title><link>https://foojay.io/today/solving-gradle-metadata-and-renovate-integration/</link><pubDate>Wed, 19 Aug 2026 05:53:45 +0000</pubDate><guid>https://foojay.io/today/solving-gradle-metadata-and-renovate-integration/</guid><description>&lt;p&gt;My current company has settled on using Gradle. It doesn&amp;rsquo;t make me &lt;a href="https://blog.frankel.ch/final-take-gradle/" target="_blank" rel="noopener noreferrer"&gt;very happy&lt;/a&gt;, 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.&lt;/p&gt;&#10;&lt;p&gt;This week, I worked on improvements to a new project and set up Renovate. Renovate is similar to Dependabot in that it checks for new versions of your dependencies and automatically creates PRs for you. However, I quickly noticed that merges of new dependency versions failed the build. Here&amp;rsquo;s the full story on why, and how I fixed the issue.&lt;/p&gt;</description></item><item><title>GitHub agentic workflows and Renovate</title><link>https://foojay.io/today/github-agentic-workflows-and-renovate/</link><pubDate>Mon, 03 Aug 2026 05:54:08 +0000</pubDate><guid>https://foojay.io/today/github-agentic-workflows-and-renovate/</guid><description>&lt;p&gt;I&amp;rsquo;ve been a big fan of Renovate for &lt;a href="https://blog.frankel.ch/renovate-alternative-dependabot/" target="_blank" rel="noopener noreferrer"&gt;a couple of years already&lt;/a&gt;. Renovate scans your repositories, detects outdated package versions, and opens pull requests to automatically bump them. It&amp;rsquo;s similar to Dependabot in that it keeps your dependencies up to date. If I had to compare them in one sentence, I&amp;rsquo;d say Renovate is less integrated in the GitHub ecosystem, but handles more ecosystems and, more importantly, is extensible. My current company is a happy Renovate user, and I already started to use it in some repositories.&lt;/p&gt;</description></item><item><title>BoxLang AWS, Azure, and Google Secrets Manager Module Released</title><link>https://foojay.io/today/boxlang-aws-azure-and-google-secrets-manager-module-released/</link><pubDate>Tue, 21 Jul 2026 11:38:18 +0000</pubDate><guid>https://foojay.io/today/boxlang-aws-azure-and-google-secrets-manager-module-released/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-aws-azure-and-google-secrets-manager-module-released/boxlang-secrets-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Every production application carries secrets: database passwords, API tokens, encryption keys. The question is never whether to manage them &amp;ndash; it&amp;rsquo;s how badly the current approach is going to hurt you.&lt;/p&gt;&#10;&lt;p&gt;Hardcoded credentials in config files get committed to repos. Environment variables sprawl across deployment pipelines with no audit trail. Custom integration code for each cloud provider means three different patterns to maintain, test, and rotate. And when a key needs to rotate at 2am? Someone is waking up.&lt;/p&gt;</description></item><item><title>BoxLang 1.15.0 Released: Blazing Fast Strings, Runtime Portability, and much more</title><link>https://foojay.io/today/boxlang-1-15-0-released-blazing-fast-strings-runtime-portability-and-much-more/</link><pubDate>Tue, 14 Jul 2026 17:57:10 +0000</pubDate><guid>https://foojay.io/today/boxlang-1-15-0-released-blazing-fast-strings-runtime-portability-and-much-more/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-1-15-0-released-blazing-fast-strings-runtime-portability-and-much-more/boxlang-v1.15.0-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;BoxLang 1.15.0&lt;/strong&gt; is a high-impact release with two big headlines and a long tail of hardening. The first headline is a &lt;strong&gt;massive performance upgrade to string handling&lt;/strong&gt; : a new first-class &lt;code&gt;BoxStringBuilder&lt;/code&gt; type, compile-time literal folding, smarter &lt;code&gt;&amp;amp;=&lt;/code&gt; semantics, and a runtime concat strategy that automatically switches to builder-backed accumulation once your expression gets big enough. Your existing string-heavy code just got faster. No rewrites required.&lt;/p&gt;&#10;&lt;p&gt;The second headline is architectural. Every class loader in the BoxLang runtime and module system has been fully abstracted behind a pluggable &lt;code&gt;IClassLoaderFactory&lt;/code&gt; interface. That single seam is what unlocks the &lt;strong&gt;Android runtime&lt;/strong&gt; and &lt;strong&gt;Ahead-of-Time (AOT) compiled runtimes&lt;/strong&gt; such as GraalVM Native Image that we have on the roadmap. The default behavior is unchanged, but the ceiling just got a lot higher.&lt;/p&gt;</description></item><item><title>What's New in actions/setup-java 5.4 and 5.5: Signature Verification, Kona JDK, and a Better Maven Experience</title><link>https://foojay.io/today/whats-new-in-actions-setup-java-5-4-and-5-5-signature-verification-kona-jdk-and-a-better-maven-experience/</link><pubDate>Wed, 08 Jul 2026 18:56:31 +0000</pubDate><guid>https://foojay.io/today/whats-new-in-actions-setup-java-5-4-and-5-5-signature-verification-kona-jdk-and-a-better-maven-experience/</guid><description>&lt;p&gt;If you build Java on GitHub Actions, &lt;code&gt;actions/setup-java&lt;/code&gt; is almost certainly the first step in your workflow. It installs a JDK, wires up &lt;code&gt;JAVA_HOME&lt;/code&gt; and the &lt;code&gt;PATH&lt;/code&gt;, configures Maven &lt;code&gt;settings.xml&lt;/code&gt;, sets up dependency caching, and registers Maven toolchains — all before your build even starts.&lt;/p&gt;&#10;&lt;p&gt;The last two releases, &lt;strong&gt;v5.4.0&lt;/strong&gt; and &lt;strong&gt;v5.5.0&lt;/strong&gt; , are quietly some of the most interesting in a while. v5.5.0 in particular brings something Java developers have been asking about for years on CI: &lt;strong&gt;cryptographic verification of the JDK you just downloaded&lt;/strong&gt;. There&amp;rsquo;s also a brand-new distribution, smarter version-file handling, and a batch of Maven quality-of-life fixes that make your logs cleaner and your toolchains file saner.&lt;/p&gt;</description></item><item><title>Quarkus Unpacked: Insights from the Foojay Podcast</title><link>https://foojay.io/today/quarkus-unpacked-insights-from-the-foojay-podcast/</link><pubDate>Tue, 23 Jun 2026 12:36:54 +0000</pubDate><guid>https://foojay.io/today/quarkus-unpacked-insights-from-the-foojay-podcast/</guid><description>&lt;figure class="alignleft is-resized"&gt;&#10; &lt;img src="https://foojay.io/today/quarkus-unpacked-insights-from-the-foojay-podcast/3-Quarkus-Unpacked-2-2.jpeg" alt="Quarkus: A Runtime and Framework for Cloud-Native Java" style="width:300px" loading="lazy" class="is-zoomable"&gt;&lt;/figure&gt;&#10;&#10;&lt;p&gt;I recently had the pleasure of joining the &lt;a href="https://www.youtube.com/watch?v=_nJCTTrnZkE" target="_blank" rel="noopener noreferrer"&gt;Foojay podcast&lt;/a&gt; to talk about Quarkus in depth. The conversation covered a lot of ground, from what makes Quarkus different to the practical trade-offs between JVM and native mode. This post captures the key questions and answers from that discussion, lightly edited for readability.&lt;/p&gt;&#10;&lt;p&gt;If you have been following this blog series, note that the third installment on building your own stack with Quarkus is coming next. Consider this a bonus entry that distills the podcast conversation into a format you can read, reference, and share.&lt;/p&gt;</description></item><item><title>Enterprise Java quality gates in the age of AI</title><link>https://foojay.io/today/enterprise-java-quality-gates-ai/</link><pubDate>Fri, 29 May 2026 07:00:00 +0000</pubDate><guid>https://foojay.io/today/enterprise-java-quality-gates-ai/</guid><description>&lt;figure class="size-medium"&gt;&#10; &lt;img src="https://foojay.io/today/enterprise-java-quality-gates-ai/ChatGPT-Image-May-26-2026-04_44_09-PM-700x394.jpg" alt="Illustration of human developers and an AI assistant writing code together, with the code passing through an enterprise quality gate before reaching a trusted repository." width="100%" loading="lazy" class="is-zoomable"&gt;&lt;/figure&gt;&#10;&#10;&lt;p&gt;People and AI can write code together, but enterprise repositories still need deterministic quality gates to protect code quality.&lt;/p&gt;&#10;&lt;h2 id="enterprise-quality-is-a-scaling-problem"&gt;Enterprise quality is a scaling problem&lt;/h2&gt;&#10;&lt;p&gt;Enterprise Java development is not only about writing correct code. It is about keeping a large, long-lived codebase understandable, reviewable and safe to change while many people and many tools touch it over time.&lt;/p&gt;</description></item><item><title>BoxLang v1.13.0: Compatibility, Concurrency, and Formatter Maturity</title><link>https://foojay.io/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</link><pubDate>Tue, 19 May 2026 12:11:19 +0000</pubDate><guid>https://foojay.io/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/boxlang-v1.13.0-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;BoxLang 1.13.0&lt;/strong&gt; is a stability-first release with deep compatibility work and runtime hardening. This build closes 48 issues, with the majority focused on CFML compatibility edge cases, concurrency correctness, formatting parity, and miniserver/runtime reliability under real production loads.&lt;/p&gt;&#10;&lt;p&gt;While this release is bug-fix heavy, it still introduces several meaningful features and quality-of-life improvements: character-aware trimming, class metadata lookup by absolute path, process environment control in SystemExecute(), SOAP headers, new query column rename capabilities, and safer miniserver routing/security defaults.&lt;/p&gt;</description></item><item><title>Three Mastodon issues because of Cloudflare Bot protection</title><link>https://foojay.io/today/three-mastodon-issues-because-of-cloudflare-bot-protection/</link><pubDate>Mon, 27 Apr 2026 18:56:21 +0000</pubDate><guid>https://foojay.io/today/three-mastodon-issues-because-of-cloudflare-bot-protection/</guid><description>&lt;p&gt;I noticed some time ago that three &lt;a href="https://mastodon.top/@frankel" target="_blank" rel="noopener noreferrer"&gt;Mastodon&lt;/a&gt; features had stopped working on my blog. Each of them seemed like a separate problem, but they had the same root cause. In this blog post, I want to describe these issues and the simple fix.&lt;/p&gt;&#10;&lt;h2 id="domain-verification"&gt;Domain verification&lt;/h2&gt;&#10;&lt;p&gt;Mastodon allows you to prove that you own a domain. The mechanism requires two steps:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Add a &lt;code&gt;&amp;lt;link rel=&amp;quot;me&amp;quot;&amp;gt;&lt;/code&gt; tag in your pages, pointing to your Mastodon profile&lt;/li&gt;&#10;&lt;li&gt;Add your website URL to your Mastodon profile&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;When Mastodon crawls your page and finds the backlink, it displays a green checkmark next to your URL in your profile.&lt;/p&gt;</description></item><item><title>Dockerizing a Java 26 Project with Docker Init</title><link>https://foojay.io/today/dockerizing-a-java-26-project-with-docker-init/</link><pubDate>Mon, 27 Apr 2026 09:55:12 +0000</pubDate><guid>https://foojay.io/today/dockerizing-a-java-26-project-with-docker-init/</guid><description>&lt;p&gt;Docker Init was introduced in Docker Desktop 4.27, before LLMs became the default answer to everything. It&amp;rsquo;s a &amp;ldquo;smart&amp;rdquo; interactive wizard that analyzes your project and generates:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;A &lt;code&gt;Dockerfile&lt;/code&gt; (multi-stage, production-ready)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;A &lt;code&gt;compose.yaml&lt;/code&gt; file&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;A &lt;code&gt;.dockerignore&lt;/code&gt; file&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;A &lt;code&gt;README.Docker.md&lt;/code&gt; with build and run instructions&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;What makes it valuable is that it&amp;rsquo;s deterministic—not a probabilistic guess. It produces the same correct output every time, following Docker&amp;rsquo;s own best practices.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/dockerizing-a-java-26-project-with-docker-init/asgard-init-57a9971e.jpg" alt="Docker Commandos setting up the command center" width="1600" height="1195" loading="lazy" decoding="async"&gt;&lt;/p&gt;</description></item><item><title>AWS Nitro and CPU Graviton Meets Unikernels</title><link>https://foojay.io/today/aws-nitro-and-cpu-graviton-meets-unikernels/</link><pubDate>Fri, 10 Apr 2026 16:26:25 +0000</pubDate><guid>https://foojay.io/today/aws-nitro-and-cpu-graviton-meets-unikernels/</guid><description>&lt;h2 id="aws-nitro-and-cpu-graviton-meets-unikernels-java-and-quarkus-on-arm64-aws-graviton-with-nanos-unikernel"&gt;AWS Nitro and CPU Graviton Meets Unikernels: Java and Quarkus on ARM64 AWS Graviton with Nanos Unikernel&lt;/h2&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/aws-nitro-and-cpu-graviton-meets-unikernels/2c957ea8-2c6b-4caa-86f8-5adeb9e8bedc-619d4e1c.jpg" alt="image" width="1536" height="1024" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;h2 id="java-and-jakarta-ee-truly-meet-unikernels"&gt;Java and Jakarta EE Truly Meet Unikernels&lt;/h2&gt;&#10;&lt;p&gt;The key message of this article is simple and strong:&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;any Java or Jakarta EE application is already ready&lt;/strong&gt; to benefit from the advantages of unikernels.&lt;/p&gt;&#10;&lt;p&gt;Java and Jakarta EE, including modern frameworks such as Quarkus, can immediately take advantage of the unikernel model &lt;strong&gt;without waiting for new languages, new runtimes, or radical rewrites&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Introducing Floci: A High-Performance, GraalVM-Powered AWS Emulator</title><link>https://foojay.io/today/introducing-floci-a-high-performance-graalvm-powered-aws-emulator/</link><pubDate>Fri, 03 Apr 2026 19:00:53 +0000</pubDate><guid>https://foojay.io/today/introducing-floci-a-high-performance-graalvm-powered-aws-emulator/</guid><description>&lt;h2 id="the-motivation-why-another-aws-emulator"&gt;The Motivation: Why Another AWS Emulator?&lt;/h2&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/introducing-floci-a-high-performance-graalvm-powered-aws-emulator/perf-chart-light-700x394.png" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;As Java developers, we are used to local-first development. Tools that emulate the cloud environment have become essential for keeping feedback loops tight and costs at zero. However, the ecosystem has shifted. Many of us have felt the friction of:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Mandatory Authentication: Needing to log in or use tokens just to run local tests.&lt;/li&gt;&#10;&lt;li&gt;Heavy Resource Footprint: Docker containers that consume a lot of resources.&lt;/li&gt;&#10;&lt;li&gt;Slow Startup: Waiting several seconds for the environment to be &lt;strong&gt;ready.&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;I created Floci (from the floccus cloud formation) to solve these specific pain points. It is a 100% open-source, MIT-licensed alternative designed for speed, privacy, and simplicity.&lt;/p&gt;</description></item><item><title>TestBox 7: Real-Time Feedback, a Browser-Based IDE, and Modern Testing Workflows on the JVM</title><link>https://foojay.io/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/</link><pubDate>Tue, 24 Mar 2026 16:58:53 +0000</pubDate><guid>https://foojay.io/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/testbox-7-1-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;TestBox 7.x focuses on improving testing workflows for BoxLang and CFML applications. This release introduces improvements to the &lt;strong&gt;BoxLang CLI runner&lt;/strong&gt; , real-time &lt;strong&gt;streaming test execution via SSE&lt;/strong&gt; , &lt;strong&gt;dry run&lt;/strong&gt; capabilities, a browser-based &lt;strong&gt;TestBox RUN&lt;/strong&gt; interface, and several developer experience enhancements.&lt;/p&gt;&#10;&lt;p&gt;Check out the what&amp;rsquo;s new here: &lt;a href="https://testbox.ortusbooks.com/readme/release-history/whats-new-with-7.0.0" target="_blank" rel="noopener noreferrer"&gt;https://testbox.ortusbooks.com/readme/release-history/whats-new-with-7.0.0&lt;/a&gt;&lt;/p&gt;&#10;&lt;h4 id="testbox-run-a-browser-ide-for-your-tests"&gt;TestBox RUN: A Browser IDE for Your Tests&lt;/h4&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/image-700x155.png" alt="" width="700" height="155" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;The centerpiece of TestBox 7 is &lt;strong&gt;TestBox RUN&lt;/strong&gt; : a self-hosted, single-page web app (&lt;code&gt;bx/tests/index.bxm&lt;/code&gt;) that you drop into any &lt;strong&gt;BoxLang&lt;/strong&gt; project and open in a browser. No build toolchain. No external service. Just BoxLang.&lt;/p&gt;</description></item><item><title>Azul Zulu OpenJDK Docker Images Now Available on Docker Hub</title><link>https://foojay.io/today/official-azul-zulu-openjdk-images-now-available-on-docker-hub/</link><pubDate>Mon, 23 Mar 2026 07:53:56 +0000</pubDate><guid>https://foojay.io/today/official-azul-zulu-openjdk-images-now-available-on-docker-hub/</guid><description>&lt;p&gt;&lt;a href="https://www.azul.com/blog/trusted-java-containers-azul-zulu-openjdk-joins-dockers-official-images/" title="Azul recently announced that" target="_blank" rel="noopener noreferrer"&gt;Azul recently announced that&lt;/a&gt; Azul Zulu Builds of OpenJDK are now available as Docker Official images on Docker Hub. That means you can pull TCK‑verified, fully compliant OpenJDK builds directly from the same Official Images library you already trust for your base OS and databases.&lt;/p&gt;&#10;&lt;p&gt;You can browse and pull the images here:&lt;br&gt;&#10;&lt;a href="https://hub.docker.com/_/azul-zulu" target="_blank" rel="noopener noreferrer"&gt;https://hub.docker.com/_/azul-zulu&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="why-should-you-care-about-official-images"&gt;Why should you care about official images?&lt;/h2&gt;&#10;&lt;p&gt;With the official Docker images you get:&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #14</title><link>https://foojay.io/today/jc-ai-newsletter-14/</link><pubDate>Tue, 03 Mar 2026 15:11:53 +0000</pubDate><guid>https://foojay.io/today/jc-ai-newsletter-14/</guid><description>&lt;p&gt;&lt;strong&gt;Two&lt;/strong&gt; weeks have passed and a lot have been happening on the field of artificial-intelligence.&lt;/p&gt;&#10;&lt;p&gt;Two weeks have passed and a lot has been silently yet visibly happening in the field of artificial intelligence. This newsletter brings interesting developments, including Dario Amodei&amp;rsquo;s (Anthropic) view on the progress achieved in the LLM field and his response to the utilization of these models for specific kinds of military purposes, as well as OpenAI&amp;rsquo;s response to it. Aside from the fact that development may follow more sigmoids instead of exponential progress, it is important to have awareness of utilization across branches. Does prompting and clarifying the goal influence agent responses, and if so, how? How far are we from reliable robotics applications? How much bias is introduced when clinical data is being analyzed?&lt;/p&gt;</description></item><item><title>From “Crypto AI” to general AI: Do AI agents dream of electric langoustines?</title><link>https://foojay.io/today/from-crypto-ai-to-general-ai-do-ai-agents-dream-of-electric-langoustines/</link><pubDate>Mon, 23 Feb 2026 18:11:54 +0000</pubDate><guid>https://foojay.io/today/from-crypto-ai-to-general-ai-do-ai-agents-dream-of-electric-langoustines/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/from-crypto-ai-to-general-ai-do-ai-agents-dream-of-electric-langoustines/daydreams-2-scaled.jpg" alt="" width="1600" height="686" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;h2 id="x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce-do-ai-agents-dream-of-electric-langoustines"&gt;&lt;strong&gt;x402, ERC-8004, A2A, and The Next Wave of AI Commerce: Do AI Agents Dream of Electric Langoustines?&lt;/strong&gt;&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;strong&gt;A Blade Runner riff for a world where the lobster ships paid endpoints while humans still argue about the roadmap.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="the-shift-that-matters-for-agent-commerce---from-crypto-ai-to-general-ai"&gt;The shift that matters for agent commerce - From &amp;ldquo;Crypto AI&amp;rdquo; to general AI&lt;/h2&gt;&#10;&lt;p&gt;Today, you can search the web all day and never see an invoice.&lt;/p&gt;&#10;&lt;p&gt;That happens because you are not the paying client.&lt;/p&gt;</description></item><item><title>Shai-Hulud and the npm Worm: How Speed-Optimised Dev Ecosystems Made a Self-Propagating Supply Chain Attack Inevitable</title><link>https://foojay.io/today/the-shai-hulud-cyber-worm-and-more-thoughts-on-supply-chain-attacks/</link><pubDate>Thu, 12 Feb 2026 11:47:48 +0000</pubDate><guid>https://foojay.io/today/the-shai-hulud-cyber-worm-and-more-thoughts-on-supply-chain-attacks/</guid><description>&lt;h2 id="first-a-word-about-ecosystems"&gt;first, a word about ecosystems&lt;/h2&gt;&#10;&lt;p&gt;Before we dive into Shai-Hulud, before we label it &amp;ldquo;sophisticated&amp;rdquo; or &amp;ldquo;advanced&amp;rdquo; or &amp;ldquo;next generation,&amp;rdquo; we need to be honest about something.&lt;/p&gt;&#10;&lt;p&gt;The worm didn&amp;rsquo;t appear in a broken system. It appeared in the one we deliberately optimised.&lt;/p&gt;&#10;&lt;p&gt;In the book Dune, the worm is integral to the ecosystem. The planet, its environment, and the worms are deeply interconnected.&lt;/p&gt;&#10;&lt;p&gt;That&amp;rsquo;s true for the cyber-worm equivalent. The worm is an entirely predictable outcome of the ecosystem in which we, as developers, are part&lt;/p&gt;</description></item><item><title>Unikernel: Profiling and Troubleshooting JVM on Nanos Unikernel</title><link>https://foojay.io/today/unikernel-profiling-and-troubleshooting-jvm-on-nanos-unikernel/</link><pubDate>Wed, 11 Feb 2026 13:50:41 +0000</pubDate><guid>https://foojay.io/today/unikernel-profiling-and-troubleshooting-jvm-on-nanos-unikernel/</guid><description>&lt;h3 id="profiling-a-java-application-running-inside-an-unikernel-with-jprofiler"&gt;Profiling a Java Application Running Inside an Unikernel with JProfiler&lt;/h3&gt;&#10;&lt;p&gt;Unikernels are often associated with minimalism and tight resource control.&lt;/p&gt;&#10;&lt;p&gt;But can we profile a Java application running inside a unikernel using a standard JVM profiler?&lt;/p&gt;&#10;&lt;p&gt;The answer is yes.&lt;/p&gt;&#10;&lt;p&gt;In this guide, we will walk step by step through profiling a Quarkus&lt;/p&gt;&#10;&lt;p&gt;application running inside a Nanos unikernel using &lt;strong&gt;JProfiler&lt;/strong&gt; and&lt;br&gt;&#10;&lt;strong&gt;IBM Semeru JRE 25 (OpenJ9)&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;No special hacks. Just standard JVM tooling.&lt;/p&gt;</description></item><item><title>From Cloudflare Zero-trust to Tailscale</title><link>https://foojay.io/today/from-cloudflare-zero-trust-to-tailscale/</link><pubDate>Mon, 12 Jan 2026 20:04:31 +0000</pubDate><guid>https://foojay.io/today/from-cloudflare-zero-trust-to-tailscale/</guid><description>&lt;p&gt;I have spent some time last year implementing &lt;a href="https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/" target="_blank" rel="noopener noreferrer"&gt;Cloudflare Tunnels&lt;/a&gt; on my &lt;a href="https://blog.frankel.ch/home-assistant/6/" target="_blank" rel="noopener noreferrer"&gt;Home Assistant&lt;/a&gt; and my &lt;a href="https://blog.frankel.ch/second-cloudflare-tunnel/" target="_blank" rel="noopener noreferrer"&gt;Synology NAS&lt;/a&gt;. On Mastodon, I had not one but two commenters advertising for Tailscale:&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://mastodon.top/@frankel/115639107167365460" target="_blank" rel="noopener noreferrer"&gt;https://mastodon.top/@frankel/115639107167365460&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;I decided to give it a try and migrate my servers and devices to Tailscale. In this post, I want to describe how I did. Thanks to Heiko Does and higgins for prompting me to look further!&lt;/p&gt;&#10;&lt;h2 id="what-is-tailscale-how-and-why"&gt;What is Tailscale, how and why?&lt;/h2&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;A Zero Trust identity-based connectivity platform that replaces your legacy VPN, SASE, and PAM and connects remote teams, multi-cloud environments, CI/CD pipelines, Edge &amp;amp; IoT devices, and AI workloads.&lt;/p&gt;</description></item><item><title>Not a Lucid Web3 Dream Anymore: x402, ERC-8004, A2A, and The Next Wave of AI Commerce</title><link>https://foojay.io/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/</link><pubDate>Fri, 09 Jan 2026 16:05:58 +0000</pubDate><guid>https://foojay.io/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/daydreams-scaled.jpg" alt="DayDreams" width="1600" height="686" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;This article is for technically savvy readers, especially developers, protocol designers, and product teams working with AI agents, APIs, or crypto rails, who want a clear view of how these areas connect.&lt;/em&gt;&lt;br&gt;&#10;&lt;em&gt;It explains how x402, ERC-8004, and agent discovery layers turn APIs and agents into small usage-based businesses, and what that means for real systems over the next 1–3 years.&lt;/em&gt;&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;h3 id="vocabulary-for-this-article"&gt;Vocabulary for this article&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;In this article, I use the term &lt;em&gt;micro business&lt;/em&gt; for a very small overall business, and &lt;em&gt;nano business&lt;/em&gt; for a single x402-priced endpoint or agent that earns on its own from per-call payments in stablecoins.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;AP2 (Agent Payment Protocol):&lt;/strong&gt; AP2 defines how agents pay each other. It standardizes how a service quotes a price, how payment is confirmed, and how both sides record what was bought, so payments fit directly into automated agent workflows. In practice, it is a protocol that lets one machine pay another machine for work, without a human in the loop.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;A2A (Agent-to-Agent communication):&lt;/strong&gt; A2A covers how agents talk, pass context, and coordinate work. It lets agents call each other, exchange structured messages, and chain tasks instead of acting as isolated scripts.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;x402:&lt;/strong&gt; x402 is an HTTP-based payment protocol for APIs. A server responds with status &lt;code&gt;402 Payment Required&lt;/code&gt;, the price, and a payment route, and the client pays by using stablecoins on-chain and then retries the request to get the result.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ERC-8004 (8004):&lt;/strong&gt; ERC-8004 standard is an on-chain registry for agents. It gives each agent an identity and a place to store reputation data, so other agents and tools can decide whom to trust and which services to call.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="foreword"&gt;Foreword&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;x402&lt;/strong&gt; and &lt;strong&gt;ERC-8004&lt;/strong&gt; .&lt;/p&gt;</description></item><item><title>Java and Jakarta EE and the Evolution of the Cloud with Nanos Unikernel</title><link>https://foojay.io/today/java-jakarta-ee-and-the-evolution-of-the-cloud-with-nanos-unikernel/</link><pubDate>Tue, 06 Jan 2026 20:51:09 +0000</pubDate><guid>https://foojay.io/today/java-jakarta-ee-and-the-evolution-of-the-cloud-with-nanos-unikernel/</guid><description>&lt;p&gt;The evolution of the Java and Jakarta Enterprise ecosystem is converging toward an increasingly simple, efficient, and scalable architecture that improves security, delivers higher performance, and reduces hardware and infrastructure costs.&lt;/p&gt;&#10;&lt;p&gt;For years, Kubernetes has been considered the de‑facto standard for modernizing Java applications in a cloud‑native direction. However, Kubernetes is not the only way to achieve scalability, continuous upgrades, and isolation. An alternative approach — often underestimated — is to leverage the &lt;strong&gt;hypervisors already included and fully managed by major cloud providers&lt;/strong&gt; , using &lt;strong&gt;Unikernel&lt;/strong&gt; images based on &lt;a href="https://nanovms.com" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Nanos&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>How to Release a Java Module to Maven Central with JReleaser and GitHub Actions (2025 Guide)</title><link>https://foojay.io/today/how-to-publish-a-java-maven-project-to-maven-central-using-jreleaser-and-github-actions-2025-guide/</link><pubDate>Fri, 12 Dec 2025 07:42:00 +0000</pubDate><guid>https://foojay.io/today/how-to-publish-a-java-maven-project-to-maven-central-using-jreleaser-and-github-actions-2025-guide/</guid><description>&lt;p&gt;This article is a tutorial that guides you through the process of releasing a Java module with &lt;a href="https://jreleaser.org/" target="_blank" rel="noopener noreferrer"&gt;JReleaser&lt;/a&gt; to Maven Central with Github Actions. It is a 2025 update of the &lt;a href="https://foojay.io/today/how-to-release-a-java-module-with-jreleaser-to-maven-central-with-github-actions/"&gt;foojay.io/today/how-to-release-a-java-module-with-jreleaser-to-maven-central-with-github-actions&lt;/a&gt; article.&lt;/p&gt;&#10;&lt;p&gt;JReleaser is a tool that streamlines the release process for Java projects, allowing developers to quickly and efficiently publish their modules to Maven Central.&lt;/p&gt;&#10;&lt;p&gt;This article will use the &lt;a href="https://github.com/jagodevreede/semver-check/" title="SemVer Check project" target="_blank" rel="noopener noreferrer"&gt;SemVer Check project&lt;/a&gt; as an example project that uses Maven as a build tool.&lt;/p&gt;</description></item><item><title>Micrometer &amp; Prometheus in Spring Boot: Kafka Burger Orders</title><link>https://foojay.io/today/micrometer-prometheus-in-spring-boot-kafka-burger-orders/</link><pubDate>Fri, 14 Nov 2025 10:13:03 +0000</pubDate><guid>https://foojay.io/today/micrometer-prometheus-in-spring-boot-kafka-burger-orders/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;&#10;&#9;&#9;&#9;&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eSreg0xPGqo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;p&gt;👨‍💻 GitHub: &lt;a href="https://github.com/vinny59200/dukeburger" target="_blank" rel="noopener noreferrer"&gt;https://github.com/vinny59200/dukeburger&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪&lt;/p&gt;&#10;&lt;h2 id="tldr"&gt;TL;DR&lt;/h2&gt;&#10;&lt;p&gt;This guide shows how to use &lt;strong&gt;Micrometer and Prometheus in Spring Boot&lt;/strong&gt; to track a custom metric for a Kafka-driven Burger Orders app. You&amp;rsquo;ll post a burger order to a REST endpoint, publish it to Kafka, consume the topic, and increment a counter for all &amp;ldquo;DukeBurger&amp;rdquo; orders. Copy the snippets, run, and you&amp;rsquo;ll see your metric on &lt;code&gt;/actuator/prometheus&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #8</title><link>https://foojay.io/today/jc-ai-newsletter-8/</link><pubDate>Thu, 30 Oct 2025 06:36:12 +0000</pubDate><guid>https://foojay.io/today/jc-ai-newsletter-8/</guid><description>&lt;p&gt;&lt;strong&gt;Fourteen days have passed, and it is time to present a fresh collection of readings that could influence developments in the field of artificial intelligence.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;This newsletter focuses on examining how AI enhances productivity through enterprise studies, agentic system architecture, attack vectors, Model Context Protocol (MCP) implementation, Agent-to-Agent (A2A) protocol, Java code generation within IDEs, LLM benchmarking methodologies, and the security challenges arising from increased AI-LLM adoption.&lt;/p&gt;&#10;&lt;p&gt;The world influenced by LLM is changing very quickly, let&amp;rsquo;s start&amp;hellip;&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #7</title><link>https://foojay.io/today/jc-ai-newsletter-7/</link><pubDate>Tue, 14 Oct 2025 05:35:01 +0000</pubDate><guid>https://foojay.io/today/jc-ai-newsletter-7/</guid><description>&lt;p&gt;&lt;strong&gt;Fourteen days have passed, and it is time to present a fresh collection of readings that could influence developments in the field of artificial intelligence.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Beyond focused tutorials that can enhance your understanding of AI applications, this newsletter concentrates on Hallucination, Java Code Generation, Testing, Agentic System Architecture and LLM benchmarking methodologies designed to ensure models accuracy and competency in handling complex contextual information.&lt;/p&gt;&#10;&lt;p&gt;The world influenced by LLM is changing very quickly, let&amp;rsquo;s start&amp;hellip;&lt;/p&gt;</description></item><item><title>Why Mirroring Production in Dev Helps You Avoid Costly Mistakes</title><link>https://foojay.io/today/why-mirroring-production-in-dev-helps-you-avoid-costly-mistakes/</link><pubDate>Mon, 28 Jul 2025 13:31:10 +0000</pubDate><guid>https://foojay.io/today/why-mirroring-production-in-dev-helps-you-avoid-costly-mistakes/</guid><description>&lt;p&gt;&lt;strong&gt;Many developers start building their applications with MongoDB using a free M0 cluster or a local environment. While this is common and convenient, it can lead to issues that could easily be avoided by using a more robust setup, such as a development cluster that closely mirrors production. Problems like inefficient queries, missing indexes, or even costly mistakes often go unnoticed in limited environments like M0 or local setups.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;In this article, we&amp;rsquo;ll explore why your development environment should closely reflect your production environment, and how using an M10+ cluster with tools like Query Profiler and Performance Advisor can help you catch performance issues early and build with confidence.&lt;/p&gt;</description></item><item><title>Cloudflare Tunnel for Home Assistant</title><link>https://foojay.io/today/cloudflare-tunnel-for-home-assistant/</link><pubDate>Tue, 03 Jun 2025 11:29:18 +0000</pubDate><guid>https://foojay.io/today/cloudflare-tunnel-for-home-assistant/</guid><description>&lt;p&gt;I continue to take care of my Home Assistant. This week, I replaced my original setup with &lt;a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/" target="_blank" rel="noopener noreferrer"&gt;Cloudflare Tunnel&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;This is the 6th post in the My journey with Home Assistant focus series. Other posts include:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/1/" target="_blank" rel="noopener noreferrer"&gt;Why Home Assistant?&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/2/" target="_blank" rel="noopener noreferrer"&gt;The Home Assistant model&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/3/" target="_blank" rel="noopener noreferrer"&gt;Replace Philips Hue automation with Home Assistant&amp;rsquo;s&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/4/" target="_blank" rel="noopener noreferrer"&gt;An example of HACS: Adaptive Lighting&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.frankel.ch/home-assistant/5/" target="_blank" rel="noopener noreferrer"&gt;The Home Assistant companion app&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="the-initial-setup"&gt;The initial setup&lt;/h2&gt;&#10;&lt;p&gt;My usage of Home Assistant required external access from the beginning.&lt;/p&gt;</description></item><item><title>Getting my feet wet with Crossplane</title><link>https://foojay.io/today/getting-my-feet-wet-with-crossplane/</link><pubDate>Mon, 05 May 2025 09:47:57 +0000</pubDate><guid>https://foojay.io/today/getting-my-feet-wet-with-crossplane/</guid><description>&lt;p&gt;In the early days of IT, we manually configured servers–each one a precious snowflake, lovingly maintained and documented. But the size of the infrastructure grew and this approach couldn&amp;rsquo;t scale. Chef and Puppet popularized the idea of Infrastructure-as-Code: engineers would define the state of the machine(s) in text files, stored in Git–hence the name. A global node would read these files to create a registry. Then, a local agent on each machine would check the desired state at regular intervals, and reconcile the current state with the registry.&lt;/p&gt;</description></item><item><title>Even more OpenTelemetry - Kubernetes special</title><link>https://foojay.io/today/even-more-opentelemetry-kubernetes-special/</link><pubDate>Tue, 08 Apr 2025 17:39:31 +0000</pubDate><guid>https://foojay.io/today/even-more-opentelemetry-kubernetes-special/</guid><description>&lt;p&gt;I have presented my &lt;a href="https://github.com/nfrankel/opentelemetry-tracing" target="_blank" rel="noopener noreferrer"&gt;OpenTelemetry demo&lt;/a&gt; many times, and I still do. Each time, the audience is different. To make no two presentations the same, I always ask attendees what stack they are more interested in. I also &lt;a href="https://blog.frankel.ch/improve-otel-demo/" target="_blank" rel="noopener noreferrer"&gt;regularly add&lt;/a&gt; &lt;a href="https://blog.frankel.ch/even-more-opentelemetry/" target="_blank" rel="noopener noreferrer"&gt;new features&lt;/a&gt; for the same reason.&lt;/p&gt;&#10;&lt;p&gt;I was a victim of the IT crisis last summer, and my company fired me, so I no longer work on Apache APISIX. They say that the Chinese ideogram for crisis contains the ideogram for opportunity. I used this opportunity to join &lt;a href="https://www.loft.sh/" target="_blank" rel="noopener noreferrer"&gt;LoftLabs&lt;/a&gt;. LoftLabs offers a cluster virtualization solution called &lt;a href="https://www.vcluster.com/" target="_blank" rel="noopener noreferrer"&gt;vCluster&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>One giant Kubernetes cluster for everything</title><link>https://foojay.io/today/one-giant-kubernetes-cluster-for-everything/</link><pubDate>Tue, 25 Mar 2025 10:33:50 +0000</pubDate><guid>https://foojay.io/today/one-giant-kubernetes-cluster-for-everything/</guid><description>&lt;p&gt;The ideal size of your Kubernetes clusters is a day 0 question and demands a definite answer.&lt;/p&gt;&#10;&lt;p&gt;You find one giant cluster on one end of the spectrum and many small-sized ones on the other, with every combination in between. This decision will impact your organization for years to come. Worse, if you decide to change your topology, you&amp;rsquo;re in for a time-wasting and expensive ride.&lt;/p&gt;&#10;&lt;p&gt;I want to list each approach&amp;rsquo;s pros and cons in this post. Then, I&amp;rsquo;ll settle the discussion once and for all and argue why selecting the giant cluster option is better.&lt;/p&gt;</description></item></channel></rss>