<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Library on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/library/</link><description>Recent content in Library on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 06 Jun 2026 11:23:18 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/library/index.xml" rel="self" type="application/rss+xml"/><item><title>Context Is Code: A Tour of APM and AgentRC</title><link>https://foojayio.github.io/website/today/context-is-code-a-tour-of-apm-and-agentrc/</link><pubDate>Fri, 05 Jun 2026 08:35:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/context-is-code-a-tour-of-apm-and-agentrc/</guid><description>&lt;p&gt;If you&amp;rsquo;ve shipped an AI agent into a real codebase in the last twelve months, you&amp;rsquo;ve felt this: every agent, every developer, every machine &amp;mdash; different setup. A README that says &amp;ldquo;install these extensions.&amp;rdquo; A &lt;code&gt;copilot-instructions.md&lt;/code&gt; somebody copy-pasted from another repo. MCP server configs in three different files. The same skills duplicated for Copilot, Claude, Cursor, and Codex.&lt;/p&gt;
&lt;p&gt;No version pinning.&lt;/p&gt;
&lt;p&gt;No integrity.&lt;/p&gt;
&lt;p&gt;No reproducibility.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the problem &lt;a href="https://github.com/microsoft/apm" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;APM&lt;/strong&gt;&lt;/a&gt;
, the Agent Package Manager fixes. And it pairs with &lt;a href="https://github.com/microsoft/agentrc" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AgentRC&lt;/strong&gt;&lt;/a&gt;
 to close the loop on &lt;em&gt;generating&lt;/em&gt; and &lt;em&gt;evaluating&lt;/em&gt; that context in the first place.&lt;/p&gt;</description></item><item><title>Tiberius: A Security Testing Framework for LLM Applications in Java</title><link>https://foojayio.github.io/website/today/tiberius-a-security-testing-framework-for-llm-applications-in-java/</link><pubDate>Thu, 04 Jun 2026 20:09:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/tiberius-a-security-testing-framework-for-llm-applications-in-java/</guid><description>&lt;p&gt;&lt;em&gt;How do you write a regression test for a system that is non-deterministic by design?&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;The Problem {#h2-0-1-the-problem}&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;Large Language Models have moved from research artifacts to production infrastructure. Java applications are embedding them into customer-facing services via Spring Boot, and e.g. LangChain4J &amp;mdash; for document summarization, customer support, healthcare assistance, and financial guidance, to name just a few. The deployment surface is growing faster than the security tooling.&lt;/p&gt;
&lt;p&gt;The vulnerability landscape is empirically well-established. Horlacher, Vifian, and Zagidullina (2026) &lt;strong&gt;[4]&lt;/strong&gt; red-teamed &lt;code&gt;gpt-oss-20b&lt;/code&gt; and found that adversarial techniques achieved alarmingly high Attack Success Rates, while non-adversarial probing exposed pervasive stereotypical defaults &amp;mdash; both consistent across English and Swiss German. Their conclusion: &lt;em&gt;&amp;ldquo;current alignment mechanisms have not fully resolved jailbreaks and inherent bias, posing critical challenges for automated decision-making.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introducing bx-jwt: Enterprise-Grade JSON Web Tokens for BoxLang</title><link>https://foojayio.github.io/website/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</link><pubDate>Tue, 26 May 2026 10:14:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/bx-jwt-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;JWT authentication is everywhere. But rolling it correctly &amp;mdash; with proper algorithm enforcement, key management, clock skew handling, JWE encryption, and zero security footguns &amp;mdash; is anything but trivial. Today, we&amp;rsquo;re shipping &lt;strong&gt;bx-jwt&lt;/strong&gt;, a production-ready JWT/JWE module for BoxLang that handles all of it out of the box, so you can focus on building, not fighting cryptography.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;bx-jwt&lt;/strong&gt; is part of the &lt;a href="https://www.boxlang.io/plans" title="BoxLang&amp;#43; and BoxLang&amp;#43;&amp;#43; subscription tiers" target="_blank" rel="noopener noreferrer"&gt;BoxLang+ and BoxLang++ subscription tiers&lt;/a&gt;
 &amp;mdash; our enterprise-grade module collection built for teams that take security seriously.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #15</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-15/</link><pubDate>Fri, 20 Mar 2026 07:56:01 +0000</pubDate><guid>https://foojayio.github.io/website/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>Bring AI into your Jakarta EE apps with LangChain4J-CDI</title><link>https://foojayio.github.io/website/today/bring-ai-into-your-jakarta-ee-apps-with-langchain4j-cdi/</link><pubDate>Sat, 24 Jan 2026 17:20:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/bring-ai-into-your-jakarta-ee-apps-with-langchain4j-cdi/</guid><description>&lt;p&gt;&lt;strong&gt;Goal&lt;/strong&gt; : This article will demonstrate how to add AI features to a Jakarta EE / MicroProfile application using &lt;strong&gt;LangChain4J‑CDI&lt;/strong&gt;, with simple to implement examples that runs on Payara, WildFly, Open Liberty, Helidon, Quarkus or any CDI 4.x compatible runtime.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is an updated article to the one published on the &lt;a href="https://javapro.io/2025/10/28/04-2025-java-25-special-edition/" target="_blank" rel="noopener noreferrer"&gt;JAVAPRO&amp;rsquo;s magazine - &amp;ldquo;04-2025 | Java 25 - Special Edition&amp;rdquo;&lt;/a&gt;
. Since the release of LangChain4J-CDI version 1.0.0, there&amp;rsquo;s been minor changes, but the fundamental architecture and usage of the library is the same.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>BoxLang Dynamic JVM Language Release 1.9.0</title><link>https://foojayio.github.io/website/today/boxlang-1-9-0-released-production-ready-stability-and-enterprise-grade-reliability/</link><pubDate>Mon, 12 Jan 2026 11:16:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-9-0-released-production-ready-stability-and-enterprise-grade-reliability/</guid><description>&lt;p&gt;&lt;strong&gt;Houston, Texas &amp;ndash; January 2025&lt;/strong&gt; &amp;ndash; Ortus Solutions, a leading innovator in professional open-source development, today announced the release of BoxLang 1.9.0, a major stability and compatibility release focused on production-readiness. This release resolves over 50 critical bugs and introduces significant enhancements to datasource management, context lifecycle handling, and web form processing for mission-critical enterprise applications.&lt;/p&gt;
&lt;h2 id="h2-0-production-ready-enhancements"&gt;Production-Ready Enhancements&lt;/h2&gt;
&lt;p&gt;BoxLang 1.9.0 delivers critical improvements based on real-world client migrations and production deployments:&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://foojayio.github.io/website/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://foojayio.github.io/website/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://foojayio.github.io/website/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/daydreams-scaled.jpg" alt="DayDreams" loading="lazy"&gt;
&lt;/p&gt;
&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;
&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&amp;ndash;3 years.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id="h3-0-vocabulary-for-this-article"&gt;Vocabulary for this article&lt;/h3&gt;
&lt;ul&gt;
&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;
&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;
&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;
&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;
&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;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-1-foreword"&gt;Foreword&lt;/h2&gt;
&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>Think in Graphs, Not Just Chains: JGraphlet for TaskPipelines</title><link>https://foojayio.github.io/website/today/think-in-graphs-not-just-chains-jgraphlet-for-taskpipelines/</link><pubDate>Thu, 02 Oct 2025 13:24:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/think-in-graphs-not-just-chains-jgraphlet-for-taskpipelines/</guid><description>&lt;h2 id="h2-0-let-s-dive-into-the-eight-core-principles-that-define-jgraphlet"&gt;&lt;strong&gt;&lt;strong&gt;JGraphlet is a tiny, zero-dependency Java library for building task pipelines. It uses a graph model where you define tasks as nodes and connect them to create simple or complex workflows (like fan-in/fan-out). It supports both asynchronous (default) and synchronous tasks, has a simple API, allows data sharing via a PipelineContext, and offers optional caching to avoid re-computing results.&lt;/strong&gt;&lt;/strong&gt;
**Its power comes not from a long list of features, but from a small set of core design principles that work together in harmony.
At the heart of JGraphlet is simplicity, backed by a Graph. Add Tasks to a pipeline and connect them to create your graph. Each &lt;code&gt;Task&lt;/code&gt; has an input and output. A &lt;code&gt;TaskPipeline&lt;/code&gt; builds and executes a pipeline while managing the I/O for each Task.
For example, a &lt;code&gt;Map&lt;/code&gt; for Fan-in, a &lt;code&gt;Record&lt;/code&gt; for your own data model, etc. A Task pipeline also has a way &lt;code&gt;PipelineContext&lt;/code&gt; to share data between Tasks, and Tasks can also be cached, so the computation doesn&amp;rsquo;t need to take place again and again.
You can choose how your Task pipeline flow should be, and you can decide whether it should be synchronous &lt;code&gt;SyncTask&lt;/code&gt; or asynchronous. By default, all Tasks are asynchronous.
Let&amp;rsquo;s dive into the eight core principles that define JGraphlet.&lt;/h2&gt;
&lt;h3 id="h3-1-1-a-graph-first-execution-model"&gt;1. A Graph-First Execution Model&lt;/h3&gt;
&lt;p&gt;JGraphlet treats your workflow as a Directed Acyclic Graph (DAG). You define tasks as nodes and explicitly draw the connections (edges) between them. This makes complex patterns like fan-out (one task feeding many) and fan-in (many tasks feeding one) natural.
&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Release V0.0.2 of Java DMX512 Library With Universes and USB-to-DMX support</title><link>https://foojayio.github.io/website/today/release-v0-0-2-of-java-dmx512-library-with-universes-and-usb-to-dmx-support/</link><pubDate>Mon, 04 Aug 2025 14:19:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/release-v0-0-2-of-java-dmx512-library-with-universes-and-usb-to-dmx-support/</guid><description>&lt;p&gt;Earlier this month, I &lt;a href="https://webtechie.be/post/2025-07-17-introducing-java-dmx512-library-with-demo-javafx-ui/" target="_blank" rel="noopener noreferrer"&gt;released V0.0.1 of my new Java library to interact with DMX512 devices using (optionally) the Open Fixture Library (OFL)&lt;/a&gt;
. After some more experimenting, I&amp;rsquo;m able to announce the next (beta) release V0.0.2 with the following major changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code refactoring&lt;/strong&gt;: As this library is still in beta, major changes were expected and happened 😉 The video of V0.0.1 is still valid, but some of the demonstrated code has changed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved demos&lt;/strong&gt; : Demo code has been moved to the &lt;a href="https://github.com/codewriterbv/DMX512/tree/main/src/main/java/be/codewriter/dmx512/demo" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;demo&lt;/code&gt; directory in the sources&lt;/a&gt;
 to make them easier to understand and reuse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Introduction of DMX Universes&lt;/strong&gt;: to be able to control fixtures connected to the two ports of my IP-to-DMX controller, universes needed to be added. (more info below)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;USB-to-DMX Support&lt;/strong&gt;: First working protocol over serial communication to DMX512! (more info below)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img fetchpriority="high" decoding="async" width="1024" height="637" data-id="117016" src="ip-to-dmx-universes-1024x637.jpg" alt="" class="wp-image-117016"&gt;
 &lt;/figure&gt;
 &lt;figure class="wp-block-image size-large"&gt;
 &lt;img decoding="async" width="1024" height="572" data-id="117015" src="usb-to-dmx-1024x572.jpg" alt="" class="wp-image-117015"&gt;
 &lt;/figure&gt;
&lt;/figure&gt;
&lt;h2 id="h2-0-introduction-of-dmx-universes"&gt;Introduction of DMX Universes&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&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/slC4niKWUq0?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;
		&lt;/div&gt;

&lt;p&gt;For my tests, I&amp;rsquo;m using an &lt;a href="https://www.amazon.com.be/dp/B0CYPQ2Z4V" target="_blank" rel="noopener noreferrer"&gt;JUNELIONY ArtNet 1024 2-Port Sulite DMX LAN512 2-Port ArtNet Converter&lt;/a&gt;
 controller. It has two XLR-connectors, labeled as &lt;code&gt;DMX1&lt;/code&gt; and &lt;code&gt;DMX2&lt;/code&gt;, which can be controlled as universe ID 0 and 1.&lt;/p&gt;</description></item><item><title>Introducing a New Java DMX512 Library With Demo JavaFX User Interface</title><link>https://foojayio.github.io/website/today/introducing-a-new-java-dmx512-library-with-demo-javafx-user-interface/</link><pubDate>Fri, 25 Jul 2025 06:17:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-a-new-java-dmx512-library-with-demo-javafx-user-interface/</guid><description>&lt;p&gt;In this post, I would like to inform you about a new Java library that is now available on Maven Central, allowing interaction with DMX512 devices using (optionally) the Open Fixture Library (OFL). I also published a video with a code walkthrough of my test setup and demo code.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&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/ztrO3Crexmg?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;
		&lt;/div&gt;

&lt;p&gt;But first&amp;hellip;&lt;/p&gt;</description></item><item><title>Create Music Bingo Cards with iText</title><link>https://foojayio.github.io/website/today/create-music-bingo-cards-with-itext/</link><pubDate>Thu, 09 Jun 2022 08:33:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/create-music-bingo-cards-with-itext/</guid><description>&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;Let&amp;rsquo;s use Java to automate a boring task and have a party!
Warning, this can lead to noise nuisance from singing and dancing&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It has been a while since I last had to create documents in a program, and iText has been &amp;ldquo;on my radar&amp;rdquo; to try out for a while now.&lt;/p&gt;
&lt;p&gt;This weekend we had a party and wanted to organize a music bingo.&lt;/p&gt;
&lt;p&gt;For this, we needed a set of randomly selected songs to be printed out per person.&lt;/p&gt;</description></item><item><title>10 Basic Questions About PDF Files for Java Developers</title><link>https://foojayio.github.io/website/today/10-basic-questions-about-pdf-files-for-java-developers/</link><pubDate>Fri, 28 Aug 2020 05:45:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/10-basic-questions-about-pdf-files-for-java-developers/</guid><description>&lt;p&gt;PDF files are the world&amp;rsquo;s most common file format, defining 70% of the world&amp;rsquo;s documents. But they are also complex and poorly supported by Java.&lt;/p&gt;
&lt;p&gt;As I have spent over 20 years working with Java and PDF files, I thought a useful contribution to the excellent new foojay.io (a place for friends of OpenJDK), where you are reading this now, would be a quick guide for Java Developers!&lt;/p&gt;
&lt;h4 id="1-what-are-pdf-files"&gt;1. What are PDF files?&lt;/h4&gt;
&lt;p&gt;PDF files are designed to display documents, fast and accurately, on multiple platforms. They do this by storing all the information they need (text, images, fonts) inside a complex binary data structure.&lt;/p&gt;</description></item></channel></rss>