<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Use Cases on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/use-cases/</link><description>Recent content in Use Cases on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 20 Apr 2026 10:32:30 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/use-cases/index.xml" rel="self" type="application/rss+xml"/><item><title>JC-AI Newsletter #13</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-13/</link><pubDate>Thu, 05 Feb 2026 21:12:12 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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>From a JAR to a full-fledged MacOS app</title><link>https://foojayio.github.io/website/today/from-a-jar-to-a-full-fledged-macos-app/</link><pubDate>Thu, 05 Feb 2026 10:15:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-a-jar-to-a-full-fledged-macos-app/</guid><description>&lt;p&gt;A couple of years ago, I developed a small &lt;a href="https://blog.frankel.ch/state-jvm-desktop-frameworks/2/" target="_blank" rel="noopener noreferrer"&gt;Kotlin GUI&lt;/a&gt;
 to help me rename my files in batch. I actually created it with &lt;a href="https://blog.frankel.ch/focus/state-jvm-desktop-frameworks/" target="_blank" rel="noopener noreferrer"&gt;different JVM frameworks&lt;/a&gt;
 to compare their relative merits. In any case, I didn&amp;rsquo;t use it up until last week. And then, I was surprised to see that it didn&amp;rsquo;t work to rename a network volume, although it had in the past. In this brief post, I aim to describe the issue and its solution.&lt;/p&gt;</description></item><item><title>Bootstrapping a Java File System</title><link>https://foojayio.github.io/website/today/bootstrapping-a-java-file-system/</link><pubDate>Thu, 29 Jan 2026 01:44:32 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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>DocBox v5 - Reborn: Modern API Docs for BoxLang &amp; CFML</title><link>https://foojayio.github.io/website/today/docbox-v5-reborn-modern-api-docs-for-boxlang-cfml/</link><pubDate>Tue, 27 Jan 2026 12:15:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/docbox-v5-reborn-modern-api-docs-for-boxlang-cfml/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/docbox-v5-reborn-modern-api-docs-for-boxlang-cfml/bx-docbox-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Welcome to DocBox v5! We didn&amp;rsquo;t just update DocBox. We rebuilt it from the ground up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DocBox v5.0.0&lt;/strong&gt; represents a complete architectural rewrite&amp;mdash;modern syntax, blazing performance, and a stunning new look that finally brings API documentation into 2025. Gone are the clunky HTML pages of yesteryear. Say hello to a gorgeous, theme-driven single-page application that makes browsing your API docs feel like using a premium developer tool. We have also released a dedicated module for BoxLang: &lt;strong&gt;BX-DOCBOX&lt;/strong&gt;. A fully interactive CLI tool for generating your docs from the command line using pure BoxLang.&lt;/p&gt;</description></item><item><title>BoxLang AI v2: Enterprise AI Development Without the Complexity</title><link>https://foojayio.github.io/website/today/boxlang-ai-v2-enterprise-ai-development-without-the-complexity/</link><pubDate>Thu, 22 Jan 2026 15:09:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-ai-v2-enterprise-ai-development-without-the-complexity/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-ai-v2-enterprise-ai-development-without-the-complexity/boxlang-ai-v2-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One Year. 100+ Features. Unlimited Possibilities.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just one year ago, in March 2024, we launched BoxLang AI 1.0. Today, we&amp;rsquo;re thrilled to announce &lt;strong&gt;BoxLang AI v2&lt;/strong&gt;&amp;mdash;a massive leap forward that positions BoxLang as one of the most powerful and versatile AI framework on the JVM. This release is 9-months in the making, with over 100 new features! This would have not been possible without all the new features that the BoxLang JVM language exposes to developers like: Server Side Events, HTTP Streaming, HTTP pooling, Caching, and so much more.&lt;/p&gt;</description></item><item><title>Announcing bx-ldap: Enterprise LDAP for BoxLang</title><link>https://foojayio.github.io/website/today/announcing-bx-ldap-enterprise-ldap-for-boxlang/</link><pubDate>Tue, 16 Dec 2025 17:01:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/announcing-bx-ldap-enterprise-ldap-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/announcing-bx-ldap-enterprise-ldap-for-boxlang/bx-ldap-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&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;
&lt;blockquote&gt;
&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;
&lt;/blockquote&gt;
&lt;h2 id="h2-0-why"&gt;🎯 Why?&lt;/h2&gt;
&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>BoxLang RSS : Full-Featured RSS/Atom Feed Module for BoxLang</title><link>https://foojayio.github.io/website/today/boxlang-rss-full-featured-rss-atom-feed-module-for-boxlang/</link><pubDate>Tue, 02 Dec 2025 11:19:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-rss-full-featured-rss-atom-feed-module-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-rss-full-featured-rss-atom-feed-module-for-boxlang/bx-rss-700x467.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&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;
&lt;h2 id="h2-0-thanks-to-ray-camden"&gt;Thanks To Ray Camden&lt;/h2&gt;
&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;
&lt;h2 id="h2-1-why-bx-rss"&gt;Why bx-rss?&lt;/h2&gt;
&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>JC-AI Newsletter #8</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-8/</link><pubDate>Thu, 30 Oct 2025 06:36:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-8/</guid><description>&lt;p&gt;&lt;strong&gt;Fourteen days have passed, and it is time to present a fresh collection of readings that could influence developments in the field of artificial intelligence.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This newsletter focuses on examining how AI enhances productivity through enterprise studies, agentic system architecture, attack vectors, Model Context Protocol (MCP) implementation, Agent-to-Agent (A2A) protocol, Java code generation within IDEs, LLM benchmarking methodologies, and the security challenges arising from increased AI-LLM adoption.&lt;/p&gt;
&lt;p&gt;The world influenced by LLM is changing very quickly, let&amp;rsquo;s start&amp;hellip;&lt;/p&gt;</description></item><item><title>Agent Memory with Spring AI &amp; Redis</title><link>https://foojayio.github.io/website/today/agent-memory-with-spring-ai-redis/</link><pubDate>Wed, 23 Jul 2025 16:34:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/agent-memory-with-spring-ai-redis/</guid><description>&lt;h3 id="h3-0-you-re-building-an-ai-agent-with-memory-using-spring-ai-and-redis-unlike-traditional-chatbots-that-forget-previous-interactions-memory-enabled-agents-can-recall-past-conversations-and-facts-it-works-by-storing-two-types-of-memory-in-redis-short-term-conversation-history-and-long-term-facts-and-experiences-as-vectors-allowing-agents-to-provide-personalized-context-aware-responses"&gt;&lt;strong&gt;You&amp;rsquo;re building an AI agent with memory using Spring AI and Redis.&lt;/strong&gt; &lt;strong&gt;Unlike traditional chatbots that forget previous interactions, memory-enabled agents can recall past conversations and facts.&lt;/strong&gt; &lt;strong&gt;It works by storing two types of memory in Redis: short-term (conversation history) and long-term (facts and experiences as vectors), allowing agents to provide personalized, context-aware responses.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;LLMs respond to each message in isolation, treating every interaction as if it&amp;rsquo;s the first time they&amp;rsquo;ve spoken with a user. They lack the ability to remember previous conversations, preferences, or important facts.&lt;/p&gt;</description></item><item><title>Kotlin adoption inside ING, five years later</title><link>https://foojayio.github.io/website/today/ing-kotlin-adoption-five-years/</link><pubDate>Wed, 02 Jul 2025 06:21:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/ing-kotlin-adoption-five-years/</guid><description>&lt;p&gt;&lt;em&gt;TL;DR: Five years after its introduction Kotlin adoption inside ING keeps growing year after year, with a current adoption rate of just over 11%. We were also featured as one of the user stories for the KotlinConf 2025 Keynote.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Five years ago, &lt;a href="https://medium.com/@Frevib" target="_blank" rel="noopener noreferrer"&gt;Hielke&lt;/a&gt;
 and I wrote one of the first blogs of this account about being &lt;a href="https://medium.com/ing-blog/introducing-kotlin-at-ing-a-long-but-rewarding-story-1bfcd3dc8da0" target="_blank" rel="noopener noreferrer"&gt;the first team to put Kotlin on production at ING&lt;/a&gt;
. The article generated some interest and to this day it is still present as one of the &lt;a href="https://kotlinlang.org/lp/server-side/case-studies/" target="_blank" rel="noopener noreferrer"&gt;Kotlin website case studies&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Semantic Search with Spring Boot &amp; Redis</title><link>https://foojayio.github.io/website/today/semantic-search-with-spring-boot-redis/</link><pubDate>Mon, 05 May 2025 15:35:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/semantic-search-with-spring-boot-redis/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; &lt;strong&gt;You&amp;rsquo;re building a semantic search app using Spring Boot and Redis. Instead of matching exact words, semantic search finds meaning using Vector Similarity Search (VSS). It works by turning movie synopses into vectors with embedding models, storing them in Redis (as a vector database), and finding the closest matches to user queries.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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/o3XN4dImESE?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;br /&gt;
&lt;p&gt;A traditional searching system works by matching the words a user types with the words stored in a database or document collection. It usually looks for exact or partial matches without understanding the meaning behind the words.&lt;/p&gt;</description></item><item><title>Review of Junie, a coding agent by JetBrains – Revie</title><link>https://foojayio.github.io/website/today/checking-out-junie-a-coding-agent-by-jetbrains/</link><pubDate>Wed, 26 Feb 2025 01:38:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/checking-out-junie-a-coding-agent-by-jetbrains/</guid><description>&lt;p&gt;Other languages: &lt;a href="https://flounder.dev/es/posts/trying-out-junie/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/ko/posts/trying-out-junie/" target="_blank" rel="noopener noreferrer"&gt;한국어&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/trying-out-junie/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
 &lt;a href="https://flounder.dev/zh/posts/trying-out-junie/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Recently, I talked about &lt;a href="https://flounder.dev/duplicate-finder/" target="_blank" rel="noopener noreferrer"&gt;Duplicate Finder&lt;/a&gt;
 on the &lt;a href="https://foojayio.github.io/website/today/category/podcast/"&gt;Foojay Podcast&lt;/a&gt;
 hosted by &lt;a href="https://foojay.social/@frankdelporte" target="_blank" rel="noopener noreferrer"&gt;Frank Delporte&lt;/a&gt;
. We briefly touched upon implementing support for other formats, and Frank asked if I&amp;rsquo;m planning on adding AsciiDoc, as it could be useful for his technical writing at Azul.&lt;/p&gt;
&lt;p&gt;We agreed to think about adding the support soon. At the same time I got access to &lt;a href="https://www.jetbrains.com/junie/" target="_blank" rel="noopener noreferrer"&gt;Junie&lt;/a&gt;
, a newly announced coding agent by JetBrains, which is currently in early access. After a while, a thought came to me that this is a great opportunity to try it in action.&lt;/p&gt;</description></item><item><title>A solution to the problem of cluster-wide CRDs</title><link>https://foojayio.github.io/website/today/a-solution-to-the-problem-of-cluster-wide-crds/</link><pubDate>Thu, 30 Jan 2025 11:55:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-solution-to-the-problem-of-cluster-wide-crds/</guid><description>&lt;p&gt;&lt;strong&gt;I&amp;rsquo;m an average Reddit user, scrolling much more than reading or interacting. Sometimes, however, a post rings a giant red bell. When I stumbled upon &lt;a href="https://www.reddit.com/r/kubernetes/comments/1ga0deo/comment/lta8itb/?context=3&amp;amp;amp;share_id=ZS15DmQexSXUjhXuqQ81z" target="_blank" rel="noopener noreferrer"&gt;If you could add one feature to K8s, what would it be?&lt;/a&gt;
, I knew the content would be worth it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The most voted answer is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Namespace scoped CRDs&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h2-0-a-short-intro-to-crds"&gt;A short intro to CRDs&lt;/h2&gt;
&lt;p&gt;Kubernetes comes packed with existing objects, such as &lt;code&gt;Pod&lt;/code&gt;, &lt;code&gt;Service&lt;/code&gt;, &lt;code&gt;DaemonSet&lt;/code&gt;, etc., but you can create your own: the latter are called Custom Resource Definitions. Most of the time, s are paired with a custom controller called an &lt;em&gt;operator&lt;/em&gt;. An operator subscribes to the lifecycle events of CRD(s). When you act upon a CRD by creating, updating, or deleting it, Kubernetes changes its status, and the operator gets notified. What it does depends on the nature of the CRD.&lt;/p&gt;</description></item><item><title>Java Server and Rust Client Built with Generated Networking Code</title><link>https://foojayio.github.io/website/today/fuchs2024-fepcos-j-java-server-and-rust-client/</link><pubDate>Fri, 04 Oct 2024 11:58:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs2024-fepcos-j-java-server-and-rust-client/</guid><description>&lt;p&gt;&lt;strong&gt;FEPCOS-J allows declaratively implementing a Java server and generating its profile, which, for example, can be used to generate the networking code of a Rust client.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;As I have shown in a &lt;a href="https://foojayio.github.io/website/today/fuchs-2024-fepcos-j-multithreaded-server/"&gt;previous post&lt;/a&gt;
 [1] and a &lt;a href="https://youtu.be/qtPP7kZbriQ" target="_blank" rel="noopener noreferrer"&gt;video&lt;/a&gt;
 [2], the &lt;a href="http://fepcos.info/en/fepcos-j.html" target="_blank" rel="noopener noreferrer"&gt;FEPCOS-J development tool&lt;/a&gt;
 [3] prototypically implements a Java language extension that allows implementing a client-server application in Java without the need for manual network programming.&lt;/p&gt;
&lt;p&gt;In a nutshell, FEPCOS-J allows a Java developer to program a server&amp;rsquo;s system specification declaratively using annotations. The FEPCOS-J Processor &lt;em&gt;&lt;strong&gt;fjp&lt;/strong&gt;&lt;/em&gt; uses this specification to generate the server&amp;rsquo;s system export module and system import module.&lt;/p&gt;</description></item><item><title>Implementing the Idempotency-Key specification on Apache APISIX</title><link>https://foojayio.github.io/website/today/implementing-the-idempotency-key-specification-on-apache-apisix/</link><pubDate>Mon, 02 Sep 2024 20:58:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/implementing-the-idempotency-key-specification-on-apache-apisix/</guid><description>&lt;p&gt;&lt;strong&gt;Recently, I wrote an &lt;a href="https://blog.frankel.ch/fix-duplicate-api-requests/" target="_blank" rel="noopener noreferrer"&gt;analysis&lt;/a&gt;
 of the &lt;a href="https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-idempotency-key-header-04" target="_blank" rel="noopener noreferrer"&gt;IETF Idempotency-Key specification&lt;/a&gt;
. The specification aims to avoid duplicated requests.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In short, the idea is for the client to send a unique key along with the request:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the server doesn&amp;rsquo;t know the key, it proceeds as usual and then stores the response&lt;/li&gt;
&lt;li&gt;If the server knows the key, it short-circuits any further processing and immediately returns the stored response&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This post shows how to implement it with &lt;a href="https://apisix.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache APISIX&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Allocation Profiling in Java</title><link>https://foojayio.github.io/website/today/get-started-with-allocation-profiling/</link><pubDate>Fri, 09 Aug 2024 08:44:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/get-started-with-allocation-profiling/</guid><description>&lt;p&gt;&lt;strong&gt;Read in other languages&lt;/strong&gt; : &lt;a href="https://flounder.dev/zh/posts/allocation-profiling/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/allocation-profiling/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/allocation-profiling/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;We often find ourselves in situations when code is not working properly, and we have no idea where to even begin investigating.&lt;/p&gt;
&lt;p&gt;Can&amp;rsquo;t we just stare at the code until the solution eventually comes to us? Sure, but this method probably won&amp;rsquo;t work without deep knowledge of the project and a lot of mental effort. A smarter approach would be to use the tools you have at hand. They can point you in the right direction.&lt;/p&gt;</description></item><item><title>JavaFX Nodes versus Canvas</title><link>https://foojayio.github.io/website/today/javafx-nodes-versus-canvas/</link><pubDate>Wed, 07 Aug 2024 08:22:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-nodes-versus-canvas/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Recently I was working on an article about Azul Zulu with JavaFX support for ARM systems, like the Raspberry Pi. As you can see in &lt;a href="https://www.youtube.com/watch?v=XhDQvkcYJ88" target="_blank" rel="noopener noreferrer"&gt;this video&lt;/a&gt;
, I found out my little test application with a lot of &amp;ldquo;bouncing balls&amp;rdquo; started losing performance on the Raspberry Pi with more than 1000 of those balls.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Of course, having that high number of visual components in a typical JavaFX user interface would be a badly designed application. Imagine a long registration form with that number of input fields and labels&amp;hellip; it would drive your users crazy.&lt;/p&gt;</description></item><item><title>Client-server application in Java: Easy with FEPCOS-J – Video.</title><link>https://foojayio.github.io/website/today/fuchs-2024-video-fepcos_j-client-server-application-in-java/</link><pubDate>Tue, 30 Jul 2024 11:51:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2024-video-fepcos_j-client-server-application-in-java/</guid><description>&lt;p&gt;&lt;strong&gt;This is a result of the &lt;a href="http://fepcos.info" target="_blank" rel="noopener noreferrer"&gt;FEPCOS-Project&lt;/a&gt;
, aka @FepcosInfo; #FepcosJ_blog5.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;See how FEPCOS-J relieves developers of the network programming required to implement a client-server application in Java.&lt;br&gt;
&lt;a href="https://youtu.be/qtPP7kZbriQ" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://foojayio.github.io/website/today/fuchs-2024-video-fepcos_j-client-server-application-in-java/fuchs2024FepcosJ_video1-512x512-1.png" alt="Link to video: Easy Implementation of a Client-Server Application in Java with FEPCOS-J.
#FepcosJ_video1, #FepcosJ." loading="lazy"&gt;
&lt;/a&gt;
 &lt;strong&gt;External link to&lt;/strong&gt; : G. Fuchs: &lt;em&gt;Video: Easy Implementation of a Client-Server Application in Java with FEPCOS-J&lt;/em&gt;; On: YouTube, FEPCOS-Project (@FepcosInfo); 29-July-2024; &lt;a href="https://youtu.be/qtPP7kZbriQ" target="_blank" rel="noopener noreferrer"&gt;https://youtu.be/qtPP7kZbriQ&lt;/a&gt;
.&lt;br&gt;
&lt;img src="https://foojayio.github.io/website/today/fuchs-2024-video-fepcos_j-client-server-application-in-java/fuchs-2024-implementing-a-service-with-fepcos-j-1024x576.png" alt="FEPCOS-J provides annotations for programming a client-server application in Java." loading="lazy"&gt;
 &lt;strong&gt;Impression of the above-linked video&lt;/strong&gt;: FEPCOS-J provides annotations like @AYSpec, @In, @Out, and @Behavior for programming a client-server application in Java. Watch the video for a complete example application of FEPCOS-J.&lt;/p&gt;</description></item><item><title>A Beginner's Guide to IntelliJ Profiler</title><link>https://foojayio.github.io/website/today/beginners-guide-to-java-profiler/</link><pubDate>Thu, 04 Jul 2024 06:26:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/beginners-guide-to-java-profiler/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/get-started-with-profiling/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/get-started-with-profiling/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/get-started-with-profiling/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Sometimes your app works, but you want to increase performance by boosting its throughput or reducing latency. Other times, you just want to know how code behaves at runtime, determine where the hot spots are, or figure out how a framework operates under the hood.&lt;/p&gt;
&lt;p&gt;This is a perfect use case for profilers. They offer a bird&amp;rsquo;s eye view of arbitrarily large execution chunks, which helps you see problems at scale.&lt;/p&gt;</description></item><item><title>Hack a Java application with the debugger</title><link>https://foojayio.github.io/website/today/debugger-godmode-hacking-a-jvm-application-with-the-debugger/</link><pubDate>Thu, 13 Jun 2024 04:58:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/debugger-godmode-hacking-a-jvm-application-with-the-debugger/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/debugger-god-mode/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/debugger-god-mode/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/debugger-god-mode/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Back in the day, computer games were different. Not only have graphics and mechanics evolved since, but there&amp;rsquo;s also one characteristic that doesn&amp;rsquo;t seem very common in games today: nearly all of them had cheat codes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cheat codes were sequences of keys that would give you something extraordinary, such as infinite ammo or the ability to walk through walls. The most common and powerful of them was &amp;lsquo;god mode&amp;rsquo; &amp;ndash; it made you invincible.&lt;/p&gt;</description></item><item><title>Workflow, From Stateless To Stateful</title><link>https://foojayio.github.io/website/today/workflow-from-stateless-to-stateful/</link><pubDate>Wed, 05 Jun 2024 06:11:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/workflow-from-stateless-to-stateful/</guid><description>&lt;p&gt;&lt;strong&gt;A (long) time ago, my first job consisted of implementing &lt;em&gt;workflows&lt;/em&gt; using the Staffware engine. In short, a workflow comprises &lt;em&gt;tasks&lt;/em&gt;; an automated task delegates to code, while a manual task requires somebody to do something and mark it as done. Then, it proceeds to the next task - or tasks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a sample workflow:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/workflow-from-stateless-to-stateful/procurement.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The above diagram uses &lt;a href="https://en.wikipedia.org/wiki/Business_Process_Model_and_Notation" target="_blank" rel="noopener noreferrer"&gt;Business Process Model and Notation&lt;/a&gt;
. You can now design your workflow using and run it with compatible workflow engines.&lt;/p&gt;</description></item><item><title>Task scheduler in Java: background job processing with JobRunr</title><link>https://foojayio.github.io/website/today/getting-started-with-jobrunr-a-powerful-task-scheduler-in-ja/</link><pubDate>Wed, 22 May 2024 11:05:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-jobrunr-a-powerful-task-scheduler-in-ja/</guid><description>&lt;h2 id="h2-0-what-is-jobrunr"&gt;What is JobRunr&lt;/h2&gt;
&lt;h3 id="h3-1-task-scheduler-in-java"&gt;Task scheduler in Java&lt;/h3&gt;
&lt;p&gt;JobRunr is an open-source Java library for &lt;strong&gt;task scheduling&lt;/strong&gt; and &lt;strong&gt;distributed background job&lt;/strong&gt; processing. It offers an effortless way to &lt;strong&gt;perform background tasks using only Java 8 lambdas&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Whether it is a &lt;strong&gt;fire-and-forget&lt;/strong&gt; , &lt;strong&gt;scheduled&lt;/strong&gt; or &lt;strong&gt;recurring job&lt;/strong&gt; , JobRunr analyzes the lambda and stores the metadata needed to process the job in a database. This simple architecture, with a few other mechanisms, allows a job to be &lt;strong&gt;executed on any available server&lt;/strong&gt; running your application (👋 k8s).&lt;/p&gt;</description></item><item><title>Diagnosing user-reported issues using WireQuery</title><link>https://foojayio.github.io/website/today/diagnosing-user-reported-issues-using-wirequery/</link><pubDate>Mon, 13 May 2024 07:11:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/diagnosing-user-reported-issues-using-wirequery/</guid><description>&lt;p&gt;&lt;strong&gt;As a developer, I&amp;rsquo;ve often struggled with diagnosing user-reported issues, which is often caused by a lack of information to reproduce the problem. While a ticket may contain a screenshot of the problem and a description, it often does not portray the complete picture. For example: what did the user do that led up to the issue? What endpoints were called from the frontend, and how did they respond? What did the underlying systems communicate? Etc.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Debug Without Breakpoints – Guide to IntelliJ IDEA's Pause</title><link>https://foojayio.github.io/website/today/debug-without-breakpoints/</link><pubDate>Mon, 22 Apr 2024 06:59:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/debug-without-breakpoints/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/debug-without-breakpoints/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/debug-without-breakpoints/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/debug-without-breakpoints/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;In a typical debugging scenario, you would set breakpoints to tell the debugger when to suspend your program. A breakpoint usually corresponds to the moment that marks the starting point of the further investigation.&lt;/p&gt;
&lt;p&gt;However, in some situations you aren&amp;rsquo;t certain about where to set a breakpoint. Other times, you might prefer to suspend the program at a particular &lt;em&gt;time&lt;/em&gt; rather than aiming at a specific &lt;em&gt;line&lt;/em&gt;.
&lt;img src="https://foojayio.github.io/website/today/debug-without-breakpoints/debug-without-breakpoints-banner-1024x538.png" alt="post banner" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Multithreaded server in Java: That's easy with FEPCOS-J.</title><link>https://foojayio.github.io/website/today/fuchs-2024-fepcos-j-multithreaded-server/</link><pubDate>Thu, 21 Mar 2024 08:38:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2024-fepcos-j-multithreaded-server/</guid><description>&lt;p&gt;&lt;strong&gt;FEPCOS-J prototypically implements a Java language extension that allows the realization of a multithreaded TCP/IP server in Java without thread or network programming.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please help me to make FEPCOS-J a Free/Libre and Open-Source Software (FLOSS).&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;FEPCOS-J &lt;a href="#references"&gt;[1]&lt;/a&gt;
 is a Java development tool that prototypes a Java language extension for declarative programming of networked systems. See my previous posts for details &lt;a href="#references"&gt;[2, 3, 4]&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Firstly, this post briefly defines &lt;a href="#what"&gt;the term &amp;ldquo;multithreaded TCP/IP server&amp;rdquo;&lt;/a&gt;
. It then describes &lt;a href="#how"&gt;how FEPCOS-J supports programming a multithreaded TCP/IP server in Java&lt;/a&gt;
. Further, the post explains &lt;a href="#look"&gt;what implementing the server with FEPCOS-J looks like&lt;/a&gt;
 and provides an &lt;a href="#example"&gt;example&lt;/a&gt;
. Finally, the post draws a &lt;a href="#conclusion"&gt;conclusion&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Localize applications with AI</title><link>https://foojayio.github.io/website/today/localize-apps-with-ai/</link><pubDate>Wed, 20 Mar 2024 08:50:29 +0000</pubDate><guid>https://foojayio.github.io/website/today/localize-apps-with-ai/</guid><description>&lt;p&gt;Read in other languages: &lt;a href="https://flounder.dev/zh/posts/localize-apps-with-ai/" target="_blank" rel="noopener noreferrer"&gt;中文&lt;/a&gt;
 &lt;a href="https://flounder.dev/es/posts/localize-apps-with-ai/" target="_blank" rel="noopener noreferrer"&gt;Español&lt;/a&gt;
 &lt;a href="https://flounder.dev/pt/posts/localize-apps-with-ai/" target="_blank" rel="noopener noreferrer"&gt;Português&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ever wondered if AI can localize an entire project? In this article, we follow the process end-to-end using the Spring Petclinic as an example. We prepare the project for localization, automate the translation using Python and DeepL, and analyze the results&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Whether you are thinking of localizing your project or just learning how to do that, AI might help you. It offers a cost-efficient entry point for experiments and automations.&lt;/p&gt;</description></item><item><title>Building gdocweb with Java 21, Spring Boot 3.x and Beyond</title><link>https://foojayio.github.io/website/today/building-gdocweb-with-java-21-spring-boot-3-x-and-beyond/</link><pubDate>Tue, 30 Jan 2024 12:40:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-gdocweb-with-java-21-spring-boot-3-x-and-beyond/</guid><description>&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#introducing-gdocweb"&gt;Introducing gdocweb&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#java-21-and-spring-boot-3x-innovation-and-maturity"&gt;Java 21 and Spring Boot 3.x: Innovation and Maturity&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#graalvm-native-image-for-efficiency"&gt;GraalVM Native Image for Efficiency&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#implementing-graalvm"&gt;Implementing GraalVM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#facing-the-production-challenges"&gt;Facing the Production Challenges&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-decision-to-move-on"&gt;The Decision to Move On&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#deployment-vps-and-docker-compose"&gt;Deployment: VPS and Docker Compose&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#avoiding-raw-vps-deployment"&gt;Avoiding Raw VPS Deployment&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#steering-clear-of-managed-containers-orchestration"&gt;Steering Clear of Managed Containers &amp;amp; Orchestration&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-choice-of-docker-compose"&gt;The Choice of Docker Compose&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#front-end-thymeleaf-over-modern-alternatives"&gt;Front-End: Thymeleaf Over Modern Alternatives&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#react-modern-but-not-a-one-size-fits-all-solution"&gt;React: Modern but Not a One-Size-Fits-All Solution&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-appeal-of-thymeleaf"&gt;The Appeal of Thymeleaf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#considering-htmx-for-dynamic-functionality"&gt;Considering HTMX for Dynamic Functionality&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#final-word"&gt;Final Word&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Starting a new project is always a mix of excitement and tough decisions, especially when you&amp;rsquo;re stitching together familiar tools like Google Docs with powerhouses like GitHub Pages.&lt;/p&gt;</description></item><item><title>FEPCOS-J: Native executables of Java-coded networked systems</title><link>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-03-native-executables/</link><pubDate>Wed, 13 Dec 2023 12:13:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-03-native-executables/</guid><description>&lt;p&gt;&lt;strong&gt;FEPCOS-J prototypically enables Java developers to realize networked systems without low-level network programming and to automatically build native executables by means of GraalVM. &lt;strong&gt;This post introduces the concept and gives you an example by rebuilding the source code explained in my previous posts.&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please help me to make FEPCOS-J a Free/Libre and Open-Source Software (FLOSS).&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;FEPCOS-J&lt;/strong&gt; &lt;a href="#references"&gt;[1]&lt;/a&gt;
 enables a Java developer to declaratively program networked systems and compose them like building blocks &lt;a href="#references"&gt;[2]&lt;/a&gt;
. For this purpose, FEPCOS-J provides Java modules and generates code to free a Java developer from network programming &lt;a href="#references"&gt;[3]&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Chopping the monolith in a smarter way</title><link>https://foojayio.github.io/website/today/chopping-the-monolith-in-a-smarter-way/</link><pubDate>Thu, 07 Dec 2023 07:40:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/chopping-the-monolith-in-a-smarter-way/</guid><description>&lt;p&gt;&lt;strong&gt;In my previous post &lt;a href="https://foojayio.github.io/website/today/chopping-monolith/"&gt;Chopping the Monolith&lt;/a&gt;
, I explained that some parts of a monolith are pretty stable and only the fast-changing parts are worth being &amp;ldquo;chopped.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I turned the post into a talk and presented it at several conferences. I think it&amp;rsquo;s pretty well received; I believe it&amp;rsquo;s because most developers understand, or have direct experience, that microservices are not a good fit for traditional organizations, as per &lt;a href="https://en.wikipedia.org/wiki/Conway%27s_law" target="_blank" rel="noopener noreferrer"&gt;Conway&amp;rsquo;s Law&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Java for desktop applications: Tips and Tricks (Part 1)</title><link>https://foojayio.github.io/website/today/java-for-desktop-applications-part-1/</link><pubDate>Fri, 24 Nov 2023 09:18:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-for-desktop-applications-part-1/</guid><description>&lt;p&gt;&lt;strong&gt;As desktop applications have kind of become a niche topic, it&amp;rsquo;s getting harder to find information about up-to-date best practices for desktop development.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since I have been doing this for many years now, I hope that I can share some of the lessons learned with other fellow desktop developers. Most items that are discussed here are taken straight from &lt;a href="https://github.com/xpipe-io/xpipe" target="_blank" rel="noopener noreferrer"&gt;XPipe&lt;/a&gt;
, the application I am working on right now. So if you&amp;rsquo;re skeptical or are interested in more details, you can take a look at the actual source code or try them in action yourself in the actual application.&lt;/p&gt;</description></item><item><title>Generative AI and Java - hype or urgent reality?</title><link>https://foojayio.github.io/website/today/generative-ai-and-java-hype-or-urgent-reality/</link><pubDate>Mon, 06 Nov 2023 07:59:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/generative-ai-and-java-hype-or-urgent-reality/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/generative-ai-and-java-hype-or-urgent-reality/image1-700x272.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s hard to grasp that it&amp;rsquo;s been about a year since Chat GPT and other generative AI tools burst onto the scene. We&amp;rsquo;re all still grappling with, well, everything about them. Whatever equilibrium we eventually find, it&amp;rsquo;s clear that the world is changing. The whole world mind, not just the IT industry.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/olimpiupop" title="Olimpiu Pop" target="_blank" rel="noopener noreferrer"&gt;Olimpiu Pop&lt;/a&gt;
 and I have debated the situation multiple times, and we realised that there&amp;rsquo;s lots of rumour around AI and Java but not much in the way of fact.&lt;/p&gt;</description></item><item><title>GlassFish Embedded - a simple way to run Jakarta EE apps</title><link>https://foojayio.github.io/website/today/glassfish-embedded-a-simple-way-to-run-jakarta-ee-apps/</link><pubDate>Wed, 01 Nov 2023 15:55:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/glassfish-embedded-a-simple-way-to-run-jakarta-ee-apps/</guid><description>&lt;p&gt;&lt;strong&gt;A long-time GlassFish user and active member of the GlassFish community, Jan Blavins, shares how he uses GlassFish Embedded to take advantage of some of its unique features compared to traditional application servers.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been asked by the Eclipse GlassFish project to say a few words about how I use GlassFish Embedded. The GlassFish project is pretty active these days, they have helped me with some complex issues that I have raised. This way I want to thank them, especially to the OmniFish team, who is one of the main contributors to the GlassFish project and helped me with my issues with GlassFish.&lt;/p&gt;</description></item><item><title>FEPCOS-J (2) – Declaratively compose networked systems in Java</title><link>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-02/</link><pubDate>Fri, 13 Oct 2023 06:07:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-02/</guid><description>&lt;p&gt;&lt;strong&gt;FEPCOS-J implements a model-based Java language extension that provides the annotation &lt;em&gt;@Part&lt;/em&gt;, which enables a developer to declaratively compose networked systems. This post introduces the concept and gives you an example of how to use it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please help me to make FEPCOS-J a Free/Libre and Open-Source Software (FLOSS).&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;FEPCOS-J arises in the frame of the FEPCOS-Project &lt;a href="#references"&gt;[1]&lt;/a&gt;
, which aims to simplify the programming of composed networked systems.&lt;/p&gt;
&lt;p&gt;FEPCOS-J implements a domain-specific Java language extension whose semantic domain is based on the FEPCOS-Model &lt;a href="#references"&gt;[2]&lt;/a&gt;
, which extends the composite design pattern &lt;a href="#references"&gt;[3]&lt;/a&gt;
 to include networking aspects.&lt;/p&gt;</description></item><item><title>Building Real-Time Applications to Process Wikimedia Streams</title><link>https://foojayio.github.io/website/today/building-real-time-applications-to-process-wikimedia-streams-using-kafka-and-hazelcast/</link><pubDate>Fri, 15 Sep 2023 14:33:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-real-time-applications-to-process-wikimedia-streams-using-kafka-and-hazelcast/</guid><description>&lt;p&gt;&lt;strong&gt;In this tutorial, developers, solution architects, and data engineers can learn how to build high-performance, scalable, and fault-tolerant applications that react to real-time data using Kafka and Hazelcast.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We will be using Wikimedia as a real-time data source. Wikimedia provides various streams and APIs (Application Programming Interfaces) to access real-time data about edits and changes made to their projects.&lt;/p&gt;
&lt;p&gt;For example, this source provides a continuous stream of updates on recent changes, such as new edits or additions to Wikipedia articles. Developers and solution architects often use such streams to monitor and analyze the activity on Wikimedia projects in real-time or to build applications that rely on this data, like this tutorial.&lt;/p&gt;</description></item><item><title>Reactive Programming Made Easy</title><link>https://foojayio.github.io/website/today/reactive-programming-made-easy/</link><pubDate>Fri, 14 Jul 2023 08:47:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/reactive-programming-made-easy/</guid><description>&lt;p&gt;This article discusses essential features and tools in IntelliJ IDEA for Reactor developers. These include live templates, a dedicated debug mode, and a couple of inspections.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve got all of the project Reactor adepts and enthusiasts out there covered! Whether you&amp;rsquo;re a seasoned pro or just taking your first steps in the field, IntelliJ IDEA will make reactive coding a breeze. It simplifies the complexities of Reactive Streams, ensuring a smooth and efficient experience for all skill levels.&lt;/p&gt;</description></item><item><title>Dissection of Joeffice: Open Source Office Suite in Java</title><link>https://foojayio.github.io/website/today/dissection-of-joeffice-open-source-office-suite-in-java/</link><pubDate>Tue, 11 Jul 2023 09:33:30 +0000</pubDate><guid>https://foojayio.github.io/website/today/dissection-of-joeffice-open-source-office-suite-in-java/</guid><description>&lt;p&gt;10 years ago, I challenged myself to write an office suite in Java in &lt;a href="https://www.youtube.com/watch?v=6oJyaUzkQVM&amp;amp;list=PLsezR6w8oWsJAKvFuv3JI34PLFFMIxLVA" target="_blank" rel="noopener noreferrer"&gt;30 days&lt;/a&gt;
. This is how the first version of &lt;a href="https://www.joeffice.com/" target="_blank" rel="noopener noreferrer"&gt;Joeffice&lt;/a&gt;
 was born. This created quite some buzz, including articles on &lt;a href="https://tech.slashdot.org/story/13/05/26/0418229/java-developer-says-he-built-launched-basic-open-source-office-suite-in-30-days" target="_blank" rel="noopener noreferrer"&gt;Slashdot&lt;/a&gt;
, &lt;a href="https://arstechnica.com/information-technology/2013/06/joeffice-an-open-source-office-suite-one-developer-built-in-30-days/" target="_blank" rel="noopener noreferrer"&gt;Ars Technica&lt;/a&gt;
 and &lt;a href="https://www.pcworld.com/article/452028/java-developer-says-he-built-launched-basic-open-source-office-suite-in-30-days.html" target="_blank" rel="noopener noreferrer"&gt;PC World&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Last month I released a second update. Let&amp;rsquo;s explore how I did this. By levering Java libraries, I was able to create such a complex piece of software very quickly.&lt;/p&gt;</description></item><item><title>Billions of Messages Per Minute Over TCP/IP</title><link>https://foojayio.github.io/website/today/billions-of-messages-tcp-ip/</link><pubDate>Wed, 05 Jul 2023 21:05:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/billions-of-messages-tcp-ip/</guid><description>&lt;h3 id="h3-0-key-takeaways"&gt;Key Takeaways&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Data consistency is critical when communicating between software components on different machines to ensure information remains in tact.&lt;/li&gt;
&lt;li&gt;Low-latency data exchange requires a different approach than common formats.&lt;/li&gt;
&lt;li&gt;Chronicle&amp;rsquo;s open-source Wire library provides a highly efficient means of marshalling and unmarshalling data for transmission to and from Chronicle Queue.&lt;/li&gt;
&lt;li&gt;Recent additions to the library extend its use with TCP/IP communications channels, offering extremely high throughput.&lt;/li&gt;
&lt;li&gt;Using Wire across TCP/IP opens up the possibility of Cloud Native deployment of Chronicle-based applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="h3-1-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;One of the most important issues when building distributed applications is that of data representation. We must ensure that data sent by a component to a &amp;ldquo;remote&amp;rdquo; component (i.e. one that is part of a different process) is received correctly, with the same values. This may seem straightforward but remember that the communicating components may have been written in completely different languages.&lt;/p&gt;</description></item><item><title>The Curious Case of Different Runtimes</title><link>https://foojayio.github.io/website/today/the-curious-case-of-different-runtimes-with-different-training-data-jit/</link><pubDate>Fri, 30 Jun 2023 08:12:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-curious-case-of-different-runtimes-with-different-training-data-jit/</guid><description>&lt;p&gt;&lt;strong&gt;While running some final tests, we noticed extremely erratic runtime behavior. It was hard to reproduce but very annoying because it means that the application runtime goes up from 5 to almost 14 min. This article tries to show how we diagnosed it and condensed it down to a few test cases. These might hopefully help us to provide some answers. Maybe, but only maybe, we discovered a defect or at least strange edge-case in the JVM.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Rolling Binary Trees: A Guide to Common Design Patterns in Java</title><link>https://foojayio.github.io/website/today/rolling-binary-trees-a-guide-to-common-design-patterns-in-java/</link><pubDate>Wed, 24 May 2023 12:55:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/rolling-binary-trees-a-guide-to-common-design-patterns-in-java/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Binary trees are fundamental data structures, ubiquitous in computer science and software engineering. We use them to represent hierarchical data and implement more complex data structures, such as search trees, syntax trees, cryptographic hash trees, space partitioning trees, heaps, and so on. Common binary tree operations include insertion, deletion, traversal, and rotation.&lt;/p&gt;
&lt;p&gt;A relatively uncommon and unexplored operation is &lt;strong&gt;roll&lt;/strong&gt; , which modifies the structure of a binary tree in such a way that, when visualized, the newly obtained structure appears to be rolled at a 90-degree angle, either clockwise or counterclockwise. This gives us two variants of the roll operation &amp;mdash; &lt;strong&gt;clockwise roll&lt;/strong&gt; (CR) and &lt;strong&gt;counterclockwise roll&lt;/strong&gt; (CCR).&lt;/p&gt;</description></item><item><title>FEPCOS-J (1) – Description, Impression of Usage, Current State</title><link>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-01/</link><pubDate>Wed, 26 Apr 2023 06:09:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/fuchs-2023-fepcos-j-01/</guid><description>&lt;p&gt;&lt;strong&gt;Abstract: FEPCOS-J has arisen in the context of my work in the field of robot sensor networks. It implements a Java-language extension that frees a Java developer from network programming and supports cross-system concurrency. This article gives you an impression of using FEPCOS-J based on a simple example.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So far, FEPCOS-J is a prototype with 1629 lines of Java-code. I develop and test it on my own within a toy robot-based &lt;em&gt;amd64 / x64&lt;/em&gt; &lt;em&gt;Linux&lt;/em&gt; &lt;em&gt;OpenJDK 17&lt;/em&gt; environment, which communicates via a private and secured IPv4-network.&lt;/p&gt;</description></item><item><title>How Not To Skip A Message Even If Your Data Centre Fails</title><link>https://foojayio.github.io/website/today/chronicle-fix-designed-not-to-skip-a-message-even-if-your-data-centre-fails/</link><pubDate>Fri, 07 Apr 2023 15:21:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/chronicle-fix-designed-not-to-skip-a-message-even-if-your-data-centre-fails/</guid><description>&lt;p&gt;A high level of availability of IT services is crucial to prevent disruptions of service that can lead to financial losses, business opportunity losses, data loss, and reputational damage.&lt;/p&gt;
&lt;p&gt;A business&amp;rsquo;s downtime cost can vary depending on its size, nature and the length of the downtime.&lt;/p&gt;
&lt;p&gt;Studies by Network Computing, the Meta Group, and Contingency Planning Research have identified financial services and telecommunications as industries with the highest revenue loss during downtime, demonstrating the importance of FIX engine high availability.&lt;/p&gt;</description></item><item><title>5 Great Reasons to use jOOQ</title><link>https://foojayio.github.io/website/today/5-great-reasons-to-use-jooq/</link><pubDate>Wed, 22 Mar 2023 14:45:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/5-great-reasons-to-use-jooq/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Hi, I&amp;rsquo;m &lt;a href="https://twitter.com/lukaseder" title="Lukas" target="_blank" rel="noopener noreferrer"&gt;Lukas&lt;/a&gt;
. I was invited to talk about the business behind jOOQ on Foojay.io and as a short introduction to &lt;a href="https://www.jooq.org/" title="jOOQ" target="_blank" rel="noopener noreferrer"&gt;jOOQ&lt;/a&gt;
, I&amp;rsquo;d like to highlight 5 great reasons to use it.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Before discussing those reasons:&lt;/p&gt;
&lt;h2 id="h2-0-what-is-jooq"&gt;What is jOOQ&lt;/h2&gt;
&lt;p&gt;jOOQ is an internal &lt;a href="https://en.wikipedia.org/wiki/Domain-specific_language" title="domain-specific language " target="_blank" rel="noopener noreferrer"&gt;domain-specific language&lt;/a&gt;
 (DSL) modelling the SQL language as an API directly in Java.&lt;/p&gt;
&lt;p&gt;This provides compile-time type safety to your query and enables a lot of other interesting features that I&amp;rsquo;ll show later.&lt;/p&gt;</description></item><item><title>Efficient Memory Mapping for Terabyte Sparse Files in Java</title><link>https://foojayio.github.io/website/today/efficient-memory-mapping-for-terabyte-sparse-files-in-java/</link><pubDate>Wed, 15 Mar 2023 11:50:41 +0000</pubDate><guid>https://foojayio.github.io/website/today/efficient-memory-mapping-for-terabyte-sparse-files-in-java/</guid><description>&lt;p&gt;On Linux, you can create &lt;a href="https://en.wikipedia.org/wiki/Sparse_file" title="sparse files" target="_blank" rel="noopener noreferrer"&gt;sparse files&lt;/a&gt;
, where only the pages (of 4 KiB) that are touched utilise either memory or disk space.&lt;/p&gt;
&lt;p&gt;This allows you to memory map large virtual regions without worrying about wasted memory or disk&lt;/p&gt;
&lt;p&gt;In this program, you can see it reserves 8 TiB (8,192 GiB)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/efficient-memory-mapping-for-terabyte-sparse-files-in-java/Screen-Shot-2023-03-06-at-11.11.24-AM-1024x480.png" alt="" loading="lazy"&gt;
&lt;br&gt;
&lt;em&gt;Figure 1. Test 1: Sparse file&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Tip: x &amp;lt;&amp;lt; y means x × 2y therefore:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic"&gt;1L &amp;lt;&amp;lt; 10 = 1 KiB (1024 bytes),
1L &amp;lt;&amp;lt; 20 = 1 MiB (10242 bytes),
1L &amp;lt;&amp;lt; 30 = 1 GiB (10243 bytes),
1L &amp;lt;&amp;lt; 40 = 1 TiB etc&lt;/pre&gt;
&lt;p&gt;Using multiples of 10 for the shift makes them easier to read.&lt;/p&gt;</description></item><item><title>The Right Feature at the Right Place</title><link>https://foojayio.github.io/website/today/the-right-feature-at-the-right-place/</link><pubDate>Tue, 28 Feb 2023 11:08:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-right-feature-at-the-right-place/</guid><description>&lt;p&gt;Before moving to Developer Relations, I transitioned from Software Architect to Solution Architect long ago.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a reasonably common career move.&lt;/p&gt;
&lt;p&gt;The problem in this situation is two-fold:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You know perfectly well software libraries&lt;/li&gt;
&lt;li&gt;You don&amp;rsquo;t know well infrastructure components&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It seems logical that people in this situation try to solve problems with the solutions they are most familiar with.&lt;/p&gt;
&lt;p&gt;However, it doesn&amp;rsquo;t mean it&amp;rsquo;s the best approach.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a bad one in most cases.&lt;/p&gt;</description></item><item><title>The evolution of APIs: From RESTful to Event-Driven</title><link>https://foojayio.github.io/website/today/the-evolution-of-apis-from-restful-to-event-driven/</link><pubDate>Thu, 23 Feb 2023 08:23:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-evolution-of-apis-from-restful-to-event-driven/</guid><description>&lt;h2 id="h2-0-history-of-services-and-apis"&gt;History of Services and APIs&lt;/h2&gt;
&lt;p&gt;Enterprise application landscapes consist of inter-connected and inter-related applications.&lt;/p&gt;
&lt;p&gt;The world of application integrations has been constantly evolving over several years.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/the-evolution-of-apis-from-restful-to-event-driven/evol_APIs-700x284.png" alt="Evolution of APIs" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Over time, we&amp;rsquo;ve observed a trend towards more modular and data model-focused integration components, and an increased emphasis on real-time processing.&lt;/p&gt;
&lt;p&gt;Beginning with EJBs in the 90s, progressing to Webservices and Service-Oriented Architecture (SOA) in the early 2000s, and finally evolving to domain-specific microservices, we are seeing a continual progression towards more efficient and effective integration solutions.&lt;/p&gt;</description></item><item><title>Visualizing Brain Computer Interface Data using JavaFX</title><link>https://foojayio.github.io/website/today/visualizing-brain-computer-interface-data-using-javafx/</link><pubDate>Fri, 09 Dec 2022 09:42:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/visualizing-brain-computer-interface-data-using-javafx/</guid><description>&lt;p&gt;Recently &lt;a href="https://twitter.com/SeanMiPhillips" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sean Phillips&lt;/strong&gt;&lt;/a&gt;
 shared some fascinating screenshots on Twitter and videos on YouTube of &lt;strong&gt;Trinity&lt;/strong&gt;, a JavaFX application he is working on.&lt;/p&gt;
&lt;p&gt;He is a software engineer at the &lt;strong&gt;Johns Hopkins University Applied Physics Laboratory&lt;/strong&gt; (&lt;a href="https://www.jhuapl.edu/" target="_blank" rel="noopener noreferrer"&gt;JHUAPL&lt;/a&gt;
), specializing in data visualization for multiple projects. JHUAPL works on various projects, ranging from medical work, building drones, cyber defense, and brain-computer interfaces to cislunar defense systems.&lt;/p&gt;
&lt;p&gt;The project that caught my eye is a visual exploration tool to test and evaluate machine learning decision-making and decoding systems.&lt;/p&gt;</description></item><item><title>A Poor Man's API</title><link>https://foojayio.github.io/website/today/poor-mans-api/</link><pubDate>Tue, 29 Nov 2022 09:13:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/poor-mans-api/</guid><description>&lt;p&gt;Creating a full-fledged API requires resources, both time and money.&lt;/p&gt;
&lt;p&gt;You need to think about the model, the design, the REST principles, etc., without writing a single line of code.&lt;/p&gt;
&lt;p&gt;Most of the time, you don&amp;rsquo;t know whether it&amp;rsquo;s worth it: you&amp;rsquo;d like to offer a Minimum Viable Product and iterate from there.&lt;/p&gt;
&lt;p&gt;I want to show how you can achieve it without writing a single line of code.&lt;/p&gt;
&lt;h2 id="h2-0-the-solution"&gt;The solution&lt;/h2&gt;
&lt;p&gt;The main requirement of the solution is to use the &lt;a href="https://www.postgresql.org/" target="_blank" rel="noopener noreferrer"&gt;PostgreSQL database&lt;/a&gt;
. It&amp;rsquo;s a well-established Open Source SQL database.&lt;/p&gt;</description></item><item><title>Structured Error Messages for HTTP APIs</title><link>https://foojayio.github.io/website/today/structured-error-messages-http-apis/</link><pubDate>Tue, 01 Nov 2022 11:01:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/structured-error-messages-http-apis/</guid><description>&lt;p&gt;Ever since I started to work on the &lt;a href="https://apisix.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache APISIX&lt;/a&gt;
 project, I&amp;rsquo;ve been trying to improve my knowledge and understanding of REST RESTful HTTP APIs.&lt;/p&gt;
&lt;p&gt;For this, I&amp;rsquo;m reading and watching the following sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Books. At the moment, I&amp;rsquo;m finishing &lt;a href="https://www.manning.com/books/api-design-patterns" target="_blank" rel="noopener noreferrer"&gt;API Design Patterns&lt;/a&gt;
. Expect a review soon.&lt;/li&gt;
&lt;li&gt;YouTube. I&amp;rsquo;d recommend &lt;a href="https://www.youtube.com/ErikWilde" target="_blank" rel="noopener noreferrer"&gt;ErikWilde&amp;rsquo; channel&lt;/a&gt;
. While some videos are better than others, they all focus on APIs.&lt;/li&gt;
&lt;li&gt;s. Most RFCs are not about APIs, but a friendly person compiled a list of the &lt;a href="https://standards.rest/" target="_blank" rel="noopener noreferrer"&gt;ones who are&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today, I&amp;rsquo;d like to introduce the &amp;ldquo;Problem Details for HTTP APIs&amp;rdquo; RFC, &lt;em&gt;aka&lt;/em&gt; , &lt;a href="https://www.rfc-editor.org/rfc/rfc7807" target="_blank" rel="noopener noreferrer"&gt;RFC 7807&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Embracing Java 17: Here’s What We Learned at Picnic</title><link>https://foojayio.github.io/website/today/embracing-java-17-heres-what-we-learned-at-picnic/</link><pubDate>Mon, 30 May 2022 08:10:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/embracing-java-17-heres-what-we-learned-at-picnic/</guid><description>&lt;p&gt;Java 17? Count us in! At &lt;a href="https://picnic.app/nl/" target="_blank" rel="noopener noreferrer"&gt;Picnic&lt;/a&gt;
, we&amp;rsquo;re more than a grocery delivery company.{#eb88}&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a lot of tech behind the scenes that enables us to provide the affordable, sustainable service our customers have come to expect &amp;mdash; and the back end of most of that tech is written in Java.{#eb88}&lt;/p&gt;
&lt;p&gt;So when the new Java 17 release was announced, we were excited to get started.{#eb88}&lt;/p&gt;
&lt;p&gt;Having moved to Java 11 within the quarter after its release, we stepped it up a gear this time and are proudly running Java 17 in production in the same quarter it was released &amp;mdash; we like to move fast!{#eb88}&lt;/p&gt;</description></item><item><title>Hardware Acceleration For Java? TornadoVM Can Do It!</title><link>https://foojayio.github.io/website/today/hardware-acceleration-for-java-tornadovm-can-do-it/</link><pubDate>Fri, 01 Apr 2022 07:37:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/hardware-acceleration-for-java-tornadovm-can-do-it/</guid><description>&lt;p&gt;Java programs can primarily run on x86 and Arm platforms and recent efforts focus on ports to PowerPC and RISC-V.&lt;/p&gt;
&lt;p&gt;Despite the diverse range of ISAs, contemporary computers are equipped with heterogeneous devices, such as Graphics Processing Units (GPUs), Field Programmable Gate Arrays (FPGAs), and Tensor Processing Units (TPUs), which operate as co-processors that offload data processing from the main processor.&lt;/p&gt;
&lt;p&gt;A question that rises is whether such compute power can be utilized by Java programs. The answer is that several frameworks have been created to address this challenge. For instance, &lt;a href="https://www.ibm.com/docs/en/sdk-java-technology/7?topic=i-j9-virtual-machine-jvm-1" target="_blank" rel="noopener noreferrer"&gt;IBM J9&lt;/a&gt;
, &lt;a href="https://aparapi.github.io/" target="_blank" rel="noopener noreferrer"&gt;Aparapi&lt;/a&gt;
, and &lt;a href="https://www.tornadovm.org/" target="_blank" rel="noopener noreferrer"&gt;TornadoVM&lt;/a&gt;
, are frameworks that aid Java programmers to accelerate their programs on heterogeneous hardware devices.&lt;/p&gt;</description></item><item><title>Observability for JVM Frameworks with Grafana in Java and Kotlin</title><link>https://foojayio.github.io/website/today/observability-for-jvm-frameworks-with-grafana-in-java-and-kotlin/</link><pubDate>Wed, 30 Mar 2022 06:30:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/observability-for-jvm-frameworks-with-grafana-in-java-and-kotlin/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/observability-for-jvm-frameworks-with-grafana-in-java-and-kotlin/observ_img1-700x470.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Grafana dashboard for all running frameworks&lt;/p&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In times of Cloud and distributed applications, it is becoming more and more important to be able to evaluate a functionality at runtime, an aspect which is referred to as &lt;a href="https://en.wikipedia.org/wiki/Observability" target="_blank" rel="noopener noreferrer"&gt;observability&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;A Cloud-based application is usually set up as a collection of different subsystems that may be located in one or more network zones or machines. These subsystems communicate with each other by passing messages (signals) and executing desired actions to each other. The whole collection then appears to the end user as a single coherent system.&lt;/p&gt;</description></item><item><title>Beautify Third-Party APIs with Kotlin</title><link>https://foojayio.github.io/website/today/beautify-third-party-api-kotlin/</link><pubDate>Tue, 21 Dec 2021 08:15:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/beautify-third-party-api-kotlin/</guid><description>&lt;p&gt;Scala has popularized the &amp;ldquo;Pimp my library&amp;rdquo; pattern:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is just a fancy expression to refer to the ability to supplement a library using implicit conversions.&lt;/p&gt;
&lt;p&gt;&amp;ndash; &lt;a href="https://www.baeldung.com/scala/pimp-my-library-pattern" target="_blank" rel="noopener noreferrer"&gt;Pimp My Library Pattern in Scala&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kotlin does provide the same capability. However, it achieves it via &lt;em&gt;extension functions&lt;/em&gt;. While the generated bytecode is similar to Java&amp;rsquo;s static methods, the developer experience is the same as adding functions to existing types.&lt;/p&gt;
&lt;p&gt;This approach has limitations, though. One cannot update the type hierarchy.&lt;/p&gt;</description></item><item><title>Multiple Spring Boot Applications in the Same Project</title><link>https://foojayio.github.io/website/today/multiple-spring-boot-apps-same-project/</link><pubDate>Wed, 08 Dec 2021 16:42:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/multiple-spring-boot-apps-same-project/</guid><description>&lt;p&gt;I frequently use the &lt;a href="https://spring.io/projects/spring-boot" target="_blank" rel="noopener noreferrer"&gt;Spring Boot&lt;/a&gt;
 framework in my demos. The latest one is no different. It shows how to achieve using two different code paths:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the command part is implemented via &lt;a href="https://spring.io/projects/spring-data-jpa" target="_blank" rel="noopener noreferrer"&gt;Spring Data JPA&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;the query part via &lt;a href="https://www.jooq.org/" target="_blank" rel="noopener noreferrer"&gt;jOOQ&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My use case is a banking application that offers a REST layer allowing clients to call any parts. Demoing the query part is easy enough with &lt;code&gt;curl&lt;/code&gt; as the URL is not complex:&lt;/p&gt;</description></item><item><title>Visual Recognition for Chess with Deep Learning in Java on Android</title><link>https://foojayio.github.io/website/today/visual-recognition-for-chess-with-deep-learning-in-java-on-android/</link><pubDate>Thu, 11 Nov 2021 20:07:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/visual-recognition-for-chess-with-deep-learning-in-java-on-android/</guid><description>&lt;p&gt;&lt;strong&gt;Find out how can you use AI in Java to build applications that can see and understand the world. This article describes an Android chessboard position scanner built with pure Java deep learning engine &lt;a href="https://www.deepnetts.com/" target="_blank" rel="noopener noreferrer"&gt;Deep Netts&lt;/a&gt;
.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Over the last few decades, the technological advancement in the Artificial Intelligence (AI) field has greatly assisted many chess grand masters&amp;rsquo; preparation as well as understanding chess theory. There are programs called chess engines, like Bagatur, Stockfish, and Komodo, which play extremely strong chess. These engines make deep and beautiful moves, but sometimes these moves are difficult to understand even by chess experts. Clearly, AI/ML has allowed chess engines to become quite advanced, but they are only one aspect of the story. There are more applications of AI/ML in playing the game of chess.&lt;/p&gt;</description></item><item><title>Hazelcast + Kibana: Best Buddies for Exploring &amp; Visualizing Data</title><link>https://foojayio.github.io/website/today/hazelcast-kibana-best-buddies-for-exploring-visualizing-data/</link><pubDate>Thu, 04 Nov 2021 14:22:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/hazelcast-kibana-best-buddies-for-exploring-visualizing-data/</guid><description>&lt;p&gt;A lot, if not all, data science projects require some data visualization front-end to display the results for humans to analyze. Python seems to boast the most potent libraries, but do not lose hope if you&amp;rsquo;re a Java developer (or if you&amp;rsquo;re proficient in another language as well).&lt;/p&gt;
&lt;p&gt;In this article I will describe how you can benefit from such a data visualization front-end without writing a single line of code.&lt;/p&gt;</description></item><item><title>Timely Computation of Derived Values</title><link>https://foojayio.github.io/website/today/timely-computation-derived-values/</link><pubDate>Fri, 10 Sep 2021 09:22:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/timely-computation-derived-values/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/real-world-stream-collector/"&gt;a recent article here on Foojay&lt;/a&gt;
, on a real world stream collector, I described the use-case of an e-commerce shop.&lt;/p&gt;
&lt;p&gt;In general, interactions in such a shop are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can browse a catalog of items&lt;/li&gt;
&lt;li&gt;Each item has a price tag&lt;/li&gt;
&lt;li&gt;You can put x items in your cart&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is where the exciting part starts.&lt;/p&gt;
&lt;p&gt;On most pages, you want to give users a condensed view of their cart&amp;rsquo;s state.&lt;/p&gt;</description></item><item><title>Deep Learning in Java for Drug Discovery</title><link>https://foojayio.github.io/website/today/deep-learning-in-java-for-drug-discovery/</link><pubDate>Fri, 20 Aug 2021 09:28:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/deep-learning-in-java-for-drug-discovery/</guid><description>&lt;p&gt;In the age of big-data, rising pharmaceutical costs, and an ever-increasing market demand, it is becoming apparent that drug design strategies need to adapt in order to meet patients&amp;rsquo; therapeutic needs for a host of medical conditions.&lt;/p&gt;
&lt;p&gt;Costly and time-intensive experimental work is one of the main bottlenecks in the drug discovery pipeline, which can take up to a decade, while experiencing a failure profile of up to 95% before a molecular candidate can be approved for patient use.&lt;/p&gt;</description></item><item><title>GitLab: Your Continuous Deployment One-Stop Shop</title><link>https://foojayio.github.io/website/today/gitlab-continuous-deployment-one-stop-shop/</link><pubDate>Wed, 04 Aug 2021 07:44:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/gitlab-continuous-deployment-one-stop-shop/</guid><description>&lt;p&gt;This week, I want to take a break from my Rust series and focus on a different subject. I&amp;rsquo;ve already written about &lt;a href="https://blog.frankel.ch/my-blogging-stack-publishing-process/" target="_blank" rel="noopener noreferrer"&gt;my blogging stack&lt;/a&gt;
 in detail.&lt;/p&gt;
&lt;p&gt;However, I didn&amp;rsquo;t touch on one facet and that facet is how I generate the static pages from Jekyll. As I describe in the blog post, I&amp;rsquo;ve included quite a couple of customizations. Some of them require external dependencies, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A for PlantUML diagrams generation&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;graphviz&lt;/em&gt; package for the same reason&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in all, it means that I require a fully configured system. I solved this problem by using containerization, namely Docker. Within the &lt;code&gt;Dockerfile&lt;/code&gt;, I&amp;rsquo;m able to install all required dependencies. Then, in my GitLab build file, I can reference this image and benefit from all its capabilities.&lt;/p&gt;</description></item><item><title>SKP's Primer: Failures, Pitfalls, and Disadvantages of Microservices</title><link>https://foojayio.github.io/website/today/skps-definitive-primer-failures-pitfalls-and-disadvantages-of-microservices/</link><pubDate>Mon, 02 Aug 2021 09:35:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/skps-definitive-primer-failures-pitfalls-and-disadvantages-of-microservices/</guid><description>&lt;p&gt;&lt;strong&gt;[About SKP&amp;rsquo;s Definitive Microservices Primer]&lt;/strong&gt;&lt;br&gt;
Series of Articles on Microservices Architecture. They Revolve Around Microservices Strategy, Decision Making, Monolithic vs Microservices, Microservices Infrastructure, Failures &amp;amp; Pitfalls of Microservices, Microservices Design Patterns, Database Design, Security, Logging, Messaging, Containerization, Cloud Providers and Everything that is Microservices and More!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="h2-0-intro-to-microservices-adoption-in-real-world"&gt;Intro to Microservices Adoption in Real World&lt;/h2&gt;
&lt;p&gt;Microservices Adoption is almost becoming the normal in almost all software product and it services organizations. Hereby, i am taking this opportunity to make you aware of the Real-World Issues (Case Studies) that are faced by organizations (small, mid, large) of all sizes in migrating or adopting microservices. Since learning from other&amp;rsquo;s mistakes and knowing the pitfalls upfront help us prepare and plan better - this article will be helpful for those planning a shift to the Microservices Strategy organization-wide or simply making a move from Monolithic to Microservices Architecture.&lt;/p&gt;</description></item><item><title>Primitive Set Operations in Eclipse Collections — Part 2</title><link>https://foojayio.github.io/website/today/primitive-set-operations-in-eclipse-collections-part-2/</link><pubDate>Tue, 22 Jun 2021 22:58:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/primitive-set-operations-in-eclipse-collections-part-2/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/primitive-set-operations-in-eclipse-collections-part-2/foojay-2-featured.png" alt="Primitive Set Operations in Eclipse Collections - Part 2" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Primitive Set Operations in Eclipse Collections - Part 2{#caption-attachment-45284}&lt;/p&gt;
&lt;p&gt;Continuing &lt;a href="https://foojayio.github.io/website/today/primitive-set-operations-in-eclipse-collections/"&gt;from Part 1&lt;/a&gt;
, in the Eclipse Collections 11.0 release, we will have the following Set operations &lt;code&gt;union&lt;/code&gt;, &lt;code&gt;intersect&lt;/code&gt;, &lt;code&gt;difference&lt;/code&gt;, &lt;code&gt;symmetricDifference&lt;/code&gt;, &lt;code&gt;isSubsetOf&lt;/code&gt;, &lt;code&gt;isProperSubsetOf&lt;/code&gt;, &lt;code&gt;cartesianProduct&lt;/code&gt; on primitive collections.&lt;/p&gt;
&lt;img decoding="async" aria-describedby="caption-attachment-45283" class="wp-image-45283 size-medium" src="Set_Operations-4-700x444.png" alt="Set Operations that will be available on primitive sets in Eclipse Collections 11.0." width="700" height="444"&gt;
&lt;p&gt;Set Operations that will be available on primitive sets in Eclipse Collections 11.0.{#caption-attachment-45283}&lt;/p&gt;</description></item><item><title>Querying Your In-Memory-Data-Grid: Why and How?</title><link>https://foojayio.github.io/website/today/querying-your-in-memory-data-grid-why-and-how/</link><pubDate>Fri, 21 May 2021 07:11:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/querying-your-in-memory-data-grid-why-and-how/</guid><description>&lt;blockquote&gt;
&lt;p&gt;An in-memory data grid (IMDG) is a set of networked/clustered computers that pool together their random access memory (RAM) to let applications share data with other applications running in the cluster. Though IMDGs are sometimes generically described as a distributed in-memory data store, IMDGs offer more than just storage. IMDGs are built for data processing at extremely high speeds. They are designed for building and running large-scale applications that need more RAM than is typically available in a single computer server. This enables the highest application performance by using RAM along with the processing power of multiple computers that run tasks in parallel. IMDGs are especially valuable for applications that do extensive parallel processing on large data sets.&lt;/p&gt;</description></item><item><title>A Real-World Example of a Stream Collector</title><link>https://foojayio.github.io/website/today/real-world-stream-collector/</link><pubDate>Fri, 07 May 2021 07:34:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/real-world-stream-collector/</guid><description>&lt;p&gt;Java Stream&amp;rsquo;s &lt;code&gt;Collectors&lt;/code&gt; methods fit most use-cases. They allow returning either a &lt;code&gt;Collection&lt;/code&gt; or a scalar. For the former, you use one of the &lt;code&gt;toXXX()&lt;/code&gt; method, for the latter, one of the &lt;code&gt;reducing()&lt;/code&gt; one.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s imagine an e-commerce platform that implements a shopping cart. The cart is modeled as the following:&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="aligncenter size-medium wp-image-44825" src="cart-700x332.png" alt="" width="700" height="332"&gt;
&lt;br /&gt;
&lt;p&gt;This diagram might translate into the following (abridged) code:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-highlight="3-5, 14, 17"&gt;public class Product {

 private final Long id; // 1
 private final String label; // 1
 private final BigDecimal price; // 1

 public Product(Long id, String label, BigDecimal price) {
 this.id = id;
 this.label = label;
 this.price = price;
 }

 @Override
 public boolean equals(Object object ) { ... } // 2

 @Override
 public int hashCode() { ... } // 2
}&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Getters&lt;/li&gt;
&lt;li&gt;Only depend on &lt;code&gt;id&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;public class Cart {

 private final Map&amp;lt;Product, Integer&amp;gt; products = new HashMap&amp;lt;&amp;gt;(); // 1

 public void add(Product product) {
 add(product, 1);
 }

 public void add(Product product, int quantity) {
 products.merge(product, quantity, Integer::sum);
 }

 public void remove(Product product) {
 products.remove(product);
 }

 public void setQuantity(Product product, int quantity) {
 products.put(product, quantity);
 }

 public Map&amp;lt;Product, Integer&amp;gt; getProducts() {
 return Collections.unmodifiableMap(products); // 2
 }
}&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Organize products into a map. The key is the &lt;code&gt;Product&lt;/code&gt;; the value is the quantity.&lt;/li&gt;
&lt;li&gt;Remember to return a read-only copy of the collection to maintain encapsulation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once we have defined how we store data in memory, we need to design how to display the cart on-screen. We know that the checkout screen needs to show two different bits of information:&lt;/p&gt;</description></item><item><title>Creating CAD Applications with Java and JavaFX</title><link>https://foojayio.github.io/website/today/creating-cad-applications-with-java-and-javafx/</link><pubDate>Wed, 09 Dec 2020 11:26:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/creating-cad-applications-with-java-and-javafx/</guid><description>&lt;p&gt;I&amp;rsquo;m a &lt;a href="http://www.pixelduke.com/" target="_blank" rel="noopener noreferrer"&gt;Java (JavaFX) freelance consultant, Software Engineer and Software Designer&lt;/a&gt;
 and a few months ago I finished a CAD application for a client.&lt;/p&gt;
&lt;p&gt;This is a CAD application whose purpose is to calculate the energy efficiency of Dwellings (or multiple Dwellings). It can be seen as an application similar to Autocad (which is used in Civil Engineering, Architecture, etc) but with the specific purpose to do energy efficiency assessment.
&lt;img src="https://foojayio.github.io/website/today/creating-cad-applications-with-java-and-javafx/showcase-model-view-1024x555.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item></channel></rss>