<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer Tools on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/category/developer-tools/</link><description>Recent content in Developer Tools on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 21 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://foojay.io/today/category/developer-tools/index.xml" rel="self" type="application/rss+xml"/><item><title>BxPlaywright 1.0: Real Browsers, Fluent BoxLang, Built for AI Agents</title><link>https://foojay.io/today/bxplaywright-10-real-browsers-fluent-boxlang-built-for-ai-agents/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/bxplaywright-10-real-browsers-fluent-boxlang-built-for-ai-agents/</guid><description>&lt;p&gt;&lt;strong&gt;Ortus Solutions today announces the general availability of &lt;a href="https://bxplaywright.boxlang.io" target="_blank" rel="noopener noreferrer"&gt;bx-playwright 1.0&lt;/a&gt;, fluent browser automation and testing for BoxLang, powered by Microsoft Playwright. It ships alongside &lt;a href="https://testbox.ortusbooks.com/readme/release-history/whats-new-with-7.2.0" target="_blank" rel="noopener noreferrer"&gt;TestBox 7.2&lt;/a&gt; and &lt;a href="https://coldbox.ortusbooks.com/release-history/whats-new-with-8.3.0" target="_blank" rel="noopener noreferrer"&gt;ColdBox 8.3&lt;/a&gt;, which bring real-browser testing straight into your specs. Drive Chromium, Firefox and WebKit, test full user journeys, render PDFs and images, and give your AI agents a real browser to verify the BoxLang applications they build.&lt;/strong&gt;&lt;/p&gt;&#10;&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/8pixcv2P3sU?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;pre class="EnlighterJSRAW" data-enlighter-language="javascript"&gt;playwright().browse( ( page ) =&amp;gt; {&#10;&#9;page.visit( &amp;#34;/login&amp;#34; )&#10;&#9;&#9;.fill( &amp;#34;Email&amp;#34;, &amp;#34;luis@ortus.com&amp;#34; )&#10;&#9;&#9;.fill( &amp;#34;Password&amp;#34;, &amp;#34;secret&amp;#34; )&#10;&#9;&#9;.click( &amp;#34;Sign in&amp;#34; )&#10;&#9;&#9;.assertPathIs( &amp;#34;/dashboard&amp;#34; )&#10;&#9;&#9;.assertSee( &amp;#34;Welcome back&amp;#34; )&#10;&#9;&#9;.screenshot( &amp;#34;dashboard.png&amp;#34; )&#10;} )&lt;/pre&gt;&lt;p&gt;That&amp;rsquo;s a full login check. It reads like the steps you&amp;rsquo;d write on a sticky note, and every line runs in a real browser. 🚀&lt;/p&gt;</description></item><item><title>What I Learned Building an AI Code Reviewer with Java and Spring Boot</title><link>https://foojay.io/today/what-i-learned-building-an-ai-code-reviewer-with-java-spring-boot/</link><pubDate>Wed, 14 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/what-i-learned-building-an-ai-code-reviewer-with-java-spring-boot/</guid><description>&lt;p&gt;AI-assisted coding has changed how quickly developers can write software.&lt;/p&gt;&#10;&lt;p&gt;But that creates another question:&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;How do you review all that generated code effectively?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;That question led me to build CodeGuard AI, a self-hosted AI code-review application for GitHub Pull Requests using Java and Spring Boot.&lt;/p&gt;&#10;&lt;p&gt;At first, the architecture seemed simple:&lt;/p&gt;&#10;&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic"&gt;GitHub Pull Request&#10; ↓&#10; LLM&#10; ↓&#10; Review&lt;/pre&gt;&lt;p&gt;In practice, that wasn&amp;rsquo;t enough.&#10;The interesting engineering work was everything around the model: collecting useful Pull Request context, defining review instructions, structuring the model response, assessing findings, and integrating the result back into the GitHub workflow.&#10;This article explains what I learned while building that workflow.&lt;/p&gt;</description></item><item><title>Introduction to Error Prone: How to Catch Bugs at Compile Time</title><link>https://foojay.io/today/introduction-to-error-prone-how-to-catch-bugs-at-compile-time/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/introduction-to-error-prone-how-to-catch-bugs-at-compile-time/</guid><description>&lt;p&gt;The Java compiler&amp;rsquo;s job is to check whether code follows the rules of the language. Trying to remove an element from a collection that can never contain it, or using the wrong letter in a date pattern, does not break those rules, so nothing stops the code from compiling. In short, any code that follows the rules compiles, even when it does not do what its author intended.&lt;/p&gt;&#10;&lt;h2 id="what-is-error-prone"&gt;What is Error Prone?&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://errorprone.info/" target="_blank" rel="noopener noreferrer"&gt;Error Prone&lt;/a&gt; is an open source static analysis tool that Google built to fill this gap. Unlike most static analysis tools, it does not run as a separate step; it plugs into &lt;code&gt;javac&lt;/code&gt; as a plugin. Using the information the compiler produces while analyzing the code, it looks for patterns that follow the rules of the language but are most likely wrong, and reports them as compiler warnings or errors.&lt;/p&gt;</description></item><item><title>How to Create Agent Skills: Tools, Testing, and Installation</title><link>https://foojay.io/today/how-to-create-test-install-agent-skills/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/how-to-create-test-install-agent-skills/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;In short.&lt;/strong&gt; Start with a task that keeps coming up and turn it into a Skill with &lt;code&gt;superpowers:writing-skills&lt;/code&gt;. While creating it, test scenarios with and without the Skill, and validate the structure of &lt;code&gt;SKILL.md&lt;/code&gt;. Then use the Skill on several real tasks. If it consistently helps, share it with your team through a Skills repository or a Plugin.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Creating your first Agent Skill is easy. Make a folder, put a &lt;code&gt;SKILL.md&lt;/code&gt; file in it, and write a few instructions.&lt;/p&gt;</description></item><item><title>Introducing cbGenesis: The AI-Native ColdBox Starter for BoxLang</title><link>https://foojay.io/today/introducing-cbgenesis-ai-native-coldbox-starter-for-boxlang/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/introducing-cbgenesis-ai-native-coldbox-starter-for-boxlang/</guid><description>&lt;p&gt;&lt;strong&gt;Ortus Solutions today announces the general availability of &lt;a href="https://cbgenesis.coldbox.org" target="_blank" rel="noopener noreferrer"&gt;cbGenesis 1.0&lt;/a&gt;, a production-ready ColdBox HMVC starter template for BoxLang, and the first one designed from day one to be built &lt;em&gt;with&lt;/em&gt; an AI coding agent, not just &lt;em&gt;by&lt;/em&gt; one.&lt;/strong&gt;&lt;/p&gt;&#10;&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/wbiZTAPrYQs?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="Introducing cbGenesis"&gt;&lt;/iframe&gt;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;p&gt;For twenty years, &lt;strong&gt;ColdBox&lt;/strong&gt; has been one of the most battle-tested HMVC frameworks in the CFML and BoxLang world. &lt;strong&gt;cbGenesis&lt;/strong&gt; takes that foundation and ships the part every team rebuilds by hand: authentication, permissions, security hardening, an admin panel, tests, and the guidance an AI agent needs to extend all of it correctly.&lt;/p&gt;</description></item><item><title>Introducing Jenesis: You Already Wrote the Build Script</title><link>https://foojay.io/today/introducing-jenesis/</link><pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/introducing-jenesis/</guid><description>&lt;p&gt;Over the last decade, Java has changed considerably. The language gained modules, records and virtual threads, and the platform moved to a release every six months. The way we build Java applications, however, has barely changed. A &lt;code&gt;pom.xml&lt;/code&gt; or a &lt;code&gt;build.gradle.kts&lt;/code&gt; still restates what the code already declares, such as the project&amp;rsquo;s name, its dependencies and its main class. On top of that, every step beyond the defaults adds a block of configuration and typically another plugin, until the build has become a second program that needs to be maintained beside the first. And before a single line of code is compiled, a wrapper first downloads the build tool itself, which in the case of Gradle are 152 MB. This article introduces Jenesis, a build tool that I have written to approach this problem from a different angle.&lt;/p&gt;</description></item><item><title>try.boxlang.io Now Runs Every BoxLang Version, With or Without CFML</title><link>https://foojay.io/today/tryboxlang/</link><pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/tryboxlang/</guid><description>&lt;p&gt;The &lt;a href="https://try.boxlang.io/" target="_blank" rel="noopener noreferrer"&gt;BoxLang playground&lt;/a&gt; now lets you choose among released BoxLang versions and switch CFML compatibility on or off without installing a runtime or setting up containers. Choose a version, enter a snippet, and run it in the browser.&lt;/p&gt;&#10;&lt;p&gt;Behind the editor is a serverless implementation on AWS Lambda. Each combination of BoxLang version and compatibility mode is built from one repository and deployed as an isolated function. Here&amp;rsquo;s what changed and how that arrangement works.&lt;/p&gt;</description></item><item><title>Green Build, Wrong Task: A Working Agreement for Java Teams Using AI Coding Agents</title><link>https://foojay.io/today/green-build-wrong-task-a-working-agreement-for-java-teams-using-ai-coding-agents/</link><pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/green-build-wrong-task-a-working-agreement-for-java-teams-using-ai-coding-agents/</guid><description>&lt;p&gt;You open a pull request. &lt;code&gt;./gradlew check&lt;/code&gt; is green, the diff is 400 lines, the description says &amp;ldquo;added tests as requested&amp;rdquo;. You scroll and see a dozen unit tests for one service class. What you asked for, in a two-line Jira comment, was end-to-end coverage of the checkout flow.&lt;/p&gt;&#10;&lt;p&gt;Nobody lied. The agent filled a gap in the request with the most likely reading and got to work. This is the first of three failure modes our team went through in a webinar on September 28. I am writing it up because the fixes turned out to be boring and mechanical, and they work with whatever agent your team has already installed.&lt;/p&gt;</description></item><item><title>Run Java in the Browser with TeaVM</title><link>https://foojay.io/today/java-in-the-browser-with-teavm/</link><pubDate>Tue, 06 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/java-in-the-browser-with-teavm/</guid><description>&lt;p&gt;There’s something satisfying about editing a line of Java on a web page, clicking &lt;strong&gt;Run&lt;/strong&gt;, and seeing the result appear right there in the browser. I use this approach for the live Java snippets at &lt;a href="https://nablatensor.com/learn" target="_blank" rel="noopener noreferrer"&gt;nablatensor.com/learn&lt;/a&gt; and for source code used to bootstrap &lt;a href="https://nablatensor.com/quantlab" target="_blank" rel="noopener noreferrer"&gt;nablatensor.com/quantlab&lt;/a&gt;. In this article, I’ll explain how the pieces fit together and walk you through a React app you can run yourself.&lt;/p&gt;&#10;&lt;h2 id="from-java-source-to-a-result"&gt;From Java source to a result&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://teavm.org/docs/intro/overview.html" target="_blank" rel="noopener noreferrer"&gt;TeaVM&lt;/a&gt; compiles Java bytecode into JavaScript or WebAssembly for the browser. To let readers edit and compile the examples, I use &lt;a href="https://github.com/Vsprocessing/teavm-javac" target="_blank" rel="noopener noreferrer"&gt;teavm-javac&lt;/a&gt;, which brings a Java compiler into the browser as well. &lt;strong&gt;Compilation happens directly in the reader&amp;rsquo;s browser:&lt;/strong&gt; the edited source is sent to a Web Worker in the same tab, without sending a compilation request to a server.&lt;/p&gt;</description></item><item><title>Foojay Podcast #102: Why Foojay Walked Away From WordPress for Static Sites</title><link>https://foojay.io/today/foojay-podcast-102/</link><pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-102/</guid><description>&lt;p&gt;Foojay.io quietly moved off WordPress and onto Hugo, a static site generator. No more CMS login, no database, no admin panel — just Markdown and AsciiDoc files, built and deployed straight from GitHub. In this episode we dig into why that move happened, and into the bigger question behind it: is a traditional CMS still the right way to run a content site in 2026, or has static tooling caught up? Along the way we go through the real security numbers behind WordPress&amp;rsquo;s plugin ecosystem — more than 10,000 vulnerabilities found in WordPress plugins since 2025 alone — and put very different static site generators head to head: Hugo and Jekyll, the veterans, versus Roq, the Java-and-Quarkus-based newcomer.&lt;/p&gt;</description></item><item><title>Lathe: A Java Language Server That Works Straight From Your Maven Build</title><link>https://foojay.io/today/lathe-a-java-language-server-from-your-maven-build/</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/lathe-a-java-language-server-from-your-maven-build/</guid><description>&lt;p&gt;I have written Java in many editors and IDEs over the years, and they all seem to struggle with the same&#10;thing.&lt;/p&gt;&#10;&lt;p&gt;For me, the hard part of a Java IDE or language server was never the code intelligence. It was getting&#10;the project structure right. The IDE reads your build files and then tries to guess the module&#10;structure from them. And over time, Java&amp;rsquo;s compiler and runtime configuration has become more and more&#10;complex: annotation processors, the module system, and more. So you often end up in a familiar place:&#10;the code compiles and runs in the build, but not in the IDE. Even the best ones tend to break the&#10;project setup after an upgrade.&lt;/p&gt;</description></item><item><title>My love-hate relationship with Java formatters</title><link>https://foojay.io/today/my-love-hate-relationship-with-java-formatters/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/my-love-hate-relationship-with-java-formatters/</guid><description>&lt;p&gt;Disclaimer: I don&amp;rsquo;t want to turn this into &amp;ldquo;Java formatters week&amp;rdquo;, but I started my own project a while ago, and I think it&amp;rsquo;s time for it to come out of stealth mode.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve been writing Java for many, many years, and the Sun Code Conventions were my favorite bedside reading. I&amp;rsquo;ve seen plenty of variations over the years, and even after they became the Oracle Code Conventions, they were still the same few-page guide on how to write a hello-world app with the standard class library. For some reason I never took to the Google conventions: too C-flavored, with tiny indents, too few columns on the screen, and so on.&lt;/p&gt;</description></item><item><title>BoxLang AI 3.4.0: Gateways, Human-in-the-Loop, and a Full Security Stack</title><link>https://foojay.io/today/boxlang-ai-340-gateways-hitl-security/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-340-gateways-hitl-security/</guid><description>&lt;p&gt;BoxLang AI 3.4.0 is a major release centered on a single theme: &lt;strong&gt;trust&lt;/strong&gt;. AI agents operating in real applications need ways to involve people in consequential decisions and manage potentially untrusted inputs. This release introduces gateways, a restructured Human-in-the-Loop subsystem with durable decisions, layered security controls, batched approvals, normalized provider reasoning, and broader AWS Bedrock support.&lt;/p&gt;&#10;&lt;p&gt;The sections below follow the original &lt;a href="https://www.ortussolutions.com/blog/boxlang-ai-340-gateways-human-in-the-loop-and-a-full-security-stack" target="_blank" rel="noopener noreferrer"&gt;BoxLang AI 3.4.0 release announcement&lt;/a&gt; and preserve &lt;strong&gt;all its code examples&lt;/strong&gt;. For the complete change log, see the &lt;a href="https://ai.ortusbooks.com/readme/release-history/3.4.0" target="_blank" rel="noopener noreferrer"&gt;BoxLang AI 3.4.0 release history&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>BoxLang 1.17.0 Released: Module Inception, CLI Checker, Jar Loading and much more!</title><link>https://foojay.io/today/boxlang-1-17-0-released-module-inception-cli-checker-jar-loading-and-much-more/</link><pubDate>Thu, 17 Sep 2026 20:20:32 +0000</pubDate><guid>https://foojay.io/today/boxlang-1-17-0-released-module-inception-cli-checker-jar-loading-and-much-more/</guid><description>&lt;p&gt;&lt;strong&gt;BoxLang has always been an extensible language. As of 1.17.0, it is a hierarchically extensible one.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-1-17-0-released-module-inception-cli-checker-jar-loading-and-much-more/boxlang-v1.17.0-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Modules can now contain other modules; &lt;strong&gt;aka Module Inception&lt;/strong&gt; . Recursively. To any depth. Each nested module gets its own class loader, chained to its parent&amp;rsquo;s, and BoxLang&amp;rsquo;s own &lt;code&gt;ModuleService&lt;/code&gt; discovers, registers, activates, and unloads that entire tree itself. No package manager. No build tool. No install ordering. Drop in one artifact and everything it depends on comes with it, already wired up and already isolated. &lt;strong&gt;Not only that, you can now package modules into a single jar.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Community Spotlight: BoxLang Express Brings Node-Style HTTP to the JVM</title><link>https://foojay.io/today/community-spotlight-boxlang-express-brings-node-style-http-to-the-jvm/</link><pubDate>Tue, 08 Sep 2026 11:25:18 +0000</pubDate><guid>https://foojay.io/today/community-spotlight-boxlang-express-brings-node-style-http-to-the-jvm/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/community-spotlight-boxlang-express-brings-node-style-http-to-the-jvm/boxlang-express-700x373.jpg" alt="" width="700" height="373" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;ve spent years in Spring Boot, Micronaut, or Jakarta EE, &amp;ldquo;web framework&amp;rdquo; usually means a servlet container, an embedded Tomcat or Netty, a build step, and a fat jar before anything answers a request. What if you could skip all of that and still be on the JVM?&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;BoxLang Express&lt;/strong&gt; , a new community module built entirely by developer &lt;a href="https://kisdigital.com/posts/2026/08/introducing-boxexpress--express-js-ergonomics-for-boxlang" title="Robert Zehnder of KISDigital" target="_blank" rel="noopener noreferrer"&gt;Robert Zehnder of KISDigital&lt;/a&gt;, does exactly that. It&amp;rsquo;s built directly on &lt;code&gt;com.sun.net.httpserver.HttpServer&lt;/code&gt;, a class that&amp;rsquo;s been sitting in the JDK since Java 6, so there&amp;rsquo;s no embedded server to configure and nothing extra on the classpath for the HTTP layer itself. &lt;code&gt;boxlang server.bxs&lt;/code&gt; is the whole deployment story.&lt;/p&gt;</description></item><item><title>From OpenTelemetry to DuckDB</title><link>https://foojay.io/today/from-opentelemetry-to-duckdb/</link><pubDate>Tue, 08 Sep 2026 08:29:37 +0000</pubDate><guid>https://foojay.io/today/from-opentelemetry-to-duckdb/</guid><description>&lt;p&gt;Observability platforms generally expect you to do your analysis inside them, using their query language and their dashboards. That works for the questions you already know you have. It works less well for the ad-hoc ones: &lt;em&gt;&lt;strong&gt;a quick percentile&lt;/strong&gt;&lt;/em&gt; , &lt;em&gt;&lt;strong&gt;a pivot by status code&lt;/strong&gt;&lt;/em&gt; , or &amp;ldquo;&lt;em&gt;&lt;strong&gt;which service is actually eating the latency budget?&lt;/strong&gt;&lt;/em&gt;&amp;rdquo; once the data is in front of you.&lt;/p&gt;&#10;&lt;p&gt;This article describes a small pipeline for that kind of question. On one side is &lt;a href="https://duckdb.org" target="_blank" rel="noopener noreferrer"&gt;DuckDB&lt;/a&gt;, the in-process analytical database that reads CSV, JSON and Parquet directly. On the other is the &lt;a href="https://github.com/dash0hq/dash0-cli" target="_blank" rel="noopener noreferrer"&gt;Dash0 CLI&lt;/a&gt;, which pulls OpenTelemetry spans, logs, metrics and traces out of &lt;a href="https://www.dash0.com" target="_blank" rel="noopener noreferrer"&gt;Dash0&lt;/a&gt; and prints them as CSV or JSON.&lt;/p&gt;</description></item><item><title>From Spec-Driven Development to Living Specifications in Java Projects</title><link>https://foojay.io/today/from-spec-driven-development-to-living-specifications-in-java-projects/</link><pubDate>Fri, 04 Sep 2026 05:51:45 +0000</pubDate><guid>https://foojay.io/today/from-spec-driven-development-to-living-specifications-in-java-projects/</guid><description>&lt;h2 id="from-spec-driven-development-to-living-specifications-in-java-projects"&gt;From Spec-Driven Development to Living Specifications in Java Projects&lt;/h2&gt;&#10;&lt;p&gt;Coding agents have changed the speed at which we can produce software. But producing code faster does not automatically mean producing better software.&lt;/p&gt;&#10;&lt;p&gt;As I started using agents more frequently in real-world software development, one question became increasingly important: &lt;strong&gt;how do we give an agent enough freedom to be useful without losing engineering intent?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Trying to control every line of code generated by an agent removes much of the value it can provide. At that point, it might simply be faster to write the code ourselves.&lt;/p&gt;</description></item><item><title>No Database Operations Found: What Writing a Spring Boot Analyzer Taught Me About Spring</title><link>https://foojay.io/today/no-database-operations-found-what-writing-a-spring-boot-analyzer-taught-me-about-spring/</link><pubDate>Thu, 03 Sep 2026 06:26:00 +0000</pubDate><guid>https://foojay.io/today/no-database-operations-found-what-writing-a-spring-boot-analyzer-taught-me-about-spring/</guid><description>&lt;p&gt;I spent months building a static analyzer that answers one question about a Spring Boot codebase: if I change this endpoint, what does the change reach?&lt;/p&gt;&#10;&lt;p&gt;Every serious bug I found in it had the same shape.&lt;/p&gt;&#10;&lt;p&gt;Not a wrong edge in a graph. Not a missing feature. A &lt;strong&gt;confident absence&lt;/strong&gt; — the tool stating, definitively, that an endpoint touched no database, opened no transaction, published no message, when it did all three.&lt;/p&gt;</description></item><item><title>Announcing BX-WORD: Native Microsoft Word Automation for BoxLang</title><link>https://foojay.io/today/announcing-bx-word-native-microsoft-word-automation-for-boxlang/</link><pubDate>Tue, 01 Sep 2026 11:31:16 +0000</pubDate><guid>https://foojay.io/today/announcing-bx-word-native-microsoft-word-automation-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/announcing-bx-word-native-microsoft-word-automation-for-boxlang/bx-word-1-700x373.jpg" alt="" width="700" height="373" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Every enterprise runs on Word documents. Contracts. RFPs. Proposals. Board reports. Offer letters. HR handbooks. Compliance policies. Invoices. Statements of work. Legal memos. Today, we are incredibly proud to announce &lt;strong&gt;bx-word 1.0.0&lt;/strong&gt;, a first-class, fluent, production-ready module for creating, populating, and transforming Microsoft Word documents natively in BoxLang. This is not a wrapper. This is not a converter. This is a real document builder designed for the way enterprise teams actually work.&lt;/p&gt;</description></item><item><title>NetBeans DataWrangler: Query, Convert, and Edit Data Analytics Files</title><link>https://foojay.io/today/netbeans-datawrangler-query-convert-and-edit-data-analytics-files/</link><pubDate>Sun, 30 Aug 2026 10:25:43 +0000</pubDate><guid>https://foojay.io/today/netbeans-datawrangler-query-convert-and-edit-data-analytics-files/</guid><description>&lt;p&gt;&lt;a href="https://github.com/geertjanw/Apache-NetBeans-Data-Wrangler" target="_blank" rel="noopener noreferrer"&gt;Apache NetBeans DataWrangler&lt;/a&gt; brings the file formats of data analytics into Apache NetBeans 31: CSV, &lt;a href="https://parquet.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Parquet&lt;/a&gt;, JSON and Excel, the formats exchanged with pandas, Spark, R, dbt, Power BI and Excel itself.&lt;/p&gt;&#10;&lt;p&gt;You can query, convert, inspect, edit and analyze them without leaving the IDE. They open as documents with their own views and you can query them with SQL, join, aggregate and pivot them, convert them between formats, load them into tables and export the results. The SQL editor is enhanced with code completion, documentation, error checking and quick fixes for analytical SQL.&lt;/p&gt;</description></item><item><title>Running DuckDB's JDBC Driver in a GraalVM Native Image</title><link>https://foojay.io/today/running-duckdbs-jdbc-driver-in-a-graalvm-native-image/</link><pubDate>Sat, 29 Aug 2026 16:22:10 +0000</pubDate><guid>https://foojay.io/today/running-duckdbs-jdbc-driver-in-a-graalvm-native-image/</guid><description>&lt;p&gt;&lt;a href="https://duckdb.org/" target="_blank" rel="noopener noreferrer"&gt;DuckDB&lt;/a&gt; is an in-process analytical database. You add one JAR to a Java project and get a SQL engine that reads CSV, Parquet, and JSON files directly, with no server to run.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://www.graalvm.org/jdk25/reference-manual/native-image/" target="_blank" rel="noopener noreferrer"&gt;GraalVM Native Image&lt;/a&gt; compiles a Java program ahead of time into a standalone executable that starts in milliseconds and needs no JVM on the target machine.&lt;/p&gt;&#10;&lt;p&gt;Combining the two produces a data tool that is distributed as a single binary, like a Go or Rust program, while using Java libraries.&lt;/p&gt;</description></item><item><title>BoxLang 1.16.0 Released!</title><link>https://foojay.io/today/boxlang-1-16-0-released/</link><pubDate>Tue, 25 Aug 2026 13:57:47 +0000</pubDate><guid>https://foojay.io/today/boxlang-1-16-0-released/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-1-16-0-released/boxlang-v1.16.0-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;BoxLang 1.16.0 is here, closing &lt;strong&gt;50 issues&lt;/strong&gt; across new features, improvements, and bug fixes. The theme running through this release is control: control over how HTTP clients are created and reused, control over what happens when a request fails, control over how much data a response is allowed to buffer, control over when Java classpaths reload, and tighter alignment with CFML behavior in the edge cases when doing migrations.&lt;/p&gt;</description></item><item><title>Offline Crypto Address Validation in Java</title><link>https://foojay.io/today/offline-crypto-address-validation-in-java/</link><pubDate>Sat, 22 Aug 2026 08:43:04 +0000</pubDate><guid>https://foojay.io/today/offline-crypto-address-validation-in-java/</guid><description>&lt;p&gt;Backend validation often starts with simple questions.&lt;/p&gt;&#10;&lt;p&gt;Is the input empty? Does it have the expected shape? Can it be parsed? Does it belong to the selected domain?&lt;/p&gt;&#10;&lt;p&gt;Crypto wallet addresses are no different, except the formats vary across chains and simple regular expressions are rarely enough.&lt;/p&gt;&#10;&lt;p&gt;If a Java backend accepts crypto withdrawal addresses, address-book entries, CSV imports, support-tool input, or transaction preflight requests, it should reject clearly invalid addresses before calling RPC nodes, explorers, exchange APIs, or internal money-movement systems.&lt;/p&gt;</description></item><item><title>Introducing BoxLang AI Explorer: A Local Catalog for Every AI Pattern</title><link>https://foojay.io/today/introducing-boxlang-ai-explorer-a-local-catalog-for-every-ai-pattern/</link><pubDate>Tue, 18 Aug 2026 14:15:48 +0000</pubDate><guid>https://foojay.io/today/introducing-boxlang-ai-explorer-a-local-catalog-for-every-ai-pattern/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/introducing-boxlang-ai-explorer-a-local-catalog-for-every-ai-pattern/boxlang-explorer-700x394.png" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Learning a new AI API usually means jumping between scattered documentation pages, guessing at imports, and copy-pasting code that may or may not still work. We wanted something better for BoxLang AI, so we built the &lt;strong&gt;BoxLang AI Explorer&lt;/strong&gt; : a local, browser-based catalog of runnable BoxLang AI examples, organized by category and difficulty, each with guidance, source code, and sample output. You can also try it online at &lt;a href="https://ai.boxlang.io/explorer/" target="_blank" rel="noopener noreferrer"&gt;https://ai.boxlang.io/explorer/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Build Secure AI Chat Applications with BoxLang, RAG, Ollama, and Amazon Bedrock with Dan Card</title><link>https://foojay.io/today/build-secure-ai-chat-applications-with-boxlang-rag-ollama-and-amazon-bedrock-with-dan-card/</link><pubDate>Thu, 13 Aug 2026 14:52:13 +0000</pubDate><guid>https://foojay.io/today/build-secure-ai-chat-applications-with-boxlang-rag-ollama-and-amazon-bedrock-with-dan-card/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/build-secure-ai-chat-applications-with-boxlang-rag-ollama-and-amazon-bedrock-with-dan-card/dancardWorkshop-700x394.jpg" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;h2 id="build-secure-ai-chat-applications-with-boxlang-rag-ollama-and-amazon-bedrock"&gt;Build Secure AI Chat Applications with BoxLang, RAG, Ollama, and Amazon Bedrock&lt;/h2&gt;&#10;&lt;p&gt;AI demos are everywhere. Building an AI-powered feature that can securely work with your documents, databases, and real application data is a very different challenge.&lt;/p&gt;&#10;&lt;p&gt;How do you give an AI model access to the right information without exposing sensitive data? Should you use a locally hosted model or a cloud service? How do you move beyond a basic chatbot and build something genuinely useful for your users or organization?&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>Toward a Durable Spring PetClinic</title><link>https://foojay.io/today/toward-a-durable-spring-petclinic/</link><pubDate>Sun, 19 Jul 2026 18:06:06 +0000</pubDate><guid>https://foojay.io/today/toward-a-durable-spring-petclinic/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Durable Execution&lt;/strong&gt; is a way of running code so that its progress survives failure. A normal program keeps its state in memory: if the process crashes, the machine reboots, or a network call times out halfway through a multi-step operation, that state is gone and the work is left half-done.&lt;/p&gt;&#10;&lt;p&gt;Temporal, the Durable Execution platform, persists every step of a process to its &lt;strong&gt;Event History&lt;/strong&gt; — a durable, append-only log of Events — so that after any failure the work resumes exactly where it left off, as if the crash never happened.&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>"This Can't Possibly Work": What I Learned at a Temporal.io Workshop</title><link>https://foojay.io/today/this-cant-possibly-work-what-i-learned-at-a-temporal-io-workshop-on-durable-execution/</link><pubDate>Fri, 10 Jul 2026 08:41:22 +0000</pubDate><guid>https://foojay.io/today/this-cant-possibly-work-what-i-learned-at-a-temporal-io-workshop-on-durable-execution/</guid><description>&lt;p&gt;&lt;strong&gt;When developers first hear about &lt;a href="https://temporal.io/" target="_blank" rel="noopener noreferrer"&gt;Temporal&lt;/a&gt;, they tend to move through a predictable sequence of emotions. First comes disbelief — the claim that your application can crash mid-execution and simply pick up where it left off, variables intact, sounds like nonsense. Then comes irritation that anyone would even say such a thing is possible. Then they try it, discover it actually works, and get very excited. And finally they ask the only question that matters: &lt;em&gt;how?&lt;/em&gt;&lt;/strong&gt;&#10;&lt;img src="https://foojay.io/today/this-cant-possibly-work-what-i-learned-at-a-temporal-io-workshop-on-durable-execution/IMG_2977-1024x768.jpeg" alt="" width="1024" height="768" loading="lazy" decoding="async"&gt;&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0: Sets, Ranges, Inner Classes, and a Runtime That Talks Back</title><link>https://foojay.io/today/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/</link><pubDate>Thu, 09 Jul 2026 18:02:59 +0000</pubDate><guid>https://foojay.io/today/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/BoxLang-release-1.14.0-4-700x394.jpg" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;BoxLang has never stood still, but 1.14.0 is something different. This is the release where the language stops filling gaps and starts defining what a modern dynamic JVM language looks like on its own terms. Sixty-five issues closed. Four innovative language features. A formatter that has grown up. And a companion module - &lt;code&gt;bx-mcp&lt;/code&gt; - that fundamentally changes how you operate a running BoxLang application with AI.&lt;/p&gt;&#10;&lt;p&gt;This could have easily been a major release for the team. This has been a really amazing effort by everybody at Ortus and all of the amazing feedback from our clients migrating to BoxLang and coming up with such amazing and innovative ideas for this platform. We have only just begun!&lt;/p&gt;</description></item></channel></rss>