<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tutorials on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/category/tutorials/</link><description>Recent content in Tutorials on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 21 Sep 2026 05:57:20 +0000</lastBuildDate><atom:link href="https://foojay.io/today/category/tutorials/index.xml" rel="self" type="application/rss+xml"/><item><title>World geography gotchas</title><link>https://foojay.io/today/world-geography-gotchas/</link><pubDate>Sun, 20 Sep 2026 05:51:17 +0000</pubDate><guid>https://foojay.io/today/world-geography-gotchas/</guid><description>&lt;p&gt;Years ago, a colleague of mine told me about two pockets of foreign land surrounded by Switzerland: &lt;a href="https://osm.org/go/0Ck2o6xg-" target="_blank" rel="noopener noreferrer"&gt;Campione d&amp;rsquo;Italia&lt;/a&gt; and &lt;a href="https://osm.org/go/0C1ZlDk" target="_blank" rel="noopener noreferrer"&gt;Büsingen am Hochrhein&lt;/a&gt;, respectively Italy and Germany. Both are &lt;em&gt;enclaves&lt;/em&gt; of their respective country in Swiss territory:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;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. A true enclave cannot be reached without passing through the territory of a single other state that surrounds it.&lt;/p&gt;</description></item><item><title>Jakarta Faces, Java Web Framework, Stateless Edition: Marketplace AliFaces</title><link>https://foojay.io/today/jakarta-faces-java-web-framework-stateless-edition-marketplace-alifaces/</link><pubDate>Sat, 29 Aug 2026 19:22:52 +0000</pubDate><guid>https://foojay.io/today/jakarta-faces-java-web-framework-stateless-edition-marketplace-alifaces/</guid><description>&lt;h3 id="a-fully-stateless-jakarta-faces-marketplace-with-server-side-rendering--no-httpsession-no-saved-viewstate-no-sticky-sessions"&gt;A Fully Stateless Jakarta Faces Marketplace with Server-Side Rendering — No HttpSession, No Saved ViewState, No Sticky Sessions&lt;/h3&gt;&#10;&lt;p&gt;(see the poc on: &lt;a href="http://129.152.31.253:8080/alifaces" title="AliFaces POC Run On Oracle OCI" target="_blank" rel="noopener noreferrer"&gt;AliFaces POC Run On Oracle OCI(Nanos Unikernel)&lt;/a&gt;)&lt;/p&gt;&#10;&lt;p&gt;Jakarta Faces still carries a few persistent assumptions: it is stateful, it requires &lt;code&gt;HttpSession&lt;/code&gt;, it needs sticky sessions to scale horizontally, and its server-side rendering model belongs to an older generation of web applications.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;AliFaces&lt;/strong&gt; challenges those assumptions with running code — not a Hello World, but a marketplace-style application with catalog, search, filters, cart, checkout, orders, browsing history, themes, responsive layouts and a JSON API for mobile clients.&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>Idempotent Write Paths: Keeping an Integration Pipeline Correct When Messages Repeat</title><link>https://foojay.io/today/idempotent-write-paths-keeping-an-integration-pipeline-correct-when-messages-repeat/</link><pubDate>Mon, 17 Aug 2026 06:46:00 +0000</pubDate><guid>https://foojay.io/today/idempotent-write-paths-keeping-an-integration-pipeline-correct-when-messages-repeat/</guid><description>&lt;h2 id="a-reconciliation-that-didnt-add-up"&gt;A reconciliation that didn&amp;rsquo;t add up&lt;/h2&gt;&#10;&lt;p&gt;Let me start with a real one. After a big sales promo, during reconciliation, finance said a batch of orders had the wrong status: on our side it showed &amp;ldquo;paid&amp;rdquo;, but the finance system hadn&amp;rsquo;t booked it.&lt;/p&gt;&#10;&lt;p&gt;Tracing it back, we found the payment gateway had retried during its peak, and the same payment notification got pushed twice. The first one was processed normally; the second time it came, the consumer happened to be in the middle of a rolling restart, so the message got re-queued and consumed again.&lt;/p&gt;</description></item><item><title>Idempotent Spring Boot: Safe REST with One Annotation</title><link>https://foojay.io/today/idempotent-spring-boot-starter/</link><pubDate>Tue, 04 Aug 2026 22:11:22 +0000</pubDate><guid>https://foojay.io/today/idempotent-spring-boot-starter/</guid><description>&lt;h2 id="idempotent-rest-endpoints-without-the-boilerplate"&gt;Idempotent REST Endpoints Without the Boilerplate&lt;/h2&gt;&#10;&lt;h2 id="stop-charging-your-users-twice-idempotent-rest-endpoints-with-one-annotation"&gt;Stop Charging Your Users Twice: Idempotent REST Endpoints with One Annotation&lt;/h2&gt;&#10;&lt;h2 id="the-problem-nobody-talks-about-until-production"&gt;The problem nobody talks about until production&lt;/h2&gt;&#10;&lt;p&gt;A user taps &amp;ldquo;Pay.&amp;rdquo; The request times out. Their app retries. Your server charges them twice.&lt;/p&gt;&#10;&lt;p&gt;You didn&amp;rsquo;t write a bug. The network did. But your users don&amp;rsquo;t care about that distinction.&lt;/p&gt;&#10;&lt;p&gt;The idempotency problem shows up in more places than payments. A load balancer replays a timed-out request. A mobile client double-taps a submit button. A Kubernetes pod retries after a restart. From the server&amp;rsquo;s perspective, all of these look identical: a second POST that arrives after the first one already executed.&lt;/p&gt;</description></item><item><title>Getting Started with Exposed: Kotlin ORM Made Simple</title><link>https://foojay.io/today/exposed-kotlin-orm-complete-guide/</link><pubDate>Mon, 06 Jul 2026 03:39:00 +0000</pubDate><guid>https://foojay.io/today/exposed-kotlin-orm-complete-guide/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;For quite some time, I have been a huge fan of and fascinated by JetBrains products, tools, and libraries because of their masterful craftsmanship in product creation and their pristine focus on building high-quality developer tools.&lt;/p&gt;&#10;&lt;p&gt;Even more excitingly, JetBrains Java Annotated Monthly newsletters have featured most of the technical articles I wrote for Foojay on topics such as Java, Spring, Spring Boot 4, and OpenRewrite.&lt;/p&gt;&#10;&lt;p&gt;Recently, one Kotlin Domain-Specific Language (DSL) library caught my attention. I immediately tried converting my existing Spring Boot 4 application from Java to Kotlin using Exposed, an ORM framework for Kotlin.&#10;&lt;img src="https://foojay.io/today/exposed-kotlin-orm-complete-guide/Exposed-1024x683.jpg" alt="Exposed" width="1024" height="683" loading="lazy" decoding="async"&gt; Kotlin SQL Libary&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>Your TLS Stack Is Lying to You About Zero-Copy</title><link>https://foojay.io/today/your-tls-stack-is-lying-about-zero-copy/</link><pubDate>Wed, 10 Jun 2026 12:00:28 +0000</pubDate><guid>https://foojay.io/today/your-tls-stack-is-lying-about-zero-copy/</guid><description>&lt;h2 id="the-no-waste-compute-constraint"&gt;The &amp;ldquo;No Waste Compute&amp;rdquo; Constraint&lt;/h2&gt;&#10;&lt;p&gt;When I started designing the Exeris Kernel, I set one non-negotiable rule very early: no waste compute. That rule sounds like a performance slogan until it starts killing otherwise normal design decisions.&lt;/p&gt;&#10;&lt;p&gt;I had already banned &lt;code&gt;ThreadLocal&lt;/code&gt;, moved context propagation to Scoped Values, and pushed more of the runtime into explicit off-heap ownership. The idea was simple: if the hot path is supposed to stay outside GC pressure, then memory shape and lifetime cannot be treated as incidental details.&lt;/p&gt;</description></item><item><title>How to Develop AI Agents Using BoxLang AI: A Practical Guide</title><link>https://foojay.io/today/how-to-develop-ai-agents-using-boxlang-ai-a-practical-guide/</link><pubDate>Tue, 12 May 2026 12:52:39 +0000</pubDate><guid>https://foojay.io/today/how-to-develop-ai-agents-using-boxlang-ai-a-practical-guide/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/how-to-develop-ai-agents-using-boxlang-ai-a-practical-guide/boxlang-ai-v3-1-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;AI agents are transforming how we build software. Unlike traditional chatbots that just answer questions, agents can reason about what tools they need, decide when to use them, chain multiple actions together, and remember what happened earlier in a conversation.&lt;/p&gt;&#10;&lt;p&gt;In this tutorial, I&amp;rsquo;ll show you how to build a real-world AI agent using &lt;a href="https://ai.boxlang.io/" title="BoxLang AI" target="_blank" rel="noopener noreferrer"&gt;BoxLang AI&lt;/a&gt; — the official AI framework for the BoxLang JVM language. We&amp;rsquo;ll build &lt;strong&gt;SupportBot&lt;/strong&gt;, an e-commerce customer support agent that can look up orders, check inventory, issue refunds, and answer questions grounded in your knowledge base.&lt;/p&gt;</description></item><item><title>Explore Spring AI SDK – Amazon Bedrock AgentCore – Part 3</title><link>https://foojay.io/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-3/</link><pubDate>Sun, 10 May 2026 09:09:00 +0000</pubDate><guid>https://foojay.io/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-3/</guid><description>&lt;p&gt;In &lt;a href="https://foojay.io/today/spring-ai-amazon-bedrock-sdk-guide/"&gt;Part 1&lt;/a&gt; and &lt;a href="https://foojay.io/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-2/"&gt;Part 2&lt;/a&gt;, we explored the Spring AI SDK and Amazon Bedrock AgentCore features, including the agentcore runtime starter and integration of agentcore memory. In this article, we will explore the integration of AgentCore built-in tools, including the Browser and Code Interpreter features.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Repository containing the companion code for the tutorial. &lt;a href="https://github.com/bsmahi/simple-spring-boot-agent" target="_blank" rel="noopener noreferrer"&gt;Go to GitHub&lt;/a&gt;.&lt;/strong&gt;&#10;&lt;img src="https://foojay.io/today/explore-spring-ai-sdk-amazon-bedrock-agentcore-part-3/AgentcoreBrowser.jpg" alt="AgentCore Built-In Tool Browser" width="1024" height="576" loading="lazy" decoding="async"&gt; Built-In Tool Browser&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;em&gt;The use case I am trying to build here is for the given URL; it navigates the entire website and retrieves the content and gives key points and the summary of the page using &lt;strong&gt;the AgentCore Browser&lt;/strong&gt; tool.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 7 of 7: MCP — The Protocol That Connects Everything</title><link>https://foojay.io/today/boxlang-ai-deep-dive-part-7-of-7-mcp-the-protocol-that-connects-everything/</link><pubDate>Thu, 07 May 2026 21:51:08 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-deep-dive-part-7-of-7-mcp-the-protocol-that-connects-everything/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-ai-deep-dive-part-7-of-7-mcp-the-protocol-that-connects-everything/bxai-series-cover-07-700x368.png" alt="" width="700" height="368" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 7 of 7&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;The AI ecosystem has a tool problem. Every framework has its own way of defining tools, every agent has its own way of calling them, and every integration requires custom code on both sides. An agent built in Python can&amp;rsquo;t easily use tools built in Java. An MCP server written for Claude Desktop can&amp;rsquo;t easily be consumed by a BoxLang agent without a custom adapter.&lt;/p&gt;</description></item><item><title>UCanAccess: The Modern Pure-Java Bridge to Microsoft Access</title><link>https://foojay.io/today/ucanaccess-java-ms-access-jdbc-guide/</link><pubDate>Wed, 06 May 2026 08:44:00 +0000</pubDate><guid>https://foojay.io/today/ucanaccess-java-ms-access-jdbc-guide/</guid><description>&lt;p&gt;Microsoft Access databases are everywhere. Decades of &lt;code&gt;.mdb&lt;/code&gt; and &lt;code&gt;.accdb&lt;/code&gt; files silently power spreadsheets, small business applications, and legacy data stores across organizations of all sizes. Yet for Java developers, connecting to these files has historically meant wrestling with native Windows libraries, ODBC bridges, and platform-specific hacks.&lt;/p&gt;&#10;&lt;figure class="aligncenter size-full is-resized"&gt;&#10; &lt;img src="https://foojay.io/today/ucanaccess-java-ms-access-jdbc-guide/ucanaccess-logo.svg" alt="UCanAccess Logo" style="width:320px" loading="lazy" class="is-zoomable"&gt;&lt;/figure&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;UCanAccess&lt;/strong&gt; puts an end to that. It is an open-source, pure-Java JDBC driver that lets you read and write Microsoft Access databases (&lt;code&gt;.mdb&lt;/code&gt; and &lt;code&gt;.accdb&lt;/code&gt;) just like any other SQL database — no native drivers, no Windows dependency, no friction.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 6 of 7: Memory Systems &amp; RAG — Building AI That Remembers</title><link>https://foojay.io/today/boxlang-ai-deep-dive-part-6-of-7-memory-systems-rag-building-ai-that-remembers/</link><pubDate>Tue, 05 May 2026 15:10:15 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-deep-dive-part-6-of-7-memory-systems-rag-building-ai-that-remembers/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-ai-deep-dive-part-6-of-7-memory-systems-rag-building-ai-that-remembers/bxai-series-cover-06-700x368.png" alt="" width="700" height="368" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 6 of 7&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;A chatbot with no memory isn&amp;rsquo;t a conversation — it&amp;rsquo;s a series of isolated queries. Every message starts from scratch. The user has to re-explain who they are, what they&amp;rsquo;re working on, and what was just said. It&amp;rsquo;s exhausting, and it signals that the AI isn&amp;rsquo;t really listening.&lt;/p&gt;&#10;&lt;p&gt;Memory is what separates a useful AI application from a toy. BoxLang AI ships with one of the most comprehensive memory systems in any AI framework — 20+ memory types across two major categories, vector embedding support for semantic retrieval, 30+ document loaders for RAG pipelines, and a per-call identity routing system that makes multi-tenant applications safe by default.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 5 of 7: One API, 17 Providers — The Provider Architecture Deep Dive</title><link>https://foojay.io/today/boxlang-ai-deep-dive-part-5-of-7-one-api-17-providers-the-provider-architecture-deep-dive/</link><pubDate>Wed, 29 Apr 2026 16:38:08 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-deep-dive-part-5-of-7-one-api-17-providers-the-provider-architecture-deep-dive/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-ai-deep-dive-part-5-of-7-one-api-17-providers-the-provider-architecture-deep-dive/bxai-series-cover-05-700x368.png" alt="" width="700" height="368" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 5 of 7&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Vendor lock-in is the silent killer of AI projects. You pick OpenAI, build everything against the OpenAI API, and then GPT-5 launches at three times the price. Or a competitor launches a model that&amp;rsquo;s faster for your use case. Or you need to self-host for compliance. Or your client is on AWS and wants Bedrock.&lt;/p&gt;&#10;&lt;p&gt;Every time the answer to &amp;ldquo;can we switch providers?&amp;rdquo; is &amp;ldquo;it would take months,&amp;rdquo; something went wrong architecturally.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 2 of 7: Building a Production-Grade AI Tool Ecosystem</title><link>https://foojay.io/today/boxlang-ai-deep-dive-part-2-of-7-building-a-production-grade-ai-tool-ecosystem/</link><pubDate>Thu, 16 Apr 2026 09:27:15 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-deep-dive-part-2-of-7-building-a-production-grade-ai-tool-ecosystem/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-ai-deep-dive-part-2-of-7-building-a-production-grade-ai-tool-ecosystem/bxai-series-cover-02-700x368.png" alt="" width="700" height="368" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 2 of 7&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Function calling is where most AI frameworks look deceptively simple on the surface and turn into a mess underneath. You define a tool, pass it to the LLM, and when the LLM calls it — who handles the lifecycle? Who fires observability events? Who serializes the result? Who resolves the tool by name when the only thing you have is a string?&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 1 of 7: The Skills Revolution</title><link>https://foojay.io/today/boxlang-ai-deep-dive-part-1-of-7-the-skills-revolution/</link><pubDate>Tue, 14 Apr 2026 11:50:53 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-deep-dive-part-1-of-7-the-skills-revolution/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-ai-deep-dive-part-1-of-7-the-skills-revolution/bxai-series-cover-01-700x368.png" alt="" width="700" height="368" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;This article is part of our 7-part deep dive on building production-ready AI systems with BoxLang.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;BoxLang AI 3.0 Series · Part 1 of 7&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Every AI framework eventually hits the same wall: your system prompts start drifting. Agent A has a slightly different version of the SQL rules than Agent B. The tone policy on your support bot is three weeks behind the tone policy on your documentation bot. Someone copy-pasted the wrong version. Nobody noticed.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #15</title><link>https://foojay.io/today/jc-ai-newsletter-15/</link><pubDate>Fri, 20 Mar 2026 07:56:01 +0000</pubDate><guid>https://foojay.io/today/jc-ai-newsletter-15/</guid><description>&lt;p&gt;Over the past two weeks, the field of artificial intelligence has continued its remarkable pace of advancement. As AI becomes increasingly woven into the fabric of daily life, shaping how we work, communicate, and make decisions, it is both timely and valuable to step back and understand the broader trajectory of this technology. Whether the developments around us feel promising or challenging, one truth remains clear: AI is not simply leaving. It is here to stay, and understanding its evolution is essential from many perspectives.&lt;/p&gt;</description></item><item><title>Language Learning Flashcard System - Part 1</title><link>https://foojay.io/today/language-learning-flashcard-system-part-1/</link><pubDate>Tue, 17 Mar 2026 16:39:58 +0000</pubDate><guid>https://foojay.io/today/language-learning-flashcard-system-part-1/</guid><description>&lt;p&gt;My native language is Spanish. I&amp;rsquo;ve been learning (and butchering) English my whole life. But at some point, I felt confident with English and wanted to learn Japanese. Big mistake. This is a totally different beast: three writing systems (Hiragana ひらがな, Katakana カタカナ and Kanji 漢字), a completely different grammar, no relation whatsoever with European languages… I needed help. And tools to learn. And one of them is Space Repetition System based apps.&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>Personal Branding Tips for Java Developers</title><link>https://foojay.io/today/watch-the-recording-diy-technical-marketing-for-java-developers/</link><pubDate>Thu, 26 Feb 2026 10:28:58 +0000</pubDate><guid>https://foojay.io/today/watch-the-recording-diy-technical-marketing-for-java-developers/</guid><description>&lt;p&gt;The software development industry is more competitive than ever. Being a strong technical expert is essential, but on its own it is often not enough to grow your career or open new opportunities.&lt;/p&gt;&#10;&lt;p&gt;In this short, practical talk&lt;em&gt;DIY Technical Marketing, Real World Tips For Building A Successful Developer Brand&lt;/em&gt; , delivered at &lt;a href="https://www.jfokus.se/" title="Jfokus 2026 conference" target="_blank" rel="noopener noreferrer"&gt;Jfokus 2026 conference&lt;/a&gt;, Payara Community Manager Dominika Tasarz-Sochacka explores why personal branding matters for developers and how even small, intentional actions can make a real difference over time.&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>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>JC-AI Newsletter #13</title><link>https://foojay.io/today/jc-ai-newsletter-13/</link><pubDate>Thu, 05 Feb 2026 21:12:12 +0000</pubDate><guid>https://foojay.io/today/jc-ai-newsletter-13/</guid><description>&lt;p&gt;Two weeks have passed, and it is time to present a new collection of readings that may shape developments, utilization or ideas in the field of artificial intelligence in 2026.&lt;/p&gt;&#10;&lt;p&gt;While significant activity characterizes the AI field, many unresolved research, design, and implementation challenges continue to impact progress. Future advancement depends heavily on understanding the nature of these challenges to approach probabilistic problems from the appropriate directions. This JC-AI newsletter features insightful interviews with key figures in the field, enabling readers to ask the right questions and compare visions of an &amp;lsquo;uncertain future&amp;rsquo; against current capabilities to maintain a grounded perspective.&lt;/p&gt;</description></item><item><title>Bootstrapping a Java File System</title><link>https://foojay.io/today/bootstrapping-a-java-file-system/</link><pubDate>Thu, 29 Jan 2026 01:44:32 +0000</pubDate><guid>https://foojay.io/today/bootstrapping-a-java-file-system/</guid><description>&lt;p&gt;So what does &lt;em&gt;file system&lt;/em&gt; mean to you? Most think of file systems as directories and files accessed via your computer: local disk, remotely shared via &lt;a href="https://en.wikipedia.org/wiki/Network_File_System" target="_blank" rel="noopener noreferrer"&gt;NFS&lt;/a&gt; or &lt;a href="https://en.wikipedia.org/wiki/Server_Message_Block" target="_blank" rel="noopener noreferrer"&gt;SMB&lt;/a&gt;, thumb drives, something else. Sufficient for those who require basic file access, nothing more nothing less.&lt;/p&gt;&#10;&lt;p&gt;That perspective of file systems is too limited: &lt;a href="https://www.atlassian.com/git/tutorials/what-is-version-control" target="_blank" rel="noopener noreferrer"&gt;VCS&lt;/a&gt; repositories, &lt;a href="https://en.wikipedia.org/wiki/Archive_file" target="_blank" rel="noopener noreferrer"&gt;archive files&lt;/a&gt; (zip/jar), remote systems can be viewed as file systems, potentially accessed via the same APIs used to for local file access while still maintaining security and data requirements. Or how about a file system which automatically &lt;a href="https://www.dacast.com/blog/what-is-transcoding/" target="_blank" rel="noopener noreferrer"&gt;transcodes&lt;/a&gt; videos to different formats or extracts audio metadata for vector searches? Wouldn&amp;rsquo;t it be cool to use standard APIs rather than create something customized? Definitely!&lt;/p&gt;</description></item><item><title>Announcing bx-ldap: Enterprise LDAP for BoxLang</title><link>https://foojay.io/today/announcing-bx-ldap-enterprise-ldap-for-boxlang/</link><pubDate>Tue, 16 Dec 2025 17:01:13 +0000</pubDate><guid>https://foojay.io/today/announcing-bx-ldap-enterprise-ldap-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/announcing-bx-ldap-enterprise-ldap-for-boxlang/bx-ldap-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;We&amp;rsquo;re excited to announce the release of &lt;strong&gt;bx-ldap&lt;/strong&gt;, a comprehensive LDAP module that brings enterprise-grade directory access to BoxLang! This module goes above and beyond traditional CFML LDAP implementations, offering modern features like connection pooling, event-driven programming, multiple return formats, and a clean, intuitive API.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; bx-ldap is a premium module available exclusively to BoxLang +/++ &lt;strong&gt;subscribers&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="-why"&gt;🎯 Why?&lt;/h2&gt;&#10;&lt;p&gt;Whether you&amp;rsquo;re integrating with Active Directory, OpenLDAP, or any LDAP-compliant directory service, &lt;strong&gt;bx-ldap&lt;/strong&gt; makes it simple and powerful. From basic queries to complex directory operations, this module handles it all with grace and performance.&lt;/p&gt;</description></item><item><title>Java developer's guide: Sync Rules &amp; Stop CI Failures</title><link>https://foojay.io/today/developers-guide-to-sonarqube-part-2/</link><pubDate>Tue, 16 Dec 2025 15:53:28 +0000</pubDate><guid>https://foojay.io/today/developers-guide-to-sonarqube-part-2/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;&#10;&lt;p&gt;Welcome back. In &lt;a href="https://foojay.io/today/developers-guide-to-sonarqube-part-1/"&gt;&lt;strong&gt;Part 1&lt;/strong&gt;&lt;/a&gt;, we installed &lt;strong&gt;SonarQube for IDE&lt;/strong&gt; in IntelliJ. You are now catching those nasty NullPointerExceptions and Optional.get() risks &lt;em&gt;before&lt;/em&gt; they leave your keyboard.&lt;/p&gt;&#10;&lt;p&gt;But&amp;hellip; you are not working alone. You are part of a team pushing code to a repo full of XML configs, DTOs, and Services.&lt;/p&gt;&#10;&lt;p&gt;Here is the nightmare scenario: You spend all day refactoring your &lt;strong&gt;Spring Boot&lt;/strong&gt; service. It looks perfect. You run your tests. They pass. You push it to Git. You grab a coffee. ☕ And then&amp;hellip; &lt;strong&gt;FAIL.&lt;/strong&gt; 🔴&lt;/p&gt;</description></item><item><title>Spring Boot 4 - OpenTelemetry Guide</title><link>https://foojay.io/today/spring-boot-4-opentelemetry-explained/</link><pubDate>Wed, 10 Dec 2025 09:09:58 +0000</pubDate><guid>https://foojay.io/today/spring-boot-4-opentelemetry-explained/</guid><description>&lt;p&gt;In my previous &lt;a href="https://foojay.io/today/preparing-for-spring-framework-7-and-spring-boot-4/"&gt;article&lt;/a&gt;, I outlined a comprehensive list of features introduced in Spring Framework 7 and Spring Boot 4.&lt;/p&gt;&#10;&lt;p&gt;In this series of articles, we will explore these features in detail using a pragmatic approach. In this second article, I will dive deep into integration of Observability framework i.e., &lt;em&gt;&lt;strong&gt;OpenTelemetry with SpringBoot&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;As an architect and developer, when I engage in system design—whether it involves monolithic architecture, microservices, or contemporary cloud-native applications—I have made the integration of &lt;strong&gt;observability&lt;/strong&gt; patterns utilizing &lt;strong&gt;open-telemetry&lt;/strong&gt; tools a standard practice. Through observability, we can monitor application behavior via &lt;strong&gt;metrics, logs, and traces&lt;/strong&gt; that we trigger&lt;/p&gt;</description></item><item><title>BoxLang RSS: Full-Featured RSS/Atom Feed Module for BoxLang</title><link>https://foojay.io/today/boxlang-rss-full-featured-rss-atom-feed-module-for-boxlang/</link><pubDate>Tue, 02 Dec 2025 11:19:11 +0000</pubDate><guid>https://foojay.io/today/boxlang-rss-full-featured-rss-atom-feed-module-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-rss-full-featured-rss-atom-feed-module-for-boxlang/bx-rss-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;We&amp;rsquo;re thrilled to announce the release of &lt;code&gt;bx-rss&lt;/code&gt;, a comprehensive RSS and Atom feed module that brings powerful syndication capabilities to &lt;a href="https://www.boxlang.io/#" title="BoxLang" target="_blank" rel="noopener noreferrer"&gt;BoxLang&lt;/a&gt;! Whether you&amp;rsquo;re building a content aggregator, publishing a podcast, or exposing your application&amp;rsquo;s data as feeds, &lt;code&gt;bx-rss&lt;/code&gt; makes it incredibly simple.&lt;/p&gt;&#10;&lt;h2 id="thanks-to-ray-camden"&gt;Thanks To Ray Camden&lt;/h2&gt;&#10;&lt;p&gt;I just want to thank you to &lt;a href="https://www.raymondcamden.com/" title="Ray Camden" target="_blank" rel="noopener noreferrer"&gt;Ray Camden&lt;/a&gt; for his contributions to this module. Thanks Ray! You rock!&lt;/p&gt;&#10;&lt;h2 id="why-bx-rss"&gt;Why bx-rss?&lt;/h2&gt;&#10;&lt;p&gt;In today&amp;rsquo;s interconnected web, RSS and Atom feeds remain crucial for content distribution and syndication. From blog posts and news articles to podcasts and video channels, feeds power how content flows across the internet. The bx-rss module brings enterprise-grade feed capabilities to BoxLang with an elegant, easy-to-use API.&lt;/p&gt;</description></item><item><title>From Spring Boot To Jakarta EE 11</title><link>https://foojay.io/today/from-spring-boot-to-jakarta-ee-11-how-payara-starter-eases-the-transition/</link><pubDate>Fri, 28 Nov 2025 08:11:53 +0000</pubDate><guid>https://foojay.io/today/from-spring-boot-to-jakarta-ee-11-how-payara-starter-eases-the-transition/</guid><description>&lt;p&gt;If you&amp;rsquo;ve been living in the Spring ecosystem, you&amp;rsquo;re used to fast project setup. Spring Initializr gives you a sleek interface, some starter dependencies and a running project within minutes. Now you&amp;rsquo;re moving to Jakarta EE, where do you begin?&lt;/p&gt;&#10;&lt;p&gt;In this blog, you&amp;rsquo;ll see how Spring developers &lt;strong&gt;can create Jakarta EE applications with the same ease they&amp;rsquo;re used to from Spring Initializr.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Let&amp;rsquo;s be honest: Spring Boot abstracts away so much of the setup pain that you forget it&amp;rsquo;s even there. You don&amp;rsquo;t worry about the underlying servlet container, dependency versions or deployment descriptors, as Spring Boot handles it all.&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></channel></rss>