<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Research on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/research/</link><description>Recent content in Research on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 11 Jun 2026 09:06:23 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/research/index.xml" rel="self" type="application/rss+xml"/><item><title>JC-AI Newsletter #16</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-16/</link><pubDate>Tue, 09 Jun 2026 18:28:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-16/</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 going away. It is here to stay, and understanding its evolution is essential from many perspectives. Have you ever wondered what harness engineering is, how evals attempt to move traditional unit tests onto a probabilistic plane, or how AI is reshaping entire industries across various branches? Let&amp;rsquo;s start.&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>JC-AI Newsletter #14</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-14/</link><pubDate>Tue, 03 Mar 2026 15:11:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-14/</guid><description>&lt;p&gt;&lt;strong&gt;Two&lt;/strong&gt; weeks have passed and a lot have been happening on the field of artificial-intelligence.&lt;/p&gt;
&lt;p&gt;Two weeks have passed and a lot has been silently yet visibly happening in the field of artificial intelligence. This newsletter brings interesting developments, including Dario Amodei&amp;rsquo;s (Anthropic) view on the progress achieved in the LLM field and his response to the utilization of these models for specific kinds of military purposes, as well as OpenAI&amp;rsquo;s response to it. Aside from the fact that development may follow more sigmoids instead of exponential progress, it is important to have awareness of utilization across branches. Does prompting and clarifying the goal influence agent responses, and if so, how? How far are we from reliable robotics applications? How much bias is introduced when clinical data is being analyzed?&lt;/p&gt;</description></item><item><title>From “Crypto AI” to general AI: Do AI agents dream of electric langoustines?</title><link>https://foojayio.github.io/website/today/from-crypto-ai-to-general-ai-do-ai-agents-dream-of-electric-langoustines/</link><pubDate>Mon, 23 Feb 2026 18:11:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/from-crypto-ai-to-general-ai-do-ai-agents-dream-of-electric-langoustines/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/from-crypto-ai-to-general-ai-do-ai-agents-dream-of-electric-langoustines/daydreams-2-scaled.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;A Blade Runner riff for a world where the lobster ships paid endpoints while humans still argue about the roadmap.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-shift-that-matters-for-agent-commerce-from-crypto-ai-to-general-ai"&gt;The shift that matters for agent commerce - From &amp;ldquo;Crypto AI&amp;rdquo; to general AI&lt;/h2&gt;
&lt;p&gt;Today, you can search the web all day and never see an invoice.&lt;/p&gt;
&lt;p&gt;That happens because you are not the paying client.&lt;/p&gt;
&lt;p&gt;The commerce runs through ads, affiliate deals, and platform incentives, so results often optimize for who pays, not for what you asked for.&lt;/p&gt;</description></item><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>Enterprise Java in Practice</title><link>https://foojayio.github.io/website/today/enterprise-java-in-practice-fragmentation-platforms-and-real-world-trade-offs/</link><pubDate>Thu, 29 Jan 2026 10:11:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/enterprise-java-in-practice-fragmentation-platforms-and-real-world-trade-offs/</guid><description>&lt;p&gt;Enterprise Java has matured into one of the most stable and widely adopted ecosystems in software development. Yet for many teams, the biggest challenges no longer come from the language itself, but from the complexity of the environments built around it.&lt;/p&gt;
&lt;p&gt;Modern enterprise Java teams are dealing with a mix of legacy Java EE applications, Jakarta EE runtimes, microservices, container platforms, cloud-native deployments, and increasingly sophisticated DevOps pipelines. The result is an ecosystem that is powerful, but often fragmented across frameworks, runtimes, tooling, and operational models.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #12</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-12/</link><pubDate>Wed, 14 Jan 2026 07:15:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-12/</guid><description>&lt;p&gt;&lt;strong&gt;F&lt;/strong&gt; irst of all, &lt;strong&gt;Happy New Year 2026!&lt;/strong&gt; This year is designated in the Chinese Calendar as the Year of the Fire Horse (starting on February 17.). The year 2026 brings not only tremendous energy to AI development but also, in my humble opinion, many breakthroughs in the field.&lt;/p&gt;
&lt;p&gt;Although there have been many small steps toward the field&amp;rsquo;s evolution, it often feels that development is stagnating, applying known or slightly tweaked strategies to non-deterministic problems while expecting deterministic results. This includes the often misleading benchmarking strategies (deterministic) performed on synthetic datasets.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #11</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-11/</link><pubDate>Tue, 09 Dec 2025 16:12:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-11/</guid><description>&lt;p&gt;&lt;strong&gt;F&lt;/strong&gt;ourteen 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;/p&gt;
&lt;p&gt;&lt;strong&gt;T&lt;/strong&gt;his newsletter explores the evolution of agentic AI systems, provides valuable insights into the Chain-of-Thought (CoT) approach, Vibe coding, and discusses the pattern-matching capabilities of LLMs. The newsletter features an insightful interview with Stuart J. Russell, known for his significant contributions to the AI field. Even more exciting is the published paper by Apple researchers titled &amp;lsquo;The Illusion of Thinking&amp;hellip;&amp;rsquo; and several immediate reactions to the authors&amp;rsquo; conclusions, which allow newsletter readers to observe current research challenges and scientific community responses. This provides readers with a vital picture of the state-of-the-art in AI research.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #10</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-10/</link><pubDate>Wed, 26 Nov 2025 18:39:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-10/</guid><description>&lt;p&gt;&lt;strong&gt;F&lt;/strong&gt;ourteen 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;/p&gt;
&lt;p&gt;This newsletter focuses on examining how agentic AI systems improve accuracy, tutorials on agentic system architecture, and importnat security challenges arising from increased not only from agentic AI systems adoption. This edition of the AI newsletter includes compelling discussions and interviews about the future of AI and approaches.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #9</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-9/</link><pubDate>Wed, 12 Nov 2025 15:21:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-9/</guid><description>&lt;p&gt;&lt;strong&gt;F&lt;/strong&gt;ourteen 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;/p&gt;
&lt;p&gt;This newsletter focuses on examining how AI enhances productivity through enterprise studies, tutorial, agentic system architecture, GraphRAG, evaluating risk methodologies in agentic systems, and the security challenges arising from increased AI-LLM adoption. This edition of the AI newsletter includes a compelling discussion between six of the most influential leaders in artificial intelligence, along with additional content.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter: Easy Access to Expanding Challenges</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-easy-access-to-expanding-challenges/</link><pubDate>Tue, 04 Nov 2025 18:13:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-easy-access-to-expanding-challenges/</guid><description>&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt; few months ago, I launched the &lt;a href="https://foojayio.github.io/website/today/category/jc-ai-newsletter/"&gt;AI Newsletter&lt;/a&gt;
 to provide a minimally biased perspective on the growing challenges surrounding artificial intelligence.&lt;/p&gt;
&lt;p&gt;My primary motivation was and remains to be serving the community not only by showing how to use and access specific services for utilizing Large Language Models, but also by support a deeper understanding of the broader artificial intelligence landscape.&lt;/p&gt;
&lt;p&gt;Many of the core challenges that have emerged around LLMs have not been and still not properly addressed, often omitted due to their uncomfortable implications.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #7</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-7/</link><pubDate>Tue, 14 Oct 2025 05:35:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-7/</guid><description>&lt;p&gt;&lt;strong&gt;Fourteen days have passed, and it is time to present a fresh collection of readings that could influence developments in the field of artificial intelligence.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Beyond focused tutorials that can enhance your understanding of AI applications, this newsletter concentrates on Hallucination, Java Code Generation, Testing, Agentic System Architecture and LLM benchmarking methodologies designed to ensure models accuracy and competency in handling complex contextual information.&lt;/p&gt;
&lt;p&gt;The world influenced by LLM is changing very quickly, let&amp;rsquo;s start&amp;hellip;&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #5</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-5/</link><pubDate>Thu, 18 Sep 2025 07:19:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-5/</guid><description>&lt;h3 id="h3-0-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"&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;/h3&gt;
&lt;p&gt;Beyond opinion pieces and Java focused tutorials that can enhance your understanding of AI applications, this newsletter concentrates on LLM benchmarking methodologies designed to ensure models accuracy and competency in handling complex contextual information.&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>Research: Measuring Energy Consumption in Programming Languages for AI Applications</title><link>https://foojayio.github.io/website/today/research-measuring-energy-consumption-in-programming-languages-for-ai-applications/</link><pubDate>Mon, 15 Sep 2025 07:03:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/research-measuring-energy-consumption-in-programming-languages-for-ai-applications/</guid><description>&lt;p&gt;&lt;strong&gt;Decades ago, I contributed to a very interesting project called &lt;a href="https://sunspotdev.org/#" title="SunSPOT " target="_blank" rel="noopener noreferrer"&gt;SunSPOT&lt;/a&gt;
at SUN Microsystems. It was a small device with wireless connectivity, built-in sensors, running on Java (compatible with runtime 1.6), and powered by battery. It enabled the design of small applications and the connection of additional hardware, or simply the utilization of available sensors. Later, together with Markus Hirt, we created the &lt;a href="https://github.com/Robo4J/robo4j" title="Robo4j framework" target="_blank" rel="noopener noreferrer"&gt;Robo4j framework&lt;/a&gt;
. A small and lightweight Java framework that enables rapid assembly of robots or other IoT systems (JDK 21+). In Robo4j, we primarily used the&lt;a href="https://www.pi4j.com/blog/" title=" Pi4j project" target="_blank" rel="noopener noreferrer"&gt;Pi4j project&lt;/a&gt;
 for handling I/O operations on the Raspberry Pi platform with drivers created for specific hardware.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #4</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-4/</link><pubDate>Tue, 02 Sep 2025 20:27:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-4/</guid><description>&lt;p&gt;14 days have passed and it&amp;rsquo;s time for a new batch of readings that could shape developments in the field of artificial intelligence.&lt;/p&gt;
&lt;p&gt;The current newsletter vol. 4 offers us a closer look at several different areas of artificial intelligence. We start with the topic of energy consumption and the environmental impact of systems serving artificial intelligence, and continue with automation, how we obtain data for RAG, robustness of GenAI systems, vibe-coding and more.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #3</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-3/</link><pubDate>Tue, 19 Aug 2025 08:06:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-3/</guid><description>&lt;p&gt;&lt;strong&gt;The &lt;a href="https://foojayio.github.io/website/today/ai-newsletter-1/" title="first"&gt;first&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/jc-ai-newsletter-2/" title="second"&gt;second&lt;/a&gt;
 newsletters introduced a 14-day cadence, and even though it is the holiday season for many of us, we are sticking to the promised period.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The current newsletter vol.3, brings a collection of valuable articles focusing on challenges that are commonly reported through reported breakthroughs in the field of artificial intelligence. Although some articles may remain open or contain suggestions for future research due to the intensive development and utilization efforts of agentic AI systems, these articles can be considered valuable to the community, increasing awareness and understanding of ongoing challenges.&lt;/p&gt;</description></item><item><title>Do we understand the value of AI knowledge ?</title><link>https://foojayio.github.io/website/today/do-we-understand-the-value-of-ai-knowledge/</link><pubDate>Tue, 12 Aug 2025 11:26:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/do-we-understand-the-value-of-ai-knowledge/</guid><description>&lt;h3 id="h3-0-i-remember-the-first-time-i-saw-a-diagram-of-a-neuron-img-1-i-was-a-school-kid-and-among-other-hobbies-i-was-interested-in-the-human-brain-it-fascinated-me-i-borrowed-a-book-from-the-bookstore-to-find-out-how-it-all-worked-because-these-cells-are-responsible-for-more-than-just-the-functioning-of-the-human-species"&gt;I remember the first time I saw a diagram of a neuron (&lt;em&gt;Img.1.&lt;/em&gt;). I was a school kid, and among other hobbies, I was interested in the human brain, it fascinated me. I borrowed a book from the bookstore to find out how it all worked, because these cells are responsible for more than just the functioning of the human species.&lt;/h3&gt;
&lt;img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-117093" class="size-medium wp-image-117093" src="20250810_Neuron_wiki-700x451.png" alt="" width="700" height="451"&gt;
&lt;p&gt;&lt;em&gt;Img.1.: Anatomy of multipolar neuron&lt;/em&gt;{#caption-attachment-117093}&lt;/p&gt;
&lt;h2 id="h2-1-simplification-of-neuron-perceptron"&gt;Simplification of neuron, perceptron&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;I&lt;/strong&gt; took a university course focused on neural networks and their applications, basically research, in engineering and control systems. It was a lot of fun because the neuron was simplified into an abstraction presented as a perceptron (&lt;em&gt;Img.2.&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>Pattern-matching across different languages</title><link>https://foojayio.github.io/website/today/pattern-matching-across-different-languages/</link><pubDate>Tue, 05 Aug 2025 07:40:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/pattern-matching-across-different-languages/</guid><description>&lt;p&gt;Pattern matching is a major feature in software development. While pattern matching applies in several locations, its current usage is limited to &lt;code&gt;switch case&lt;/code&gt; blocks. I want to compare the power of pattern matching across a couple of programming languages I&amp;rsquo;m familiar with in this post.&lt;/p&gt;
&lt;p&gt;I assume that every reader is familiar with the &lt;code&gt;switch case&lt;/code&gt; syntax inherited from C. In short:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;switch&lt;/code&gt; clause references a value-returning statement&lt;/li&gt;
&lt;li&gt;Each &lt;code&gt;case&lt;/code&gt; clause sets another statement; if the value matches the statement, it executes the related block&lt;/li&gt;
&lt;li&gt;&lt;code&gt;case&lt;/code&gt; clauses are evaluated in order. The first clause that matches gets its block executed&lt;/li&gt;
&lt;li&gt;In C, &lt;code&gt;case&lt;/code&gt; clauses are fall-through; you need to explicitly &lt;code&gt;break&lt;/code&gt; to escape the &lt;code&gt;switch&lt;/code&gt;, otherwise, the next &lt;code&gt;case&lt;/code&gt; is evaluated&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-java-s-pattern-matching"&gt;Java&amp;rsquo;s pattern matching&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ll start with Java, as it was the first programming language I used in a professional context.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #2</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-2/</link><pubDate>Tue, 05 Aug 2025 06:30:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-2/</guid><description>&lt;h3 id="h3-0-in-the-first-newsletter-we-introduced-a-14-day-cadence-which-means-that-this-week-it-s-time-for-a-new-collection-of-articles-from-the-fields-of-ai-llm-java-and-more"&gt;&lt;strong&gt;I&lt;/strong&gt; n &lt;a href="https://foojayio.github.io/website/today/ai-newsletter-1/"&gt;the first newsletter&lt;/a&gt;
, we introduced a 14-day cadence, which means that this week it&amp;rsquo;s time for a new collection of articles from the fields of AI, LLM, Java and more.&lt;/h3&gt;
&lt;p&gt;The JC-AI Newsletter Vol.2 brings again a very interesting collection of articles worth considering.&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;
&lt;h3 id="h3-1-article-openai-ceo-sam-altman-warns-of-an-ai-fraud-crisis"&gt;article: &lt;a href="http:https://edition.cnn.com/2025/07/22/tech/openai-sam-altman-fraud-crisis//" title="OpenAI CEO Sam Altman warns of an AI ‘fraud crisis’"&gt;OpenAI CEO Sam Altman warns of an AI &amp;lsquo;fraud crisis&amp;rsquo;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;author&lt;/strong&gt; : Clare Duffy, CNN&lt;br&gt;
&lt;strong&gt;date&lt;/strong&gt; : 2025-07-22&lt;br&gt;
&lt;strong&gt;desc.&lt;/strong&gt;: Sam Altman discusses the serious potential for current AI abuse. Although the example of attacks on financial institutions is mentioned, Sam Altman warns of the broader impact before one even takes advantage of LLM agent systems.&lt;/p&gt;</description></item><item><title>AI Newsletter #1</title><link>https://foojayio.github.io/website/today/ai-newsletter-1/</link><pubDate>Tue, 22 Jul 2025 05:39:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/ai-newsletter-1/</guid><description>&lt;p&gt;&lt;strong&gt;There is a lot going on in today&amp;rsquo;s technological world, but the most intense and vibrant area is undoubtedly the field of artificial intelligence. After brainstorming, our Java Champion Education group agreed to create a newsletter with a 14 days cadence. In our newsletters, we will include a collection of recently read interesting resources in the field of artificial intelligence with a short description.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Although the stream of published articles is very large and the ability to read them all is an illusion, the published selection, such as the below is implicitly narrowed. The purpose of the AI Newsletter is to help everyone stay informed and expand their knowledge in areas related to artificial intelligence.&lt;/p&gt;</description></item><item><title>Getting a single value from a device's state in Home Assistant</title><link>https://foojayio.github.io/website/today/getting-a-single-value-from-a-devices-state-in-home-assistant/</link><pubDate>Sat, 31 May 2025 09:27:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-a-single-value-from-a-devices-state-in-home-assistant/</guid><description>&lt;p&gt;I recently acquired &lt;a href="https://www.netatmo.com/en-eu/additional-smart-radiator-valve" target="_blank" rel="noopener noreferrer"&gt;Netatmo smart radiator valves&lt;/a&gt;
 to manage my rooms&amp;rsquo; temperature remotely. I&amp;rsquo;m not skilled at manual tasks, but I could easily replace the old thermo-static valves. I then registered the smart ones in the Netatmo app. Finally, I integrated them in my Home Assistant via the dedicated &lt;a href="https://www.home-assistant.io/integrations/netatmo/" target="_blank" rel="noopener noreferrer"&gt;Netatmo integration&lt;/a&gt;
. Everything was very straightforward.&lt;/p&gt;
&lt;p&gt;I noticed that each valve not only allows remote control but also offers a state with several attributes. I wanted to extract the room&amp;rsquo;s temperature indicator from it. It was not as easy as I thought it was, so I want to describe how I managed to achieve it.&lt;/p&gt;</description></item><item><title>The try block in Rust</title><link>https://foojayio.github.io/website/today/the-try-block-in-rust/</link><pubDate>Wed, 09 Apr 2025 12:37:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-try-block-in-rust/</guid><description>&lt;p&gt;I wrote previously about &lt;a href="https://blog.frankel.ch/error-management-rust-libs/" target="_blank" rel="noopener noreferrer"&gt;libs for error management in Rust&lt;/a&gt;
. This week, I want to write about the &lt;code&gt;try&lt;/code&gt; block, an experimental feature.&lt;/p&gt;
&lt;h2 id="h2-0-the-limit-of-the-operator"&gt;The limit of the &lt;code&gt;?&lt;/code&gt; operator&lt;/h2&gt;
&lt;p&gt;Please check the above article for a complete refresher on error management in general and the &lt;code&gt;?&lt;/code&gt; operator in particular. In short, &lt;code&gt;?&lt;/code&gt; allows to hook into a function call that returns a &lt;code&gt;Result&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the &lt;code&gt;Result&lt;/code&gt; contains a value, it continues normally&lt;/li&gt;
&lt;li&gt;If it contains an error, it short-circuits and returns the &lt;code&gt;Result&lt;/code&gt; to the calling function.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="rust"&gt;fn add(str1: &amp;amp;str, str2: &amp;amp;str) -&amp;gt; Result&amp;lt;i8, ParseIntError&amp;gt; {
 Ok(str1.parse::&amp;lt;i8&amp;gt;()? + str2.parse::&amp;lt;i8&amp;gt;()?)
}

fn main() {
 print!("{:?}", add("1", "2"));
 print!("{:?}", add("1", "a"));
}&lt;/pre&gt;
&lt;p&gt;The output is the following:&lt;/p&gt;</description></item><item><title>WebAssembly on Kubernetes</title><link>https://foojayio.github.io/website/today/webassembly-on-kubernetes/</link><pubDate>Tue, 25 Mar 2025 10:32:31 +0000</pubDate><guid>https://foojayio.github.io/website/today/webassembly-on-kubernetes/</guid><description>&lt;p&gt;Like a couple of innovative technologies, different people have different viewpoints on where WebAssembly fits the technology landscape.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;WebAssembly (also called Wasm) is certainly the subject of much hype right now. But what is it? Is it the JavaScript Killer? Is it a new programming language for the web? Is it (as we like to say) the next wave of cloud compute? We&amp;rsquo;ve heard it called many things: a better eBPF, the alternative to RISC V, a competitor to Java (or Flash), a performance booster for browsers, a replacement for Docker.&lt;/p&gt;</description></item><item><title>The Home Assistant Model</title><link>https://foojayio.github.io/website/today/the-home-assistant-model/</link><pubDate>Mon, 09 Dec 2024 15:58:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-home-assistant-model/</guid><description>&lt;p&gt;Home Assistant (&lt;a href="https://www.home-assistant.io/" target="_blank" rel="noopener noreferrer"&gt;home-assistant.io&lt;/a&gt;
) is a massive beast. It can be overwhelming for a newcomer; it was for me.&lt;/p&gt;
&lt;p&gt;In this article, I want to describe the underlying model of Home Assistant, which is a good entry point for your home automation journey.&lt;/p&gt;
&lt;p&gt;The biggest issue in describing the Home Assistant is the number of conflicting sources for this model:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;helpers&lt;/code&gt; package of the &lt;a href="https://github.com/home-assistant/core/tree/dev/homeassistant/helpers" target="_blank" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The database; disclaimer: I didn&amp;rsquo;t find the schema generation in the code, and I wasn&amp;rsquo;t bold enough to check the deployed SQLite database&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://www.home-assistant.io/getting-started/concepts-terminology/" target="_blank" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The web interface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As far as I understand it, here&amp;rsquo;s the conceptual model.&lt;/p&gt;</description></item><item><title>Why Home Assistant</title><link>https://foojayio.github.io/website/today/why-home-assistant/</link><pubDate>Mon, 09 Dec 2024 15:54:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-home-assistant/</guid><description>&lt;p&gt;&lt;strong&gt;Last June, I spoke at &lt;a href="https://program.berlinbuzzwords.de/bbuzz24/talk/HMQMDH/" target="_blank" rel="noopener noreferrer"&gt;Berlin Buzzwords&lt;/a&gt;
. In all honesty, I rarely attend others&amp;rsquo; talks for a variety of reasons: lack of time, lack of energy, no interest in the proposed subjects, etc. When I do, I go either for subjects I know and want to deepen my understanding of &lt;em&gt;or&lt;/em&gt; for subjects I know nothing about to get a foot in the door.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This time, I attended &lt;a href="https://program.berlinbuzzwords.de/bbuzz24/talk/BQTZHK/" target="_blank" rel="noopener noreferrer"&gt;Monitoring your home, with DevOps observability tools&lt;/a&gt;
. I thought it would be about OpenTelemetry for your home. After the speaker mentioned &lt;a href="https://www.home-assistant.io/" target="_blank" rel="noopener noreferrer"&gt;Home Assistant&lt;/a&gt;
 (&lt;a href="https://www.home-assistant.io/" target="_blank" rel="noopener noreferrer"&gt;home-assistant.io&lt;/a&gt;
), however, I didn&amp;rsquo;t pay much attention to the rest.&lt;/p&gt;</description></item><item><title>Augmenting the client with HTMX</title><link>https://foojayio.github.io/website/today/augmenting-the-client-with-htmx/</link><pubDate>Mon, 14 Oct 2024 12:37:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/augmenting-the-client-with-htmx/</guid><description>&lt;p&gt;This article is part of a series comparing different ways to implement asynchronous requests on the client to augment the latter. So far, I described the process with &lt;a href="https://foojayio.github.io/website/today/augmenting-the-client-with-vue-js/"&gt;Vue.js&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/augmenting-the-client-with-alpine-js/"&gt;Alpine.js&lt;/a&gt;
. Both are similar from the developers&amp;rsquo; point of view: they involve JavaScript.&lt;/p&gt;
&lt;p&gt;In this post, I&amp;rsquo;ll focus on &lt;a href="https://htmx.org/" target="_blank" rel="noopener noreferrer"&gt;HTMX&lt;/a&gt;
, whose approach is quite different.&lt;/p&gt;
&lt;h2 id="h2-0-laying-out-the-work"&gt;Laying out the work&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ll follow the same structure as in the previous posts of the series. Here&amp;rsquo;s the setup, server- and client-side.&lt;/p&gt;</description></item><item><title>TornadoVM for RISC-V Accelerators</title><link>https://foojayio.github.io/website/today/tornadovm-for-risc-v-accelerators/</link><pubDate>Thu, 19 Sep 2024 07:50:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/tornadovm-for-risc-v-accelerators/</guid><description>&lt;h2 id="h2-0-takeaways"&gt;Takeaways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RISC-V is an open standard instruction set architecture that anyone can use to build new processors and accelerators, for example, for AI.&lt;/li&gt;
&lt;li&gt;oneAPI Construction Kit (OCK) is a new framework that allows software developers and system designers to bridge the gap between hardware accelerators and open standards, by enabling a programming system to implement domain specific instructions for modern hardware such as RISC-V accelerators and custom processors.&lt;/li&gt;
&lt;li&gt;TornadoVM, a parallel programming framework for Java, can take advantage of OCK to offload and accelerate Java workloads on RISC-V chips. This post shows how to run on RISC-V CPUs with vector extensions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://riscv.org/" title="RISC-V" target="_blank" rel="noopener noreferrer"&gt;RISC-V&lt;/a&gt;
 is an open standard instruction set architecture (ISA) based on the principles of reduced instruction sets (RISC). RISC-V is freely available under open licences, allowing anyone to design, modify and implement RISC-V processors.&lt;/p&gt;</description></item><item><title>Exploring Cost-Effective Solutions for Stateful Rest Services</title><link>https://foojayio.github.io/website/today/exploring-cost-effective-solutions-for-stateful-rest-services/</link><pubDate>Mon, 27 May 2024 13:13:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-cost-effective-solutions-for-stateful-rest-services/</guid><description>&lt;h2 id="h2-0-a-case-study-with-ibm-cloud-code-engine-eclipsestore-and-ibm-cloud-object-storage"&gt;A Case Study with IBM Cloud Code Engine, EclipseStore, and IBM Cloud Object Storage&lt;/h2&gt;
&lt;p&gt;In the dynamic realm of cloud computing, finding cost-effective solutions for stateful rest services that don&amp;rsquo;t necessarily require scaling can be a nuanced challenge.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll take a pragmatic look at a use case leveraging &lt;a href="https://www.ibm.com/products/code-engine" title="IBM Cloud Code Engine" target="_blank" rel="noopener noreferrer"&gt;IBM Cloud Code Engine&lt;/a&gt;
, &lt;a href="https://eclipsestore.io/" title="EclipseStore" target="_blank" rel="noopener noreferrer"&gt;EclipseStore&lt;/a&gt;
, and &lt;a href="https://www.ibm.com/products/cloud-object-storage" title="IBM Cloud Object Storage (COS)" target="_blank" rel="noopener noreferrer"&gt;IBM Cloud Object Storage (COS)&lt;/a&gt;
. The goal is to shed light on how this can be a practical and economical alternative, particularly when scalability is not a primary concern.&lt;/p&gt;</description></item><item><title>The Vary HTTP Header</title><link>https://foojayio.github.io/website/today/the-vary-http-header/</link><pubDate>Wed, 15 May 2024 07:46:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-vary-http-header/</guid><description>&lt;p&gt;&lt;strong&gt;I try to constantly to deepen my knowledge of HTTP and REST. Recently, I stumbled upon the list of all &lt;a href="https://www.iana.org/assignments/http-fields/http-fields.xhtml" target="_blank" rel="noopener noreferrer"&gt;registered HTTP Headers&lt;/a&gt;
. This post is dedicated to the &lt;code&gt;Vary&lt;/code&gt; HTTP Header.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;Two years ago, I wrote about &lt;a href="https://blog.frankel.ch/web-caching/server/" target="_blank" rel="noopener noreferrer"&gt;web resource caching server-side&lt;/a&gt;
. The idea is to set up a component between the client and the upstream to cache previously computed results to avoid overloading the latter. Depending on your infrastructure and requirements, this component can be a reverse proxy or an API Gateway. HTTP offers the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control" target="_blank" rel="noopener noreferrer"&gt;Cache-Control&lt;/a&gt;
 header to customize the different aspects of caching, &lt;em&gt;e.g.&lt;/em&gt; , the time the server holds the resource in cache before it considers it stale. I used plugin configuration in the above post, but you can also delegate to &lt;code&gt;Cache-Control&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Search in Documentation with a JavaFX LangChain4j Chat</title><link>https://foojayio.github.io/website/today/search-in-documentation-with-a-javafx-chat-langchain4j-application/</link><pubDate>Wed, 10 Apr 2024 18:09:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/search-in-documentation-with-a-javafx-chat-langchain4j-application/</guid><description>&lt;p&gt;At the Fosdem conference in Brussels on February 3rd, I gave a presentation about using an existing documentation set as the data for a ChatGPT-like application, created with JavaFX and LangChain4J.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://webtechie.be/post/2024-02-02-links-presentation-experiment-ai-llm-chat-with-docs/" target="_blank" rel="noopener noreferrer"&gt;video and links of that presentation are available here&lt;/a&gt;
, and this post is a more detailed explanation of that application.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-langchain4j"&gt;What is LangChain4j&lt;/h2&gt;
&lt;p&gt;The goal of LangChain4j is to simplify the integration of AI and LLM capabilities into Java applications. The &lt;a href="https://github.com/langchain4j/langchain4j/" target="_blank" rel="noopener noreferrer"&gt;project lives on GitHub&lt;/a&gt;
, and has a separate &lt;a href="https://github.com/langchain4j/langchain4j-examples" target="_blank" rel="noopener noreferrer"&gt;repository with demo applications&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Feedback from calling Rust from Python</title><link>https://foojayio.github.io/website/today/feedback-from-calling-rust-from-python/</link><pubDate>Wed, 22 Nov 2023 10:32:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/feedback-from-calling-rust-from-python/</guid><description>&lt;p&gt;I got plenty of feedback on my post about &lt;a href="https://blog.frankel.ch/rust-from-python/" target="_blank" rel="noopener noreferrer"&gt;Calling Rust from Python&lt;/a&gt;
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=37811953" target="_blank" rel="noopener noreferrer"&gt;Hacker News&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/Python/comments/1733gl6/calling_rust_from_python/" target="_blank" rel="noopener noreferrer"&gt;/r/python&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/rust/comments/1733gsb/calling_rust_from_python/" target="_blank" rel="noopener noreferrer"&gt;/r/rust&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many comments mentioned &lt;code&gt;pyo3&lt;/code&gt;, and I should use it instead of cooking my own. Thanks to the authors, I checked: in this post, I explain what it is and how I migrated my code.&lt;/p&gt;
&lt;h2 id="h2-0-what-is-pyo3"&gt;What is pyo3?&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Rust bindings for Python, including tools for creating native Python extension modules. Running and interacting with Python code from a Rust binary is also supported.&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>State of the Software Supply Chain Report: Key Takeaways for Java Developers</title><link>https://foojayio.github.io/website/today/evolving-landscape-software-supply-chains-java-developers/</link><pubDate>Thu, 12 Oct 2023 08:19:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/evolving-landscape-software-supply-chains-java-developers/</guid><description>&lt;p&gt;&lt;strong&gt;Sonatype have just released the 9th edition of their &lt;a href="https://www.sonatype.com/state-of-the-software-supply-chain/introduction" target="_blank" rel="noopener noreferrer"&gt;State of the Software Supply Chain Report&lt;/a&gt;
. It delves into the landscape of open source, software development, and software supply chain security. I thought I&amp;rsquo;d pull out some highlights for Java Developers!&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="h2-0-software-supply-chains-and-open-source"&gt;Software Supply Chains and Open Source&lt;/h2&gt;
&lt;h4 id="maven-central-hits-1-trillion-downloads"&gt;Maven Central hits 1 Trillion downloads&lt;/h4&gt;
&lt;p&gt;Open source adoption continues to grow, with Java (Maven) being a significant ecosystem.&lt;/p&gt;
&lt;p&gt;The report indicates that Java projects and their versions have seen substantial growth. a 28% year-over-year increase in total projects available on Maven Central - hitting the amazing 1 Trillion download number.&lt;/p&gt;</description></item><item><title>Evaluating Apache APISIX vs. Spring Cloud Gateway</title><link>https://foojayio.github.io/website/today/evaluating-apache-apisix-vs-spring-cloud-gateway/</link><pubDate>Thu, 27 Jul 2023 06:29:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/evaluating-apache-apisix-vs-spring-cloud-gateway/</guid><description>&lt;p&gt;&lt;strong&gt;Given the number of API Gateways available on the market, I&amp;rsquo;m regularly asked which is better. Better is a very subjective term. However, there&amp;rsquo;s no denying that if you&amp;rsquo;re advocating for a product, you should know your product and its competitors. In this article, I&amp;rsquo;d like to share my understanding of Spring Cloud Gateway and how it compares to Apache APISIX.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m cautious when comparing products because most comparisons I read are heavily biased. That&amp;rsquo;s a risk, especially when working on one of the products one is comparing. I&amp;rsquo;ll also avoid &amp;ldquo;benchmarketing&amp;rdquo; - when you benchmark products in a context that favors your own; I&amp;rsquo;ll focus on the so-called Developer Experience.&lt;/p&gt;</description></item><item><title>Friends of OpenJDK Community Survey</title><link>https://foojayio.github.io/website/today/2023-community-survey/</link><pubDate>Tue, 06 Jun 2023 08:33:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/2023-community-survey/</guid><description>&lt;h3 id="h3-0-here-s-the-idea"&gt;Here&amp;rsquo;s the idea.&lt;/h3&gt;
&lt;p&gt;A survey that allows the community to ask the questions they want, including (shock horror) occasional commercial ones.&lt;/p&gt;
&lt;p&gt;Often, when a survey&amp;rsquo;s results are released, the reader is left wanting more, experiencing that perennial &amp;ldquo;yes but&amp;rdquo; moment. Typically, the survey data is hidden and unavailable for analysis, and the desired follow-up questions or clarifications are not addressed.&lt;/p&gt;
&lt;p&gt;The Foojay survey breaks this pattern. We will make all the data available, within the bounds of GDPR, and you will have the opportunity to propose the questions that should be included. The &lt;a href="https://foojayio.github.io/website/board/"&gt;Foojay Board&lt;/a&gt;
 also has the chance to propose their own questions.&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>FinOps: Tim O'Brien at Walmart</title><link>https://foojayio.github.io/website/today/finops-tim-obrien-at-walmart/</link><pubDate>Mon, 22 May 2023 06:01:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/finops-tim-obrien-at-walmart/</guid><description>&lt;h2 id="h2-0-finops-and-cloud-cost-management-what-s-it-all-about-and-how-does-it-impact-us-as-developers-and-others-who-are-close-to-the-code-in-this-series-on-foojay-io-you-re-introduced-to-finops-practitioners-around-the-world-focused-on-how-they-have-gradually-found-themselves-their-technology-and-their-organization-in-the-finops-space"&gt;FinOps and Cloud Cost Management, what&amp;rsquo;s it all about and how does it impact us as developers and others who are close to the code? In this series on Foojay.io, you&amp;rsquo;re introduced to FinOps practitioners around the world, focused on how they have gradually found themselves, their technology, and their organization in the FinOps space.&lt;/h2&gt;
&lt;hr&gt;
&lt;figure class="alignleft size-medium is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="1683981616677-510x510.jpeg" alt="" class="wp-image-98408" width="271" height="271"&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/timobrien/" target="_blank" rel="noopener noreferrer"&gt;Tim O&amp;rsquo;Brien&lt;/a&gt;
 is Senior Director of Engineering, Cloud Cost Management at Walmart, with experience in all aspects of software development from project inception to developing scaleable production architectures for large-scale systems during critical, high-risk events such as Black Friday. He has helped many organizations ranging from small startups to Fortune 100 companies take a more strategic approach to adopting and evaluating technology and managing the risks associated with change.&lt;/p&gt;</description></item><item><title>Managing Data Residency: Concepts &amp; Theory</title><link>https://foojayio.github.io/website/today/managing-data-residency-concepts-theory/</link><pubDate>Tue, 16 May 2023 09:18:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/managing-data-residency-concepts-theory/</guid><description>&lt;p&gt;Cloud computing has opened a Pandora&amp;rsquo;s Box of many original issues compared to sound old on-premise systems. I believe that chief among them is &lt;strong&gt;Data Residency&lt;/strong&gt;, or Data Location.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Data localization or data residency law requires data about a nation&amp;rsquo;s citizens or residents to be collected, processed, and/or stored inside the country, often before being transferred internationally. Such data is usually transferred only after meeting local privacy or data protection laws, such as giving the user notice of how the information will be used and obtaining their consent.&lt;/p&gt;</description></item><item><title>FinOps: John Stuart at Azul</title><link>https://foojayio.github.io/website/today/finops-john-stuart-at-azul/</link><pubDate>Mon, 15 May 2023 06:11:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/finops-john-stuart-at-azul/</guid><description>&lt;h2 id="h2-0-finops-and-cloud-cost-management-what-s-it-all-about-and-how-does-it-impact-us-as-developers-and-others-who-are-close-to-the-code-in-this-series-on-foojay-io-you-re-introduced-to-finops-practitioners-around-the-world-focused-on-how-they-have-gradually-found-themselves-their-technology-and-their-organization-in-the-finops-space"&gt;FinOps and Cloud Cost Management, what&amp;rsquo;s it all about and how does it impact us as developers and others who are close to the code? In this series on Foojay.io, you&amp;rsquo;re introduced to FinOps practitioners around the world, focused on how they have gradually found themselves, their technology and their organization in the FinOps space.&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/johndstu/" target="_blank" rel="noopener noreferrer"&gt;John Stuart&lt;/a&gt;
 is an executive and leader in DevOps, FinOps, Infrastructure and Security at Azul.&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>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>SBOMs and Software Composition Analysis │ Foojay.io</title><link>https://foojayio.github.io/website/today/sboms-and-software-composition-analysis/</link><pubDate>Mon, 27 Feb 2023 08:11:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/sboms-and-software-composition-analysis/</guid><description>&lt;h4 id="this-article-is-the-second-in-a-series-about-sboms-software-supply-chains-the-government-and-you"&gt;This article is the second in a series about SBOMs, software supply chains, the government and you.&lt;/h4&gt;
&lt;h4 id="i-hope-you-are-still-hungry-after-the-first-article-as-more-cake-is-available-below"&gt;I hope you are still hungry after the first article as more cake is available below!&lt;/h4&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/sboms-and-software-composition-analysis/cake-image.png" alt="Cake and Dependencies" title="Cake and Dependencies" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you have read the first article in this series that introduces SBOMs &lt;a href="https://foojayio.github.io/website/today/sboms-first-steps-in-a-new-journey-for-developers/" title="SBOMs: First Steps in a New Journey for Developers"&gt;SBOMs: First Steps in a New Journey for Developers | Foojay.io&lt;/a&gt;
 then you already know how important they are and will be increasingly going forward.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Behaviour Driven Development with Event Driven Architectures</title><link>https://foojayio.github.io/website/today/how-behaviour-driven-development-works-well-with-event-driven-architectures/</link><pubDate>Wed, 15 Feb 2023 07:57:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-behaviour-driven-development-works-well-with-event-driven-architectures/</guid><description>&lt;p&gt;Behaviour Driven Development (BDD) and Event Driven Architecture (EDA) work well together as they complement each other&amp;rsquo;s strengths and weaknesses.&lt;/p&gt;
&lt;p&gt;Using both can result in a shorter time to market for new functionality and a more maintainable system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Behaviour Driven Development (BDD)&lt;/strong&gt; encourages a common language between users and developers in describing requirements in a form the users can understand but can also automatically be checked as the application is developed and maintained.&lt;/p&gt;</description></item><item><title>SBOMs: First Steps in a New Journey for Developers</title><link>https://foojayio.github.io/website/today/sboms-first-steps-in-a-new-journey-for-developers/</link><pubDate>Tue, 14 Feb 2023 10:01:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/sboms-first-steps-in-a-new-journey-for-developers/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;This article is the first in a series about SBOMs, software supply chains, the government and you. Buckle up - it&amp;rsquo;s going to be a wild ride. Luckily there is cake to see you through.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Software bill of materials, anyone? A year ago, most developers had not heard of the &amp;lsquo;SBOM&amp;rsquo; acronym.&lt;/p&gt;
&lt;p&gt;Indeed, related terms like &amp;ldquo;software supply chain&amp;rdquo; or &amp;ldquo;security hygiene&amp;rdquo; were absent from most developers&amp;rsquo; vocabularies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Things are about to change! This year is already shaping up to be the year of SBOMs, of securing the software supply chain, and of the appearance of legislation that enforces better security practices among those involved in software. Whether in creation, testing, deploying, securing or operating, we all have specific security responsibilities in protecting our part of the software supply chain.&lt;/strong&gt;&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>Kafka vs. Chronicle for Microservices: Which is 750 Times Faster?</title><link>https://foojayio.github.io/website/today/kafka-vs-chronicle-for-microservices-which-is-750-times-faster/</link><pubDate>Wed, 30 Nov 2022 08:15:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/kafka-vs-chronicle-for-microservices-which-is-750-times-faster/</guid><description>&lt;p&gt;Apache Kafka is a common choice for inter-service communication.&lt;/p&gt;
&lt;p&gt;Kafka facilitates the parallel processing of messages and is a good choice for log aggregation. Kafka &lt;a href="https://www.confluent.io/blog/kafka-fastest-messaging-system/" title="claims to be low latency, high throughput" target="_blank" rel="noopener noreferrer"&gt;claims to be low latency, high throughput&lt;/a&gt;
. However, is Kafka fast enough for many microservices applications in the cloud?&lt;/p&gt;
&lt;p&gt;When I wrote &lt;a href="https://chronicle.software/queue/" title="Open Source Chronicle Queue" target="_blank" rel="noopener noreferrer"&gt;Open Source Chronicle Queue&lt;/a&gt;
, my aim was to develop a messaging framework with microsecond latencies, and banks around the world have adopted it for use in their latency-sensitive trading systems and real-time streaming applications.&lt;/p&gt;</description></item><item><title>Handling Exceptions in Java Lambdas</title><link>https://foojayio.github.io/website/today/exceptions-lambdas/</link><pubDate>Sat, 22 Oct 2022 11:36:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/exceptions-lambdas/</guid><description>&lt;p&gt;Java introduced the concept of &lt;em&gt;checked exceptions&lt;/em&gt; . The idea of forcing developers to manage exceptions was revolutionary compared to the &lt;a href="https://blog.frankel.ch/error-handling/" target="_blank" rel="noopener noreferrer"&gt;earlier approaches&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Nowadays, Java remains the only widespread language to offer checked exceptions. For example, every exception in Kotlin is unchecked.&lt;/p&gt;
&lt;p&gt;Even in Java, new features are at odds with checked exceptions:the signature of Java&amp;rsquo;s built-in functional interfaces doesn&amp;rsquo;t use exceptions.It leads to cumbersome code when one integrates legacy code in lambdas.It&amp;rsquo;s evident in Streams.&lt;/p&gt;</description></item><item><title>Learning by Auditing Kubernetes Manifests</title><link>https://foojayio.github.io/website/today/learning-by-auditing-kubernetes-manifests/</link><pubDate>Mon, 05 Sep 2022 08:44:17 +0000</pubDate><guid>https://foojayio.github.io/website/today/learning-by-auditing-kubernetes-manifests/</guid><description>&lt;p&gt;Last year, I spoke at the &lt;a href="https://www.devopsonline.co.uk/national-devops-conference/" target="_blank" rel="noopener noreferrer"&gt;National DevOps Conference&lt;/a&gt;
 that took place at the British Museum. I had already visited the museum before, but speaking there was a fantastic experience. Besides, we had the museum all for ourselves for a couple of hours. If you&amp;rsquo;ve ever visited the place, you know what I mean.&lt;/p&gt;
&lt;p&gt;Anyway, I also attended a talk about &lt;a href="https://www.checkov.io/" target="_blank" rel="noopener noreferrer"&gt;Checkov&lt;/a&gt;
:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Checkov scans cloud infrastructure configurations to find misconfigurations before they&amp;rsquo;re deployed.&lt;/p&gt;</description></item><item><title>Deep Learning in Java for Nuclear Physics using Deep Netts</title><link>https://foojayio.github.io/website/today/deep-learning-in-java-for-nuclear-physics-using-deep-netts/</link><pubDate>Thu, 16 Jun 2022 09:01:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/deep-learning-in-java-for-nuclear-physics-using-deep-netts/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/deep-learning-in-java-for-nuclear-physics-using-deep-netts/CLAS12-side.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-background"&gt;Background&lt;/h2&gt;
&lt;p&gt;The CLAS12 detector at Jefferson Lab conducts nuclear physics experiments to study the structure of nucleons and new particle states.&lt;/p&gt;
&lt;p&gt;At the core of detector setup are drift chambers that measure charged particles resulting from the interaction of an electron beam with a liquid hydrogen target.&lt;/p&gt;
&lt;p&gt;The charged particles are reconstructed by combining segments of the track measured in 6 separate drift chambers along the particle trajectory.&lt;/p&gt;
&lt;p&gt;In high-intensity experiments, detector systems produce noise segments increasing the combinatorics of track candidates to be analyzed by the conventional algorithm, which leads to decreased track reconstruction efficiency.&lt;/p&gt;</description></item><item><title>Java Panama Polyglot (Python/Tensorflow) Part 3</title><link>https://foojayio.github.io/website/today/java-panama-polyglot-part-3/</link><pubDate>Tue, 26 Apr 2022 04:42:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-panama-polyglot-part-3/</guid><description>&lt;p&gt;Hello and welcome back to the &lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/java-panama-polyglot-part1/"&gt;Java Panama Polyglot&lt;/a&gt;
&lt;/strong&gt; series where we are presenting quick tutorials or recipes on how to access native libraries written in other languages.&lt;/p&gt;
&lt;p&gt;If you are new to Java&amp;rsquo;s Foreign Function Access APIs (&lt;a href="https://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Project&lt;/a&gt;
&lt;a href="https://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Panama&lt;/a&gt;
) check out: &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/"&gt;Panama4Newbies&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-panama-polyglot-swift-part-2/"&gt;Part 2&lt;/a&gt;
 you got a chance to learn about how to use Java Project Panama&amp;rsquo;s (foreign function interface APIs) abilities to access native libraries written in Apple&amp;rsquo;s &lt;a href="https://www.swift.org" target="_blank" rel="noopener noreferrer"&gt;Swift language&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Introducing the "Coordinated Restore at Checkpoint" Project</title><link>https://foojayio.github.io/website/today/introducing-the-openjdk-coordinated-restore-at-checkpoint-project/</link><pubDate>Mon, 18 Apr 2022 08:13:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/introducing-the-openjdk-coordinated-restore-at-checkpoint-project/</guid><description>&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;One of the great things about the Java Virtual Machine (JVM) is the fact that it is able to adapt the performance of a Java application to the way it is used.&lt;/p&gt;
&lt;p&gt;It can figure out what parts of your code are used often and it can then optimize the code by means of its ability to compile code just in time (JIT).&lt;/p&gt;
&lt;p&gt;But that also means that it has to figure out those parts first, before it can compile those parts into faster code.&lt;/p&gt;</description></item><item><title>Error Handling in Java and Across Different Languages</title><link>https://foojayio.github.io/website/today/error-handling/</link><pubDate>Mon, 21 Mar 2022 11:23:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/error-handling/</guid><description>&lt;p&gt;I&amp;rsquo;ve tried Go in the past, and the least I could say is that I was not enthusiastic about it. Chief among my griefs was how the language handled errors, or more precisely, what mechanism it provided developers with to manage them.&lt;/p&gt;
&lt;p&gt;In this post, I&amp;rsquo;d like to describe how a couple of popular languages cope with errors.&lt;/p&gt;
&lt;h2 id="h2-0-a-time-before-our-time"&gt;A time before our time&lt;/h2&gt;
&lt;p&gt;I could probably go back a long time, but I needed to choose a baseline at some point. In this post, the baseline is C.&lt;/p&gt;</description></item><item><title>Alternatives to DTO</title><link>https://foojayio.github.io/website/today/alternatives-to-dto/</link><pubDate>Mon, 07 Mar 2022 11:03:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/alternatives-to-dto/</guid><description>&lt;p&gt;More than a decade ago, I &lt;a href="https://blog.frankel.ch/dto-in-anger" target="_blank" rel="noopener noreferrer"&gt;wrote&lt;/a&gt;
 about the :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;A data transfer object is an object that carries data between processes. The motivation for its use is that communication between processes is usually done resorting to remote interfaces, where each call is an expensive operation. Because the majority of the cost of each call is related to the round-trip time between the client and the server, one way of reducing the number of calls is to use an object (the DTO) that aggregates the data that would have been transferred by the several calls, but that is served by one call only.&amp;rdquo; &amp;ndash; &lt;a href="https://en.wikipedia.org/wiki/Data_transfer_object" target="_blank" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>A Tentative Comparison of Fault Tolerance Libraries on the JVM</title><link>https://foojayio.github.io/website/today/comparison-fault-tolerance-libraries/</link><pubDate>Tue, 11 Jan 2022 09:31:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/comparison-fault-tolerance-libraries/</guid><description>&lt;p&gt;If you&amp;rsquo;re implementing microservices or not, chances are that you&amp;rsquo;re calling HTTP endpoints. With HTTP calls, a lot of things can go wrong.&lt;/p&gt;
&lt;p&gt;Experienced developers plan for this and design beyond just the happy path. In general, fault tolerance encompasses the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retry&lt;/li&gt;
&lt;li&gt;Timeout&lt;/li&gt;
&lt;li&gt;Circuit Breaker&lt;/li&gt;
&lt;li&gt;Fallback&lt;/li&gt;
&lt;li&gt;Rate Limiter to avoid server-side 429 responses&lt;/li&gt;
&lt;li&gt;Bulkhead: Rate Limiter limits the number of calls in a determined timeframe, while Bulkhead limits the number of concurrent calls&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A couple of libraries implement these features on the JVM. In this post, we will look at Microprofile Fault Tolerance, &lt;a href="https://failsafe.dev/" target="_blank" rel="noopener noreferrer"&gt;Failsafe&lt;/a&gt;
 and Resilience4J.&lt;/p&gt;</description></item><item><title>Extending Third-Party APIs in Different Languages</title><link>https://foojayio.github.io/website/today/extending-third-party-apis-in-different-languages/</link><pubDate>Mon, 08 Nov 2021 08:36:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/extending-third-party-apis-in-different-languages/</guid><description>&lt;p&gt;The need for shorter and shorter Time-To-Market requires us to integrate more and more third-party libraries. There&amp;rsquo;s no time for the &lt;a href="https://en.wikipedia.org/wiki/Not_invented_here" target="_blank" rel="noopener noreferrer"&gt;NIH syndrom&lt;/a&gt;
 anymore, if it ever was. While most of the time the library&amp;rsquo;s API is ready to use, it may happen that one needs to &amp;ldquo;adapt&amp;rdquo; it to the codebase sometimes. How easy the adaptation is depends a lot on the language.&lt;/p&gt;
&lt;p&gt;For example, in the JVM, there are a couple of Reactive-Programming libraries: RxJava, Project Reactor, Mutiny, and coroutines. You might need a library that uses types of one library, but you based your project on another.&lt;/p&gt;</description></item><item><title>How to Choose a Cache: Capabilities</title><link>https://foojayio.github.io/website/today/choosing-a-cache-1/</link><pubDate>Tue, 26 Oct 2021 13:20:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/choosing-a-cache-1/</guid><description>&lt;p&gt;Today, I&amp;rsquo;d like to provide some help on how to choose a cache solution. I will organize it into two parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In this post, we will list what features a cache must have and which ones it can optionally provide. Most criteria are general and can be used regardless of the tech stack, while a couple is specific to the JVM.&lt;/li&gt;
&lt;li&gt;In the second part, I&amp;rsquo;ll list providers and verify their respective capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-0-why-cache"&gt;Why cache?&lt;/h2&gt;
&lt;p&gt;First, let&amp;rsquo;s bust a common myth. Using a cache is not the sign of a badly-designed system &lt;em&gt;per se&lt;/em&gt;, though it might be the case. Like in many design decisions, a cache is a trade-off.&lt;/p&gt;</description></item><item><title>On Reassessing TestNG vs. Junit</title><link>https://foojayio.github.io/website/today/reassessing-testng-vs-junit/</link><pubDate>Tue, 19 Oct 2021 08:28:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/reassessing-testng-vs-junit/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/annotation-free-spring/"&gt;a recent article on Spring&lt;/a&gt;
, I advised reassessing one&amp;rsquo;s opinion now and then as the IT world changes so fast. What was true a couple of years ago could be dead wrong nowadays, and you probably don&amp;rsquo;t want to base your decisions on outdated data. This week, I&amp;rsquo;d like to follow my advice.&lt;/p&gt;
&lt;p&gt;One of &lt;a href="https://blog.frankel.ch/the-unit-test-war-junit-vs-testng" target="_blank" rel="noopener noreferrer"&gt;my first posts&lt;/a&gt;
 was advocating for TestNG vs. JUnit. In the post, I mentioned several features that JUnit lacked:&lt;/p&gt;</description></item><item><title>Multiple Ways to Configure Spring</title><link>https://foojayio.github.io/website/today/multiple-ways-configure-spring/</link><pubDate>Wed, 06 Oct 2021 08:55:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/multiple-ways-configure-spring/</guid><description>&lt;p&gt;Two weeks ago, I wrote how you could write a Spring application with no annotations.&lt;/p&gt;
&lt;p&gt;Many alternatives are available to configure your Spring app.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to list them in this post, leaving Spring Boot out of the picture on purpose.&lt;/p&gt;
&lt;h2 id="h2-0-core-concepts"&gt;Core concepts&lt;/h2&gt;
&lt;p&gt;A couple of concepts are central in Spring. The related documentation doesn&amp;rsquo;t describe most of them. Here is my understanding of them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bean&lt;/strong&gt; : A bean is an object managed by the Spring container&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bean Factory&lt;/strong&gt; : A bean factory is a component that manages the lifecycle of &lt;em&gt;beans&lt;/em&gt;, especially regarding the instantiation of new objects&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bean Definition&lt;/strong&gt; : A bean definition is the set of properties given to the Spring container and that the requested bean will have, &lt;em&gt;e.g.&lt;/em&gt;, class, name, scope, dependencies, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context&lt;/strong&gt;: A context is a bean factory with additional capabilities (mainly internationalization and event publishing)&lt;/li&gt;
&lt;/ul&gt;
&lt;img fetchpriority="high" decoding="async" class="aligncenter size-medium wp-image-49678" src="spring-concepts-700x492.png" alt="" width="700" height="492"&gt;
&lt;br /&gt;
&lt;p&gt;To configure a Spring application, one creates one or more contexts and registers the necessary bean definitions in the desired ones. In the following sections, we will configure the following simple model:&lt;/p&gt;</description></item><item><title>A Return to Annotation-Free Spring</title><link>https://foojayio.github.io/website/today/annotation-free-spring/</link><pubDate>Fri, 17 Sep 2021 12:03:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/annotation-free-spring/</guid><description>&lt;p&gt;Some, if not most, of our judgments regarding technology stacks come either from third-party opinions or previous experiences. Yet, we seem to be adamant about them. For a long time (and sometimes even now), I&amp;rsquo;ve seen posts that detailed how Spring is bad because it uses XML for its configuration. Unfortunately, they blissfully ignore the fact that annotation-based configuration has been available for ages.&lt;/p&gt;
&lt;p&gt;And probably for of the same reason, I recently read that Spring is bad&amp;hellip; &lt;em&gt;because of annotations&lt;/em&gt;. If you belong to this crowd, I&amp;rsquo;ve news for you: you can get rid of most annotations and even more so if you&amp;rsquo;re using Kotlin.&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>An Introduction to Rust and the JVM</title><link>https://foojayio.github.io/website/today/rust-jvm/</link><pubDate>Tue, 27 Jul 2021 10:26:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/rust-jvm/</guid><description>&lt;p&gt;So far, we have learned the basics of Rust syntax, developed a custom Kubernetes controller, and integrated with the front-end with .&lt;/p&gt;
&lt;p&gt;This is the 7^th^ post in the in the &lt;a href="https://blog.frankel.ch/focus/start-rust/" target="_blank" rel="noopener noreferrer"&gt;Start Rust&lt;/a&gt;
 series.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/start-rust/1/" target="_blank" rel="noopener noreferrer"&gt;My first cup of Rust&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/start-rust/2/" target="_blank" rel="noopener noreferrer"&gt;My second cup of Rust&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/start-rust/3/" target="_blank" rel="noopener noreferrer"&gt;The Rustlings exercises - part 1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/start-rust/4/" target="_blank" rel="noopener noreferrer"&gt;The Rustlings exercises - part 2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/start-rust/5/" target="_blank" rel="noopener noreferrer"&gt;Rust on the front-end&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.frankel.ch/start-rust/6/" target="_blank" rel="noopener noreferrer"&gt;A Rust controller for Kubernetes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Rust and the JVM (this post)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve been using the for two decades now, mainly in Java. The JVM is a fantastic piece of technology. IMHO, its most significant benefit is its ability to adapt the native code to the current workload; if the workload changes and the native code is not optimal, it will recompile the &lt;em&gt;bytecode&lt;/em&gt; accordingly.&lt;/p&gt;</description></item><item><title>Java in Education: Combining Java with Raspberry Pi and the Pi4J Library</title><link>https://foojayio.github.io/website/today/java-in-education-combining-java-with-raspberry-pi-and-the-pi4j-library/</link><pubDate>Tue, 29 Jun 2021 07:40:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-in-education-combining-java-with-raspberry-pi-and-the-pi4j-library/</guid><description>&lt;blockquote&gt;
&lt;p&gt;The interviews in this post are &lt;a href="https://kiosk.entwickler.de/java-magazin/java-magazin-7-2021/java-pi4j-und-raspberry-pi-in-der-bildung/" target="_blank" rel="noopener noreferrer"&gt;part of an article published (in German) in Java Magazine&lt;/a&gt;
.
You can get a 25% discount for a new kiosk subscription with the following code: delporte_kiosk25&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Although a lot of universities and high schools focus on Python and C# in their program, there are luckily a lot of others who go &amp;ldquo;full Java&amp;rdquo;. Don&amp;rsquo;t get me wrong, I definitely don&amp;rsquo;t want to start a &amp;ldquo;programming-languages-war&amp;rdquo;, but Java is the language I used myself more than any other for the last 10 years. Setting up a new project or building a proof-of-concept for a new idea, is a matter of hours. And there is always a solution for the problem I need to solve. This is probably true for each developer who has enough experience in the language used the most. But having used and experimented with many other languages, I still keep returning to my &amp;ldquo;one true love&amp;rdquo;, being Java, as it always delivers the result I&amp;rsquo;m aiming for, with the right amount of code to be readable, understandable, and testable!&lt;/p&gt;</description></item><item><title>Let's Optimize Relational Database Access</title><link>https://foojayio.github.io/website/today/optimizing-relational-database-access/</link><pubDate>Mon, 28 Jun 2021 07:42:54 +0000</pubDate><guid>https://foojayio.github.io/website/today/optimizing-relational-database-access/</guid><description>&lt;p&gt;Database performances have been massively documented in the literature. Every week, a new blog post or article explains why database X is better than database Y. And, no, this post is not about that. This article summarizes the interactions between your database client (sometimes called driver) and the database server. It is essential to understand the principles of these exchanges to comprehend the limitations of the API the driver can expose safely.&lt;/p&gt;</description></item><item><title>BlockHound and Blocking Calls: How It Works</title><link>https://foojayio.github.io/website/today/blockhound-how-it-works/</link><pubDate>Tue, 22 Jun 2021 17:09:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/blockhound-how-it-works/</guid><description>&lt;p&gt;One of the talks in my current portfolio is &lt;a href="https://www.papercall.io/speakers/nicolasfrankel/speaker_talks/194232-migrating-from-imperative-to-reactive" target="_blank" rel="noopener noreferrer"&gt;Migrating from Imperative to Reactive&lt;/a&gt;
. The talk is based on a &lt;a href="https://github.com/hazelcast-demos/imperative-to-reactive/" target="_blank" rel="noopener noreferrer"&gt;demo&lt;/a&gt;
 migrating from Spring WebMVC to Spring WebFlux in a step-by-step approach. One of the steps involves installing &lt;a href="https://github.com/reactor/BlockHound" target="_blank" rel="noopener noreferrer"&gt;BlockHound&lt;/a&gt;
: it allows to check whether a blocking call occurs in a thread it shouldn&amp;rsquo;t happen and throws an exception at runtime when it happens.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve presented this talk several times in the previous week, both in its Java version and its Kotlin one. One such presentation was at &lt;a href="https://www.javaday.istanbul/" target="_blank" rel="noopener noreferrer"&gt;Javaday Istanbul&lt;/a&gt;
. After the talk, one of the questions I received was, &amp;ldquo;How does BlockHound work?&amp;rdquo; I admit that at the time, I couldn&amp;rsquo;t remember. After the surprise had passed, but too late, I remembered it involved a Java agent. But I wanted to go down the rabbit hole.&lt;/p&gt;</description></item><item><title>Announcing JavaFX: June 2021 Community Update</title><link>https://foojayio.github.io/website/today/javafx-june-2021-community-update/</link><pubDate>Mon, 21 Jun 2021 08:22:42 +0000</pubDate><guid>https://foojayio.github.io/website/today/javafx-june-2021-community-update/</guid><description>&lt;p&gt;JavaFX is a modern cross-platform open-source UI toolkit for the JVM. It provides a wide range of built-in controls and platform-specific features, such as hardware acceleration. If you have not used JavaFX before, you can get started at &lt;a href="https://openjfx.io/" target="_blank" rel="noopener noreferrer"&gt;openjfx.io&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;In order for any technology to grow and improve, community support and feedback are paramount. To get a general idea of what the community would like to see in JavaFX in the future, I have &lt;a href="https://twitter.com/AlmasBaim/status/1401833314890178566" target="_blank" rel="noopener noreferrer"&gt;asked developers&lt;/a&gt;
 to share their thoughts:&lt;/p&gt;</description></item><item><title>Open Source Tools as an Opportunity for SMEs to Use AI?</title><link>https://foojayio.github.io/website/today/open-source-tools-as-an-opportunity-for-smes-to-use-ai/</link><pubDate>Wed, 02 Jun 2021 14:36:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/open-source-tools-as-an-opportunity-for-smes-to-use-ai/</guid><description>&lt;p&gt;Time-traveling cyborgs and robots that are able to love. These interesting and romantic ideas emerged from the imagination of Hollywood film directors. Nevertheless, many people are afraid of Artificial Intelligence (AI). This also can be seen in the economic world. Small and medium-sized enterprises (SMEs) in particular see AI as a threat to their own business. Surprisingly however, all different-sized companies are able to see the potential of AI when it comes to penetrating the national and global market. ^[1]^&lt;/p&gt;</description></item><item><title>Taking a Closer Look at Kotlin's Delegation</title><link>https://foojayio.github.io/website/today/kotlin-delegation/</link><pubDate>Fri, 30 Apr 2021 13:53:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/kotlin-delegation/</guid><description>&lt;p&gt;Kotlin offers many exciting features. In general, developers tend to cite null safety as their favorite. For me, it&amp;rsquo;s function extensions. But delegation comes a close second.&lt;/p&gt;
&lt;h2 id="h2-0-the-delegation-pattern"&gt;The delegation pattern&lt;/h2&gt;
&lt;p&gt;The delegation pattern is described in the book:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Delegation&lt;/em&gt; is a way to make composition as powerful for reuse as inheritance [Lie86, JZ91]. In delegation, &lt;em&gt;two&lt;/em&gt; objects are involved in handling a request: a receiving object delegates operations to its &lt;em&gt;delegate&lt;/em&gt; . This is analogous to subclasses deferring requests to parent classes. But with inheritance, an inherited operation can always refer to the receiving object through the &lt;code&gt;this&lt;/code&gt; member variable in C++ and &lt;code&gt;self&lt;/code&gt; in Smalltalk. To achieve the same effect with delegation, the receiver passes itself to the delegate to let the delegated operation refer to the receiver.&lt;/p&gt;</description></item><item><title>Hazelcast, from Embedded to Client-Server</title><link>https://foojayio.github.io/website/today/hazelcast-from-embedded-to-client-server/</link><pubDate>Fri, 23 Apr 2021 06:58:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/hazelcast-from-embedded-to-client-server/</guid><description>&lt;p&gt;Java developers are particularly spoiled when using Hazelcast. Because Hazelcast is developed in Java, it&amp;rsquo;s available as a JAR, and we can integrate it as a library in our application. Just add it to the application&amp;rsquo;s classpath, start a node, and we&amp;rsquo;re good to go. However, I believe that once you start relying on Hazelcast as a critical infrastructure component, embedding limits your options. In this post, I&amp;rsquo;d like to dive a bit deeper into the subject.&lt;/p&gt;</description></item><item><title>How to create your own custom Spring Data repository</title><link>https://foojayio.github.io/website/today/custom-spring-data-repository/</link><pubDate>Wed, 14 Apr 2021 07:33:08 +0000</pubDate><guid>https://foojayio.github.io/website/today/custom-spring-data-repository/</guid><description>&lt;p&gt;Frameworks promise to speed up one&amp;rsquo;s development pace provided one follows the mainstream path.&lt;/p&gt;
&lt;p&gt;The path may be more or less narrow. I&amp;rsquo;m a big fan of the Spring ecosystem because its design is extensible and customizable at different abstraction levels: thus, the path is as large as you need it to be.&lt;/p&gt;
&lt;p&gt;Functional Programming is becoming more and more popular. Spring provides a couple of s for the Kotlin language. For example, the &lt;a href="https://docs.spring.io/spring-framework/docs/current/reference/html/languages.html#kotlin-bean-definition-dsl" target="_blank" rel="noopener noreferrer"&gt;Beans DSL&lt;/a&gt;
 and the &lt;a href="https://docs.spring.io/spring-framework/docs/current/reference/html/languages.html#router-dsl" target="_blank" rel="noopener noreferrer"&gt;Routes DSL&lt;/a&gt;
 allow for a more functional approach toward Spring configuration. On the &lt;em&gt;type&lt;/em&gt; side, &lt;a href="https://www.vavr.io/" target="_blank" rel="noopener noreferrer"&gt;Vavr&lt;/a&gt;
 (previously Javaslang) is pretty popular in Java, while Kotlin has &lt;a href="https://arrow-kt.io/docs/core/" target="_blank" rel="noopener noreferrer"&gt;Arrow&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Kicking Spring Native's Tires with GraalVM</title><link>https://foojayio.github.io/website/today/kicking-spring-natives-tires/</link><pubDate>Mon, 22 Mar 2021 17:18:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/kicking-spring-natives-tires/</guid><description>&lt;p&gt;I&amp;rsquo;ve been playing with GraalVM Ahead-Of-Time compilation capability since I became aware of it. As a long-time Spring &lt;em&gt;aficionado&lt;/em&gt; , I carefully monitored the efforts that the engineers at Tanzu have put into making Spring AOT-compatible. Recently, they announced &lt;a href="https://spring.io/blog/2021/03/11/announcing-spring-native-beta" target="_blank" rel="noopener noreferrer"&gt;the beta version&lt;/a&gt;
 of the integration.&lt;/p&gt;
&lt;p&gt;In this post, I want to check how easy it is to produce a (working!) Docker image from an existing Spring Boot application.&lt;/p&gt;
&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;GraalVM provides many different features. Among them, the component known as Substrate VM allows to AOT-compile regular bytecode to a native executable. The process &amp;ldquo;walks&amp;rdquo; the application starting from the &lt;code&gt;main&lt;/code&gt; method at build time. Substrate VM leaves out the code that it doesn&amp;rsquo;t follow out from the resulting binary.&lt;/p&gt;</description></item><item><title>Tips on High Performance Rendering in JavaFX</title><link>https://foojayio.github.io/website/today/high-performance-rendering-in-javafx/</link><pubDate>Mon, 18 Jan 2021 09:07:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/high-performance-rendering-in-javafx/</guid><description>&lt;p&gt;In this article, we comparatively evaluate four different approaches to render particles in JavaFX in terms of runtime performance.&lt;/p&gt;
&lt;p&gt;The approaches are Canvas, PixelBuffer AWT, PixelBuffer CPU and PixelBuffer GPU.&lt;/p&gt;
&lt;p&gt;The evaluation suggests the following order of approaches from fastest to slowest:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PixelBuffer GPU (fastest).&lt;/li&gt;
&lt;li&gt;PixelBuffer CPU.&lt;/li&gt;
&lt;li&gt;PixelBuffer AWT.&lt;/li&gt;
&lt;li&gt;Canvas (slowest).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All of the source code developed for this article can be found on &lt;a href="https://github.com/AlmasB/FXGL-FastRender" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
. An example demo with 1 000 000 particles looks like this:&lt;/p&gt;</description></item></channel></rss>